claude-review-tool 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +17 -0
- package/dist/args.js +28 -0
- package/dist/args.js.map +1 -0
- package/dist/capture-schema.js +265 -0
- package/dist/capture-schema.js.map +1 -0
- package/dist/captures.js +86 -0
- package/dist/captures.js.map +1 -0
- package/dist/cli.js +137 -0
- package/dist/cli.js.map +1 -0
- package/dist/early.js +1 -0
- package/dist/errors.js +13 -0
- package/dist/errors.js.map +1 -0
- package/dist/http.js +82 -0
- package/dist/http.js.map +1 -0
- package/dist/init.js +52 -0
- package/dist/init.js.map +1 -0
- package/dist/inject.js +104 -0
- package/dist/inject.js.map +1 -0
- package/dist/intake-message.js +130 -0
- package/dist/intake-message.js.map +1 -0
- package/dist/intake.md +35 -0
- package/dist/overlay.js +215 -0
- package/dist/permissions.js +96 -0
- package/dist/permissions.js.map +1 -0
- package/dist/project.js +19 -0
- package/dist/project.js.map +1 -0
- package/dist/proxy.js +242 -0
- package/dist/proxy.js.map +1 -0
- package/dist/serve.js +114 -0
- package/dist/serve.js.map +1 -0
- package/dist/session-events.js +8 -0
- package/dist/session-events.js.map +1 -0
- package/dist/session-stub.js +232 -0
- package/dist/session-stub.js.map +1 -0
- package/dist/session.js +404 -0
- package/dist/session.js.map +1 -0
- package/dist/sessions.js +293 -0
- package/dist/sessions.js.map +1 -0
- package/dist/target.js +72 -0
- package/dist/target.js.map +1 -0
- package/dist/tasks.js +573 -0
- package/dist/tasks.js.map +1 -0
- package/package.json +51 -0
package/dist/session.js
ADDED
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Intake session on the Claude Agent SDK (PRD §5.3, F-24…F-29, N-6).
|
|
3
|
+
*
|
|
4
|
+
* This is the only module that imports `@anthropic-ai/claude-agent-sdk` (CLAUDE.md, PRD §12).
|
|
5
|
+
* It exposes one function, `startSession`, that returns a `SessionDriver` (session-events.ts);
|
|
6
|
+
* everything above it — the registry, SSE, the panel — talks to that interface only, so the SDK
|
|
7
|
+
* surface used here stays small and swappable:
|
|
8
|
+
*
|
|
9
|
+
* query({ prompt: <async iterable of user messages>, options }) streaming input (F-25)
|
|
10
|
+
* options: cwd, sessionId, settingSources, systemPrompt preset+append, includePartialMessages,
|
|
11
|
+
* permissionMode 'default', canUseTool, mcpServers (one in-process tool: write_task)
|
|
12
|
+
* q.interrupt(), q.close()
|
|
13
|
+
*
|
|
14
|
+
* Messages consumed: system/init, stream_event (text deltas), assistant (tool_use blocks),
|
|
15
|
+
* user (tool_result blocks), result, auth_status.
|
|
16
|
+
*/
|
|
17
|
+
import { randomUUID } from "node:crypto";
|
|
18
|
+
import { relative } from "node:path";
|
|
19
|
+
import { createSdkMcpServer, query, tool, } from "@anthropic-ai/claude-agent-sdk";
|
|
20
|
+
import { z } from "zod/v4";
|
|
21
|
+
import { PERMISSION_TIMEOUT_MS } from "./permissions.js";
|
|
22
|
+
export const CRT_MCP_SERVER = "crt";
|
|
23
|
+
export const WRITE_TASK_TOOL = "write_task";
|
|
24
|
+
/** How the tool is named in canUseTool / permission rules. */
|
|
25
|
+
export const WRITE_TASK_TOOL_FULL = `mcp__${CRT_MCP_SERVER}__${WRITE_TASK_TOOL}`;
|
|
26
|
+
const STDERR_TAIL_LINES = 30;
|
|
27
|
+
/** Streaming-input source for `query()`: a queue the panel pushes user messages into. */
|
|
28
|
+
class InputQueue {
|
|
29
|
+
items = [];
|
|
30
|
+
waiters = [];
|
|
31
|
+
done = false;
|
|
32
|
+
push(message) {
|
|
33
|
+
if (this.done)
|
|
34
|
+
return;
|
|
35
|
+
this.items.push(message);
|
|
36
|
+
this.wake();
|
|
37
|
+
}
|
|
38
|
+
end() {
|
|
39
|
+
this.done = true;
|
|
40
|
+
this.wake();
|
|
41
|
+
}
|
|
42
|
+
wake() {
|
|
43
|
+
const w = this.waiters;
|
|
44
|
+
this.waiters = [];
|
|
45
|
+
for (const fn of w)
|
|
46
|
+
fn();
|
|
47
|
+
}
|
|
48
|
+
async *[Symbol.asyncIterator]() {
|
|
49
|
+
for (;;) {
|
|
50
|
+
const next = this.items.shift();
|
|
51
|
+
if (next) {
|
|
52
|
+
yield next;
|
|
53
|
+
}
|
|
54
|
+
else if (this.done) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
await new Promise((resolve) => this.waiters.push(resolve));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export function startSession(opts) {
|
|
64
|
+
const listeners = new Set();
|
|
65
|
+
const pending = new Map();
|
|
66
|
+
const input = new InputQueue();
|
|
67
|
+
const stderrTail = [];
|
|
68
|
+
const streamedMessages = new Set();
|
|
69
|
+
const log = opts.log ?? (() => undefined);
|
|
70
|
+
let state = "starting";
|
|
71
|
+
let closed = false;
|
|
72
|
+
let q = null;
|
|
73
|
+
const emit = (event) => {
|
|
74
|
+
for (const fn of listeners) {
|
|
75
|
+
try {
|
|
76
|
+
fn(event);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// a listener failing must not take the session down
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
const setState = (next, detail) => {
|
|
84
|
+
if (state === "error" || state === "ended")
|
|
85
|
+
return;
|
|
86
|
+
state = next;
|
|
87
|
+
emit(detail === undefined ? { type: "state", state: next } : { type: "state", state: next, detail });
|
|
88
|
+
};
|
|
89
|
+
const fail = (message) => {
|
|
90
|
+
if (state === "error" || state === "ended")
|
|
91
|
+
return;
|
|
92
|
+
emit({ type: "error", message });
|
|
93
|
+
state = "error";
|
|
94
|
+
emit({ type: "state", state: "error", detail: message });
|
|
95
|
+
denyAllPending("session");
|
|
96
|
+
};
|
|
97
|
+
const denyAllPending = (by) => {
|
|
98
|
+
for (const p of [...pending.values()])
|
|
99
|
+
p.settle("deny", by);
|
|
100
|
+
};
|
|
101
|
+
const canUseTool = async (toolName, toolInput, options) => {
|
|
102
|
+
const decision = opts.decide(toolName, toolInput);
|
|
103
|
+
if (decision.kind === "allow")
|
|
104
|
+
return { behavior: "allow", updatedInput: toolInput };
|
|
105
|
+
if (decision.kind === "deny")
|
|
106
|
+
return { behavior: "deny", message: decision.reason };
|
|
107
|
+
const id = randomUUID();
|
|
108
|
+
const timeoutMs = opts.permissionTimeoutMs ?? PERMISSION_TIMEOUT_MS;
|
|
109
|
+
const expiresAt = Date.now() + timeoutMs;
|
|
110
|
+
return new Promise((resolve) => {
|
|
111
|
+
const timer = setTimeout(() => settle("deny", "timeout"), timeoutMs);
|
|
112
|
+
const settle = (behavior, by) => {
|
|
113
|
+
if (!pending.delete(id))
|
|
114
|
+
return;
|
|
115
|
+
clearTimeout(timer);
|
|
116
|
+
emit({ type: "permission_resolved", id, behavior, by });
|
|
117
|
+
if (pending.size === 0 && state === "waiting")
|
|
118
|
+
setState("running");
|
|
119
|
+
const why = by === "timeout" ? "No answer in the CRT panel within 5 minutes" : by === "session" ? "The CRT session ended before this was answered" : "Denied in the CRT panel";
|
|
120
|
+
resolve(behavior === "allow" ? { behavior: "allow", updatedInput: toolInput } : { behavior: "deny", message: why });
|
|
121
|
+
};
|
|
122
|
+
pending.set(id, { settle });
|
|
123
|
+
options.signal.addEventListener("abort", () => settle("deny", "session"), { once: true });
|
|
124
|
+
emit({
|
|
125
|
+
type: "permission",
|
|
126
|
+
id,
|
|
127
|
+
toolName,
|
|
128
|
+
title: options.title ?? `Claude wants to use ${options.displayName ?? toolName}`,
|
|
129
|
+
detail: describeInput(toolName, toolInput, opts.cwd),
|
|
130
|
+
expiresAt,
|
|
131
|
+
});
|
|
132
|
+
setState("waiting");
|
|
133
|
+
});
|
|
134
|
+
};
|
|
135
|
+
const writeTask = tool(WRITE_TASK_TOOL, "Write the CRT task file for this intake (PRD F-32). The server allocates the CRT-NNNN id, moves the capture's screenshots to .crt/tasks/assets/<ID>/, renders the Evidence section from the capture, writes the file and regenerates the index. Call it once, after the developer has confirmed the definition of done. Returns the id and path.", {
|
|
136
|
+
title: z.string().min(3).describe("Short imperative title, e.g. 'Cart total excludes applied discount'"),
|
|
137
|
+
summary: z.string().min(1).describe("One paragraph: what is wrong / wanted, in plain language"),
|
|
138
|
+
context: z.string().min(1).describe("What the page showed, how to reproduce, which component renders it, where the logic lives (file:line)"),
|
|
139
|
+
evidence: z.string().optional().describe("Extra evidence beyond the screenshots and annotations the server adds automatically (optional)"),
|
|
140
|
+
ask: z.string().min(1).describe("The change requested, precisely"),
|
|
141
|
+
definitionOfDone: z.array(z.string().min(1)).min(1).describe("Checkable items, one per entry; the server renders them as - [ ] checkboxes"),
|
|
142
|
+
notes: z.string().optional().describe("Constraints, hunches, non-goals, alternatives considered"),
|
|
143
|
+
priority: z.enum(["low", "normal", "high"]).optional().describe("Default normal"),
|
|
144
|
+
tags: z.array(z.string()).optional().describe("Short lowercase tags, e.g. ['cart', 'pricing']"),
|
|
145
|
+
files: z.array(z.string()).optional().describe("Project-relative source files identified during intake"),
|
|
146
|
+
}, async (args) => {
|
|
147
|
+
try {
|
|
148
|
+
const written = await opts.writeTask(args);
|
|
149
|
+
emit({ type: "task_written", id: written.id, path: written.path });
|
|
150
|
+
log(`crt: task ${written.id} written to ${written.path}`);
|
|
151
|
+
return { content: [{ type: "text", text: `Task ${written.id} written to ${written.path}` }] };
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
return { content: [{ type: "text", text: `write_task failed: ${err.message}` }], isError: true };
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
const options = {
|
|
158
|
+
cwd: opts.cwd,
|
|
159
|
+
sessionId: opts.id,
|
|
160
|
+
settingSources: ["user", "project", "local"],
|
|
161
|
+
systemPrompt: { type: "preset", preset: "claude_code", append: opts.systemPromptAppend },
|
|
162
|
+
includePartialMessages: true,
|
|
163
|
+
permissionMode: "default",
|
|
164
|
+
canUseTool,
|
|
165
|
+
mcpServers: { [CRT_MCP_SERVER]: createSdkMcpServer({ name: CRT_MCP_SERVER, version: "1.0.0", tools: [writeTask] }) },
|
|
166
|
+
stderr: (data) => {
|
|
167
|
+
for (const line of data.split(/\r?\n/)) {
|
|
168
|
+
if (!line.trim())
|
|
169
|
+
continue;
|
|
170
|
+
stderrTail.push(line);
|
|
171
|
+
if (stderrTail.length > STDERR_TAIL_LINES)
|
|
172
|
+
stderrTail.shift();
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
const toSdkMessage = (u) => {
|
|
177
|
+
const blocks = [{ type: "text", text: u.text }];
|
|
178
|
+
for (const img of u.images ?? []) {
|
|
179
|
+
blocks.push({ type: "image", source: { type: "base64", media_type: img.mediaType, data: img.data } });
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
type: "user",
|
|
183
|
+
message: { role: "user", content: blocks },
|
|
184
|
+
parent_tool_use_id: null,
|
|
185
|
+
session_id: opts.id,
|
|
186
|
+
};
|
|
187
|
+
};
|
|
188
|
+
const handle = (msg) => {
|
|
189
|
+
switch (msg.type) {
|
|
190
|
+
case "system":
|
|
191
|
+
if (msg.subtype === "init") {
|
|
192
|
+
emit({ type: "init", sessionId: msg.session_id, model: msg.model, cwd: msg.cwd, claudeCodeVersion: msg.claude_code_version });
|
|
193
|
+
setState("running");
|
|
194
|
+
}
|
|
195
|
+
return;
|
|
196
|
+
case "stream_event":
|
|
197
|
+
handleStream(msg);
|
|
198
|
+
return;
|
|
199
|
+
case "assistant":
|
|
200
|
+
handleAssistant(msg);
|
|
201
|
+
return;
|
|
202
|
+
case "user":
|
|
203
|
+
handleToolResults(msg);
|
|
204
|
+
return;
|
|
205
|
+
case "result": {
|
|
206
|
+
const errors = msg.subtype === "success" ? (msg.is_error ? [msg.result] : []) : msg.errors.length ? msg.errors : [msg.subtype];
|
|
207
|
+
emit({ type: "result", ok: !msg.is_error, durationMs: msg.duration_ms, costUsd: msg.total_cost_usd, errors });
|
|
208
|
+
const login = errors.map(loginProblem).find(Boolean);
|
|
209
|
+
if (login)
|
|
210
|
+
fail(login);
|
|
211
|
+
else if (pending.size === 0)
|
|
212
|
+
setState("idle");
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
case "auth_status":
|
|
216
|
+
if (msg.error)
|
|
217
|
+
fail(loginProblem(msg.error) ?? `Claude Code authentication failed: ${msg.error}`);
|
|
218
|
+
return;
|
|
219
|
+
default:
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
const handleStream = (msg) => {
|
|
224
|
+
if (msg.parent_tool_use_id !== null)
|
|
225
|
+
return;
|
|
226
|
+
const ev = msg.event;
|
|
227
|
+
if (ev.type === "message_start") {
|
|
228
|
+
streamedMessages.add(ev.message.id);
|
|
229
|
+
emit({ type: "assistant_start", messageId: ev.message.id });
|
|
230
|
+
setState("running");
|
|
231
|
+
}
|
|
232
|
+
else if (ev.type === "content_block_delta" && ev.delta.type === "text_delta") {
|
|
233
|
+
emit({ type: "text", messageId: current(streamedMessages), text: ev.delta.text });
|
|
234
|
+
}
|
|
235
|
+
else if (ev.type === "message_stop") {
|
|
236
|
+
emit({ type: "assistant_end", messageId: current(streamedMessages) });
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
const handleAssistant = (msg) => {
|
|
240
|
+
if (msg.parent_tool_use_id !== null)
|
|
241
|
+
return;
|
|
242
|
+
const id = msg.message.id;
|
|
243
|
+
for (const block of msg.message.content) {
|
|
244
|
+
if (block.type === "tool_use") {
|
|
245
|
+
emit({ type: "tool_use", id: block.id, name: block.name, label: toolLabel(block.name, block.input, opts.cwd) });
|
|
246
|
+
}
|
|
247
|
+
else if (block.type === "text" && !streamedMessages.has(id) && block.text) {
|
|
248
|
+
// Partial messages were not delivered for this message; show the whole block at once.
|
|
249
|
+
emit({ type: "assistant_start", messageId: id });
|
|
250
|
+
emit({ type: "text", messageId: id, text: block.text });
|
|
251
|
+
emit({ type: "assistant_end", messageId: id });
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
const handleToolResults = (msg) => {
|
|
256
|
+
if (msg.parent_tool_use_id !== null)
|
|
257
|
+
return;
|
|
258
|
+
const content = msg.message.content;
|
|
259
|
+
if (typeof content === "string")
|
|
260
|
+
return;
|
|
261
|
+
for (const block of content) {
|
|
262
|
+
if (block.type !== "tool_result")
|
|
263
|
+
continue;
|
|
264
|
+
const text = typeof block.content === "string"
|
|
265
|
+
? block.content
|
|
266
|
+
: (block.content ?? [])
|
|
267
|
+
.map((c) => (c.type === "text" ? c.text : `[${c.type}]`))
|
|
268
|
+
.join(" ");
|
|
269
|
+
emit({ type: "tool_result", id: block.tool_use_id, isError: block.is_error === true, summary: summarize(text) });
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
const run = async () => {
|
|
273
|
+
try {
|
|
274
|
+
if (opts.first) {
|
|
275
|
+
input.push(toSdkMessage(opts.first));
|
|
276
|
+
emit({ type: "user", text: opts.first.text, images: (opts.first.images ?? []).map((i) => i.label) });
|
|
277
|
+
}
|
|
278
|
+
q = query({ prompt: input, options });
|
|
279
|
+
for await (const msg of q)
|
|
280
|
+
handle(msg);
|
|
281
|
+
setState("ended");
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
fail(describeSessionError(err, stderrTail));
|
|
285
|
+
}
|
|
286
|
+
finally {
|
|
287
|
+
denyAllPending("session");
|
|
288
|
+
state = state === "error" ? "error" : "ended";
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
// Deferred so the caller can attach onEvent() before the first message is echoed.
|
|
292
|
+
queueMicrotask(() => void run());
|
|
293
|
+
return {
|
|
294
|
+
id: opts.id,
|
|
295
|
+
send(u) {
|
|
296
|
+
if (state === "ended" || state === "error")
|
|
297
|
+
return;
|
|
298
|
+
emit({ type: "user", text: u.text, images: (u.images ?? []).map((i) => i.label) });
|
|
299
|
+
input.push(toSdkMessage(u));
|
|
300
|
+
if (state !== "starting")
|
|
301
|
+
setState("running");
|
|
302
|
+
},
|
|
303
|
+
async interrupt() {
|
|
304
|
+
try {
|
|
305
|
+
await q?.interrupt();
|
|
306
|
+
}
|
|
307
|
+
catch (err) {
|
|
308
|
+
emit({ type: "error", message: `interrupt failed: ${err.message}` });
|
|
309
|
+
}
|
|
310
|
+
},
|
|
311
|
+
respondPermission(id, behavior) {
|
|
312
|
+
const p = pending.get(id);
|
|
313
|
+
if (!p)
|
|
314
|
+
return false;
|
|
315
|
+
p.settle(behavior, "user");
|
|
316
|
+
return true;
|
|
317
|
+
},
|
|
318
|
+
close() {
|
|
319
|
+
if (closed)
|
|
320
|
+
return;
|
|
321
|
+
closed = true;
|
|
322
|
+
input.end();
|
|
323
|
+
denyAllPending("session");
|
|
324
|
+
try {
|
|
325
|
+
q?.close();
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
// already gone
|
|
329
|
+
}
|
|
330
|
+
setState("ended");
|
|
331
|
+
},
|
|
332
|
+
onEvent(fn) {
|
|
333
|
+
listeners.add(fn);
|
|
334
|
+
return () => listeners.delete(fn);
|
|
335
|
+
},
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
function current(ids) {
|
|
339
|
+
let last = "";
|
|
340
|
+
for (const id of ids)
|
|
341
|
+
last = id;
|
|
342
|
+
return last;
|
|
343
|
+
}
|
|
344
|
+
function summarize(text) {
|
|
345
|
+
const t = text.replace(/\s+/g, " ").trim();
|
|
346
|
+
return t.length > 160 ? `${t.slice(0, 157)}…` : t;
|
|
347
|
+
}
|
|
348
|
+
/** F-25: the collapsed one-liner for a tool call ("Read src/components/Cart.tsx"). */
|
|
349
|
+
export function toolLabel(name, input, cwd) {
|
|
350
|
+
const rel = (p) => (typeof p === "string" ? shortPath(p, cwd) : "");
|
|
351
|
+
switch (name) {
|
|
352
|
+
case "Read":
|
|
353
|
+
case "Write":
|
|
354
|
+
case "Edit":
|
|
355
|
+
case "MultiEdit":
|
|
356
|
+
case "NotebookEdit":
|
|
357
|
+
return `${name} ${rel(input.file_path ?? input.notebook_path)}`.trim();
|
|
358
|
+
case "Glob":
|
|
359
|
+
return `Glob ${String(input.pattern ?? "")}${input.path ? ` in ${rel(input.path)}` : ""}`;
|
|
360
|
+
case "Grep":
|
|
361
|
+
return `Grep ${JSON.stringify(String(input.pattern ?? ""))}${input.path ? ` in ${rel(input.path)}` : ""}`;
|
|
362
|
+
case "Bash":
|
|
363
|
+
return `Bash ${summarize(String(input.command ?? ""))}`;
|
|
364
|
+
case WRITE_TASK_TOOL_FULL:
|
|
365
|
+
return `Write task: ${String(input.title ?? "")}`;
|
|
366
|
+
default:
|
|
367
|
+
return name;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
/** The human-readable body of a permission card. */
|
|
371
|
+
export function describeInput(name, input, cwd) {
|
|
372
|
+
if (name === "Bash" && typeof input.command === "string")
|
|
373
|
+
return input.command;
|
|
374
|
+
const path = input.file_path ?? input.notebook_path ?? input.path;
|
|
375
|
+
if (typeof path === "string")
|
|
376
|
+
return shortPath(path, cwd);
|
|
377
|
+
const text = JSON.stringify(input);
|
|
378
|
+
return text.length > 500 ? `${text.slice(0, 497)}…` : text;
|
|
379
|
+
}
|
|
380
|
+
function shortPath(p, cwd) {
|
|
381
|
+
const r = relative(cwd, p);
|
|
382
|
+
return r && !r.startsWith("..") ? r.split("\\").join("/") : p;
|
|
383
|
+
}
|
|
384
|
+
/** N-6: the one-line message for "not logged in", or null when the text is something else. */
|
|
385
|
+
export function loginProblem(text) {
|
|
386
|
+
if (/not logged in|please run \/login|\/login\b|invalid api key|authentication[_ ]error|oauth token|401\b|unauthori[sz]ed/i.test(text)) {
|
|
387
|
+
return "not logged in to Claude Code — run `claude` in a terminal and complete /login (or set CLAUDE_CODE_OAUTH_TOKEN), then send again";
|
|
388
|
+
}
|
|
389
|
+
return null;
|
|
390
|
+
}
|
|
391
|
+
/** N-6: map an SDK/process failure to one actionable line. */
|
|
392
|
+
export function describeSessionError(err, stderrTail = []) {
|
|
393
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
394
|
+
const all = [message, ...stderrTail].join("\n");
|
|
395
|
+
if (/executable not found|native binary.*not found|ENOENT/i.test(all)) {
|
|
396
|
+
return `Claude Code binary not found — reinstall claude-review-tool (\`npm install\`) so @anthropic-ai/claude-agent-sdk-${process.platform}-${process.arch} is present (${message})`;
|
|
397
|
+
}
|
|
398
|
+
const login = loginProblem(all);
|
|
399
|
+
if (login)
|
|
400
|
+
return login;
|
|
401
|
+
const tail = stderrTail.slice(-3).join(" | ");
|
|
402
|
+
return `Claude Code session failed: ${message}${tail ? ` (${tail})` : ""}`;
|
|
403
|
+
}
|
|
404
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|