naiad-cli 0.2.40 → 0.2.41
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/dist/api/client.js +13 -3
- package/dist/api/client.js.map +1 -1
- package/dist/callback/server.d.ts +2 -0
- package/dist/callback/server.js +38 -21
- package/dist/callback/server.js.map +1 -1
- package/dist/checkpoint/resume-session.d.ts +3 -0
- package/dist/checkpoint/resume-session.js +8 -6
- package/dist/checkpoint/resume-session.js.map +1 -1
- package/dist/commands/continue.js +57 -43
- package/dist/commands/continue.js.map +1 -1
- package/dist/commands/exec.js +14 -6
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/interactive.js +23 -13
- package/dist/commands/interactive.js.map +1 -1
- package/dist/lifecycle/setup.d.ts +2 -0
- package/dist/lifecycle/setup.js +14 -13
- package/dist/lifecycle/setup.js.map +1 -1
- package/dist/lifecycle/teardown.js +3 -6
- package/dist/lifecycle/teardown.js.map +1 -1
- package/dist/lifecycle/types.d.ts +2 -0
- package/dist/lifecycle/workers.js +2 -2
- package/dist/lifecycle/workers.js.map +1 -1
- package/dist/reporting/reporter.d.ts +38 -0
- package/dist/reporting/reporter.js +89 -0
- package/dist/reporting/reporter.js.map +1 -0
- package/dist/sync/checkpoint.d.ts +4 -1
- package/dist/sync/checkpoint.js +15 -4
- package/dist/sync/checkpoint.js.map +1 -1
- package/dist/sync/command-listener.d.ts +3 -0
- package/dist/sync/command-listener.js +10 -5
- package/dist/sync/command-listener.js.map +1 -1
- package/dist/sync/events.d.ts +4 -1
- package/dist/sync/events.js +11 -3
- package/dist/sync/events.js.map +1 -1
- package/extensions/naiad-extension.ts +51 -3
- package/package.json +1 -1
package/dist/commands/exec.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { writeFileSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
2
3
|
import { launchPi } from "../pi/launcher.js";
|
|
3
4
|
import { setupLifecycle } from "../lifecycle/setup.js";
|
|
4
5
|
import { startWorkers } from "../lifecycle/workers.js";
|
|
5
6
|
import { teardownLifecycle } from "../lifecycle/teardown.js";
|
|
6
7
|
import { CommandListener } from "../sync/command-listener.js";
|
|
7
8
|
import { prepareResumeSessionFile } from "../checkpoint/resume-session.js";
|
|
9
|
+
import { StderrReporter } from "../reporting/reporter.js";
|
|
8
10
|
export async function execCommand(config, prompt, opts = {}) {
|
|
11
|
+
const reporter = new StderrReporter();
|
|
9
12
|
const ctx = await setupLifecycle({
|
|
10
13
|
config,
|
|
11
14
|
modelFlag: opts.model,
|
|
@@ -15,7 +18,9 @@ export async function execCommand(config, prompt, opts = {}) {
|
|
|
15
18
|
context: opts.context,
|
|
16
19
|
replyTarget: opts.replyTarget,
|
|
17
20
|
threadId: opts.thread,
|
|
21
|
+
reporter,
|
|
18
22
|
});
|
|
23
|
+
reporter.setLogPath(join(ctx.sessionDir, "diagnostics.jsonl"));
|
|
19
24
|
// Phase 1 output: write partial result immediately after thread creation
|
|
20
25
|
if (opts.output) {
|
|
21
26
|
const partial = {
|
|
@@ -37,16 +42,18 @@ export async function execCommand(config, prompt, opts = {}) {
|
|
|
37
42
|
currentSessionId: ctx.sessionId,
|
|
38
43
|
currentAttempt: ctx.attempt ?? 1,
|
|
39
44
|
destDir: ctx.sessionDir,
|
|
45
|
+
reporter,
|
|
40
46
|
});
|
|
41
47
|
if (resumeSessionFile) {
|
|
42
|
-
|
|
48
|
+
reporter.progress("[naiad] Resuming conversation context from prior session");
|
|
43
49
|
}
|
|
44
50
|
else {
|
|
45
|
-
|
|
51
|
+
reporter.progress("[naiad] No prior session context found; starting fresh");
|
|
46
52
|
}
|
|
47
53
|
}
|
|
48
54
|
catch (err) {
|
|
49
|
-
|
|
55
|
+
reporter.capture("resume_context_fetch_failed", err);
|
|
56
|
+
reporter.progress("[naiad] Resume context fetch failed; starting fresh");
|
|
50
57
|
}
|
|
51
58
|
}
|
|
52
59
|
// Launch pi in RPC mode
|
|
@@ -91,9 +98,10 @@ export async function execCommand(config, prompt, opts = {}) {
|
|
|
91
98
|
sessionId: ctx.sessionId,
|
|
92
99
|
sessionDir: ctx.sessionDir,
|
|
93
100
|
piProcess: pi.process,
|
|
101
|
+
reporter: ctx.reporter,
|
|
94
102
|
});
|
|
95
103
|
commandListener.start();
|
|
96
|
-
|
|
104
|
+
reporter.progress("[naiad] Command listener started (remote control enabled)");
|
|
97
105
|
}
|
|
98
106
|
// Process pi events
|
|
99
107
|
let agentEnded = false;
|
|
@@ -102,7 +110,7 @@ export async function execCommand(config, prompt, opts = {}) {
|
|
|
102
110
|
if (event.type === "checkpoint") {
|
|
103
111
|
const data = event.data ?? event;
|
|
104
112
|
workers.checkpoint.handleCheckpoint(data).catch((err) => {
|
|
105
|
-
|
|
113
|
+
ctx.reporter.capture("checkpoint_handling_failed", err);
|
|
106
114
|
});
|
|
107
115
|
return;
|
|
108
116
|
}
|
|
@@ -139,7 +147,7 @@ export async function execCommand(config, prompt, opts = {}) {
|
|
|
139
147
|
});
|
|
140
148
|
// Flush and finalize
|
|
141
149
|
process.stdout.write("\n");
|
|
142
|
-
|
|
150
|
+
reporter.progress("[naiad] Agent finished, flushing...");
|
|
143
151
|
commandListener?.stop();
|
|
144
152
|
await workers.stop();
|
|
145
153
|
await teardownLifecycle({ ctx, exitCode });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/commands/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/commands/exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,52 +9,56 @@ import { startCallbackServer } from "../callback/server.js";
|
|
|
9
9
|
import { startWorkers } from "../lifecycle/workers.js";
|
|
10
10
|
import { teardownLifecycle } from "../lifecycle/teardown.js";
|
|
11
11
|
import { findPackageRoot } from "../utils/package-root.js";
|
|
12
|
+
import { StderrReporter, InteractiveReporter } from "../reporting/reporter.js";
|
|
12
13
|
export async function interactiveCommand(config, options) {
|
|
13
14
|
const client = new APIClient(config);
|
|
14
15
|
// Validate API key by listing models
|
|
15
|
-
|
|
16
|
+
const stderrReporter = new StderrReporter();
|
|
17
|
+
stderrReporter.progress("[naiad] Validating API key...");
|
|
16
18
|
const { models, seer_model_id: seerModelId, seer_reasoning_effort: seerReasoningEffort } = await client.listModels();
|
|
17
19
|
if (models.length === 0) {
|
|
18
|
-
|
|
20
|
+
stderrReporter.progress("[naiad] No models available");
|
|
19
21
|
process.exit(1);
|
|
20
22
|
}
|
|
21
23
|
const model = options.modelFlag || models[0].id;
|
|
22
|
-
|
|
24
|
+
stderrReporter.progress(`[naiad] Using model: ${model}`);
|
|
23
25
|
const sessionDir = mkdtempSync(join(tmpdir(), "naiad-session-"));
|
|
26
|
+
stderrReporter.setLogPath(join(sessionDir, "diagnostics.jsonl"));
|
|
24
27
|
const pkgRoot = findPackageRoot();
|
|
25
28
|
const extensionPath = join(pkgRoot, "extensions", "naiad-extension.ts");
|
|
26
29
|
const agentId = randomUUID();
|
|
27
30
|
let threadId;
|
|
28
31
|
let sessionId;
|
|
32
|
+
let attempt = 1;
|
|
29
33
|
let resumeSessionFile;
|
|
30
34
|
if (options.sessionId || options.continueRecent) {
|
|
31
35
|
// Resume flow
|
|
32
36
|
const resolved = await resolveResumeSession(client, options);
|
|
33
37
|
threadId = resolved.threadId;
|
|
34
38
|
// Download previous session JSONL
|
|
35
|
-
|
|
39
|
+
stderrReporter.progress(`[naiad] Downloading session ${resolved.previousSessionId}...`);
|
|
36
40
|
const jsonlData = await client.downloadSession(resolved.previousSessionId);
|
|
37
41
|
const jsonlFilename = `${new Date().toISOString().replace(/[:.]/g, "-")}_${randomUUID()}.jsonl`;
|
|
38
42
|
resumeSessionFile = join(sessionDir, jsonlFilename);
|
|
39
43
|
writeFileSync(resumeSessionFile, jsonlData);
|
|
40
|
-
|
|
44
|
+
stderrReporter.progress(`[naiad] Session data written to ${resumeSessionFile}`);
|
|
41
45
|
// Create new session on existing thread
|
|
42
46
|
const session = await client.createSession(threadId, agentId);
|
|
43
47
|
sessionId = session.id;
|
|
44
|
-
|
|
48
|
+
stderrReporter.progress(`[naiad] Created session: ${sessionId} (resuming thread ${threadId})`);
|
|
45
49
|
// Transition thread back to RUNNING
|
|
46
50
|
const resumedThread = await client.getThread(threadId);
|
|
47
|
-
|
|
51
|
+
attempt = resumedThread.current_attempt;
|
|
48
52
|
await client.updateThread(threadId, { status: "RUNNING", attempt });
|
|
49
53
|
}
|
|
50
54
|
else {
|
|
51
55
|
// New session flow
|
|
52
56
|
const thread = await client.createThread("[interactive session]");
|
|
53
57
|
threadId = thread.id;
|
|
54
|
-
|
|
58
|
+
stderrReporter.progress(`[naiad] Created thread: ${threadId}`);
|
|
55
59
|
const session = await client.createSession(threadId, agentId);
|
|
56
60
|
sessionId = session.id;
|
|
57
|
-
|
|
61
|
+
stderrReporter.progress(`[naiad] Created session: ${sessionId}`);
|
|
58
62
|
await client.updateThread(threadId, { status: "RUNNING", attempt: 1 });
|
|
59
63
|
}
|
|
60
64
|
// Capture base SHA
|
|
@@ -69,7 +73,9 @@ export async function interactiveCommand(config, options) {
|
|
|
69
73
|
try {
|
|
70
74
|
await client.patchSession(sessionId, { base_sha: baseSha });
|
|
71
75
|
}
|
|
72
|
-
catch {
|
|
76
|
+
catch (err) {
|
|
77
|
+
stderrReporter.capture("base_sha_store_failed", err);
|
|
78
|
+
}
|
|
73
79
|
}
|
|
74
80
|
const ctx = {
|
|
75
81
|
config,
|
|
@@ -83,11 +89,15 @@ export async function interactiveCommand(config, options) {
|
|
|
83
89
|
extensionPath,
|
|
84
90
|
externalThread: false,
|
|
85
91
|
baseSha,
|
|
86
|
-
attempt
|
|
92
|
+
attempt,
|
|
93
|
+
reporter: stderrReporter,
|
|
87
94
|
};
|
|
88
95
|
// Start callback server
|
|
89
96
|
const callbackServer = await startCallbackServer();
|
|
90
|
-
|
|
97
|
+
stderrReporter.progress(`[naiad] Callback server listening at ${callbackServer.url}`);
|
|
98
|
+
// Switch to interactive reporter now that TUI is about to launch
|
|
99
|
+
const interactiveReporter = new InteractiveReporter(callbackServer.uiCommands, join(sessionDir, "diagnostics.jsonl"));
|
|
100
|
+
ctx.reporter = interactiveReporter;
|
|
91
101
|
// Guard against EIO on inherited stdin after pi exits and releases the PTY
|
|
92
102
|
process.stdin.on("error", () => { });
|
|
93
103
|
// Launch pi in interactive mode
|
|
@@ -128,7 +138,7 @@ export async function interactiveCommand(config, options) {
|
|
|
128
138
|
for (const ev of events) {
|
|
129
139
|
if (ev.type === "checkpoint") {
|
|
130
140
|
workers.checkpoint.handleCheckpoint(ev.data).catch((err) => {
|
|
131
|
-
|
|
141
|
+
ctx.reporter.capture("checkpoint_handling_failed", err);
|
|
132
142
|
});
|
|
133
143
|
}
|
|
134
144
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/commands/interactive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/commands/interactive.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { NaiadConfig } from "../config/config.js";
|
|
2
2
|
import type { LifecycleContext } from "./types.js";
|
|
3
|
+
import type { Reporter } from "../reporting/reporter.js";
|
|
3
4
|
export declare function setupLifecycle(params: {
|
|
4
5
|
config: NaiadConfig;
|
|
6
|
+
reporter: Reporter;
|
|
5
7
|
modelFlag?: string;
|
|
6
8
|
threadPrompt: string;
|
|
7
9
|
source?: string;
|
package/dist/lifecycle/setup.js
CHANGED
|
@@ -47,31 +47,31 @@ async function bootstrapOIDC(config, threadId, attempt) {
|
|
|
47
47
|
return { token, sessionId };
|
|
48
48
|
}
|
|
49
49
|
export async function setupLifecycle(params) {
|
|
50
|
-
const { config, modelFlag, threadPrompt } = params;
|
|
50
|
+
const { config, reporter, modelFlag, threadPrompt } = params;
|
|
51
51
|
// If running in GHA with an existing thread, bootstrap auth via OIDC
|
|
52
52
|
let oidcSessionId;
|
|
53
53
|
if (config.isGHA && !config.apiKey && params.threadId) {
|
|
54
|
-
|
|
54
|
+
reporter.progress("[naiad] Bootstrapping auth via GitHub OIDC...");
|
|
55
55
|
const attempt = parseInt(process.env.NAIAD_ATTEMPT || "1", 10);
|
|
56
56
|
const result = await bootstrapOIDC(config, params.threadId, attempt);
|
|
57
57
|
config.apiKey = result.token;
|
|
58
58
|
oidcSessionId = result.sessionId;
|
|
59
|
-
|
|
59
|
+
reporter.progress("[naiad] OIDC auth successful");
|
|
60
60
|
}
|
|
61
61
|
const client = new APIClient(config);
|
|
62
62
|
// Validate API key by listing models
|
|
63
|
-
|
|
63
|
+
reporter.progress("[naiad] Validating API key...");
|
|
64
64
|
const { models, seer_model_id: seerModelId, seer_reasoning_effort: seerReasoningEffort, default_model_id: defaultModelId } = await client.listModels();
|
|
65
65
|
if (models.length === 0) {
|
|
66
66
|
throw new Error("No models available");
|
|
67
67
|
}
|
|
68
68
|
const model = modelFlag || (defaultModelId && models.some(m => m.id === defaultModelId) ? defaultModelId : models[0].id);
|
|
69
|
-
|
|
69
|
+
reporter.progress(`[naiad] Using model: ${model}`);
|
|
70
70
|
let threadId;
|
|
71
71
|
if (params.threadId) {
|
|
72
72
|
// Attach to existing thread (platform already created it)
|
|
73
73
|
threadId = params.threadId;
|
|
74
|
-
|
|
74
|
+
reporter.progress(`[naiad] Attaching to existing thread: ${threadId}`);
|
|
75
75
|
}
|
|
76
76
|
else {
|
|
77
77
|
// Create thread with metadata
|
|
@@ -82,16 +82,16 @@ export async function setupLifecycle(params) {
|
|
|
82
82
|
replyTarget: params.replyTarget ? JSON.parse(params.replyTarget) : undefined,
|
|
83
83
|
});
|
|
84
84
|
threadId = thread.id;
|
|
85
|
-
|
|
85
|
+
reporter.progress(`[naiad] Created thread: ${threadId}`);
|
|
86
86
|
}
|
|
87
87
|
// Capture base SHA from git before session creation
|
|
88
88
|
let baseSha;
|
|
89
89
|
try {
|
|
90
90
|
baseSha = execSync("git rev-parse HEAD", { encoding: "utf8" }).trim();
|
|
91
|
-
|
|
91
|
+
reporter.progress(`[naiad] Captured base SHA: ${baseSha}`);
|
|
92
92
|
}
|
|
93
93
|
catch {
|
|
94
|
-
|
|
94
|
+
reporter.progress("[naiad] Not in a git repo or git not available, skipping base SHA capture");
|
|
95
95
|
}
|
|
96
96
|
// Session setup: reuse existing session for attached threads, create new for fresh
|
|
97
97
|
const agentId = randomUUID();
|
|
@@ -106,7 +106,7 @@ export async function setupLifecycle(params) {
|
|
|
106
106
|
attempt = thread.current_attempt;
|
|
107
107
|
const sessionInfo = await client.getSession(oidcSessionId);
|
|
108
108
|
session = { id: sessionInfo.id, remote_control_enabled: sessionInfo.remote_control_enabled };
|
|
109
|
-
|
|
109
|
+
reporter.progress(`[naiad] Reusing session from OIDC auth: ${session.id} (attempt ${attempt})`);
|
|
110
110
|
}
|
|
111
111
|
else if (params.threadId) {
|
|
112
112
|
// Attach mode without OIDC: fall back to listing sessions
|
|
@@ -119,19 +119,19 @@ export async function setupLifecycle(params) {
|
|
|
119
119
|
}
|
|
120
120
|
session = active;
|
|
121
121
|
attempt = currentAttempt;
|
|
122
|
-
|
|
122
|
+
reporter.progress(`[naiad] Reusing existing session: ${session.id} (attempt ${attempt})`);
|
|
123
123
|
}
|
|
124
124
|
else {
|
|
125
125
|
session = await client.createSession(threadId, agentId, runtime);
|
|
126
126
|
attempt = 1;
|
|
127
|
-
|
|
127
|
+
reporter.progress(`[naiad] Created session: ${session.id}`);
|
|
128
128
|
// Store base_sha in session record (only for fresh sessions we created)
|
|
129
129
|
if (baseSha) {
|
|
130
130
|
try {
|
|
131
131
|
await client.patchSession(session.id, { base_sha: baseSha });
|
|
132
132
|
}
|
|
133
133
|
catch (err) {
|
|
134
|
-
|
|
134
|
+
reporter.capture("base_sha_store_failed", err);
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
}
|
|
@@ -144,6 +144,7 @@ export async function setupLifecycle(params) {
|
|
|
144
144
|
const extensionPath = join(pkgRoot, "extensions", "naiad-extension.ts");
|
|
145
145
|
return {
|
|
146
146
|
config,
|
|
147
|
+
reporter,
|
|
147
148
|
client,
|
|
148
149
|
model,
|
|
149
150
|
allModels: models,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/lifecycle/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/lifecycle/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ export async function teardownLifecycle(params) {
|
|
|
16
16
|
}
|
|
17
17
|
const promises = [
|
|
18
18
|
ctx.client.updateSession(ctx.sessionId, finalStatus).catch((err) => {
|
|
19
|
-
|
|
19
|
+
ctx.reporter.capture("session_update_failed", err);
|
|
20
20
|
}),
|
|
21
21
|
];
|
|
22
22
|
// Skip thread status update for external threads (--thread flag).
|
|
@@ -32,11 +32,8 @@ export async function teardownLifecycle(params) {
|
|
|
32
32
|
: ctx.client.updateThread(ctx.threadId, { status: "COMPLETED", attempt: ctx.attempt });
|
|
33
33
|
promises.push(threadUpdate.then(() => { }).catch((err) => {
|
|
34
34
|
const msg = err instanceof Error ? err.message : String(err);
|
|
35
|
-
if (msg.includes("409")) {
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
console.error("[naiad] Failed to update thread:", err);
|
|
35
|
+
if (!msg.includes("409")) {
|
|
36
|
+
ctx.reporter.capture("thread_update_failed", err);
|
|
40
37
|
}
|
|
41
38
|
}));
|
|
42
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teardown.js","sourceRoot":"","sources":["../../src/lifecycle/teardown.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAIvC;IACC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IAC/C,MAAM,WAAW,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE5D,gEAAgE;IAChE,qEAAqE;IACrE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnE,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,WAAW,CAAC;YACrB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAoB;QAChC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACjE,
|
|
1
|
+
{"version":3,"file":"teardown.js","sourceRoot":"","sources":["../../src/lifecycle/teardown.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAIvC;IACC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IAC/C,MAAM,WAAW,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE5D,gEAAgE;IAChE,qEAAqE;IACrE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnE,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,WAAW,CAAC;YACrB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAoB;QAChC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACjE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC,CAAC;KACH,CAAC;IAEF,kEAAkE;IAClE,oEAAoE;IACpE,wDAAwD;IACxD,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG,WAAW,KAAK,QAAQ;YAC3C,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACpC,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,YAAY,IAAI,uBAAuB,QAAQ,EAAE;gBACxD,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC;YACJ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAEzF,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YAC/D,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;YACpD,CAAC;QACH,CAAC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE5B,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -4,6 +4,7 @@ import type { EventSpool } from "../sync/events.js";
|
|
|
4
4
|
import type { SessionUploader } from "../sync/session-upload.js";
|
|
5
5
|
import type { HeartbeatReporter } from "../sync/heartbeat.js";
|
|
6
6
|
import type { CheckpointUploader } from "../sync/checkpoint.js";
|
|
7
|
+
import type { Reporter } from "../reporting/reporter.js";
|
|
7
8
|
export interface LifecycleContext {
|
|
8
9
|
config: NaiadConfig;
|
|
9
10
|
client: APIClient;
|
|
@@ -27,6 +28,7 @@ export interface LifecycleContext {
|
|
|
27
28
|
seerReasoningEffort?: string;
|
|
28
29
|
remoteControlEnabled?: boolean;
|
|
29
30
|
attempt?: number;
|
|
31
|
+
reporter: Reporter;
|
|
30
32
|
}
|
|
31
33
|
export interface Workers {
|
|
32
34
|
eventSpool: EventSpool;
|
|
@@ -3,13 +3,13 @@ import { SessionUploader } from "../sync/session-upload.js";
|
|
|
3
3
|
import { HeartbeatReporter } from "../sync/heartbeat.js";
|
|
4
4
|
import { CheckpointUploader } from "../sync/checkpoint.js";
|
|
5
5
|
export function startWorkers(ctx) {
|
|
6
|
-
const eventSpool = new EventSpool(ctx.client, ctx.threadId, ctx.sessionId, ctx.attempt ?? 1);
|
|
6
|
+
const eventSpool = new EventSpool(ctx.client, ctx.threadId, ctx.sessionId, ctx.attempt ?? 1, ctx.reporter);
|
|
7
7
|
eventSpool.start();
|
|
8
8
|
const uploader = new SessionUploader(ctx.client, ctx.sessionId, ctx.sessionDir);
|
|
9
9
|
uploader.start();
|
|
10
10
|
const heartbeat = new HeartbeatReporter(ctx.client, ctx.agentId, ctx.threadId, ctx.sessionId, ctx.attempt ?? 1);
|
|
11
11
|
heartbeat.start();
|
|
12
|
-
const checkpoint = new CheckpointUploader(ctx.client, ctx.sessionId, ctx.sessionDir, ctx.attempt ?? 1);
|
|
12
|
+
const checkpoint = new CheckpointUploader(ctx.client, ctx.sessionId, ctx.sessionDir, ctx.attempt ?? 1, ctx.reporter);
|
|
13
13
|
return {
|
|
14
14
|
eventSpool,
|
|
15
15
|
uploader,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workers.js","sourceRoot":"","sources":["../../src/lifecycle/workers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,MAAM,UAAU,YAAY,CAAC,GAAqB;IAChD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"workers.js","sourceRoot":"","sources":["../../src/lifecycle/workers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,MAAM,UAAU,YAAY,CAAC,GAAqB;IAChD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3G,UAAU,CAAC,KAAK,EAAE,CAAC;IAEnB,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAChF,QAAQ,CAAC,KAAK,EAAE,CAAC;IAEjB,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IAChH,SAAS,CAAC,KAAK,EAAE,CAAC;IAElB,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAErH,OAAO;QACL,UAAU;QACV,QAAQ;QACR,SAAS;QACT,UAAU;QACV,KAAK,CAAC,IAAI;YACR,SAAS,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,UAAU,CAAC,WAAW,EAAE;gBACxB,UAAU,CAAC,IAAI,EAAE;gBACjB,QAAQ,CAAC,IAAI,EAAE;aAChB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type UiLevel = "info" | "warning" | "error";
|
|
2
|
+
export interface Reporter {
|
|
3
|
+
progress(msg: string): void;
|
|
4
|
+
notify(level: UiLevel, message: string): void;
|
|
5
|
+
setStatus(key: string, text: string | undefined): void;
|
|
6
|
+
capture(code: string, err: unknown, meta?: Record<string, unknown>): void;
|
|
7
|
+
}
|
|
8
|
+
export interface UiCommand {
|
|
9
|
+
id: number;
|
|
10
|
+
type: "notify" | "status";
|
|
11
|
+
level?: UiLevel;
|
|
12
|
+
message?: string;
|
|
13
|
+
key?: string;
|
|
14
|
+
text?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface UiCommandQueue {
|
|
17
|
+
enqueue(cmd: Omit<UiCommand, "id">): void;
|
|
18
|
+
drain(cursor: number): UiCommand[];
|
|
19
|
+
}
|
|
20
|
+
export declare function createUiCommandQueue(): UiCommandQueue;
|
|
21
|
+
export declare class StderrReporter implements Reporter {
|
|
22
|
+
private logPath;
|
|
23
|
+
constructor(logPath?: string);
|
|
24
|
+
setLogPath(path: string): void;
|
|
25
|
+
progress(msg: string): void;
|
|
26
|
+
notify(_level: UiLevel, message: string): void;
|
|
27
|
+
setStatus(_key: string, _text: string | undefined): void;
|
|
28
|
+
capture(code: string, err: unknown, meta?: Record<string, unknown>): void;
|
|
29
|
+
}
|
|
30
|
+
export declare class InteractiveReporter implements Reporter {
|
|
31
|
+
private logPath;
|
|
32
|
+
private queue;
|
|
33
|
+
constructor(queue: UiCommandQueue, logPath?: string);
|
|
34
|
+
progress(_msg: string): void;
|
|
35
|
+
notify(level: UiLevel, message: string): void;
|
|
36
|
+
setStatus(key: string, text: string | undefined): void;
|
|
37
|
+
capture(code: string, err: unknown, meta?: Record<string, unknown>): void;
|
|
38
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { appendFileSync } from "fs";
|
|
2
|
+
export function createUiCommandQueue() {
|
|
3
|
+
let commands = [];
|
|
4
|
+
let nextId = 1;
|
|
5
|
+
return {
|
|
6
|
+
enqueue(cmd) {
|
|
7
|
+
if (cmd.type === "status" && cmd.key) {
|
|
8
|
+
// Coalesce: replace existing status for the same key
|
|
9
|
+
commands = commands.filter((c) => !(c.type === "status" && c.key === cmd.key));
|
|
10
|
+
}
|
|
11
|
+
commands.push({ id: nextId++, ...cmd });
|
|
12
|
+
},
|
|
13
|
+
drain(cursor) {
|
|
14
|
+
const result = commands.filter((c) => c.id > cursor);
|
|
15
|
+
// Prune consumed commands
|
|
16
|
+
commands = commands.filter((c) => c.id > cursor);
|
|
17
|
+
return result;
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function extractError(err) {
|
|
22
|
+
if (err instanceof Error) {
|
|
23
|
+
return { message: err.message, stack: err.stack };
|
|
24
|
+
}
|
|
25
|
+
if (typeof err === "string") {
|
|
26
|
+
return { message: err };
|
|
27
|
+
}
|
|
28
|
+
return { message: String(err) };
|
|
29
|
+
}
|
|
30
|
+
function writeDiagnostic(logPath, code, err, meta) {
|
|
31
|
+
if (!logPath)
|
|
32
|
+
return;
|
|
33
|
+
const { message, stack } = extractError(err);
|
|
34
|
+
const entry = JSON.stringify({
|
|
35
|
+
ts: new Date().toISOString(),
|
|
36
|
+
code,
|
|
37
|
+
message,
|
|
38
|
+
stack,
|
|
39
|
+
meta,
|
|
40
|
+
});
|
|
41
|
+
try {
|
|
42
|
+
appendFileSync(logPath, entry + "\n");
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Best effort — don't crash if diagnostics log is unwritable
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export class StderrReporter {
|
|
49
|
+
logPath;
|
|
50
|
+
constructor(logPath) {
|
|
51
|
+
this.logPath = logPath;
|
|
52
|
+
}
|
|
53
|
+
setLogPath(path) {
|
|
54
|
+
this.logPath = path;
|
|
55
|
+
}
|
|
56
|
+
progress(msg) {
|
|
57
|
+
console.error(msg);
|
|
58
|
+
}
|
|
59
|
+
notify(_level, message) {
|
|
60
|
+
console.error(message);
|
|
61
|
+
}
|
|
62
|
+
setStatus(_key, _text) {
|
|
63
|
+
// no-op in headless mode
|
|
64
|
+
}
|
|
65
|
+
capture(code, err, meta) {
|
|
66
|
+
writeDiagnostic(this.logPath, code, err, meta);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export class InteractiveReporter {
|
|
70
|
+
logPath;
|
|
71
|
+
queue;
|
|
72
|
+
constructor(queue, logPath) {
|
|
73
|
+
this.queue = queue;
|
|
74
|
+
this.logPath = logPath;
|
|
75
|
+
}
|
|
76
|
+
progress(_msg) {
|
|
77
|
+
// no-op — TUI shows its own progress
|
|
78
|
+
}
|
|
79
|
+
notify(level, message) {
|
|
80
|
+
this.queue.enqueue({ type: "notify", level, message });
|
|
81
|
+
}
|
|
82
|
+
setStatus(key, text) {
|
|
83
|
+
this.queue.enqueue({ type: "status", key, text });
|
|
84
|
+
}
|
|
85
|
+
capture(code, err, meta) {
|
|
86
|
+
writeDiagnostic(this.logPath, code, err, meta);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/reporting/reporter.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
|
export interface CheckpointMessage {
|
|
3
4
|
base_sha: string;
|
|
4
5
|
head_sha: string;
|
|
@@ -17,7 +18,9 @@ export declare class CheckpointUploader {
|
|
|
17
18
|
private attempt;
|
|
18
19
|
private lastUploadAt;
|
|
19
20
|
private pendingCheckpoint;
|
|
20
|
-
|
|
21
|
+
private reporter;
|
|
22
|
+
private firstFailureNotified;
|
|
23
|
+
constructor(client: APIClient, sessionId: string, sessionDir: string, attempt: number, reporter: Reporter);
|
|
21
24
|
handleCheckpoint(msg: CheckpointMessage, forceUpload?: boolean): Promise<void>;
|
|
22
25
|
flushOnExit(): Promise<void>;
|
|
23
26
|
private uploadCheckpoint;
|