copperhead 0.8.1 → 0.9.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/README.md +9 -1
- package/dist/agent/loop.js +38 -4
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/providers/openai.js +28 -6
- package/dist/agent/providers/openai.js.map +1 -1
- package/dist/agent/response-cache.js +18 -2
- package/dist/agent/response-cache.js.map +1 -1
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/create.js +113 -9
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/doctor.js +164 -11
- package/dist/commands/doctor.js.map +1 -1
- package/dist/config.js +60 -4
- package/dist/config.js.map +1 -1
- package/dist/kicad/cli.js +7 -26
- package/dist/kicad/cli.js.map +1 -1
- package/dist/kicad/sexp.js +23 -4
- package/dist/kicad/sexp.js.map +1 -1
- package/dist/memory/bom-table.js +48 -10
- package/dist/memory/bom-table.js.map +1 -1
- package/dist/openspec/cli.js +2 -1
- package/dist/openspec/cli.js.map +1 -1
- package/dist/util/preflight.js +17 -0
- package/dist/util/preflight.js.map +1 -1
- package/dist/util/redact.js +6 -2
- package/dist/util/redact.js.map +1 -1
- package/package.json +1 -1
- package/src/agent/loop.ts +60 -4
- package/src/agent/providers/openai.ts +38 -4
- package/src/agent/response-cache.ts +17 -1
- package/src/cli.ts +2 -2
- package/src/commands/create.ts +107 -10
- package/src/commands/doctor.ts +171 -12
- package/src/config.ts +83 -2
- package/src/kicad/cli.ts +6 -19
- package/src/kicad/sexp.ts +24 -4
- package/src/memory/bom-table.ts +51 -10
- package/src/openspec/cli.ts +3 -2
- package/src/util/preflight.ts +18 -0
- package/src/util/redact.ts +6 -2
package/dist/kicad/sexp.js
CHANGED
|
@@ -194,14 +194,31 @@ function symbolsOf(sheet) {
|
|
|
194
194
|
}
|
|
195
195
|
return out;
|
|
196
196
|
}
|
|
197
|
-
|
|
197
|
+
function collectPowerSymbols(sheets) {
|
|
198
|
+
const set = new Set();
|
|
199
|
+
for (const sheet of sheets) {
|
|
200
|
+
const libs = child(sheet.root, 'lib_symbols');
|
|
201
|
+
if (!libs)
|
|
202
|
+
continue;
|
|
203
|
+
for (const sym of children(libs, 'symbol')) {
|
|
204
|
+
const name = atomAt(sym, 1);
|
|
205
|
+
const p = child(sym, 'power');
|
|
206
|
+
if (name && p !== undefined && atomAt(p, 1) !== 'no') {
|
|
207
|
+
set.add(name);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return set;
|
|
212
|
+
}
|
|
213
|
+
const isPowerSymbol = (libId, powerSyms) => libId.startsWith('power:') || powerSyms.has(libId);
|
|
198
214
|
/** One row per real component (power symbols excluded), across all sheets. */
|
|
199
215
|
export async function listSymbols(rootSch) {
|
|
200
216
|
const sheets = await loadSheets(rootSch);
|
|
217
|
+
const powerSyms = collectPowerSymbols(sheets);
|
|
201
218
|
const out = [];
|
|
202
219
|
for (const sheet of sheets) {
|
|
203
220
|
for (const { sym } of symbolsOf(sheet)) {
|
|
204
|
-
if (!isPowerSymbol(sym.libId))
|
|
221
|
+
if (!isPowerSymbol(sym.libId, powerSyms))
|
|
205
222
|
out.push(sym);
|
|
206
223
|
}
|
|
207
224
|
}
|
|
@@ -210,6 +227,7 @@ export async function listSymbols(rootSch) {
|
|
|
210
227
|
/** All net names visible via labels and power symbols, across all sheets. */
|
|
211
228
|
export async function listNets(rootSch) {
|
|
212
229
|
const sheets = await loadSheets(rootSch);
|
|
230
|
+
const powerSyms = collectPowerSymbols(sheets);
|
|
213
231
|
const names = new Set();
|
|
214
232
|
for (const sheet of sheets) {
|
|
215
233
|
for (const kind of ['label', 'global_label', 'hierarchical_label']) {
|
|
@@ -220,7 +238,7 @@ export async function listNets(rootSch) {
|
|
|
220
238
|
}
|
|
221
239
|
}
|
|
222
240
|
for (const { sym } of symbolsOf(sheet)) {
|
|
223
|
-
if (isPowerSymbol(sym.libId))
|
|
241
|
+
if (isPowerSymbol(sym.libId, powerSyms))
|
|
224
242
|
names.add(sym.value);
|
|
225
243
|
}
|
|
226
244
|
}
|
|
@@ -234,6 +252,7 @@ export async function listNets(rootSch) {
|
|
|
234
252
|
*/
|
|
235
253
|
export async function pinNets(rootSch) {
|
|
236
254
|
const sheets = await loadSheets(rootSch);
|
|
255
|
+
const powerSyms = collectPowerSymbols(sheets);
|
|
237
256
|
const out = [];
|
|
238
257
|
for (const sheet of sheets) {
|
|
239
258
|
const pinDefs = libPinDefs(sheet.root);
|
|
@@ -266,7 +285,7 @@ export async function pinNets(rootSch) {
|
|
|
266
285
|
const abs = pinAbsolute(sym.at, mirror, pin);
|
|
267
286
|
const k = key(abs.x, abs.y);
|
|
268
287
|
uf.find(k);
|
|
269
|
-
if (isPowerSymbol(sym.libId)) {
|
|
288
|
+
if (isPowerSymbol(sym.libId, powerSyms)) {
|
|
270
289
|
netNameAt.set(k, sym.value);
|
|
271
290
|
}
|
|
272
291
|
else {
|
package/dist/kicad/sexp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sexp.js","sourceRoot":"","sources":["../../src/kicad/sexp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sexp.js","sourceRoot":"","sources":["../../src/kicad/sexp.ts"],"names":[],"mappings":"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"}
|
package/dist/memory/bom-table.js
CHANGED
|
@@ -4,6 +4,23 @@
|
|
|
4
4
|
* the supplier BOM export work (add-supplier-bom-export) can parse BOM.md
|
|
5
5
|
* once, the same way, instead of duplicating this.
|
|
6
6
|
*/
|
|
7
|
+
/**
|
|
8
|
+
* Split one row into trimmed cells. The outer pipes are optional, because they
|
|
9
|
+
* are optional in GitHub-flavored markdown: `Refdes | Pin | Net` renders as a
|
|
10
|
+
* table exactly like `| Refdes | Pin | Net |` does, and a hand- or LLM-authored
|
|
11
|
+
* doc may legitimately be written either way.
|
|
12
|
+
*/
|
|
13
|
+
function splitRow(line) {
|
|
14
|
+
return line
|
|
15
|
+
.replace(/^\|/, '')
|
|
16
|
+
.replace(/\|$/, '')
|
|
17
|
+
.split('|')
|
|
18
|
+
.map((c) => c.trim());
|
|
19
|
+
}
|
|
20
|
+
/** `|---|:--:|` and friends: the row separating a header from its data. */
|
|
21
|
+
function isSeparatorRow(cells) {
|
|
22
|
+
return cells.length > 0 && cells.every((c) => /^:?-+:?$/.test(c));
|
|
23
|
+
}
|
|
7
24
|
/**
|
|
8
25
|
* Parses every markdown pipe-table row out of a document, across however
|
|
9
26
|
* many tables the file contains, skipping separator rows (e.g. `|---|---|`).
|
|
@@ -62,28 +79,49 @@ export function parseCanonicalRows(md) {
|
|
|
62
79
|
export function parseCanonicalTables(md) {
|
|
63
80
|
const groups = [];
|
|
64
81
|
let current = null;
|
|
82
|
+
let width = 0; // column count of the open group, set by its first line
|
|
65
83
|
for (const line of md.split('\n')) {
|
|
66
84
|
const t = line.trim();
|
|
67
|
-
if (!t.
|
|
85
|
+
if (!t.includes('|')) {
|
|
68
86
|
current = null; // a blank or prose line terminates the current table
|
|
69
87
|
continue;
|
|
70
88
|
}
|
|
71
|
-
const cells = t
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
89
|
+
const cells = splitRow(t);
|
|
90
|
+
// Outer pipes make a line unambiguously a table row. Without them, a
|
|
91
|
+
// pipe-bearing prose line (`Legend: A | B`) is indistinguishable from a
|
|
92
|
+
// row by shape alone, so the column count decides: matching the open
|
|
93
|
+
// table's width keeps it as a row, a mismatch ends the table there rather
|
|
94
|
+
// than reading the prose as a part/pin. The line still opens a new group,
|
|
95
|
+
// in case it is itself the header of an un-piped table.
|
|
96
|
+
if (current && !t.startsWith('|') && cells.length !== width)
|
|
97
|
+
current = null;
|
|
77
98
|
if (!current) {
|
|
78
99
|
current = [];
|
|
100
|
+
width = cells.length;
|
|
79
101
|
groups.push(current);
|
|
80
102
|
}
|
|
81
|
-
|
|
103
|
+
// The separator row stays in the group so the header can be located
|
|
104
|
+
// relative to it; it is dropped from the rows returned below.
|
|
105
|
+
current.push({ cells, separator: isSeparatorRow(cells) });
|
|
82
106
|
}
|
|
83
107
|
const tables = [];
|
|
84
108
|
for (const g of groups) {
|
|
85
|
-
|
|
86
|
-
|
|
109
|
+
// The header is the row directly above the separator. Falling back to the
|
|
110
|
+
// first row keeps a table that omits the separator working, and anchoring
|
|
111
|
+
// on the separator means a stray pipe-bearing prose line immediately above
|
|
112
|
+
// a table no longer hides it.
|
|
113
|
+
const sep = g.findIndex((l) => l.separator);
|
|
114
|
+
const headerIdx = sep > 0 ? sep - 1 : 0;
|
|
115
|
+
const header = g[headerIdx];
|
|
116
|
+
if (!header || header.separator || !isHeader({ cells: header.cells }))
|
|
117
|
+
continue;
|
|
118
|
+
tables.push({
|
|
119
|
+
header: { cells: header.cells },
|
|
120
|
+
rows: g
|
|
121
|
+
.slice(headerIdx + 1)
|
|
122
|
+
.filter((l) => !l.separator)
|
|
123
|
+
.map((l) => ({ cells: l.cells })),
|
|
124
|
+
});
|
|
87
125
|
}
|
|
88
126
|
return tables;
|
|
89
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bom-table.js","sourceRoot":"","sources":["../../src/memory/bom-table.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAU;IAC5C,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACjC,MAAM,KAAK,GAAG,CAAC;aACZ,KAAK,CAAC,GAAG,CAAC;aACV,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACxB,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS,CAAC,gBAAgB;QACtE,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;+DAC+D;AAC/D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAa,EAAW,EAAE,CACjD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAU;IAC3C,OAAO,oBAAoB,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAU;
|
|
1
|
+
{"version":3,"file":"bom-table.js","sourceRoot":"","sources":["../../src/memory/bom-table.ts"],"names":[],"mappings":"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"}
|
package/dist/openspec/cli.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
+
import { isNotFoundError } from '../util/preflight.js';
|
|
4
5
|
async function openspec(repo, args) {
|
|
5
6
|
try {
|
|
6
7
|
const { stdout, stderr } = await execa('openspec', args, { cwd: repo });
|
|
@@ -8,7 +9,7 @@ async function openspec(repo, args) {
|
|
|
8
9
|
}
|
|
9
10
|
catch (err) {
|
|
10
11
|
const e = err;
|
|
11
|
-
if (e
|
|
12
|
+
if (isNotFoundError(e)) {
|
|
12
13
|
return { ok: false, output: 'openspec CLI not found on PATH (npm i -g @fission-ai/openspec)' };
|
|
13
14
|
}
|
|
14
15
|
return { ok: false, output: [e.stdout, e.stderr].filter(Boolean).join('\n') || e.message };
|
package/dist/openspec/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/openspec/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/openspec/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAYvD,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,IAAc;IAClD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAA8F,CAAC;QACzG,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gEAAgE,EAAE,CAAC;QACjG,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IAC7F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,IAAI,WAAW,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;IAChF,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,QAAiB;IAC9D,OAAO,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,QAAgB;IAC5D,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AACxD,CAAC"}
|
package/dist/util/preflight.js
CHANGED
|
@@ -22,6 +22,23 @@ export function formatPreflightFailure(reason, why, remedy) {
|
|
|
22
22
|
const steps = remedy.map((step, i) => ` ${i + 1}. ${step}`);
|
|
23
23
|
return [reason, '', `why it failed: ${why}`, 'to fix:', ...steps].join('\n');
|
|
24
24
|
}
|
|
25
|
+
export function isNotFoundError(err) {
|
|
26
|
+
if (!err)
|
|
27
|
+
return false;
|
|
28
|
+
if (err.code === 'ENOENT')
|
|
29
|
+
return true;
|
|
30
|
+
if (process.platform === 'win32') {
|
|
31
|
+
const msg = String(err.stderr || err.message || '');
|
|
32
|
+
if (err.exitCode === 9009) {
|
|
33
|
+
return (msg.includes('is not recognized') ||
|
|
34
|
+
msg.includes('cannot find the path specified'));
|
|
35
|
+
}
|
|
36
|
+
if (err.exitCode === 1) {
|
|
37
|
+
return msg.includes('is not recognized');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
25
42
|
/** Default minimum free space to start a run: 2 GiB. A create run emits gerbers,
|
|
26
43
|
* STEP, SVG renders and KiCad local history; 2 GiB is comfortably above a
|
|
27
44
|
* single board's output while still catching a nearly-full disk. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/util/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAE5B;IACA;IACA;IAHX,YACW,MAAc,EACd,GAAW,EACX,MAAgB;QAEzB,KAAK,CAAC,sBAAsB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QAJ1C,WAAM,GAAN,MAAM,CAAQ;QACd,QAAG,GAAH,GAAG,CAAQ;QACX,WAAM,GAAN,MAAM,CAAU;QAGzB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,GAAW,EAAE,MAAgB;IAClF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,kBAAkB,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED;;qEAEqE;AACrE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7D,MAAM,GAAG,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAEhF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,YAAY,GAAG,sBAAsB;IACtF,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,YAAY;QAAE,OAAO;IAClD,MAAM,IAAI,cAAc,CACtB,wCAAwC,GAAG,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,YAAY,CAAC,YAAY,EAC7F,2JAA2J,EAC3J;QACE,+CAA+C;QAC/C,sFAAsF;QACtF,aAAa;KACd,CACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/util/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAE5B;IACA;IACA;IAHX,YACW,MAAc,EACd,GAAW,EACX,MAAgB;QAEzB,KAAK,CAAC,sBAAsB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QAJ1C,WAAM,GAAN,MAAM,CAAQ;QACd,QAAG,GAAH,GAAG,CAAQ;QACX,WAAM,GAAN,MAAM,CAAU;QAGzB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,GAAW,EAAE,MAAgB;IAClF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,kBAAkB,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAQ;IACtC,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACpD,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,CACL,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBACjC,GAAG,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAC/C,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;qEAEqE;AACrE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7D,MAAM,GAAG,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAEhF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,YAAY,GAAG,sBAAsB;IACtF,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,YAAY;QAAE,OAAO;IAClD,MAAM,IAAI,cAAc,CACtB,wCAAwC,GAAG,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,YAAY,CAAC,YAAY,EAC7F,2JAA2J,EAC3J;QACE,+CAA+C;QAC/C,sFAAsF;QACtF,aAAa;KACd,CACF,CAAC;AACJ,CAAC"}
|
package/dist/util/redact.js
CHANGED
|
@@ -5,10 +5,14 @@
|
|
|
5
5
|
*/
|
|
6
6
|
const PATTERNS = [
|
|
7
7
|
/sk-[A-Za-z0-9_-]+/g,
|
|
8
|
-
|
|
8
|
+
// Auth schemes are case-insensitive (RFC 7235 §2.1), and the token charset has
|
|
9
|
+
// to include base64's +, / and = or the match stops at the first one and the
|
|
10
|
+
// tail of the secret gets written out verbatim.
|
|
11
|
+
/Bearer\s+[A-Za-z0-9._+/=-]{16,}/gi,
|
|
9
12
|
// Registry and forge tokens: a transcript that quotes a publish command or a
|
|
10
13
|
// failing CI log can carry these just as easily as a model API key.
|
|
11
|
-
|
|
14
|
+
// npm also issues UUID-shaped tokens, so the charset allows dashes.
|
|
15
|
+
/npm_[A-Za-z0-9-]{36,}/g,
|
|
12
16
|
/gh[pousr]_[A-Za-z0-9]{36,}/g,
|
|
13
17
|
/github_pat_[A-Za-z0-9_]{22,}/g,
|
|
14
18
|
];
|
package/dist/util/redact.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/util/redact.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,QAAQ,GAAa;IACzB,oBAAoB;IACpB,+
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/util/redact.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,QAAQ,GAAa;IACzB,oBAAoB;IACpB,+EAA+E;IAC/E,6EAA6E;IAC7E,gDAAgD;IAChD,mCAAmC;IACnC,6EAA6E;IAC7E,oEAAoE;IACpE,oEAAoE;IACpE,wBAAwB;IACxB,6BAA6B;IAC7B,+BAA+B;CAChC,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,EAAE,IAAI,QAAQ;QAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IAC/D,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "copperhead",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Cursor for circuit boards: an AI agent that designs, documents, and validates real PCBs on KiCad repositories",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Animesh Chouhan <animeshchouhan@outlook.com>",
|
package/src/agent/loop.ts
CHANGED
|
@@ -7,7 +7,15 @@ import { CachingProvider } from './response-cache.js';
|
|
|
7
7
|
import { withTimeout, TurnTimeoutError } from './recovery.js';
|
|
8
8
|
import { buildSystemPrompt } from './prompts.js';
|
|
9
9
|
import { loadConstraints, reopenDeferredAffects } from '../memory/constraints.js';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
loadConfig,
|
|
12
|
+
CONFIG_DIR,
|
|
13
|
+
DEFAULT_API_KEY_ENV,
|
|
14
|
+
resolveCompatSettings,
|
|
15
|
+
isCompatModel,
|
|
16
|
+
type CompatSettings,
|
|
17
|
+
type CopperheadConfig,
|
|
18
|
+
} from '../config.js';
|
|
11
19
|
import { Transcript, type ExitPath, type RunStats } from './transcript.js';
|
|
12
20
|
import { collectRunMeta, renderCliHeader, type RunMeta, type RunMetaInput } from './runmeta.js';
|
|
13
21
|
import { plainRenderer, fmtDuration, fmtTokens, type ProgressRenderer } from './render.js';
|
|
@@ -74,7 +82,43 @@ export interface RunResult {
|
|
|
74
82
|
cacheHits: number;
|
|
75
83
|
}
|
|
76
84
|
|
|
77
|
-
export async function makeProvider(
|
|
85
|
+
export async function makeProvider(
|
|
86
|
+
model: string,
|
|
87
|
+
sessionResume = false,
|
|
88
|
+
compat?: CompatSettings | undefined,
|
|
89
|
+
): Promise<Provider> {
|
|
90
|
+
// OpenAI-compatible endpoint (Groq, OpenRouter, Gemini compat, local
|
|
91
|
+
// Ollama). An explicit `compat` prefix is the opt-in: nothing else
|
|
92
|
+
// consults baseURL, so a stray COPPERHEAD_BASE_URL cannot redirect a keyed
|
|
93
|
+
// `gpt-5` run to a third party (design D2).
|
|
94
|
+
if (isCompatModel(model)) {
|
|
95
|
+
const compatModel = model.startsWith('compat:') ? model.slice('compat:'.length) : undefined;
|
|
96
|
+
if (compatModel === '') {
|
|
97
|
+
throw new Error('compat model override cannot be empty; use "compat:<model-id>"');
|
|
98
|
+
}
|
|
99
|
+
const settings = compat ?? { apiKeyEnv: DEFAULT_API_KEY_ENV };
|
|
100
|
+
// Bare `compat` (no id) has no valid default: unlike gpt-5/claude, a
|
|
101
|
+
// compatible endpoint serves whatever models its host chooses, so there is
|
|
102
|
+
// no id that is ever correct to assume. Falling through here would build a
|
|
103
|
+
// provider that silently sends the literal string "gpt-5" (OpenAIProvider's
|
|
104
|
+
// own default) to a host that almost certainly does not serve it.
|
|
105
|
+
if (!compatModel) {
|
|
106
|
+
throw new Error(
|
|
107
|
+
settings.baseURL
|
|
108
|
+
? `compat requires a model id; use "compat:<model-id>" (endpoint ${settings.baseURL} is configured, but has no default model)`
|
|
109
|
+
: 'compat requires a model id and an endpoint; use "compat:<model-id>" and set baseURL (COPPERHEAD_BASE_URL or .copperhead/config.json)',
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
if (!settings.baseURL) {
|
|
113
|
+
throw new Error(
|
|
114
|
+
`compat:${compatModel} requires an endpoint; set baseURL (COPPERHEAD_BASE_URL or "baseURL" in .copperhead/config.json) — without one this would silently fall back to the real OpenAI API.`,
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
return new OpenAIProvider(compatModel, {
|
|
118
|
+
baseURL: settings.baseURL,
|
|
119
|
+
apiKeyEnv: settings.apiKeyEnv,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
78
122
|
if (model === 'codex' || model.startsWith('codex:')) {
|
|
79
123
|
const codexModel = model.startsWith('codex:') ? model.slice('codex:'.length) : undefined;
|
|
80
124
|
if (codexModel === '') throw new Error('codex model override cannot be empty; use "codex" or "codex:<model-id>"');
|
|
@@ -220,12 +264,24 @@ async function runWithMemory(
|
|
|
220
264
|
// it only when the env flag is set AND config.llmCache is disabled — the same
|
|
221
265
|
// condition under which we skip the CachingProvider wrap below.
|
|
222
266
|
const sessionResume = process.env.COPPERHEAD_CC_SESSION_RESUME === '1' && !config.llmCache;
|
|
223
|
-
|
|
267
|
+
const compatSettings = resolveCompatSettings(config);
|
|
268
|
+
let provider = opts.provider ?? (await makeProvider(opts.model, sessionResume, compatSettings));
|
|
224
269
|
// Cache every turn's response so a retried/restarted stage replays what it
|
|
225
270
|
// already paid for instead of re-calling the model (repo-scoped, cross-run).
|
|
226
271
|
// Skip an injected provider (tests drive scripted providers directly).
|
|
227
272
|
if (config.llmCache && !opts.provider) {
|
|
228
|
-
|
|
273
|
+
// Mirrors makeProvider's own gate above (D2/AC-3.16): COPPERHEAD_BASE_URL
|
|
274
|
+
// is consulted only for the explicit `compat:` route, so a gpt-5/claude
|
|
275
|
+
// run's cache key must not vary with a variable that run never reads —
|
|
276
|
+
// otherwise every non-compat cache entry gets orphaned each time the
|
|
277
|
+
// endpoint used for compat testing changes.
|
|
278
|
+
provider = new CachingProvider(
|
|
279
|
+
provider,
|
|
280
|
+
path.join(repoRoot, CONFIG_DIR, 'llm-cache'),
|
|
281
|
+
log,
|
|
282
|
+
opts.model,
|
|
283
|
+
isCompatModel(opts.model) ? compatSettings.baseURL : undefined,
|
|
284
|
+
);
|
|
229
285
|
}
|
|
230
286
|
providers.add(provider);
|
|
231
287
|
// Held separately from `provider` (which is reassigned on failover) so the
|
|
@@ -1,18 +1,52 @@
|
|
|
1
|
+
import { DEFAULT_API_KEY_ENV, isLocalEndpoint } from '../../config.js';
|
|
1
2
|
import type { ChatOpts, Msg, Provider, ToolSchema, Turn, ToolCall } from '../types.js';
|
|
2
3
|
|
|
4
|
+
/** Pointing the provider at an OpenAI-compatible endpoint (design D1). */
|
|
5
|
+
export interface OpenAIProviderOptions {
|
|
6
|
+
/** Endpoint base URL; omitted means the client's own default (OpenAI). */
|
|
7
|
+
baseURL?: string | undefined;
|
|
8
|
+
/** Name of the env var holding the key. Never the key itself. */
|
|
9
|
+
apiKeyEnv?: string | undefined;
|
|
10
|
+
}
|
|
11
|
+
|
|
3
12
|
export class OpenAIProvider implements Provider {
|
|
4
|
-
readonly name
|
|
13
|
+
readonly name: string;
|
|
14
|
+
private readonly apiKey: string | undefined;
|
|
15
|
+
private readonly baseURL: string | undefined;
|
|
5
16
|
|
|
6
17
|
constructor(
|
|
7
18
|
private readonly model = 'gpt-5',
|
|
8
|
-
|
|
19
|
+
opts: OpenAIProviderOptions = {},
|
|
20
|
+
env: NodeJS.ProcessEnv = process.env,
|
|
9
21
|
) {
|
|
10
|
-
|
|
22
|
+
// Credentials are always resolved through a named env var, never accepted
|
|
23
|
+
// as a literal value: the one way to supply a key keeps application code
|
|
24
|
+
// from ever holding one directly (mirrors AC-4.1 elsewhere). Tests inject
|
|
25
|
+
// fake values through the `env` argument, not through opts.
|
|
26
|
+
const keyEnv = opts.apiKeyEnv ?? DEFAULT_API_KEY_ENV;
|
|
27
|
+
this.baseURL = opts.baseURL;
|
|
28
|
+
// A compat endpoint must be structurally ineligible for the paid
|
|
29
|
+
// OpenAI/Anthropic failover in otherProvider() (loop.ts) — it is not
|
|
30
|
+
// OpenAI, and a rate limit there must never silently redirect a run the
|
|
31
|
+
// user deliberately pointed elsewhere to someone else's paid API.
|
|
32
|
+
this.name = this.baseURL ? 'openai-compat' : 'openai';
|
|
33
|
+
this.apiKey = env[keyEnv];
|
|
34
|
+
// A loopback endpoint (Ollama) serves the same API with no credential, and
|
|
35
|
+
// it is the one backend that is both free and fully local — requiring a
|
|
36
|
+
// dummy key there would be a papercut on the most useful config (D4).
|
|
37
|
+
if (!this.apiKey && !isLocalEndpoint(this.baseURL)) {
|
|
38
|
+
throw new Error(`${keyEnv} is not set`);
|
|
39
|
+
}
|
|
11
40
|
}
|
|
12
41
|
|
|
13
42
|
async chat(messages: Msg[], tools: ToolSchema[], opts: ChatOpts = {}): Promise<Turn> {
|
|
14
43
|
const { default: OpenAI } = await import('openai');
|
|
15
|
-
const client = new OpenAI({
|
|
44
|
+
const client = new OpenAI({
|
|
45
|
+
// A local endpoint may legitimately have no key, but the client still
|
|
46
|
+
// wants a non-empty string, so send a placeholder it will never check.
|
|
47
|
+
apiKey: this.apiKey ?? 'no-key-required',
|
|
48
|
+
...(this.baseURL ? { baseURL: this.baseURL } : {}),
|
|
49
|
+
});
|
|
16
50
|
const res = await client.chat.completions.create({
|
|
17
51
|
model: this.model,
|
|
18
52
|
max_completion_tokens: opts.maxTokens ?? 8192,
|
|
@@ -36,13 +36,29 @@ export class CachingProvider implements Provider {
|
|
|
36
36
|
* in the cache key so switching model on the same repo does not replay the
|
|
37
37
|
* other model's cached turns (F6). Falls back to the provider family name. */
|
|
38
38
|
private readonly modelId?: string,
|
|
39
|
+
/** The compat endpoint's base URL, if any. A model id like `compat:llama-3.1-8b-instant`
|
|
40
|
+
* is not unique across hosts (Groq, OpenRouter, etc. all serve overlapping model
|
|
41
|
+
* ids), so the endpoint must be part of the key too, or two different hosts
|
|
42
|
+
* serving "the same" model id would share cached turns. */
|
|
43
|
+
private readonly baseURL?: string,
|
|
39
44
|
) {
|
|
40
45
|
this.name = inner.name;
|
|
41
46
|
}
|
|
42
47
|
|
|
43
48
|
private keyFor(messages: Msg[], tools: ToolSchema[]): string {
|
|
44
49
|
return createHash('sha256')
|
|
45
|
-
.update(
|
|
50
|
+
.update(
|
|
51
|
+
JSON.stringify({
|
|
52
|
+
model: this.modelId ?? this.name,
|
|
53
|
+
// Omitted rather than `?? null` when unset: a non-compat run's key
|
|
54
|
+
// must stay byte-identical to what it hashed before baseURL existed
|
|
55
|
+
// (F6/D2), or every pre-existing cache entry — not just compat ones —
|
|
56
|
+
// is orphaned on the first run after upgrade.
|
|
57
|
+
...(this.baseURL ? { baseURL: this.baseURL } : {}),
|
|
58
|
+
messages,
|
|
59
|
+
tools: tools.map((t) => t.name),
|
|
60
|
+
}),
|
|
61
|
+
)
|
|
46
62
|
.digest('hex');
|
|
47
63
|
}
|
|
48
64
|
|
package/src/cli.ts
CHANGED
|
@@ -202,7 +202,7 @@ program
|
|
|
202
202
|
.command('do')
|
|
203
203
|
.description('the core loop: propose, edit, verify, propagate, commit')
|
|
204
204
|
.argument('<request>', 'the change request in natural language')
|
|
205
|
-
.option('--model <model>', 'codex | cursor | gpt-5 | claude | claude-code (or a provider-specific model id)')
|
|
205
|
+
.option('--model <model>', 'codex | cursor | gpt-5 | claude | claude-code | compat:<id> (or a provider-specific model id)')
|
|
206
206
|
.option('--max-turns <n>', 'turn budget for this run')
|
|
207
207
|
.option('--allow-dirty', 'allow a dirty tree (snapshot via git stash create)')
|
|
208
208
|
.option('--dry-run', 'propose the diff, write nothing')
|
|
@@ -327,7 +327,7 @@ program
|
|
|
327
327
|
.command('create')
|
|
328
328
|
.description('Mode A: full pipeline from a product brief to the output package')
|
|
329
329
|
.requiredOption('--brief <file>', 'product brief (markdown)')
|
|
330
|
-
.option('--model <model>', 'codex | cursor | gpt-5 | claude | claude-code (or a provider-specific model id)')
|
|
330
|
+
.option('--model <model>', 'codex | cursor | gpt-5 | claude | claude-code | compat:<id> (or a provider-specific model id)')
|
|
331
331
|
.option('--interactive', 're-enable the human gates (spec approval, pre-export)')
|
|
332
332
|
.action(async (opts: { brief: string; model?: string; interactive?: boolean }) => {
|
|
333
333
|
const repo = repoOf(program.opts());
|