naiad-cli 0.2.40 → 0.2.42

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 (37) hide show
  1. package/dist/api/client.d.ts +9 -0
  2. package/dist/api/client.js +22 -3
  3. package/dist/api/client.js.map +1 -1
  4. package/dist/callback/server.d.ts +2 -0
  5. package/dist/callback/server.js +38 -21
  6. package/dist/callback/server.js.map +1 -1
  7. package/dist/checkpoint/resume-session.d.ts +3 -0
  8. package/dist/checkpoint/resume-session.js +8 -6
  9. package/dist/checkpoint/resume-session.js.map +1 -1
  10. package/dist/commands/continue.js +58 -43
  11. package/dist/commands/continue.js.map +1 -1
  12. package/dist/commands/exec.js +15 -6
  13. package/dist/commands/exec.js.map +1 -1
  14. package/dist/commands/interactive.js +26 -13
  15. package/dist/commands/interactive.js.map +1 -1
  16. package/dist/lifecycle/setup.d.ts +2 -0
  17. package/dist/lifecycle/setup.js +14 -13
  18. package/dist/lifecycle/setup.js.map +1 -1
  19. package/dist/lifecycle/teardown.js +3 -6
  20. package/dist/lifecycle/teardown.js.map +1 -1
  21. package/dist/lifecycle/types.d.ts +2 -0
  22. package/dist/lifecycle/workers.js +5 -2
  23. package/dist/lifecycle/workers.js.map +1 -1
  24. package/dist/reporting/reporter.d.ts +70 -0
  25. package/dist/reporting/reporter.js +184 -0
  26. package/dist/reporting/reporter.js.map +1 -0
  27. package/dist/sync/checkpoint.d.ts +4 -1
  28. package/dist/sync/checkpoint.js +15 -4
  29. package/dist/sync/checkpoint.js.map +1 -1
  30. package/dist/sync/command-listener.d.ts +3 -0
  31. package/dist/sync/command-listener.js +10 -5
  32. package/dist/sync/command-listener.js.map +1 -1
  33. package/dist/sync/events.d.ts +4 -1
  34. package/dist/sync/events.js +11 -3
  35. package/dist/sync/events.js.map +1 -1
  36. package/extensions/naiad-extension.ts +51 -3
  37. package/package.json +1 -1
@@ -127,6 +127,15 @@ export declare class APIClient {
127
127
  ackCommand(sessionId: string, commandId: number): Promise<void>;
128
128
  getCommandStreamUrl(sessionId: string, cursor?: number): string;
129
129
  getAuthHeaders(): Record<string, string>;
130
+ postDiagnostics(sessionId: string, items: Array<{
131
+ ts: string;
132
+ source: string;
133
+ severity: string;
134
+ code: string;
135
+ message: string;
136
+ stack?: string;
137
+ meta?: Record<string, unknown>;
138
+ }>): Promise<void>;
130
139
  deleteThreadIfEmpty(threadId: string): Promise<boolean>;
131
140
  listThreads(params?: {
132
141
  status?: string;
@@ -7,15 +7,25 @@ export class APIClient {
7
7
  }
8
8
  async request(method, path, body) {
9
9
  const url = `${this.baseUrl}${path}`;
10
- const res = await fetch(url, {
10
+ const opts = {
11
11
  method,
12
12
  headers: {
13
13
  "Content-Type": "application/json",
14
14
  "Authorization": `Bearer ${this.apiKey}`,
15
15
  },
16
16
  body: body ? JSON.stringify(body) : undefined,
17
- });
18
- return res;
17
+ };
18
+ try {
19
+ return await fetch(url, opts);
20
+ }
21
+ catch (err) {
22
+ // Retry once on stale keep-alive socket errors (server closed idle connection)
23
+ const causeCode = err?.cause?.code;
24
+ if (causeCode === "UND_ERR_SOCKET" || causeCode === "ECONNRESET") {
25
+ return await fetch(url, opts);
26
+ }
27
+ throw err;
28
+ }
19
29
  }
20
30
  async listModels() {
21
31
  const res = await this.request("GET", "/api/v1/models");
@@ -185,6 +195,15 @@ export class APIClient {
185
195
  Authorization: `Bearer ${this.apiKey}`,
186
196
  };
187
197
  }
198
+ async postDiagnostics(sessionId, items) {
199
+ const res = await this.request("POST", `/api/v1/sessions/${sessionId}/diagnostics`, { items });
200
+ if (res.status === 202 || res.status === 200)
201
+ return;
202
+ // 5xx / 429 → throw so caller can retry; 4xx → drop silently
203
+ if (res.status >= 500 || res.status === 429) {
204
+ throw new Error(`Diagnostics flush failed: ${res.status}`);
205
+ }
206
+ }
188
207
  async deleteThreadIfEmpty(threadId) {
189
208
  const res = await this.request("DELETE", `/api/v1/threads/${threadId}`);
190
209
  if (res.status === 204)
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type UiCommandQueue } from "../reporting/reporter.js";
1
2
  export interface CallbackEvent {
2
3
  type: string;
3
4
  data: unknown;
@@ -5,6 +6,7 @@ export interface CallbackEvent {
5
6
  }
6
7
  export interface CallbackServer {
7
8
  url: string;
9
+ uiCommands: UiCommandQueue;
8
10
  drain(): CallbackEvent[];
9
11
  close(): Promise<void>;
10
12
  }
@@ -1,32 +1,48 @@
1
1
  import { createServer } from "node:http";
2
+ import { createUiCommandQueue } from "../reporting/reporter.js";
2
3
  export async function startCallbackServer() {
3
4
  const events = [];
5
+ const uiCommands = createUiCommandQueue();
4
6
  const server = createServer((req, res) => {
5
- if (req.method !== "POST" || req.url !== "/events") {
6
- res.writeHead(404);
7
- res.end();
7
+ if (req.method === "POST" && req.url === "/events") {
8
+ let body = "";
9
+ req.on("data", (chunk) => {
10
+ body += chunk.toString();
11
+ });
12
+ req.on("end", () => {
13
+ try {
14
+ const parsed = JSON.parse(body);
15
+ events.push({
16
+ type: parsed.type,
17
+ data: parsed.data,
18
+ timestamp: Date.now(),
19
+ });
20
+ res.writeHead(200, { "Content-Type": "application/json" });
21
+ res.end(JSON.stringify({ ok: true }));
22
+ }
23
+ catch {
24
+ res.writeHead(400, { "Content-Type": "application/json" });
25
+ res.end(JSON.stringify({ ok: false, error: "invalid json" }));
26
+ }
27
+ });
8
28
  return;
9
29
  }
10
- let body = "";
11
- req.on("data", (chunk) => {
12
- body += chunk.toString();
13
- });
14
- req.on("end", () => {
15
- try {
16
- const parsed = JSON.parse(body);
17
- events.push({
18
- type: parsed.type,
19
- data: parsed.data,
20
- timestamp: Date.now(),
21
- });
22
- res.writeHead(200, { "Content-Type": "application/json" });
23
- res.end(JSON.stringify({ ok: true }));
24
- }
25
- catch {
30
+ if (req.method === "GET" && req.url?.startsWith("/ui-commands")) {
31
+ const parsed = new URL(req.url, "http://localhost");
32
+ const raw = parsed.searchParams.get("cursor");
33
+ const cursor = raw === null ? 0 : Number.parseInt(raw, 10);
34
+ if (!Number.isSafeInteger(cursor) || cursor < 0) {
26
35
  res.writeHead(400, { "Content-Type": "application/json" });
27
- res.end(JSON.stringify({ ok: false, error: "invalid json" }));
36
+ res.end(JSON.stringify({ ok: false, error: "invalid cursor" }));
37
+ return;
28
38
  }
29
- });
39
+ const commands = uiCommands.drain(cursor);
40
+ res.writeHead(200, { "Content-Type": "application/json" });
41
+ res.end(JSON.stringify({ commands }));
42
+ return;
43
+ }
44
+ res.writeHead(404);
45
+ res.end();
30
46
  });
31
47
  await new Promise((resolve) => {
32
48
  server.listen(0, "127.0.0.1", () => resolve());
@@ -35,6 +51,7 @@ export async function startCallbackServer() {
35
51
  const url = `http://127.0.0.1:${addr.port}/events`;
36
52
  return {
37
53
  url,
54
+ uiCommands,
38
55
  drain() {
39
56
  return events.splice(0);
40
57
  },
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/callback/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA0D,MAAM,WAAW,CAAC;AAcjG,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAoB,EAAE,GAAmB,EAAE,EAAE;QACxE,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACnD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAC/B,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoC,CAAC;gBACnE,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAC,CAAC;gBACH,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAsB,CAAC;IAClD,MAAM,GAAG,GAAG,oBAAoB,IAAI,CAAC,IAAI,SAAS,CAAC;IAEnD,OAAO;QACL,GAAG;QACH,KAAK;YACH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK;YACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACnB,IAAI,GAAG;wBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;wBAChB,OAAO,EAAE,CAAC;gBACjB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/callback/server.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { APIClient } from "../api/client.js";
2
+ import type { Reporter } from "../reporting/reporter.js";
2
3
  /**
3
4
  * Resolve the parent session ID to resume conversation context from.
4
5
  *
@@ -27,6 +28,7 @@ export declare function downloadResumeSessionJsonl(params: {
27
28
  client: APIClient;
28
29
  sourceSessionId: string;
29
30
  destDir: string;
31
+ reporter: Reporter;
30
32
  }): Promise<string | undefined>;
31
33
  /**
32
34
  * Convenience: resolve parent session + download session.jsonl in one call.
@@ -38,5 +40,6 @@ export declare function prepareResumeSessionFile(params: {
38
40
  currentSessionId: string;
39
41
  currentAttempt: number;
40
42
  destDir: string;
43
+ reporter: Reporter;
41
44
  explicitParentSessionId?: string;
42
45
  }): Promise<string | undefined>;
@@ -49,22 +49,23 @@ export async function downloadResumeSessionJsonl(params) {
49
49
  try {
50
50
  const data = await params.client.downloadSession(params.sourceSessionId, { recover: true });
51
51
  if (data.length === 0) {
52
- console.error(`[naiad] Session stream empty on attempt ${i + 1}/${maxAttempts}`);
52
+ params.reporter.progress(`[naiad] Session stream empty on attempt ${i + 1}/${maxAttempts}`);
53
53
  if (i < maxAttempts - 1)
54
54
  continue;
55
55
  return undefined;
56
56
  }
57
57
  const filePath = join(params.destDir, "session.jsonl");
58
58
  writeFileSync(filePath, data);
59
- console.error(`[naiad] Downloaded session JSONL from stream (${(data.length / 1024).toFixed(1)}KB)`);
59
+ params.reporter.progress(`[naiad] Downloaded session JSONL from stream (${(data.length / 1024).toFixed(1)}KB)`);
60
60
  return filePath;
61
61
  }
62
62
  catch (err) {
63
63
  if (i < maxAttempts - 1) {
64
- console.error(`[naiad] Session stream download attempt ${i + 1} failed, retrying...`);
64
+ params.reporter.progress(`[naiad] Session stream download attempt ${i + 1} failed, retrying...`);
65
65
  continue;
66
66
  }
67
- console.error("[naiad] Failed to download session stream:", err);
67
+ params.reporter.capture("session_stream_download_failed", err);
68
+ params.reporter.progress("[naiad] Failed to download session stream");
68
69
  return undefined;
69
70
  }
70
71
  }
@@ -77,14 +78,15 @@ export async function downloadResumeSessionJsonl(params) {
77
78
  export async function prepareResumeSessionFile(params) {
78
79
  const parentId = await resolveParentSessionId(params);
79
80
  if (!parentId) {
80
- console.error("[naiad] No prior session found for conversation context");
81
+ params.reporter.progress("[naiad] No prior session found for conversation context");
81
82
  return undefined;
82
83
  }
83
- console.error(`[naiad] Fetching conversation context from session ${parentId}...`);
84
+ params.reporter.progress(`[naiad] Fetching conversation context from session ${parentId}...`);
84
85
  return downloadResumeSessionJsonl({
85
86
  client: params.client,
86
87
  sourceSessionId: parentId,
87
88
  destDir: params.destDir,
89
+ reporter: params.reporter,
88
90
  });
89
91
  }
90
92
  //# sourceMappingURL=resume-session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resume-session.js","sourceRoot":"","sources":["../../src/checkpoint/resume-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resume-session.js","sourceRoot":"","sources":["../../src/checkpoint/resume-session.ts"],"names":[],"mappings":"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"}
@@ -9,10 +9,12 @@ import { startWorkers } from "../lifecycle/workers.js";
9
9
  import { teardownLifecycle } from "../lifecycle/teardown.js";
10
10
  import { findPackageRoot } from "../utils/package-root.js";
11
11
  import { CommandListener } from "../sync/command-listener.js";
12
+ import { StderrReporter } from "../reporting/reporter.js";
12
13
  export async function continueCommand(config, threadId) {
13
14
  const client = new APIClient(config);
15
+ const reporter = new StderrReporter();
14
16
  // 1. Get thread metadata
15
- console.error("[naiad] Fetching thread metadata...");
17
+ reporter.progress("[naiad] Fetching thread metadata...");
16
18
  const thread = await client.getThread(threadId);
17
19
  if (!thread.repo_full_name) {
18
20
  console.error("Error: This thread predates remote resume support and cannot be continued.");
@@ -29,22 +31,22 @@ export async function continueCommand(config, threadId) {
29
31
  }
30
32
  }
31
33
  catch {
32
- console.error("[naiad] Warning: Could not verify local repo against thread repo");
34
+ reporter.progress("[naiad] Warning: Could not verify local repo against thread repo");
33
35
  }
34
36
  // 3. Call POST /threads/{id}/continue
35
- console.error("[naiad] Requesting continue...");
37
+ reporter.progress("[naiad] Requesting continue...");
36
38
  const continueResult = await client.continueThread(threadId, "local");
37
39
  const sessionId = continueResult.session_id;
38
40
  const attempt = continueResult.attempt;
39
41
  const parentSessionId = continueResult.parent_session_id;
40
- console.error(`[naiad] New session: ${sessionId}, attempt: ${attempt}`);
42
+ reporter.progress(`[naiad] New session: ${sessionId}, attempt: ${attempt}`);
41
43
  // 4. Download and restore checkpoint from parent session
42
44
  let sessionJsonlPath;
43
45
  if (parentSessionId) {
44
- sessionJsonlPath = await restoreCheckpoint(client, parentSessionId, thread);
46
+ sessionJsonlPath = await restoreCheckpoint(client, parentSessionId, thread, reporter);
45
47
  }
46
48
  else {
47
- console.error("[naiad] No parent session — starting fresh");
49
+ reporter.progress("[naiad] No parent session — starting fresh");
48
50
  }
49
51
  // 5. Validate API key by listing models
50
52
  const { models, seer_model_id: seerModelId, seer_reasoning_effort: seerReasoningEffort, default_model_id: defaultModelId } = await client.listModels();
@@ -53,6 +55,8 @@ export async function continueCommand(config, threadId) {
53
55
  const model = (defaultModelId && models.some(m => m.id === defaultModelId)) ? defaultModelId : models[0].id;
54
56
  const agentId = randomUUID();
55
57
  const sessionDir = mkdtempSync(join(tmpdir(), "naiad-session-"));
58
+ reporter.setLogPath(join(sessionDir, "diagnostics.jsonl"));
59
+ reporter.configureFlusher(client, sessionId);
56
60
  const pkgRoot = findPackageRoot();
57
61
  const extensionPath = join(pkgRoot, "extensions", "naiad-extension.ts");
58
62
  // Capture base_sha
@@ -69,7 +73,7 @@ export async function continueCommand(config, threadId) {
69
73
  await client.patchSession(sessionId, { base_sha: baseSha });
70
74
  }
71
75
  catch (err) {
72
- console.error("[naiad] Failed to store base SHA in session:", err);
76
+ reporter.capture("base_sha_store_failed", err);
73
77
  }
74
78
  }
75
79
  // Transition to RUNNING
@@ -87,6 +91,7 @@ export async function continueCommand(config, threadId) {
87
91
  externalThread: false,
88
92
  baseSha,
89
93
  attempt,
94
+ reporter,
90
95
  };
91
96
  // Launch pi
92
97
  const piEnv = {
@@ -126,22 +131,23 @@ export async function continueCommand(config, threadId) {
126
131
  sessionId,
127
132
  sessionDir,
128
133
  piProcess: pi.process,
134
+ reporter,
129
135
  });
130
136
  commandListener.start();
131
- console.error("[naiad] Command listener started (remote control enabled)");
137
+ reporter.progress("[naiad] Command listener started (remote control enabled)");
132
138
  }
133
139
  // Start preemption heartbeat (20s interval)
134
140
  const heartbeatTimer = setInterval(async () => {
135
141
  try {
136
142
  const res = await client.postHeartbeatWithPreemption(agentId, threadId, sessionId, attempt);
137
143
  if (res.should_exit) {
138
- console.error("[naiad] Session preempted — shutting down");
144
+ reporter.progress("[naiad] Session preempted — shutting down");
139
145
  clearInterval(heartbeatTimer);
140
146
  await pi.shutdown();
141
147
  }
142
148
  }
143
149
  catch (err) {
144
- console.error("[heartbeat] Preemption check failed:", err);
150
+ reporter.capture("heartbeat_preemption_check_failed", err);
145
151
  }
146
152
  }, 20_000);
147
153
  // Process pi events
@@ -150,7 +156,7 @@ export async function continueCommand(config, threadId) {
150
156
  if (event.type === "checkpoint") {
151
157
  const data = event.data ?? event;
152
158
  workers.checkpoint.handleCheckpoint(data).catch((err) => {
153
- console.error("[naiad] Checkpoint handling failed:", err);
159
+ reporter.capture("checkpoint_handling_failed", err);
154
160
  });
155
161
  return;
156
162
  }
@@ -181,22 +187,23 @@ export async function continueCommand(config, threadId) {
181
187
  });
182
188
  clearInterval(heartbeatTimer);
183
189
  process.stdout.write("\n");
184
- console.error("[naiad] Agent finished, flushing...");
190
+ reporter.progress("[naiad] Agent finished, flushing...");
185
191
  commandListener?.stop();
186
192
  await workers.stop();
187
193
  await teardownLifecycle({ ctx, exitCode });
188
194
  process.exit(exitCode);
189
195
  }
190
- async function restoreCheckpoint(client, parentSessionId, thread) {
191
- console.error("[naiad] Downloading checkpoint from parent session...");
196
+ async function restoreCheckpoint(client, parentSessionId, thread, reporter) {
197
+ reporter.progress("[naiad] Downloading checkpoint from parent session...");
192
198
  const tmpDir = mkdtempSync(join(tmpdir(), "naiad-restore-"));
193
199
  let checkpoint;
194
200
  try {
195
201
  checkpoint = await client.downloadCheckpoint(parentSessionId);
196
202
  }
197
203
  catch (err) {
198
- console.error("[naiad] Failed to download checkpoint:", err);
199
- return downloadConversationContext(client, parentSessionId, tmpDir);
204
+ reporter.capture("checkpoint_download_failed", err);
205
+ reporter.progress("[naiad] Failed to download checkpoint — falling back to conversation context");
206
+ return downloadConversationContext(client, parentSessionId, tmpDir, reporter);
200
207
  }
201
208
  // Download manifest
202
209
  let manifest;
@@ -210,20 +217,21 @@ async function restoreCheckpoint(client, parentSessionId, thread) {
210
217
  }
211
218
  }
212
219
  catch (err) {
213
- console.error("[naiad] Failed to download manifest:", err);
220
+ reporter.capture("manifest_download_failed", err);
221
+ reporter.progress("[naiad] Failed to download manifest");
214
222
  }
215
223
  if (!manifest) {
216
- console.error("[naiad] No checkpoint manifest — skipping git restore");
217
- return downloadConversationContext(client, parentSessionId, tmpDir);
224
+ reporter.progress("[naiad] No checkpoint manifest — skipping git restore");
225
+ return downloadConversationContext(client, parentSessionId, tmpDir, reporter);
218
226
  }
219
227
  if (manifest.version !== 1) {
220
- console.error("[naiad] Unknown checkpoint version:", manifest.version);
221
- return downloadConversationContext(client, parentSessionId, tmpDir);
228
+ reporter.progress("[naiad] Unknown checkpoint version: " + manifest.version);
229
+ return downloadConversationContext(client, parentSessionId, tmpDir, reporter);
222
230
  }
223
231
  const baseSha = manifest.base_sha;
224
232
  if (!baseSha) {
225
- console.error("[naiad] No base_sha in manifest — skipping git restore");
226
- return downloadConversationContext(client, parentSessionId, tmpDir);
233
+ reporter.progress("[naiad] No base_sha in manifest — skipping git restore");
234
+ return downloadConversationContext(client, parentSessionId, tmpDir, reporter);
227
235
  }
228
236
  // Download artifacts
229
237
  const skippedArtifacts = manifest.skipped_artifacts || [];
@@ -238,7 +246,8 @@ async function restoreCheckpoint(client, parentSessionId, thread) {
238
246
  }
239
247
  }
240
248
  catch (err) {
241
- console.error("[naiad] Failed to download patch:", err);
249
+ reporter.capture("patch_download_failed", err);
250
+ reporter.progress("[naiad] Failed to download patch");
242
251
  }
243
252
  }
244
253
  let untrackedData = null;
@@ -252,7 +261,8 @@ async function restoreCheckpoint(client, parentSessionId, thread) {
252
261
  }
253
262
  }
254
263
  catch (err) {
255
- console.error("[naiad] Failed to download untracked archive:", err);
264
+ reporter.capture("untracked_download_failed", err);
265
+ reporter.progress("[naiad] Failed to download untracked archive");
256
266
  }
257
267
  }
258
268
  // Verify checksum (git state only — conversation context is sourced separately)
@@ -276,28 +286,30 @@ async function restoreCheckpoint(client, parentSessionId, thread) {
276
286
  // May be a pre-v0.2.24 checkpoint that included session data in the hash.
277
287
  // Since we no longer have the checkpoint session artifact to verify against,
278
288
  // log a warning but proceed — git restore is still best-effort.
279
- console.error("[naiad] Checkpoint checksum mismatch (may be pre-v0.2.24 format) — proceeding with git restore");
289
+ reporter.progress("[naiad] Checkpoint checksum mismatch (may be pre-v0.2.24 format) — proceeding with git restore");
280
290
  }
281
291
  // Restore git state
282
292
  try {
283
- console.error("[naiad] Fetching origin...");
293
+ reporter.progress("[naiad] Fetching origin...");
284
294
  execFileSync("git", ["fetch", "origin"], { stdio: "pipe" });
285
295
  }
286
296
  catch (err) {
287
- console.error("[naiad] git fetch failed:", err);
297
+ reporter.capture("git_fetch_failed", err);
298
+ reporter.progress("[naiad] git fetch failed");
288
299
  }
289
300
  const ref = thread.ref || "HEAD";
290
301
  try {
291
- console.error(`[naiad] Checking out ${ref} at ${baseSha}...`);
302
+ reporter.progress(`[naiad] Checking out ${ref} at ${baseSha}...`);
292
303
  execFileSync("git", ["checkout", "-B", ref, baseSha], { stdio: "pipe" });
293
304
  }
294
305
  catch (err) {
295
- console.error("[naiad] git checkout failed:", err);
306
+ reporter.capture("git_checkout_failed", err);
307
+ reporter.progress("[naiad] git checkout failed");
296
308
  try {
297
309
  execFileSync("git", ["checkout", baseSha], { stdio: "pipe" });
298
310
  }
299
311
  catch {
300
- console.error("[naiad] Fallback checkout failed — continuing anyway");
312
+ reporter.progress("[naiad] Fallback checkout failed — continuing anyway");
301
313
  }
302
314
  }
303
315
  // Apply patch
@@ -305,11 +317,12 @@ async function restoreCheckpoint(client, parentSessionId, thread) {
305
317
  const patchPath = join(tmpDir, "patch.bin");
306
318
  writeFileSync(patchPath, patchData);
307
319
  try {
308
- console.error("[naiad] Applying checkpoint patch...");
320
+ reporter.progress("[naiad] Applying checkpoint patch...");
309
321
  execFileSync("git", ["apply", "--3way", patchPath], { stdio: "pipe" });
310
322
  }
311
323
  catch (err) {
312
- console.error("[naiad] Patch apply failed, resetting to base SHA");
324
+ reporter.capture("patch_apply_failed", err);
325
+ reporter.progress("[naiad] Patch apply failed, resetting to base SHA");
313
326
  try {
314
327
  execFileSync("git", ["checkout", "--force", baseSha], { stdio: "pipe" });
315
328
  }
@@ -327,12 +340,12 @@ async function restoreCheckpoint(client, parentSessionId, thread) {
327
340
  const listing = execFileSync("tar", ["-tzf", untrackedPath], { encoding: "utf8", maxBuffer: 10 * 1024 * 1024 });
328
341
  const entries = listing.split("\n").filter(Boolean);
329
342
  if (entries.length > 10000) {
330
- console.error("[naiad] Too many untracked files (>10000), skipping extraction");
343
+ reporter.progress("[naiad] Too many untracked files (>10000), skipping extraction");
331
344
  }
332
345
  else {
333
346
  const invalid = entries.some(e => e.includes("..") || e.startsWith("/") || e.startsWith(".git/") || e.split("/").length > 50);
334
347
  if (invalid) {
335
- console.error("[naiad] Unsafe paths in untracked archive, skipping extraction");
348
+ reporter.progress("[naiad] Unsafe paths in untracked archive, skipping extraction");
336
349
  }
337
350
  else {
338
351
  const extractDir = join(tmpDir, "untracked");
@@ -359,17 +372,18 @@ async function restoreCheckpoint(client, parentSessionId, thread) {
359
372
  const { copyFileSync } = await import("fs");
360
373
  copyFileSync(src, dst);
361
374
  }
362
- console.error(`[naiad] Restored ${entries.length} untracked files`);
375
+ reporter.progress(`[naiad] Restored ${entries.length} untracked files`);
363
376
  }
364
377
  }
365
378
  }
366
379
  catch (err) {
367
- console.error("[naiad] Failed to restore untracked files:", err);
380
+ reporter.capture("untracked_restore_failed", err);
381
+ reporter.progress("[naiad] Failed to restore untracked files");
368
382
  }
369
383
  }
370
- return downloadConversationContext(client, parentSessionId, tmpDir);
384
+ return downloadConversationContext(client, parentSessionId, tmpDir, reporter);
371
385
  }
372
- async function downloadConversationContext(client, parentSessionId, tmpDir) {
386
+ async function downloadConversationContext(client, parentSessionId, tmpDir, reporter) {
373
387
  const maxAttempts = 5;
374
388
  const delays = [0, 2000, 5000, 10000, 15000];
375
389
  for (let i = 0; i < maxAttempts; i++) {
@@ -381,16 +395,17 @@ async function downloadConversationContext(client, parentSessionId, tmpDir) {
381
395
  if (data.length > 0) {
382
396
  const filePath = join(tmpDir, "session.jsonl");
383
397
  writeFileSync(filePath, data);
384
- console.error(`[naiad] Downloaded conversation context from session stream (${(data.length / 1024).toFixed(1)}KB)`);
398
+ reporter.progress(`[naiad] Downloaded conversation context from session stream (${(data.length / 1024).toFixed(1)}KB)`);
385
399
  return filePath;
386
400
  }
387
- console.error(`[naiad] Session stream empty on attempt ${i + 1}/${maxAttempts}`);
401
+ reporter.progress(`[naiad] Session stream empty on attempt ${i + 1}/${maxAttempts}`);
388
402
  }
389
403
  catch (err) {
390
- console.error(`[naiad] Session stream download attempt ${i + 1} failed:`, err);
404
+ reporter.capture("session_stream_download_failed", err);
405
+ reporter.progress(`[naiad] Session stream download attempt ${i + 1} failed`);
391
406
  }
392
407
  }
393
- console.error("[naiad] No conversation context available from parent session");
408
+ reporter.progress("[naiad] No conversation context available from parent session");
394
409
  return undefined;
395
410
  }
396
411
  function parseRepoFullName(url) {