copperhead 0.6.0 → 0.7.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/dist/agent/loop.js +118 -16
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/prompts.js +2 -1
- package/dist/agent/prompts.js.map +1 -1
- package/dist/agent/providers/claude-code.js +207 -27
- package/dist/agent/providers/claude-code.js.map +1 -1
- package/dist/agent/recovery.js +148 -0
- package/dist/agent/recovery.js.map +1 -0
- package/dist/agent/render.js +17 -2
- package/dist/agent/render.js.map +1 -1
- package/dist/agent/response-cache.js +81 -0
- package/dist/agent/response-cache.js.map +1 -0
- package/dist/agent/tools.js +61 -4
- package/dist/agent/tools.js.map +1 -1
- package/dist/agent/transcript.js.map +1 -1
- package/dist/commands/create.js +470 -35
- package/dist/commands/create.js.map +1 -1
- package/dist/config.js +19 -0
- package/dist/config.js.map +1 -1
- package/dist/kicad/bootstrap.js +166 -0
- package/dist/kicad/bootstrap.js.map +1 -0
- package/dist/kicad/spice.js +306 -0
- package/dist/kicad/spice.js.map +1 -0
- package/dist/kicad/symlib.js +228 -0
- package/dist/kicad/symlib.js.map +1 -0
- package/dist/memory/bom-table.js +193 -22
- package/dist/memory/bom-table.js.map +1 -1
- package/dist/memory/drift.js +33 -11
- package/dist/memory/drift.js.map +1 -1
- package/dist/util/git.js +37 -1
- package/dist/util/git.js.map +1 -1
- package/dist/util/preflight.js +37 -0
- package/dist/util/preflight.js.map +1 -1
- package/dist/util/retry.js +23 -0
- package/dist/util/retry.js.map +1 -1
- package/dist/util/tmp.js +119 -0
- package/dist/util/tmp.js.map +1 -0
- package/package.json +1 -1
- package/src/agent/loop.ts +136 -16
- package/src/agent/prompts.ts +2 -1
- package/src/agent/providers/claude-code.ts +207 -24
- package/src/agent/recovery.ts +162 -0
- package/src/agent/render.ts +28 -1
- package/src/agent/response-cache.ts +80 -0
- package/src/agent/tools.ts +62 -4
- package/src/agent/transcript.ts +1 -0
- package/src/agent/types.ts +17 -0
- package/src/commands/create.ts +528 -38
- package/src/config.ts +34 -0
- package/src/kicad/bootstrap.ts +181 -0
- package/src/kicad/spice.ts +399 -0
- package/src/kicad/symlib.ts +248 -0
- package/src/memory/bom-table.ts +191 -20
- package/src/memory/drift.ts +42 -11
- package/src/util/git.ts +37 -1
- package/src/util/preflight.ts +44 -0
- package/src/util/retry.ts +29 -0
- package/src/util/tmp.ts +113 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdtemp, rm } from 'node:fs/promises';
|
|
1
|
+
import { mkdtemp, rm, utimes } from 'node:fs/promises';
|
|
2
2
|
import os from 'node:os';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
/** Explicit deny list, belt-and-suspenders on top of the empty `tools` allowlist.
|
|
@@ -23,36 +23,65 @@ export class ClaudeCodeProvider {
|
|
|
23
23
|
model;
|
|
24
24
|
injectedQuery;
|
|
25
25
|
importSdk;
|
|
26
|
+
sessionResume;
|
|
26
27
|
name = 'claude-code';
|
|
27
28
|
callSeq = 0;
|
|
28
29
|
cwdPromise;
|
|
29
|
-
|
|
30
|
+
/** In-flight query aborters, so close() (called by the turn watchdog on a
|
|
31
|
+
* hung turn) can tear down the live subprocess, not just delete its cwd. */
|
|
32
|
+
inFlight = new Set();
|
|
33
|
+
/** Session-resume state (1.1). `sessionId` is the last session the SDK reported;
|
|
34
|
+
* `sentCount` is how many `messages` we have already handed it, so a resumed
|
|
35
|
+
* turn sends only the delta. Unused unless `sessionResume` is on. */
|
|
36
|
+
sessionId;
|
|
37
|
+
sentCount = 0;
|
|
38
|
+
constructor(model, injectedQuery, importSdk = (specifier) => import(specifier),
|
|
39
|
+
/**
|
|
40
|
+
* Opt-in: resume one SDK session across turns and send only new messages,
|
|
41
|
+
* instead of flattening and re-sending the entire conversation every turn
|
|
42
|
+
* (1.1). Cuts the ~quadratic history re-send that dominates long-stage cost.
|
|
43
|
+
* OFF by default and deliberately mutually exclusive with the response cache:
|
|
44
|
+
* the cache replays turns the resumed session never saw, so mixing them would
|
|
45
|
+
* desync the session. `makeProvider` enables it only when the cache is off.
|
|
46
|
+
*/
|
|
47
|
+
sessionResume = false) {
|
|
30
48
|
this.model = model;
|
|
31
49
|
this.injectedQuery = injectedQuery;
|
|
32
50
|
this.importSdk = importSdk;
|
|
51
|
+
this.sessionResume = sessionResume;
|
|
33
52
|
}
|
|
34
|
-
// `
|
|
35
|
-
// Code subprocess and exposes no per-call max-tokens knob.
|
|
36
|
-
//
|
|
37
|
-
|
|
53
|
+
// `opts.maxTokens` is intentionally ignored: the Agent SDK drives the Claude
|
|
54
|
+
// Code subprocess and exposes no per-call max-tokens knob. `opts.onStream` is
|
|
55
|
+
// honored: this provider streams, so it reports cumulative streamed-text length
|
|
56
|
+
// as blocks arrive, which the loop turns into a liveness heartbeat (5.1).
|
|
57
|
+
async chat(messages, tools, opts = {}) {
|
|
38
58
|
const query = await this.resolveQuery();
|
|
39
59
|
const system = messages
|
|
40
60
|
.filter((m) => m.role === 'system')
|
|
41
61
|
.map((m) => m.content)
|
|
42
62
|
.join('\n\n');
|
|
43
63
|
const systemPrompt = [system, renderToolProtocol(tools)].filter(Boolean).join('\n\n');
|
|
44
|
-
|
|
64
|
+
// Session-resume mode (1.1): once the SDK has given us a session id, resume it
|
|
65
|
+
// and send only the messages added since our last turn — the subprocess still
|
|
66
|
+
// holds the earlier conversation, so re-sending it would just re-bill it. The
|
|
67
|
+
// first turn (no session id yet) sends the full flattened history as usual.
|
|
68
|
+
const resume = this.sessionResume ? this.sessionId : undefined;
|
|
69
|
+
const prompt = resume ? renderDelta(messages, this.sentCount) : renderConversation(messages);
|
|
45
70
|
const catalog = new Set(tools.map((t) => t.name));
|
|
46
71
|
const cwd = await this.ensureCwd();
|
|
47
72
|
let text = null;
|
|
48
73
|
let inputTokens = 0;
|
|
49
74
|
let outputTokens = 0;
|
|
75
|
+
// One aborter per turn: close() aborts it to kill a hung subprocess.
|
|
76
|
+
const aborter = new AbortController();
|
|
77
|
+
this.inFlight.add(aborter);
|
|
50
78
|
try {
|
|
51
79
|
for await (const msg of query({
|
|
52
80
|
prompt,
|
|
53
81
|
options: {
|
|
54
82
|
systemPrompt,
|
|
55
83
|
...(this.model ? { model: this.model } : {}),
|
|
84
|
+
abortController: aborter,
|
|
56
85
|
// Layered "the SDK executes nothing" defense (D1/D5):
|
|
57
86
|
// 1. `tools: []` disables ALL built-in tools (Agent SDK 0.3.x docs:
|
|
58
87
|
// "[] (empty array) - Disable all built-in tools").
|
|
@@ -63,6 +92,7 @@ export class ClaudeCodeProvider {
|
|
|
63
92
|
// 4. The tool_use tripwire below fails the run loudly if one is
|
|
64
93
|
// emitted anyway. Any single layer failing is caught by the next.
|
|
65
94
|
tools: [],
|
|
95
|
+
...(resume ? { resume } : {}),
|
|
66
96
|
disallowedTools: DISALLOWED_BUILTINS,
|
|
67
97
|
canUseTool: async (toolName) => ({
|
|
68
98
|
behavior: 'deny',
|
|
@@ -82,6 +112,9 @@ export class ClaudeCodeProvider {
|
|
|
82
112
|
for (const block of msg.message?.content ?? []) {
|
|
83
113
|
if (block.type === 'text' && block.text) {
|
|
84
114
|
text = (text ?? '') + block.text;
|
|
115
|
+
// Report progress so the loop's heartbeat shows this turn is alive
|
|
116
|
+
// and streaming, not hung, during a multi-minute large-output turn.
|
|
117
|
+
opts.onStream?.(text.length);
|
|
85
118
|
}
|
|
86
119
|
else if (block.type === 'tool_use') {
|
|
87
120
|
// Load-bearing invariant (D1): the SDK must execute nothing, so it
|
|
@@ -100,6 +133,10 @@ export class ClaudeCodeProvider {
|
|
|
100
133
|
if (typeof msg.usage?.output_tokens === 'number')
|
|
101
134
|
outputTokens = msg.usage.output_tokens;
|
|
102
135
|
}
|
|
136
|
+
// The session id can arrive on any message (init/system/result); keep the
|
|
137
|
+
// latest so the next turn can resume it (1.1). No-op unless resume is on.
|
|
138
|
+
if (this.sessionResume && typeof msg.session_id === 'string')
|
|
139
|
+
this.sessionId = msg.session_id;
|
|
103
140
|
}
|
|
104
141
|
}
|
|
105
142
|
catch (err) {
|
|
@@ -111,12 +148,39 @@ export class ClaudeCodeProvider {
|
|
|
111
148
|
throw new Error(authHint(err.message));
|
|
112
149
|
throw err;
|
|
113
150
|
}
|
|
151
|
+
finally {
|
|
152
|
+
this.inFlight.delete(aborter);
|
|
153
|
+
}
|
|
154
|
+
// Only advance the high-water mark on a turn that completed: a thrown turn
|
|
155
|
+
// (rate limit, timeout) is retried, and must re-send the same delta so no
|
|
156
|
+
// message is lost from the resumed session (1.1).
|
|
157
|
+
if (this.sessionResume)
|
|
158
|
+
this.sentCount = messages.length;
|
|
114
159
|
const parsed = parseToolCalls(text, () => `cc-${++this.callSeq}`, catalog);
|
|
115
|
-
return {
|
|
160
|
+
return {
|
|
161
|
+
text: parsed.text,
|
|
162
|
+
toolCalls: parsed.toolCalls,
|
|
163
|
+
usage: { inputTokens, outputTokens },
|
|
164
|
+
nudge: parsed.nudge,
|
|
165
|
+
};
|
|
116
166
|
}
|
|
117
|
-
/**
|
|
118
|
-
*
|
|
167
|
+
/** Tear down in-flight work and remove the scratch cwd. Called by the turn
|
|
168
|
+
* watchdog on a hung turn (via withTimeout's onTimeout) AND once per run in a
|
|
169
|
+
* finally. Aborting first kills the `claude` subprocess a hung turn spawned —
|
|
170
|
+
* without it the process is orphaned and keeps writing to its temp cwd, which
|
|
171
|
+
* (with KiCad local history) was a source of the disk-fill halt (2.2/4.1, I8).
|
|
172
|
+
* A leftover empty dir in the OS tmpdir is harmless; the startup sweep reclaims
|
|
173
|
+
* any that a hard SIGKILL bypassed this cleanup for. */
|
|
119
174
|
async close() {
|
|
175
|
+
for (const aborter of this.inFlight) {
|
|
176
|
+
try {
|
|
177
|
+
aborter.abort();
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
// best effort: a controller that already settled throws nothing useful
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
this.inFlight.clear();
|
|
120
184
|
const pending = this.cwdPromise;
|
|
121
185
|
this.cwdPromise = undefined;
|
|
122
186
|
if (!pending)
|
|
@@ -131,10 +195,18 @@ export class ClaudeCodeProvider {
|
|
|
131
195
|
/** One isolated scratch cwd per provider instance, created once and reused
|
|
132
196
|
* across turns so a long run does not leak a temp dir per turn. Even with
|
|
133
197
|
* tools disabled this guarantees the SDK has no path into the repo (D5). */
|
|
134
|
-
ensureCwd() {
|
|
198
|
+
async ensureCwd() {
|
|
135
199
|
if (!this.cwdPromise)
|
|
136
200
|
this.cwdPromise = mkdtemp(path.join(os.tmpdir(), 'copperhead-cc-'));
|
|
137
|
-
|
|
201
|
+
const cwd = await this.cwdPromise;
|
|
202
|
+
// Keep this reused scratch dir's mtime fresh on every turn. It is the only
|
|
203
|
+
// long-lived temp dir a run holds (kicad-cli dirs are per-call), so a
|
|
204
|
+
// multi-hour run would otherwise leave it with a stale mtime and a concurrent
|
|
205
|
+
// run's startup sweep (sweepStaleTempDirs, age-gated) could delete it out from
|
|
206
|
+
// under the live process (F4). Best-effort: a touch failure is harmless.
|
|
207
|
+
const now = new Date();
|
|
208
|
+
await utimes(cwd, now, now).catch(() => { });
|
|
209
|
+
return cwd;
|
|
138
210
|
}
|
|
139
211
|
async resolveQuery() {
|
|
140
212
|
if (this.injectedQuery)
|
|
@@ -186,6 +258,34 @@ function renderToolProtocol(tools) {
|
|
|
186
258
|
}
|
|
187
259
|
return lines.join('\n');
|
|
188
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
* The prompt for a *resumed* turn (1.1): only the messages added since the last
|
|
263
|
+
* turn we sent, and only the ones the resumed session does not already hold. The
|
|
264
|
+
* subprocess already has every prior turn plus its own assistant replies, so we
|
|
265
|
+
* send just the new user nudges and tool results — that delta is what advances
|
|
266
|
+
* the conversation. Falls back to the full render (via the caller) when there is
|
|
267
|
+
* no session yet.
|
|
268
|
+
*/
|
|
269
|
+
function renderDelta(messages, from) {
|
|
270
|
+
const idToName = new Map();
|
|
271
|
+
for (const m of messages) {
|
|
272
|
+
if (m.role === 'assistant')
|
|
273
|
+
for (const call of m.toolCalls ?? [])
|
|
274
|
+
idToName.set(call.id, call.name);
|
|
275
|
+
}
|
|
276
|
+
const parts = [];
|
|
277
|
+
for (const m of messages.slice(Math.max(0, from))) {
|
|
278
|
+
if (m.role === 'user') {
|
|
279
|
+
parts.push(`[user]\n${m.content}`);
|
|
280
|
+
}
|
|
281
|
+
else if (m.role === 'tool') {
|
|
282
|
+
const name = idToName.get(m.toolCallId) ?? m.toolCallId;
|
|
283
|
+
parts.push(`[result of ${name}]\n${m.content}`);
|
|
284
|
+
}
|
|
285
|
+
// assistant/system messages are already in the resumed session — skip them.
|
|
286
|
+
}
|
|
287
|
+
return parts.join('\n\n');
|
|
288
|
+
}
|
|
189
289
|
function renderConversation(messages) {
|
|
190
290
|
const idToName = new Map();
|
|
191
291
|
const parts = [];
|
|
@@ -210,6 +310,29 @@ function renderConversation(messages) {
|
|
|
210
310
|
}
|
|
211
311
|
return parts.join('\n\n');
|
|
212
312
|
}
|
|
313
|
+
/**
|
|
314
|
+
* Detect a malformed-but-intended tool call in a turn that dispatched none
|
|
315
|
+
* (#I10). The signature is machine-recognizable: the text contains
|
|
316
|
+
* `"tool":"<name>"` naming a tool in the current catalog, yet nothing parsed.
|
|
317
|
+
* That is the exact case where the tolerant extractor's silence misleads the
|
|
318
|
+
* model — the JSON was near-miss malformed (a brace short, or the outer object
|
|
319
|
+
* split so only an inner `{args}` with no `tool` key balanced), not the tool
|
|
320
|
+
* being broken. Returns a one-line steer to re-emit it, or undefined when the
|
|
321
|
+
* absence of a call is genuine (plain prose, no tool named).
|
|
322
|
+
*/
|
|
323
|
+
function detectMalformedCall(text, catalog) {
|
|
324
|
+
const re = /"tool"\s*:\s*"([^"]+)"/g;
|
|
325
|
+
let m;
|
|
326
|
+
while ((m = re.exec(text)) !== null) {
|
|
327
|
+
const name = m[1];
|
|
328
|
+
if (catalog.has(name)) {
|
|
329
|
+
return (`A tool call for "${name}" looks malformed — it named the tool but did not parse as ` +
|
|
330
|
+
'valid JSON (likely unbalanced braces or a missing closing brace), so no call ran. ' +
|
|
331
|
+
'Re-emit it as exactly one complete JSON object: {"tool": "...", "args": { ... }}.');
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return undefined;
|
|
335
|
+
}
|
|
213
336
|
/**
|
|
214
337
|
* Extract tool-call JSON from the model's reply. Tolerant by design (D1):
|
|
215
338
|
* unparseable output is returned as plain text with no tool calls rather than
|
|
@@ -222,27 +345,84 @@ function parseToolCalls(text, nextId, catalog) {
|
|
|
222
345
|
if (!text)
|
|
223
346
|
return { text: null, toolCalls: [] };
|
|
224
347
|
const toolCalls = [];
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
348
|
+
const matched = [];
|
|
349
|
+
// Extract tool calls by scanning for complete JSON objects, NOT by matching
|
|
350
|
+
// ``` fences. A tool call's `content`/`args` can hold a full markdown doc that
|
|
351
|
+
// itself contains ``` code fences; a fence regex truncates the JSON at the
|
|
352
|
+
// first inner fence, JSON.parse fails, and the call is silently dropped (the
|
|
353
|
+
// model then assumes it wrote a file it never did). The brace scan is
|
|
354
|
+
// string-aware, so braces and backticks inside JSON string values are ignored.
|
|
355
|
+
let searchFrom = 0;
|
|
356
|
+
while (searchFrom < text.length) {
|
|
357
|
+
const braceAt = text.indexOf('{', searchFrom);
|
|
358
|
+
if (braceAt < 0)
|
|
359
|
+
break;
|
|
360
|
+
const span = scanJsonObject(text, braceAt);
|
|
361
|
+
if (!span) {
|
|
362
|
+
// Unbalanced '{' (stray brace in prose): retry from the next candidate so
|
|
363
|
+
// one bad brace can't hide a well-formed call later in the reply.
|
|
364
|
+
searchFrom = braceAt + 1;
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
const call = toToolCall(text.slice(span.start, span.end), nextId, catalog);
|
|
231
368
|
if (call) {
|
|
232
369
|
toolCalls.push(call);
|
|
233
|
-
|
|
370
|
+
matched.push([span.start, span.end]);
|
|
234
371
|
}
|
|
372
|
+
searchFrom = span.end;
|
|
235
373
|
}
|
|
236
|
-
for (const block of consumed)
|
|
237
|
-
prose = prose.replace(block, '');
|
|
238
|
-
// No fenced tool block: maybe the whole reply is a bare JSON object.
|
|
239
374
|
if (!toolCalls.length) {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
375
|
+
// No call dispatched — but did the model clearly *intend* one? A fenced
|
|
376
|
+
// ```json block that names a catalog tool yet produced zero calls is a
|
|
377
|
+
// malformed near-miss (unbalanced braces, a missing `}`, or an inner object
|
|
378
|
+
// with no `tool` key). Silently dropping it gives the model no signal, so it
|
|
379
|
+
// misreads "no result" as "this tool is broken" and can bake that false
|
|
380
|
+
// conclusion into a committed summary (#I10). Surface a nudge instead.
|
|
381
|
+
return { text: text.trim() ? text : null, toolCalls, nudge: detectMalformedCall(text, catalog) };
|
|
382
|
+
}
|
|
383
|
+
// Prose is whatever survives once the tool-call objects (and any now-empty
|
|
384
|
+
// ```json fences around them) are removed.
|
|
385
|
+
let prose = '';
|
|
386
|
+
let cursor = 0;
|
|
387
|
+
for (const [start, end] of matched) {
|
|
388
|
+
prose += text.slice(cursor, start);
|
|
389
|
+
cursor = end;
|
|
390
|
+
}
|
|
391
|
+
prose += text.slice(cursor);
|
|
392
|
+
prose = prose.replace(/```(?:json)?\s*```/gi, '').replace(/```(?:json)?\s*$/gi, '').trim();
|
|
393
|
+
return { text: prose.length ? prose : null, toolCalls };
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Find the first complete, brace-balanced JSON object at or after `from`,
|
|
397
|
+
* respecting JSON string quoting/escaping so braces or backticks inside string
|
|
398
|
+
* values do not end the scan. Returns its `[start, end)` bounds or null.
|
|
399
|
+
*/
|
|
400
|
+
function scanJsonObject(text, from) {
|
|
401
|
+
const start = text.indexOf('{', from);
|
|
402
|
+
if (start < 0)
|
|
403
|
+
return null;
|
|
404
|
+
let depth = 0;
|
|
405
|
+
let inStr = false;
|
|
406
|
+
let esc = false;
|
|
407
|
+
for (let i = start; i < text.length; i++) {
|
|
408
|
+
const ch = text[i];
|
|
409
|
+
if (inStr) {
|
|
410
|
+
if (esc)
|
|
411
|
+
esc = false;
|
|
412
|
+
else if (ch === '\\')
|
|
413
|
+
esc = true;
|
|
414
|
+
else if (ch === '"')
|
|
415
|
+
inStr = false;
|
|
416
|
+
continue;
|
|
417
|
+
}
|
|
418
|
+
if (ch === '"')
|
|
419
|
+
inStr = true;
|
|
420
|
+
else if (ch === '{')
|
|
421
|
+
depth++;
|
|
422
|
+
else if (ch === '}' && --depth === 0)
|
|
423
|
+
return { start, end: i + 1 };
|
|
243
424
|
}
|
|
244
|
-
|
|
245
|
-
return { text: trimmed.length ? trimmed : null, toolCalls };
|
|
425
|
+
return null;
|
|
246
426
|
}
|
|
247
427
|
function toToolCall(raw, nextId, catalog) {
|
|
248
428
|
if (!raw)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/agent/providers/claude-code.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/agent/providers/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
/** Thrown when a single provider turn blows past its watchdog deadline. */
|
|
5
|
+
export class TurnTimeoutError extends Error {
|
|
6
|
+
ms;
|
|
7
|
+
constructor(ms) {
|
|
8
|
+
super(`turn exceeded ${ms}ms without responding`);
|
|
9
|
+
this.ms = ms;
|
|
10
|
+
this.name = 'TurnTimeoutError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Race `fn()` against a deadline so a hung provider call cannot stall the run
|
|
15
|
+
* forever. On timeout, `onTimeout` runs (tear down the in-flight call, e.g.
|
|
16
|
+
* provider.close()) and the returned promise rejects with TurnTimeoutError; the
|
|
17
|
+
* caller decides whether to retry or fail. `ms <= 0` (or non-finite) disables the
|
|
18
|
+
* watchdog and just awaits `fn()`.
|
|
19
|
+
*/
|
|
20
|
+
export async function withTimeout(fn, ms, onTimeout) {
|
|
21
|
+
if (!Number.isFinite(ms) || ms <= 0)
|
|
22
|
+
return fn();
|
|
23
|
+
let timer;
|
|
24
|
+
const timeout = new Promise((_, reject) => {
|
|
25
|
+
timer = setTimeout(() => {
|
|
26
|
+
void Promise.resolve(onTimeout?.()).catch(() => { });
|
|
27
|
+
reject(new TurnTimeoutError(ms));
|
|
28
|
+
}, ms);
|
|
29
|
+
});
|
|
30
|
+
try {
|
|
31
|
+
return await Promise.race([fn(), timeout]);
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
if (timer)
|
|
35
|
+
clearTimeout(timer);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Extract the first brace-balanced JSON object from text, tolerating quoting and
|
|
39
|
+
* escaping, and interpret it as a StageDiagnosis. Anything unparseable is treated
|
|
40
|
+
* as "abort" so an ambiguous diagnosis never loops the pipeline forever. */
|
|
41
|
+
export function parseDiagnosis(text) {
|
|
42
|
+
if (!text)
|
|
43
|
+
return { verdict: 'abort', reason: 'no diagnosis produced' };
|
|
44
|
+
const start = text.indexOf('{');
|
|
45
|
+
if (start >= 0) {
|
|
46
|
+
let depth = 0;
|
|
47
|
+
let inStr = false;
|
|
48
|
+
let esc = false;
|
|
49
|
+
for (let i = start; i < text.length; i++) {
|
|
50
|
+
const ch = text[i];
|
|
51
|
+
if (inStr) {
|
|
52
|
+
if (esc)
|
|
53
|
+
esc = false;
|
|
54
|
+
else if (ch === '\\')
|
|
55
|
+
esc = true;
|
|
56
|
+
else if (ch === '"')
|
|
57
|
+
inStr = false;
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (ch === '"')
|
|
61
|
+
inStr = true;
|
|
62
|
+
else if (ch === '{')
|
|
63
|
+
depth++;
|
|
64
|
+
else if (ch === '}' && --depth === 0) {
|
|
65
|
+
try {
|
|
66
|
+
const o = JSON.parse(text.slice(start, i + 1));
|
|
67
|
+
const verdict = o.verdict === 'retry' ? 'retry' : 'abort';
|
|
68
|
+
return {
|
|
69
|
+
verdict,
|
|
70
|
+
reason: typeof o.reason === 'string' ? o.reason : 'no reason given',
|
|
71
|
+
...(verdict === 'retry' && typeof o.guidance === 'string' && o.guidance.trim()
|
|
72
|
+
? { guidance: o.guidance.trim() }
|
|
73
|
+
: {}),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return { verdict: 'abort', reason: 'diagnosis was not valid JSON' };
|
|
83
|
+
}
|
|
84
|
+
/** Compact, most-recent-last excerpt of a run's transcript for the diagnostician:
|
|
85
|
+
* the last assistant message and the last few tool results, truncated. */
|
|
86
|
+
export async function transcriptExcerpt(transcriptDir, maxChars = 4000) {
|
|
87
|
+
const p = path.join(transcriptDir, 'transcript.jsonl');
|
|
88
|
+
if (!existsSync(p))
|
|
89
|
+
return '(no transcript)';
|
|
90
|
+
let lines;
|
|
91
|
+
try {
|
|
92
|
+
lines = (await readFile(p, 'utf8')).trim().split('\n');
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return '(transcript unreadable)';
|
|
96
|
+
}
|
|
97
|
+
const parts = [];
|
|
98
|
+
for (const line of lines.slice(-12)) {
|
|
99
|
+
try {
|
|
100
|
+
const e = JSON.parse(line);
|
|
101
|
+
if (e.type === 'assistant' && typeof e.data?.text === 'string' && e.data.text) {
|
|
102
|
+
parts.push(`[assistant] ${e.data.text}`);
|
|
103
|
+
}
|
|
104
|
+
else if (e.type === 'tool') {
|
|
105
|
+
parts.push(`[${String(e.data?.name)}] ${String(e.data?.result ?? '').split('\n')[0]}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
/* skip */
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const joined = parts.join('\n');
|
|
113
|
+
return joined.length > maxChars ? joined.slice(joined.length - maxChars) : joined;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Ask the model whether a failed/incomplete stage is worth retrying, and if so
|
|
117
|
+
* how. Uses a fresh, tool-less provider turn (the same saved-login backend the
|
|
118
|
+
* pipeline runs on), so no extra credentials or config are needed. Any error or
|
|
119
|
+
* ambiguity resolves to "abort" — recovery must fail safe toward reporting to the
|
|
120
|
+
* human rather than looping.
|
|
121
|
+
*/
|
|
122
|
+
export async function diagnoseStageFailure(provider, input) {
|
|
123
|
+
const system = 'You are the recovery supervisor for an automated KiCad PCB-design pipeline. ' +
|
|
124
|
+
'A stage just failed or ended without meeting its completion contract. Judge whether ' +
|
|
125
|
+
'another automated attempt is likely to succeed, or whether a human should intervene. ' +
|
|
126
|
+
'Be decisive and terse.';
|
|
127
|
+
const user = `Stage: ${input.stageName}\n` +
|
|
128
|
+
`Stage goal: ${input.stageGoal}\n` +
|
|
129
|
+
`Failure: ${input.failure}\n` +
|
|
130
|
+
`This was attempt ${input.attempt} of ${input.maxAttempts}.\n\n` +
|
|
131
|
+
`Recent transcript (most recent last):\n${input.excerpt}\n\n` +
|
|
132
|
+
'Reply with ONLY a JSON object, no prose:\n' +
|
|
133
|
+
'{"verdict":"retry"|"abort","reason":"<one sentence>","guidance":"<if retry: concrete, specific instructions to prepend to the next attempt so it avoids this failure; otherwise empty>"}\n' +
|
|
134
|
+
'- "retry" if the failure looks transient or fixable with clearer instructions (a dropped or locked tool call, an empty/no-op edit, a skipped step, a timeout, a formatting slip).\n' +
|
|
135
|
+
'- "abort" if repeating the same attempt will not help and a human should look (missing inputs, a genuine dead-end, or the same failure already seen on a prior attempt).';
|
|
136
|
+
const messages = [
|
|
137
|
+
{ role: 'system', content: system },
|
|
138
|
+
{ role: 'user', content: user },
|
|
139
|
+
];
|
|
140
|
+
try {
|
|
141
|
+
const turn = await provider.chat(messages, []);
|
|
142
|
+
return { ...parseDiagnosis(turn.text), usage: turn.usage };
|
|
143
|
+
}
|
|
144
|
+
catch (e) {
|
|
145
|
+
return { verdict: 'abort', reason: `diagnosis call failed: ${e.message}` };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/agent/recovery.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/render.js
CHANGED
|
@@ -28,6 +28,8 @@ export function plainRenderer(log) {
|
|
|
28
28
|
turnStart: (turn, maxTurns, tokensIn, tokensOut) => log(turnMarker(turn, maxTurns, tokensIn, tokensOut)),
|
|
29
29
|
toolResult: (name, firstLine) => log(` [${name}] ${firstLine}`),
|
|
30
30
|
status: () => { },
|
|
31
|
+
heartbeat: ({ elapsedMs, streamedChars }) => log(` … still working — ${fmtDuration(elapsedMs)} elapsed` +
|
|
32
|
+
(streamedChars ? `, ~${fmtTokens(streamedChars)} chars streamed` : ' (no output yet)')),
|
|
31
33
|
finish: (line) => log(line),
|
|
32
34
|
};
|
|
33
35
|
}
|
|
@@ -47,6 +49,7 @@ export class InteractiveRenderer {
|
|
|
47
49
|
maxTurns = 0;
|
|
48
50
|
tokensIn = 0;
|
|
49
51
|
tokensOut = 0;
|
|
52
|
+
streamedChars = 0;
|
|
50
53
|
busy = null;
|
|
51
54
|
frame = 0;
|
|
52
55
|
timer = null;
|
|
@@ -74,8 +77,11 @@ export class InteractiveRenderer {
|
|
|
74
77
|
`${fmtTokens(this.tokensIn)} in / ${fmtTokens(this.tokensOut)} out`,
|
|
75
78
|
fmtDuration(Date.now() - this.startMs),
|
|
76
79
|
];
|
|
77
|
-
if (this.busy)
|
|
78
|
-
|
|
80
|
+
if (this.busy) {
|
|
81
|
+
// Fold streamed-output volume into the busy segment so a large turn's
|
|
82
|
+
// status line visibly grows — a hung one stays frozen (5.1).
|
|
83
|
+
parts.push(this.streamedChars ? `${this.busy} ~${fmtTokens(this.streamedChars)} ch` : this.busy);
|
|
84
|
+
}
|
|
79
85
|
const spinner = this.busy ? FRAMES[this.frame % FRAMES.length] : '·';
|
|
80
86
|
const line = `${spinner} ${parts.join(' · ')}`;
|
|
81
87
|
const width = this.out.columns ?? 80;
|
|
@@ -115,6 +121,7 @@ export class InteractiveRenderer {
|
|
|
115
121
|
this.maxTurns = maxTurns;
|
|
116
122
|
this.tokensIn = tokensIn;
|
|
117
123
|
this.tokensOut = tokensOut;
|
|
124
|
+
this.streamedChars = 0; // per-turn: reset so last turn's volume doesn't linger
|
|
118
125
|
this.ensureTimer();
|
|
119
126
|
this.redraw();
|
|
120
127
|
}
|
|
@@ -123,10 +130,18 @@ export class InteractiveRenderer {
|
|
|
123
130
|
}
|
|
124
131
|
status(text) {
|
|
125
132
|
this.busy = text;
|
|
133
|
+
if (!text)
|
|
134
|
+
this.streamedChars = 0; // turn's provider call ended
|
|
126
135
|
if (text && !this.idle)
|
|
127
136
|
this.ensureTimer();
|
|
128
137
|
this.redraw();
|
|
129
138
|
}
|
|
139
|
+
heartbeat({ streamedChars }) {
|
|
140
|
+
// The spinner timer already advances elapsed time in place; the heartbeat's
|
|
141
|
+
// job here is to fold in the latest streamed-output volume and redraw.
|
|
142
|
+
this.streamedChars = streamedChars;
|
|
143
|
+
this.redraw();
|
|
144
|
+
}
|
|
130
145
|
finish(line) {
|
|
131
146
|
if (this.statusShown)
|
|
132
147
|
this.out.write(CLEAR_LINE);
|
package/dist/agent/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/agent/render.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/agent/render.ts"],"names":[],"mappings":"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"}
|