@alsdd/t3-import 0.0.0-stage → 0.1.1-alsd.1

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 (97) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/LICENSE +21 -0
  3. package/README.md +141 -2
  4. package/assets/fork-demo.gif +0 -0
  5. package/assets/fork-demo.png +0 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.js +399 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/core/checkpoint.d.ts +25 -0
  10. package/dist/core/checkpoint.js +82 -0
  11. package/dist/core/checkpoint.js.map +1 -0
  12. package/dist/core/errors.d.ts +12 -0
  13. package/dist/core/errors.js +17 -0
  14. package/dist/core/errors.js.map +1 -0
  15. package/dist/core/jsonl.d.ts +7 -0
  16. package/dist/core/jsonl.js +37 -0
  17. package/dist/core/jsonl.js.map +1 -0
  18. package/dist/core/providers.d.ts +6 -0
  19. package/dist/core/providers.js +17 -0
  20. package/dist/core/providers.js.map +1 -0
  21. package/dist/core/types.d.ts +247 -0
  22. package/dist/core/types.js +4 -0
  23. package/dist/core/types.js.map +1 -0
  24. package/dist/core/util.d.ts +14 -0
  25. package/dist/core/util.js +61 -0
  26. package/dist/core/util.js.map +1 -0
  27. package/dist/sources/claude.d.ts +6 -0
  28. package/dist/sources/claude.js +576 -0
  29. package/dist/sources/claude.js.map +1 -0
  30. package/dist/sources/codex.d.ts +11 -0
  31. package/dist/sources/codex.js +603 -0
  32. package/dist/sources/codex.js.map +1 -0
  33. package/dist/sources/codexAppServer.d.ts +24 -0
  34. package/dist/sources/codexAppServer.js +190 -0
  35. package/dist/sources/codexAppServer.js.map +1 -0
  36. package/dist/sources/files.d.ts +1 -0
  37. package/dist/sources/files.js +24 -0
  38. package/dist/sources/files.js.map +1 -0
  39. package/dist/sources/index.d.ts +3 -0
  40. package/dist/sources/index.js +15 -0
  41. package/dist/sources/index.js.map +1 -0
  42. package/dist/sources/opencode.d.ts +6 -0
  43. package/dist/sources/opencode.js +443 -0
  44. package/dist/sources/opencode.js.map +1 -0
  45. package/dist/target/cache.d.ts +14 -0
  46. package/dist/target/cache.js +155 -0
  47. package/dist/target/cache.js.map +1 -0
  48. package/dist/target/config.d.ts +22 -0
  49. package/dist/target/config.js +90 -0
  50. package/dist/target/config.js.map +1 -0
  51. package/dist/target/destination.d.ts +21 -0
  52. package/dist/target/destination.js +77 -0
  53. package/dist/target/destination.js.map +1 -0
  54. package/dist/target/importer.d.ts +86 -0
  55. package/dist/target/importer.js +597 -0
  56. package/dist/target/importer.js.map +1 -0
  57. package/dist/target/launch.d.ts +6 -0
  58. package/dist/target/launch.js +77 -0
  59. package/dist/target/launch.js.map +1 -0
  60. package/dist/target/ledger.d.ts +35 -0
  61. package/dist/target/ledger.js +174 -0
  62. package/dist/target/ledger.js.map +1 -0
  63. package/dist/target/reconciliation.d.ts +60 -0
  64. package/dist/target/reconciliation.js +259 -0
  65. package/dist/target/reconciliation.js.map +1 -0
  66. package/dist/target/replace.d.ts +9 -0
  67. package/dist/target/replace.js +341 -0
  68. package/dist/target/replace.js.map +1 -0
  69. package/dist/target/schema.d.ts +22 -0
  70. package/dist/target/schema.js +108 -0
  71. package/dist/target/schema.js.map +1 -0
  72. package/dist/target/sync.d.ts +34 -0
  73. package/dist/target/sync.js +879 -0
  74. package/dist/target/sync.js.map +1 -0
  75. package/dist/target/syncAll.d.ts +4 -0
  76. package/dist/target/syncAll.js +98 -0
  77. package/dist/target/syncAll.js.map +1 -0
  78. package/dist/target/v2.d.ts +18 -0
  79. package/dist/target/v2.js +267 -0
  80. package/dist/target/v2.js.map +1 -0
  81. package/dist/target/v2Profiles.d.ts +5 -0
  82. package/dist/target/v2Profiles.js +14 -0
  83. package/dist/target/v2Profiles.js.map +1 -0
  84. package/dist/tui.d.ts +49 -0
  85. package/dist/tui.js +560 -0
  86. package/dist/tui.js.map +1 -0
  87. package/package.json +93 -4
  88. package/vendor/t3-v010/LICENSE +21 -0
  89. package/vendor/t3-v010/THIRD-PARTY-NOTICES.txt +2274 -0
  90. package/vendor/t3-v010/reference.json +6 -0
  91. package/vendor/t3-v010/runtime.mjs +60364 -0
  92. package/vendor/t3-v010/schema-columns.json +568 -0
  93. package/vendor/t3-v011/LICENSE +21 -0
  94. package/vendor/t3-v011/THIRD-PARTY-NOTICES.txt +2274 -0
  95. package/vendor/t3-v011/reference.json +6 -0
  96. package/vendor/t3-v011/runtime.mjs +60993 -0
  97. package/vendor/t3-v011/schema-columns.json +526 -0
@@ -0,0 +1,603 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ import { createReadStream } from "node:fs";
4
+ import { stat } from "node:fs/promises";
5
+ import { createInterface } from "node:readline";
6
+ import { readStableJsonl } from "../core/jsonl.js";
7
+ import { canonicalPath, deriveTitle, isObject, isoTimestamp, stringValue, truncate, } from "../core/util.js";
8
+ import { sourceError } from "../core/errors.js";
9
+ import { walkFiles } from "./files.js";
10
+ import { CodexAppServerSession } from "./codexAppServer.js";
11
+ const SYNTHETIC_PREFIXES = ["<recommended_plugins>", "<environment_context>", "<app-context>", "<permissions instructions>"];
12
+ function codexRoot() {
13
+ return process.env.CODEX_HOME?.trim() || join(homedir(), ".codex");
14
+ }
15
+ function textParts(content, role) {
16
+ if (!Array.isArray(content))
17
+ return { text: "", attachments: [] };
18
+ const text = [];
19
+ const attachments = [];
20
+ for (const [index, raw] of content.entries()) {
21
+ if (!isObject(raw))
22
+ continue;
23
+ const value = stringValue(raw.text) ?? stringValue(raw[role === "user" ? "input_text" : "output_text"]);
24
+ if (value)
25
+ text.push(value);
26
+ const url = stringValue(raw.image_url) ?? stringValue(raw.url);
27
+ if (!url || role !== "user")
28
+ continue;
29
+ if (url.startsWith("data:image/")) {
30
+ const match = /^data:(image\/[a-z0-9.+-]+);base64,([\s\S]+)$/iu.exec(url);
31
+ if (!match)
32
+ continue;
33
+ const data = Buffer.from(match[2], "base64");
34
+ attachments.push({
35
+ sourceId: `image:${index}`,
36
+ name: `image-${index + 1}`,
37
+ mimeType: match[1],
38
+ sizeBytes: data.length,
39
+ data,
40
+ });
41
+ }
42
+ else {
43
+ attachments.push({
44
+ sourceId: `image:${index}`,
45
+ name: `image-${index + 1}`,
46
+ mimeType: "image/unknown",
47
+ sizeBytes: 0,
48
+ remoteUrl: url,
49
+ });
50
+ }
51
+ }
52
+ return { text: text.join("\n\n").trim(), attachments };
53
+ }
54
+ function newPending(id, timestamp) {
55
+ return {
56
+ id,
57
+ startedAt: timestamp,
58
+ status: "inProgress",
59
+ users: [],
60
+ assistant: [],
61
+ activities: [],
62
+ plans: [],
63
+ toolCalls: new Map(),
64
+ };
65
+ }
66
+ function errorMessage(value) {
67
+ if (typeof value === "string")
68
+ return value;
69
+ if (!isObject(value))
70
+ return undefined;
71
+ return stringValue(value.message) ?? stringValue(value.error) ?? stringValue(value.type);
72
+ }
73
+ function statusAffectingCodexError(payload) {
74
+ const info = isObject(payload.codex_error_info) ? payload.codex_error_info : isObject(payload.error_info) ? payload.error_info : undefined;
75
+ const kind = stringValue(info?.type) ?? stringValue(info?.kind) ?? stringValue(payload.error_type);
76
+ return kind !== "thread_rollback_failed" && kind !== "active_turn_not_steerable";
77
+ }
78
+ function terminalActivity(turn, sourceId, timestamp, status, detail) {
79
+ turn.activities.push({
80
+ sourceId,
81
+ timestamp,
82
+ tone: status === "failed" ? "error" : "info",
83
+ kind: status === "failed" ? "turn.failed" : "turn.interrupted",
84
+ summary: status === "failed" ? "Turn failed" : "Turn interrupted",
85
+ payload: { status, detail },
86
+ });
87
+ }
88
+ function contentString(value) {
89
+ if (typeof value === "string")
90
+ return value;
91
+ if (Array.isArray(value)) {
92
+ return value.flatMap((part) => {
93
+ if (typeof part === "string")
94
+ return [part];
95
+ if (!isObject(part))
96
+ return [];
97
+ return typeof part.text === "string" ? [part.text] : [];
98
+ }).join("\n").trim();
99
+ }
100
+ return value === undefined ? "" : JSON.stringify(value);
101
+ }
102
+ function parseToolInput(value) {
103
+ if (typeof value !== "string")
104
+ return value;
105
+ try {
106
+ return JSON.parse(value);
107
+ }
108
+ catch {
109
+ return value;
110
+ }
111
+ }
112
+ function nonNegativeInt(value) {
113
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? Math.floor(value) : undefined;
114
+ }
115
+ function codexUsageActivity(info, sourceId, timestamp) {
116
+ if (!isObject(info) || !isObject(info.last_token_usage))
117
+ return undefined;
118
+ const last = info.last_token_usage;
119
+ const total = isObject(info.total_token_usage) ? info.total_token_usage : undefined;
120
+ const usedTokens = nonNegativeInt(last.total_tokens);
121
+ if (!usedTokens || usedTokens <= 0)
122
+ return undefined;
123
+ const inputTokens = nonNegativeInt(last.input_tokens);
124
+ const cachedInputTokens = nonNegativeInt(last.cached_input_tokens);
125
+ const outputTokens = nonNegativeInt(last.output_tokens);
126
+ const reasoningOutputTokens = nonNegativeInt(last.reasoning_output_tokens);
127
+ const totalProcessedTokens = total ? nonNegativeInt(total.total_tokens) : undefined;
128
+ const maxTokens = nonNegativeInt(info.model_context_window);
129
+ return {
130
+ sourceId,
131
+ timestamp,
132
+ tone: "info",
133
+ kind: "context-window.updated",
134
+ summary: "Context window updated",
135
+ payload: {
136
+ usedTokens,
137
+ lastUsedTokens: usedTokens,
138
+ ...(totalProcessedTokens !== undefined && totalProcessedTokens > usedTokens ? { totalProcessedTokens } : {}),
139
+ ...(maxTokens !== undefined && maxTokens > 0 ? { maxTokens } : {}),
140
+ ...(inputTokens !== undefined ? { inputTokens, lastInputTokens: inputTokens } : {}),
141
+ ...(cachedInputTokens !== undefined ? { cachedInputTokens, lastCachedInputTokens: cachedInputTokens } : {}),
142
+ ...(outputTokens !== undefined ? { outputTokens, lastOutputTokens: outputTokens } : {}),
143
+ ...(reasoningOutputTokens !== undefined ? { reasoningOutputTokens, lastReasoningOutputTokens: reasoningOutputTokens } : {}),
144
+ compactsAutomatically: true,
145
+ },
146
+ };
147
+ }
148
+ function classifyTool(name) {
149
+ const lower = name.toLowerCase();
150
+ if (lower.includes("mcp"))
151
+ return "mcp_tool_call";
152
+ if (lower.includes("web") || lower.includes("search"))
153
+ return "web_search";
154
+ if (lower.includes("image") || lower.includes("view"))
155
+ return "image_view";
156
+ if (lower.includes("patch") || lower.includes("edit") || lower.includes("write"))
157
+ return "file_change";
158
+ if (lower.includes("shell") || lower.includes("exec") || lower.includes("command"))
159
+ return "command_execution";
160
+ if (lower.includes("agent") || lower.includes("collab"))
161
+ return "collab_agent_tool_call";
162
+ return "dynamic_tool_call";
163
+ }
164
+ function toolActivity(sourceId, timestamp, name, input, output) {
165
+ const itemType = classifyTool(name);
166
+ const outputText = contentString(output);
167
+ const failed = isObject(output) && (output.is_error === true || output.success === false);
168
+ return {
169
+ sourceId,
170
+ timestamp,
171
+ tone: failed ? "error" : "tool",
172
+ kind: "tool.completed",
173
+ summary: truncate(name || "Tool", 120),
174
+ payload: {
175
+ itemType,
176
+ status: failed ? "failed" : "completed",
177
+ title: name || "Tool",
178
+ ...(outputText ? { detail: truncate(outputText) } : {}),
179
+ ...(itemType === "collab_agent_tool_call" ? { agentId: sourceId } : {}),
180
+ data: { toolCallId: sourceId, item: { name, input, output } },
181
+ },
182
+ };
183
+ }
184
+ function reasoningText(payload) {
185
+ const direct = stringValue(payload.text) ?? stringValue(payload.message) ?? stringValue(payload.reasoning);
186
+ if (direct)
187
+ return direct;
188
+ const summary = payload.summary;
189
+ if (Array.isArray(summary)) {
190
+ return summary.flatMap((entry) => isObject(entry) && typeof entry.text === "string" ? [entry.text] : []).join("\n").trim();
191
+ }
192
+ return "";
193
+ }
194
+ function parseRows(rows, filePath, fallbackTime, includeIncomplete, appThread) {
195
+ let sessionId;
196
+ let workspace;
197
+ let startedAt = fallbackTime;
198
+ let model = "default";
199
+ let effort;
200
+ let gitBranch;
201
+ let active;
202
+ const turns = [];
203
+ let recordIndex = 0;
204
+ let lastUsageSignature;
205
+ const ensureTurn = (timestamp, id) => {
206
+ if (!active)
207
+ active = newPending(id ?? `turn-${recordIndex}`, timestamp);
208
+ return active;
209
+ };
210
+ const findTurn = (id) => {
211
+ if (!id || active?.id === id)
212
+ return active;
213
+ return turns.findLast((turn) => turn.id === id);
214
+ };
215
+ const settleActive = (turn) => {
216
+ if (turn === active) {
217
+ turns.push(turn);
218
+ active = undefined;
219
+ }
220
+ };
221
+ for (const raw of rows) {
222
+ recordIndex += 1;
223
+ if (!isObject(raw) || !isObject(raw.payload))
224
+ continue;
225
+ const payload = raw.payload;
226
+ const timestamp = isoTimestamp(raw.timestamp, fallbackTime);
227
+ const type = stringValue(raw.type);
228
+ if (type === "session_meta") {
229
+ sessionId = stringValue(payload.id) ?? stringValue(payload.session_id) ?? sessionId;
230
+ workspace = stringValue(payload.cwd) ?? workspace;
231
+ startedAt = isoTimestamp(payload.timestamp, timestamp);
232
+ gitBranch = stringValue(payload.git_branch) ?? stringValue(payload.gitBranch) ?? gitBranch;
233
+ continue;
234
+ }
235
+ if (type === "turn_context") {
236
+ model = stringValue(payload.model) ?? model;
237
+ effort = stringValue(payload.effort) ?? effort;
238
+ workspace = stringValue(payload.cwd) ?? workspace;
239
+ continue;
240
+ }
241
+ if (type === "event_msg") {
242
+ const eventType = stringValue(payload.type) ?? "";
243
+ const turnId = stringValue(payload.turn_id);
244
+ if (eventType === "task_started") {
245
+ if (active?.users.length)
246
+ turns.push(active);
247
+ active = newPending(turnId ?? `turn-${recordIndex}`, isoTimestamp(payload.started_at, timestamp));
248
+ }
249
+ else if (eventType === "task_complete") {
250
+ const turn = findTurn(turnId);
251
+ if (turn) {
252
+ const embeddedError = errorMessage(payload.error);
253
+ if (embeddedError) {
254
+ turn.status = "failed";
255
+ turn.terminalError = embeddedError;
256
+ terminalActivity(turn, `task-complete-error:${recordIndex}`, timestamp, "failed", embeddedError);
257
+ }
258
+ else if (turn.status === "inProgress" || turn.status === "completed") {
259
+ turn.status = "completed";
260
+ }
261
+ turn.completedAt = timestamp;
262
+ settleActive(turn);
263
+ }
264
+ }
265
+ else if (eventType === "turn_aborted") {
266
+ const turn = findTurn(turnId);
267
+ if (turn) {
268
+ const reason = stringValue(payload.reason) ?? "interrupted";
269
+ turn.status = "interrupted";
270
+ turn.terminalReason = reason;
271
+ turn.completedAt = timestamp;
272
+ terminalActivity(turn, `turn-aborted:${recordIndex}`, timestamp, "interrupted", reason);
273
+ settleActive(turn);
274
+ }
275
+ }
276
+ else if (eventType === "error") {
277
+ const turn = findTurn(turnId);
278
+ if (turn) {
279
+ const detail = errorMessage(payload) ?? "Codex reported an error";
280
+ turn.activities.push({ sourceId: `error:${recordIndex}`, timestamp, tone: "error", kind: "provider.error", summary: "Provider error", payload: { detail, historical: true } });
281
+ if (statusAffectingCodexError(payload)) {
282
+ turn.status = "failed";
283
+ turn.terminalError = detail;
284
+ turn.completedAt = timestamp;
285
+ }
286
+ }
287
+ }
288
+ else if (eventType === "agent_reasoning" && active) {
289
+ const detail = reasoningText(payload);
290
+ if (detail)
291
+ active.activities.push({ sourceId: `event:${recordIndex}`, timestamp, tone: "info", kind: "reasoning.summary", summary: "Reasoning", payload: { detail } });
292
+ }
293
+ else if ((eventType === "context_compacted" || eventType === "context_compaction") && active) {
294
+ active.activities.push({ sourceId: `event:${recordIndex}`, timestamp, tone: "info", kind: "context-compaction", summary: "Context compacted", payload: { state: "compacted" } });
295
+ }
296
+ else if (eventType === "token_count" && active && isObject(payload.info) && isObject(payload.info.last_token_usage)) {
297
+ const signature = JSON.stringify(payload.info.last_token_usage);
298
+ if (signature !== lastUsageSignature) {
299
+ lastUsageSignature = signature;
300
+ const usage = codexUsageActivity(payload.info, `usage:${recordIndex}`, timestamp);
301
+ if (usage)
302
+ active.activities.push(usage);
303
+ }
304
+ }
305
+ else if ((eventType.endsWith("_end") || eventType.endsWith("_completed")) && active && !["agent_message"].includes(eventType)) {
306
+ const itemType = eventType.includes("patch") ? "file_change" : eventType.includes("web_search") ? "web_search" : eventType.includes("mcp") ? "mcp_tool_call" : undefined;
307
+ if (itemType)
308
+ active.activities.push({
309
+ sourceId: `event:${recordIndex}`,
310
+ timestamp,
311
+ tone: payload.success === false ? "error" : "tool",
312
+ kind: "tool.completed",
313
+ summary: truncate(eventType.replaceAll("_", " "), 120),
314
+ payload: { itemType, status: payload.success === false ? "failed" : "completed", data: { item: payload } },
315
+ });
316
+ }
317
+ continue;
318
+ }
319
+ if (type !== "response_item")
320
+ continue;
321
+ const itemType = stringValue(payload.type) ?? "";
322
+ if (itemType === "message") {
323
+ const role = payload.role;
324
+ if (role !== "user" && role !== "assistant")
325
+ continue;
326
+ const parsed = textParts(payload.content, role);
327
+ if (!parsed.text && parsed.attachments.length === 0)
328
+ continue;
329
+ if (role === "user" && SYNTHETIC_PREFIXES.some((prefix) => parsed.text.startsWith(prefix)))
330
+ continue;
331
+ const turn = ensureTurn(timestamp, stringValue(payload.turn_id));
332
+ const message = {
333
+ sourceId: stringValue(payload.id) ?? `message:${recordIndex}`,
334
+ role,
335
+ text: parsed.text || "[Image attachment]",
336
+ timestamp,
337
+ attachments: parsed.attachments.map((attachment) => ({ ...attachment, sourceId: `${recordIndex}:${attachment.sourceId}` })),
338
+ };
339
+ if (role === "user")
340
+ turn.users.push(message);
341
+ else
342
+ turn.assistant.push(message);
343
+ }
344
+ else if (itemType === "reasoning" && active) {
345
+ const detail = reasoningText(payload);
346
+ if (detail)
347
+ active.activities.push({ sourceId: stringValue(payload.id) ?? `reasoning:${recordIndex}`, timestamp, tone: "info", kind: "reasoning.summary", summary: "Reasoning", payload: { detail } });
348
+ }
349
+ else if (["custom_tool_call", "function_call", "local_shell_call"].includes(itemType)) {
350
+ const turn = ensureTurn(timestamp);
351
+ const callId = stringValue(payload.call_id) ?? stringValue(payload.id) ?? `call:${recordIndex}`;
352
+ const name = stringValue(payload.name) ?? (itemType === "local_shell_call" ? "Command" : "Tool");
353
+ const input = parseToolInput(payload.input ?? payload.arguments ?? payload.command);
354
+ turn.toolCalls.set(callId, { name, input, timestamp });
355
+ if (classifyTool(name) === "collab_agent_tool_call" && name.toLowerCase().includes("spawn")) {
356
+ const record = isObject(input) ? input : {};
357
+ const title = stringValue(record.task_name) ?? stringValue(record.message) ?? stringValue(record.prompt) ?? "Subagent task";
358
+ turn.activities.push({ sourceId: `${callId}:task-started`, timestamp, tone: "info", kind: "task.started", summary: "Task started", payload: { taskId: callId, title: truncate(title, 120), detail: truncate(title), role: stringValue(record.role) ?? "agent", agentKind: "agent", toolUseId: callId } });
359
+ }
360
+ if (name === "update_plan" && isObject(input) && Array.isArray(input.plan)) {
361
+ turn.activities.push({ sourceId: `plan-update:${callId}`, timestamp, tone: "info", kind: "turn.plan.updated", summary: "Plan updated", payload: { plan: input.plan, ...(typeof input.explanation === "string" ? { explanation: input.explanation } : {}) } });
362
+ }
363
+ }
364
+ else if (["custom_tool_call_output", "function_call_output", "local_shell_call_output"].includes(itemType)) {
365
+ const turn = ensureTurn(timestamp);
366
+ const callId = stringValue(payload.call_id) ?? stringValue(payload.id) ?? `call:${recordIndex}`;
367
+ const call = turn.toolCalls.get(callId) ?? { name: "Tool", input: undefined, timestamp };
368
+ turn.activities.push(toolActivity(callId, timestamp, call.name, call.input, payload.output ?? payload.content ?? payload));
369
+ if (classifyTool(call.name) === "collab_agent_tool_call" && call.name.toLowerCase().includes("spawn")) {
370
+ const failed = isObject(payload.output) && (payload.output.is_error === true || payload.output.success === false);
371
+ turn.activities.push({ sourceId: `${callId}:task-finished`, timestamp, tone: failed ? "error" : "info", kind: "task.updated", summary: failed ? "Task failed" : "Task completed", payload: { taskId: callId, status: failed ? "failed" : "completed", agentKind: "agent", toolUseId: callId } });
372
+ }
373
+ }
374
+ }
375
+ if (active?.users.length)
376
+ turns.push(active);
377
+ if (!sessionId)
378
+ throw sourceError(`Codex rollout has no session id: ${filePath}`);
379
+ workspace = workspace ?? (appThread ? stringValue(appThread.cwd) : undefined);
380
+ if (!workspace)
381
+ throw sourceError(`Codex rollout has no workspace: ${filePath}`);
382
+ if (appThread && Array.isArray(appThread.turns)) {
383
+ for (const rawTurn of appThread.turns) {
384
+ if (!isObject(rawTurn))
385
+ continue;
386
+ const id = stringValue(rawTurn.id);
387
+ const turn = id ? turns.find((candidate) => candidate.id === id) : undefined;
388
+ if (!turn)
389
+ continue;
390
+ const status = stringValue(rawTurn.status);
391
+ if (["completed", "interrupted", "failed", "inProgress"].includes(status ?? ""))
392
+ turn.status = status;
393
+ const appError = errorMessage(rawTurn.error);
394
+ if (appError)
395
+ turn.terminalError = appError;
396
+ const reason = stringValue(rawTurn.reason) ?? stringValue(rawTurn.abortReason);
397
+ if (reason)
398
+ turn.terminalReason = reason;
399
+ if (turn.status !== "inProgress" && !turn.completedAt)
400
+ turn.completedAt = isoTimestamp(rawTurn.completedAt, fallbackTime);
401
+ }
402
+ }
403
+ const ignoredInProgressTurns = turns.filter((turn) => turn.status === "inProgress" && turn.users.length > 0).length;
404
+ const canonicalTurns = turns.flatMap((turn) => {
405
+ if (turn.status === "inProgress" && !includeIncomplete)
406
+ return [];
407
+ if (turn.users.length === 0)
408
+ return [];
409
+ const [first, ...rest] = turn.users;
410
+ const user = {
411
+ ...first,
412
+ text: [first.text, ...rest.map((entry) => entry.text)].filter(Boolean).join("\n\n"),
413
+ attachments: turn.users.flatMap((entry) => entry.attachments).slice(0, 8),
414
+ };
415
+ return [{ id: turn.id, startedAt: turn.startedAt, ...(turn.completedAt ? { completedAt: turn.completedAt } : {}), status: turn.status, ...(turn.terminalReason ? { terminalReason: turn.terminalReason } : {}), ...(turn.terminalError ? { terminalError: turn.terminalError } : {}), user, assistant: turn.assistant, activities: turn.activities, plans: turn.plans }];
416
+ });
417
+ const allWithUsers = turns.filter((turn) => turn.users.length > 0);
418
+ if (allWithUsers.length === 0)
419
+ throw sourceError(`No importable Codex turns in ${filePath}`);
420
+ const firstCanonical = canonicalTurns[0];
421
+ const firstPending = allWithUsers[0];
422
+ const lastCanonical = canonicalTurns.at(-1);
423
+ const lastPending = allWithUsers.at(-1);
424
+ const firstUserText = firstCanonical?.user.text ?? firstPending.users[0].text;
425
+ const lastUpdatedAt = lastCanonical
426
+ ? lastCanonical.completedAt ?? lastCanonical.assistant.at(-1)?.timestamp ?? lastCanonical.user.timestamp
427
+ : lastPending.completedAt ?? lastPending.assistant.at(-1)?.timestamp ?? lastPending.users.at(-1).timestamp;
428
+ const name = appThread && stringValue(appThread.name);
429
+ const preview = appThread && stringValue(appThread.preview);
430
+ return {
431
+ source: "codex",
432
+ sourceSessionId: sessionId,
433
+ sourceKey: `codex:${sessionId}`,
434
+ currentBranch: true,
435
+ title: name ?? (preview ? deriveTitle(preview) : deriveTitle(firstUserText)),
436
+ workspace,
437
+ ...(gitBranch ? { gitBranch } : {}),
438
+ model: appThread && stringValue(appThread.model) || model,
439
+ ...(effort ? { effort } : {}),
440
+ createdAt: startedAt,
441
+ updatedAt: lastUpdatedAt,
442
+ turns: canonicalTurns,
443
+ ignoredInProgressTurns,
444
+ resumeCursor: { threadId: sessionId },
445
+ warnings: [],
446
+ };
447
+ }
448
+ async function readRolloutHeader(path, fallbackTime) {
449
+ const lines = createInterface({ input: createReadStream(path, { encoding: "utf8" }), crlfDelay: Infinity });
450
+ try {
451
+ let inspected = 0;
452
+ for await (const line of lines) {
453
+ if (!line.trim())
454
+ continue;
455
+ inspected += 1;
456
+ try {
457
+ const row = JSON.parse(line);
458
+ if (isObject(row) && row.type === "session_meta" && isObject(row.payload)) {
459
+ const id = stringValue(row.payload.id) ?? stringValue(row.payload.session_id);
460
+ const workspace = stringValue(row.payload.cwd);
461
+ if (id && workspace) {
462
+ const threadSource = stringValue(row.payload.thread_source);
463
+ return { id, workspace, createdAt: isoTimestamp(row.payload.timestamp, isoTimestamp(row.timestamp, fallbackTime)), child: Boolean(threadSource && threadSource !== "user") };
464
+ }
465
+ }
466
+ }
467
+ catch { /* selected loads report malformed JSONL precisely */ }
468
+ if (inspected >= 32)
469
+ return undefined;
470
+ }
471
+ return undefined;
472
+ }
473
+ finally {
474
+ lines.close();
475
+ }
476
+ }
477
+ function appTimestamp(value, fallback) {
478
+ if (value === undefined || !Number.isFinite(value))
479
+ return fallback;
480
+ return new Date(value < 1_000_000_000_000 ? value * 1_000 : value).toISOString();
481
+ }
482
+ async function fastSummaries(options) {
483
+ const indexedTitles = new Map();
484
+ const indexedUpdates = new Map();
485
+ try {
486
+ const index = await readStableJsonl(join(codexRoot(), "session_index.jsonl"));
487
+ for (const row of index.rows) {
488
+ if (!isObject(row))
489
+ continue;
490
+ const id = stringValue(row.id);
491
+ const title = stringValue(row.thread_name);
492
+ if (id && title)
493
+ indexedTitles.set(id, title);
494
+ if (id && row.updated_at !== undefined)
495
+ indexedUpdates.set(id, isoTimestamp(row.updated_at, new Date(0).toISOString()));
496
+ }
497
+ }
498
+ catch {
499
+ // Older Codex installations may not have a session index.
500
+ }
501
+ const files = await walkFiles(join(codexRoot(), "sessions"), ".jsonl");
502
+ const values = await Promise.all(files.map(async (path) => {
503
+ try {
504
+ const fileStat = await stat(path);
505
+ const fallback = fileStat.mtime.toISOString();
506
+ const header = await readRolloutHeader(path, fallback);
507
+ if (!header || header.child)
508
+ return undefined;
509
+ if (options.workspace && canonicalPath(header.workspace) !== canonicalPath(options.workspace))
510
+ return undefined;
511
+ const updatedAt = indexedUpdates.get(header.id) ?? fallback;
512
+ if (options.since && new Date(updatedAt) < options.since)
513
+ return undefined;
514
+ return {
515
+ source: "codex",
516
+ id: header.id,
517
+ title: indexedTitles.get(header.id) ?? `Codex conversation ${header.id.slice(0, 8)}`,
518
+ workspace: header.workspace,
519
+ path,
520
+ createdAt: header.createdAt,
521
+ updatedAt,
522
+ status: "complete",
523
+ branches: 1,
524
+ };
525
+ }
526
+ catch {
527
+ return undefined;
528
+ }
529
+ }));
530
+ return values.filter((value) => Boolean(value));
531
+ }
532
+ export class CodexSource {
533
+ name = "codex";
534
+ appMetadata = new Map();
535
+ appSession;
536
+ metadataWarmup;
537
+ async session() {
538
+ const pending = this.appSession ??= CodexAppServerSession.connect();
539
+ try {
540
+ return await pending;
541
+ }
542
+ catch (error) {
543
+ if (this.appSession === pending)
544
+ this.appSession = undefined;
545
+ throw error;
546
+ }
547
+ }
548
+ async dispose() {
549
+ const pending = this.appSession;
550
+ this.appSession = undefined;
551
+ if (pending) {
552
+ try {
553
+ await (await pending).close();
554
+ }
555
+ catch { /* unavailable app-server */ }
556
+ }
557
+ await this.metadataWarmup?.catch(() => { });
558
+ this.metadataWarmup = undefined;
559
+ }
560
+ async discover(options) {
561
+ const summaries = await fastSummaries(options);
562
+ this.metadataWarmup ??= this.session()
563
+ .then((session) => session.list(options.workspace))
564
+ .then((app) => { this.appMetadata = new Map(app.map((entry) => [entry.id, entry])); })
565
+ .catch(() => { this.appMetadata.clear(); })
566
+ .finally(() => { this.metadataWarmup = undefined; });
567
+ for (const summary of summaries) {
568
+ const metadata = this.appMetadata.get(summary.id);
569
+ if (metadata?.name)
570
+ summary.title = metadata.name;
571
+ else if (metadata?.preview)
572
+ summary.title = deriveTitle(metadata.preview);
573
+ if (metadata?.parentThreadId)
574
+ summary.parentId = metadata.parentThreadId;
575
+ if (metadata?.updatedAt !== undefined)
576
+ summary.updatedAt = appTimestamp(metadata.updatedAt, summary.updatedAt);
577
+ }
578
+ return summaries
579
+ .filter((summary) => !summary.parentId)
580
+ .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
581
+ }
582
+ async load(summary, options) {
583
+ try {
584
+ const fileStat = await stat(summary.path);
585
+ const snapshot = await readStableJsonl(summary.path);
586
+ let appThread = this.appMetadata.get(summary.id)?.raw ?? null;
587
+ try {
588
+ appThread = await (await this.session()).read(summary.id) ?? appThread;
589
+ }
590
+ catch { /* raw fallback */ }
591
+ const thread = parseRows(snapshot.rows, summary.path, fileStat.mtime.toISOString(), options.includeIncomplete ?? false, appThread);
592
+ if (!stringValue(appThread?.name))
593
+ thread.title = summary.title;
594
+ return { summary: { ...summary, title: thread.title, status: thread.ignoredInProgressTurns ? "incomplete" : "complete" }, threads: [thread], fingerprint: snapshot.fingerprint };
595
+ }
596
+ catch (error) {
597
+ if (error instanceof Error && error.name === "ImporterError")
598
+ throw error;
599
+ throw sourceError(`Unable to load Codex conversation ${summary.id}`, error);
600
+ }
601
+ }
602
+ }
603
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/sources/codex.ts"],"names":[],"mappings":"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"}