naiad-cli 0.2.39 → 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/commands/login.d.ts +1 -0
- package/dist/commands/login.js +182 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +1 -0
- package/dist/commands/logout.js +22 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/config/config.d.ts +2 -0
- package/dist/config/config.js +21 -1
- package/dist/config/config.js.map +1 -1
- package/dist/index.js +17 -5
- package/dist/index.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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function loginCommand(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { spawn } from "child_process";
|
|
2
|
+
import { platform } from "os";
|
|
3
|
+
import { readRawConfig, writeRawConfig } from "../config/config.js";
|
|
4
|
+
export async function loginCommand(args) {
|
|
5
|
+
// Parse --api-url flag
|
|
6
|
+
let flagApiUrl;
|
|
7
|
+
for (let i = 0; i < args.length; i++) {
|
|
8
|
+
if (args[i] === "--api-url" && args[i + 1]) {
|
|
9
|
+
flagApiUrl = args[++i];
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
// Resolve API URL: flag → env → config file → default
|
|
13
|
+
let apiUrl = flagApiUrl || process.env.NAIAD_API_URL;
|
|
14
|
+
if (!apiUrl) {
|
|
15
|
+
try {
|
|
16
|
+
const cfg = readRawConfig();
|
|
17
|
+
if (typeof cfg.api_url === "string" && cfg.api_url) {
|
|
18
|
+
apiUrl = cfg.api_url;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// Config may not exist yet
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (!apiUrl) {
|
|
26
|
+
apiUrl = "http://localhost:3000";
|
|
27
|
+
}
|
|
28
|
+
// Check if already logged in
|
|
29
|
+
let existingConfig;
|
|
30
|
+
try {
|
|
31
|
+
existingConfig = readRawConfig();
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
console.error("Error: ~/.naiad/config.json is corrupted. Please fix or delete it.");
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
if (existingConfig.api_key) {
|
|
38
|
+
console.log("Already logged in. Run `naiad logout` first to switch accounts.");
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// Start device flow
|
|
42
|
+
let loginResp;
|
|
43
|
+
try {
|
|
44
|
+
const res = await fetch(apiUrl + "/auth/cli/login", {
|
|
45
|
+
method: "POST",
|
|
46
|
+
headers: { "Content-Type": "application/json" },
|
|
47
|
+
});
|
|
48
|
+
if (!res.ok) {
|
|
49
|
+
let msg = "Failed to start login flow";
|
|
50
|
+
try {
|
|
51
|
+
const body = await res.json();
|
|
52
|
+
if (body.message)
|
|
53
|
+
msg = body.message;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// ignore
|
|
57
|
+
}
|
|
58
|
+
console.error(`Error: ${msg}`);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
loginResp = await res.json();
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
console.error(`Error: Failed to start login flow — ${err.message}`);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
// Open browser (fire-and-forget)
|
|
68
|
+
const openCmd = platform() === "darwin" ? "open" : "xdg-open";
|
|
69
|
+
try {
|
|
70
|
+
const child = spawn(openCmd, [loginResp.login_url], {
|
|
71
|
+
detached: true,
|
|
72
|
+
stdio: "ignore",
|
|
73
|
+
});
|
|
74
|
+
child.unref();
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// ignore — we'll show the URL
|
|
78
|
+
}
|
|
79
|
+
console.log(`Opening browser to log in...`);
|
|
80
|
+
console.log(`If the browser didn't open, visit: ${loginResp.login_url}`);
|
|
81
|
+
console.log(`\nWaiting for authorization... (code: ${loginResp.user_code})`);
|
|
82
|
+
// Poll loop
|
|
83
|
+
const intervalMs = (loginResp.poll_interval || 5) * 1000;
|
|
84
|
+
const deadline = Date.now() + loginResp.expires_in * 1000;
|
|
85
|
+
let consecutiveFailures = 0;
|
|
86
|
+
let currentInterval = intervalMs;
|
|
87
|
+
while (Date.now() < deadline) {
|
|
88
|
+
await sleep(currentInterval);
|
|
89
|
+
if (Date.now() >= deadline)
|
|
90
|
+
break;
|
|
91
|
+
let pollRes;
|
|
92
|
+
try {
|
|
93
|
+
pollRes = await fetch(apiUrl + "/auth/cli/poll", {
|
|
94
|
+
method: "POST",
|
|
95
|
+
headers: { "Content-Type": "application/json" },
|
|
96
|
+
body: JSON.stringify({ device_code: loginResp.device_code }),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
consecutiveFailures++;
|
|
101
|
+
if (consecutiveFailures >= 3) {
|
|
102
|
+
console.error("Error: Lost connection to server. Please try again.");
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
currentInterval = Math.min(currentInterval * 2, 30000);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (pollRes.status === 429) {
|
|
109
|
+
currentInterval = Math.min(currentInterval * 2, 30000);
|
|
110
|
+
consecutiveFailures = 0;
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (pollRes.status >= 500) {
|
|
114
|
+
consecutiveFailures++;
|
|
115
|
+
if (consecutiveFailures >= 3) {
|
|
116
|
+
console.error("Error: Server error. Please try again.");
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
currentInterval = Math.min(currentInterval * 2, 30000);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
let body;
|
|
123
|
+
try {
|
|
124
|
+
body = await pollRes.json();
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
consecutiveFailures++;
|
|
128
|
+
if (consecutiveFailures >= 3) {
|
|
129
|
+
console.error("Error: Unexpected server response. Please try again.");
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
currentInterval = Math.min(currentInterval * 2, 30000);
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
consecutiveFailures = 0;
|
|
136
|
+
currentInterval = intervalMs;
|
|
137
|
+
if (pollRes.status === 400 && body.code === "EXPIRED") {
|
|
138
|
+
console.error("Login expired. Please try again.");
|
|
139
|
+
process.exit(1);
|
|
140
|
+
}
|
|
141
|
+
if (!pollRes.ok && pollRes.status !== 200) {
|
|
142
|
+
console.error(`Error: ${body.message || "Unexpected error"}`);
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
if (body.status === "approved" && body.api_key) {
|
|
146
|
+
// Success — save key
|
|
147
|
+
let config;
|
|
148
|
+
try {
|
|
149
|
+
config = readRawConfig();
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
console.error("Error: ~/.naiad/config.json is corrupted. Please fix or delete it.");
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
config.api_key = body.api_key;
|
|
156
|
+
if (flagApiUrl) {
|
|
157
|
+
config.api_url = flagApiUrl;
|
|
158
|
+
}
|
|
159
|
+
writeRawConfig(config);
|
|
160
|
+
console.log("\n✓ Logged in successfully!");
|
|
161
|
+
if (process.env.NAIAD_API_KEY) {
|
|
162
|
+
console.log("Note: NAIAD_API_KEY environment variable is set and will take precedence over the stored key.");
|
|
163
|
+
}
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (body.status === "denied") {
|
|
167
|
+
console.error("Login denied.");
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
if (body.status === "used") {
|
|
171
|
+
console.error("This login session has already been used.");
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
// "pending" — continue polling
|
|
175
|
+
}
|
|
176
|
+
console.error("Login expired. Please try again.");
|
|
177
|
+
process.exit(1);
|
|
178
|
+
}
|
|
179
|
+
function sleep(ms) {
|
|
180
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function logoutCommand(): Promise<void>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { readRawConfig, writeRawConfig } from "../config/config.js";
|
|
2
|
+
export async function logoutCommand() {
|
|
3
|
+
let config;
|
|
4
|
+
try {
|
|
5
|
+
config = readRawConfig();
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
console.error("Error: ~/.naiad/config.json is corrupted. Please fix or delete it.");
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
if (!config.api_key) {
|
|
12
|
+
console.log("Not logged in.");
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
delete config.api_key;
|
|
16
|
+
writeRawConfig(config);
|
|
17
|
+
console.log("✓ Logged out");
|
|
18
|
+
if (process.env.NAIAD_API_KEY) {
|
|
19
|
+
console.log("Note: NAIAD_API_KEY environment variable is still set.");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,aAAa,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC;IACtB,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAE5B,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IACxE,CAAC;AACH,CAAC"}
|
package/dist/config/config.d.ts
CHANGED
package/dist/config/config.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { readFileSync, existsSync } from "fs";
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, renameSync } from "fs";
|
|
2
2
|
import { join } from "path";
|
|
3
3
|
import { homedir } from "os";
|
|
4
|
+
import { randomUUID } from "crypto";
|
|
4
5
|
export function loadConfig() {
|
|
5
6
|
const apiUrl = process.env.NAIAD_API_URL || loadFromFile("api_url") || "http://localhost:3000";
|
|
6
7
|
const apiKey = process.env.NAIAD_API_KEY || loadFromFile("api_key") || "";
|
|
@@ -19,4 +20,23 @@ function loadFromFile(key) {
|
|
|
19
20
|
return undefined;
|
|
20
21
|
}
|
|
21
22
|
}
|
|
23
|
+
export function readRawConfig() {
|
|
24
|
+
const configPath = join(homedir(), ".naiad", "config.json");
|
|
25
|
+
if (!existsSync(configPath))
|
|
26
|
+
return {};
|
|
27
|
+
const raw = readFileSync(configPath, "utf-8");
|
|
28
|
+
const parsed = JSON.parse(raw);
|
|
29
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
30
|
+
throw new Error("config file is not a JSON object");
|
|
31
|
+
}
|
|
32
|
+
return parsed;
|
|
33
|
+
}
|
|
34
|
+
export function writeRawConfig(data) {
|
|
35
|
+
const dir = join(homedir(), ".naiad");
|
|
36
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
37
|
+
const configPath = join(dir, "config.json");
|
|
38
|
+
const tempPath = join(dir, `.config.tmp.${randomUUID()}`);
|
|
39
|
+
writeFileSync(tempPath, JSON.stringify(data, null, 2) + "\n", { mode: 0o600 });
|
|
40
|
+
renameSync(tempPath, configPath);
|
|
41
|
+
}
|
|
22
42
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACpF,OAAO,EAAE,IAAI,EAAW,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAQpC,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,uBAAuB,CAAC;IAC/F,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAC1E,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAiC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAA6B;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IACtC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,UAAU,EAAE,EAAE,CAAC,CAAC;IAC1D,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/E,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACnC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,8 @@ import { loadConfig } from "./config/config.js";
|
|
|
6
6
|
import { execCommand } from "./commands/exec.js";
|
|
7
7
|
import { interactiveCommand } from "./commands/interactive.js";
|
|
8
8
|
import { continueCommand } from "./commands/continue.js";
|
|
9
|
+
import { loginCommand } from "./commands/login.js";
|
|
10
|
+
import { logoutCommand } from "./commands/logout.js";
|
|
9
11
|
import { findPackageRoot } from "./utils/package-root.js";
|
|
10
12
|
const args = process.argv.slice(2);
|
|
11
13
|
if (args.includes("--version") || args.includes("-v")) {
|
|
@@ -18,9 +20,11 @@ if (args.includes("--help") || args.includes("-h")) {
|
|
|
18
20
|
console.log(`naiad - Naiad 2.0 CLI
|
|
19
21
|
|
|
20
22
|
Usage:
|
|
21
|
-
naiad [
|
|
22
|
-
naiad
|
|
23
|
-
naiad
|
|
23
|
+
naiad login [--api-url <url>] Log in via browser
|
|
24
|
+
naiad logout Log out and remove stored credentials
|
|
25
|
+
naiad [options] Interactive mode (default)
|
|
26
|
+
naiad exec [options] "<prompt>" Headless mode
|
|
27
|
+
naiad continue <thread-id> Resume a thread locally
|
|
24
28
|
|
|
25
29
|
Interactive options:
|
|
26
30
|
--model <model_id> Model to use (default: first active model from server)
|
|
@@ -46,12 +50,20 @@ Environment:
|
|
|
46
50
|
NAIAD_API_KEY API key for authentication`);
|
|
47
51
|
process.exit(0);
|
|
48
52
|
}
|
|
53
|
+
const command = args[0];
|
|
54
|
+
if (command === "login") {
|
|
55
|
+
await loginCommand(args.slice(1));
|
|
56
|
+
process.exit(0);
|
|
57
|
+
}
|
|
58
|
+
if (command === "logout") {
|
|
59
|
+
await logoutCommand();
|
|
60
|
+
process.exit(0);
|
|
61
|
+
}
|
|
49
62
|
const config = loadConfig();
|
|
50
63
|
if (!config.apiKey && !config.isGHA) {
|
|
51
|
-
console.error("Error:
|
|
64
|
+
console.error("Error: Not authenticated. Run `naiad login` or set NAIAD_API_KEY.");
|
|
52
65
|
process.exit(1);
|
|
53
66
|
}
|
|
54
|
-
const command = args[0];
|
|
55
67
|
if (command === "continue") {
|
|
56
68
|
const continueArgs = args.slice(1);
|
|
57
69
|
const threadIdArg = continueArgs[0];
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAW,MAAM,MAAM,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,cAAc,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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;
|