copperhead 0.9.0 → 0.10.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/NOTICE +1 -1
- package/README.md +6 -6
- package/dist/agent/filetools.js +24 -1
- package/dist/agent/filetools.js.map +1 -1
- package/dist/agent/ledger.js +24 -0
- package/dist/agent/ledger.js.map +1 -1
- package/dist/agent/loop.js +29 -58
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/prompts.js +4 -3
- package/dist/agent/prompts.js.map +1 -1
- package/dist/agent/providers/tool-protocol.js +21 -0
- package/dist/agent/providers/tool-protocol.js.map +1 -1
- package/dist/agent/recovery.js +95 -1
- package/dist/agent/recovery.js.map +1 -1
- package/dist/agent/tools.js +185 -1
- package/dist/agent/tools.js.map +1 -1
- package/dist/agent/transcript.js +2 -0
- package/dist/agent/transcript.js.map +1 -1
- package/dist/cli.js +75 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/check.js +33 -1
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/create.js +177 -25
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/doctor.js +50 -3
- package/dist/commands/doctor.js.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/kicad/bootstrap.js +24 -3
- package/dist/kicad/bootstrap.js.map +1 -1
- package/dist/kicad/dossier.js +207 -0
- package/dist/kicad/dossier.js.map +1 -0
- package/dist/kicad/draft/draft.js +132 -0
- package/dist/kicad/draft/draft.js.map +1 -0
- package/dist/kicad/draft/engine.js +2389 -0
- package/dist/kicad/draft/engine.js.map +1 -0
- package/dist/kicad/draft/ir.js +368 -0
- package/dist/kicad/draft/ir.js.map +1 -0
- package/dist/kicad/draft/symsource.js +490 -0
- package/dist/kicad/draft/symsource.js.map +1 -0
- package/dist/kicad/emit.js +181 -0
- package/dist/kicad/emit.js.map +1 -0
- package/dist/kicad/fab.js +13 -0
- package/dist/kicad/fab.js.map +1 -1
- package/dist/kicad/legibility.js +561 -0
- package/dist/kicad/legibility.js.map +1 -0
- package/dist/kicad/score.js +261 -0
- package/dist/kicad/score.js.map +1 -0
- package/dist/kicad/sexp.js +239 -6
- package/dist/kicad/sexp.js.map +1 -1
- package/dist/kicad/symlib.js +346 -16
- package/dist/kicad/symlib.js.map +1 -1
- package/dist/memory/bom-table.js +75 -39
- package/dist/memory/bom-table.js.map +1 -1
- package/dist/memory/scaffold.js +6 -0
- package/dist/memory/scaffold.js.map +1 -1
- package/dist/util/redact.js +6 -0
- package/dist/util/redact.js.map +1 -1
- package/package.json +9 -7
- package/src/agent/filetools.ts +26 -1
- package/src/agent/ledger.ts +24 -0
- package/src/agent/loop.ts +28 -61
- package/src/agent/prompts.ts +4 -3
- package/src/agent/providers/tool-protocol.ts +22 -0
- package/src/agent/recovery.ts +94 -1
- package/src/agent/tools.ts +189 -1
- package/src/agent/transcript.ts +6 -0
- package/src/cli.ts +71 -0
- package/src/commands/check.ts +51 -1
- package/src/commands/create.ts +179 -20
- package/src/commands/doctor.ts +51 -3
- package/src/config.ts +24 -0
- package/src/kicad/bootstrap.ts +24 -3
- package/src/kicad/dossier.ts +217 -0
- package/src/kicad/draft/draft.ts +171 -0
- package/src/kicad/draft/engine.ts +2466 -0
- package/src/kicad/draft/ir.ts +416 -0
- package/src/kicad/draft/symsource.ts +535 -0
- package/src/kicad/emit.ts +236 -0
- package/src/kicad/fab.ts +15 -0
- package/src/kicad/legibility.ts +646 -0
- package/src/kicad/score.ts +323 -0
- package/src/kicad/sexp.ts +315 -6
- package/src/kicad/symlib.ts +364 -18
- package/src/memory/bom-table.ts +85 -38
- package/src/memory/scaffold.ts +6 -0
- package/src/util/redact.ts +6 -0
- package/dist/memory/synap.js +0 -152
- package/dist/memory/synap.js.map +0 -1
- package/src/memory/synap.ts +0 -217
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ir.js","sourceRoot":"","sources":["../../../src/kicad/draft/ir.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { parseSexp, children, child, isList } from '../sexp.js';
|
|
5
|
+
import { symbolSearchDirs, findLibraryFile, findSymbolAcrossLibraries, closestSymbolNames } from '../symlib.js';
|
|
6
|
+
import { EMIT_VERSION, renameSymbolBlock } from '../emit.js';
|
|
7
|
+
/**
|
|
8
|
+
* Symbol resolution for the drafting engine, with hermetic vendoring (design
|
|
9
|
+
* D4): on first use a symbol's `(symbol …)` source block is copied verbatim
|
|
10
|
+
* from the installed `.kicad_sym` into a committed project cache, and every
|
|
11
|
+
* later draft reads the vendored copy. A KiCad library upgrade therefore
|
|
12
|
+
* cannot change drafted output until the cache is deliberately refreshed;
|
|
13
|
+
* `verify_symbols` keeps comparing against the installed libraries, so genuine
|
|
14
|
+
* library drift stays visible rather than silently frozen.
|
|
15
|
+
*/
|
|
16
|
+
export const SYM_CACHE_DIR = 'sym-lib-cache';
|
|
17
|
+
/**
|
|
18
|
+
* How many `(extends …)` hops to follow before treating a library as malformed.
|
|
19
|
+
* Real libraries chain at most one or two deep (a part variant extending a
|
|
20
|
+
* generic); anything deeper is a cycle, and following it would blow the stack
|
|
21
|
+
* mid-draft with no attributable message.
|
|
22
|
+
*/
|
|
23
|
+
const MAX_EXTENDS_DEPTH = 8;
|
|
24
|
+
const atomAt = (node, idx) => {
|
|
25
|
+
const v = node?.[idx];
|
|
26
|
+
return typeof v === 'string' ? v : undefined;
|
|
27
|
+
};
|
|
28
|
+
const tag = (n) => (isList(n) && typeof n[0] === 'string' ? n[0] : null);
|
|
29
|
+
const num = (n, idx, fb = 0) => {
|
|
30
|
+
const v = atomAt(n, idx);
|
|
31
|
+
return v === undefined ? fb : parseFloat(v);
|
|
32
|
+
};
|
|
33
|
+
/** Extract the top-level `(symbol "name" …)` block from library text, verbatim. */
|
|
34
|
+
export function extractSymbolBlock(libText, name) {
|
|
35
|
+
const needle = `(symbol "${name}"`;
|
|
36
|
+
let idx = -1;
|
|
37
|
+
// match only top-level entries: preceded by newline + whitespace, depth 1
|
|
38
|
+
for (let from = 0;;) {
|
|
39
|
+
idx = libText.indexOf(needle, from);
|
|
40
|
+
if (idx === -1)
|
|
41
|
+
return null;
|
|
42
|
+
const lineStart = libText.lastIndexOf('\n', idx) + 1;
|
|
43
|
+
if (libText.slice(lineStart, idx).trim() === '')
|
|
44
|
+
break;
|
|
45
|
+
from = idx + needle.length;
|
|
46
|
+
}
|
|
47
|
+
let depth = 0;
|
|
48
|
+
let inString = false;
|
|
49
|
+
for (let i = idx; i < libText.length; i++) {
|
|
50
|
+
const c = libText[i];
|
|
51
|
+
if (inString) {
|
|
52
|
+
if (c === '\\')
|
|
53
|
+
i++;
|
|
54
|
+
else if (c === '"')
|
|
55
|
+
inString = false;
|
|
56
|
+
}
|
|
57
|
+
else if (c === '"')
|
|
58
|
+
inString = true;
|
|
59
|
+
else if (c === '(')
|
|
60
|
+
depth++;
|
|
61
|
+
else if (c === ')') {
|
|
62
|
+
depth--;
|
|
63
|
+
if (depth === 0)
|
|
64
|
+
return libText.slice(idx, i + 1);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
/** Highest unit number among a block's `Name_<unit>_<style>` children. */
|
|
70
|
+
function maxUnitOf(sym) {
|
|
71
|
+
let max = 0;
|
|
72
|
+
for (const c of children(sym, 'symbol')) {
|
|
73
|
+
const name = atomAt(c, 1);
|
|
74
|
+
const m = name ? /_(\d+)_(\d+)$/.exec(name) : null;
|
|
75
|
+
if (m)
|
|
76
|
+
max = Math.max(max, Number(m[1]));
|
|
77
|
+
}
|
|
78
|
+
return max;
|
|
79
|
+
}
|
|
80
|
+
const mergeBounds = (a, b) => {
|
|
81
|
+
if (!a)
|
|
82
|
+
return b ? { ...b } : null;
|
|
83
|
+
if (!b)
|
|
84
|
+
return { ...a };
|
|
85
|
+
return {
|
|
86
|
+
minX: Math.min(a.minX, b.minX),
|
|
87
|
+
minY: Math.min(a.minY, b.minY),
|
|
88
|
+
maxX: Math.max(a.maxX, b.maxX),
|
|
89
|
+
maxY: Math.max(a.maxY, b.maxY),
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Per-unit views of a multi-unit block. Each unit's pins and body come from
|
|
94
|
+
* its own `_<unit>_<style>` children; the common `_0_*` graphics are merged
|
|
95
|
+
* into every unit's body because KiCad draws them on every unit. Only body
|
|
96
|
+
* styles 0 and 1 contribute — style ≥ 2 is the de Morgan alternate, which
|
|
97
|
+
* repeats the same pins at other coordinates and would double them.
|
|
98
|
+
*/
|
|
99
|
+
function unitViewsOf(sym) {
|
|
100
|
+
const byUnit = new Map();
|
|
101
|
+
for (const c of children(sym, 'symbol')) {
|
|
102
|
+
const name = atomAt(c, 1);
|
|
103
|
+
const m = name ? /_(\d+)_(\d+)$/.exec(name) : null;
|
|
104
|
+
if (!m || Number(m[2]) >= 2)
|
|
105
|
+
continue;
|
|
106
|
+
const u = Number(m[1]);
|
|
107
|
+
byUnit.set(u, [...(byUnit.get(u) ?? []), c]);
|
|
108
|
+
}
|
|
109
|
+
const common = byUnit.get(0) ?? [];
|
|
110
|
+
const commonPins = common.flatMap((c) => pinsOf(c));
|
|
111
|
+
const commonUnitPins = commonPins.map((p) => p.number);
|
|
112
|
+
const commonBody = common.reduce((b, c) => mergeBounds(b, bodyOf(c)), null);
|
|
113
|
+
const units = [...byUnit.keys()]
|
|
114
|
+
.filter((u) => u >= 1)
|
|
115
|
+
.sort((a, b) => a - b)
|
|
116
|
+
.map((u) => ({
|
|
117
|
+
unit: u,
|
|
118
|
+
pins: [...byUnit.get(u).flatMap((n) => pinsOf(n)), ...commonPins],
|
|
119
|
+
body: byUnit.get(u).reduce((b, n) => mergeBounds(b, bodyOf(n)), commonBody),
|
|
120
|
+
}));
|
|
121
|
+
return { units, commonUnitPins };
|
|
122
|
+
}
|
|
123
|
+
function parseSymbolNode(block) {
|
|
124
|
+
const node = parseSexp(block)[0];
|
|
125
|
+
if (node === undefined || !isList(node))
|
|
126
|
+
throw new Error('unparseable symbol block');
|
|
127
|
+
return node;
|
|
128
|
+
}
|
|
129
|
+
function pinsOf(sym) {
|
|
130
|
+
const pins = [];
|
|
131
|
+
const walk = (n) => {
|
|
132
|
+
if (!isList(n))
|
|
133
|
+
return;
|
|
134
|
+
if (tag(n) === 'pin') {
|
|
135
|
+
const at = child(n, 'at');
|
|
136
|
+
const numAtom = atomAt(child(n, 'number'), 1);
|
|
137
|
+
if (at && numAtom !== undefined) {
|
|
138
|
+
pins.push({
|
|
139
|
+
number: numAtom,
|
|
140
|
+
name: atomAt(child(n, 'name'), 1) ?? '~',
|
|
141
|
+
etype: typeof n[1] === 'string' ? n[1] : 'passive',
|
|
142
|
+
x: num(at, 1),
|
|
143
|
+
y: num(at, 2),
|
|
144
|
+
angle: num(at, 3),
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
for (const c of n)
|
|
149
|
+
walk(c);
|
|
150
|
+
};
|
|
151
|
+
walk(sym);
|
|
152
|
+
return pins;
|
|
153
|
+
}
|
|
154
|
+
function bodyOf(sym) {
|
|
155
|
+
let b = null;
|
|
156
|
+
const extend = (x, y) => {
|
|
157
|
+
if (!b)
|
|
158
|
+
b = { minX: x, minY: y, maxX: x, maxY: y };
|
|
159
|
+
else {
|
|
160
|
+
b.minX = Math.min(b.minX, x);
|
|
161
|
+
b.minY = Math.min(b.minY, y);
|
|
162
|
+
b.maxX = Math.max(b.maxX, x);
|
|
163
|
+
b.maxY = Math.max(b.maxY, y);
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
const walk = (n) => {
|
|
167
|
+
if (!isList(n))
|
|
168
|
+
return;
|
|
169
|
+
const t = tag(n);
|
|
170
|
+
if (t === 'rectangle') {
|
|
171
|
+
const s = child(n, 'start');
|
|
172
|
+
const e = child(n, 'end');
|
|
173
|
+
extend(num(s, 1), num(s, 2));
|
|
174
|
+
extend(num(e, 1), num(e, 2));
|
|
175
|
+
}
|
|
176
|
+
else if (t === 'circle') {
|
|
177
|
+
const c = child(n, 'center');
|
|
178
|
+
const r = num(child(n, 'radius'), 1);
|
|
179
|
+
extend(num(c, 1) - r, num(c, 2) - r);
|
|
180
|
+
extend(num(c, 1) + r, num(c, 2) + r);
|
|
181
|
+
}
|
|
182
|
+
else if (t === 'arc') {
|
|
183
|
+
for (const part of ['start', 'mid', 'end']) {
|
|
184
|
+
const p = child(n, part);
|
|
185
|
+
if (p)
|
|
186
|
+
extend(num(p, 1), num(p, 2));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else if (t === 'polyline') {
|
|
190
|
+
for (const xy of children(child(n, 'pts') ?? [], 'xy'))
|
|
191
|
+
extend(num(xy, 1), num(xy, 2));
|
|
192
|
+
}
|
|
193
|
+
if (t !== 'pin' && t !== 'text')
|
|
194
|
+
for (const c of n)
|
|
195
|
+
walk(c);
|
|
196
|
+
};
|
|
197
|
+
walk(sym);
|
|
198
|
+
return b;
|
|
199
|
+
}
|
|
200
|
+
/** One vendored file per library nickname, so a project `sym-lib-table` can
|
|
201
|
+
* point KiCad (and ERC's lib_symbol_issues check) at the vendored sources. */
|
|
202
|
+
const vendorFileName = (lib) => `${lib.replace(/[^A-Za-z0-9_.+-]/g, '_')}.kicad_sym`;
|
|
203
|
+
const emptyVendorLib = () => `(kicad_symbol_lib\n\t(version ${EMIT_VERSION})\n\t(generator "copperhead-vendor")\n)\n`;
|
|
204
|
+
/** Insert a symbol block before the wrapper's closing paren. */
|
|
205
|
+
function appendToVendorLib(libText, block) {
|
|
206
|
+
const end = libText.lastIndexOf(')');
|
|
207
|
+
return libText.slice(0, end) + block + '\n' + libText.slice(end);
|
|
208
|
+
}
|
|
209
|
+
export class SymbolResolutionError extends Error {
|
|
210
|
+
libId;
|
|
211
|
+
reason;
|
|
212
|
+
candidates;
|
|
213
|
+
constructor(libId, reason, candidates = []) {
|
|
214
|
+
super(reason === 'no-library'
|
|
215
|
+
? `library for "${libId}" is not installed and not vendored`
|
|
216
|
+
: reason === 'derived-unsupported'
|
|
217
|
+
? `"${libId}" extends a symbol that cannot be followed (missing base name, or a cycle deeper than ${MAX_EXTENDS_DEPTH} hops); use the base symbol directly`
|
|
218
|
+
: reason === 'found-elsewhere'
|
|
219
|
+
? candidates.length && candidates.every((c) => c.startsWith(`${libId.includes(':') ? libId.slice(0, libId.indexOf(':')) : ''}:`))
|
|
220
|
+
? `"${libId}" does not exist in that library, closest real name: ${candidates.join(' or ')} — the library was right, use the real symbol name`
|
|
221
|
+
: `"${libId}" is wrong about the library, not the part: use ${candidates.join(' or ')} instead`
|
|
222
|
+
: `"${libId}" does not exist in the library${candidates.length ? ` — closest: ${candidates.join(', ')}` : ''}`);
|
|
223
|
+
this.libId = libId;
|
|
224
|
+
this.reason = reason;
|
|
225
|
+
this.candidates = candidates;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* A part's library file is guessed wrong more often than the part itself is
|
|
230
|
+
* misspelled (a chip's stock library nickname is not derivable from its part
|
|
231
|
+
* number). The caller consults this only after the guessed file offered no
|
|
232
|
+
* candidates of its own — same-library near-misses are stronger evidence and
|
|
233
|
+
* come first. Across the other libraries, exact name hits are returned alone
|
|
234
|
+
* when any exist; fuzzy matches are the fallback, reported under the symbol
|
|
235
|
+
* name that actually matched. Returns corrected `lib_id`s or an empty array.
|
|
236
|
+
*/
|
|
237
|
+
async function crossLibrarySuggestions(name, lib, dirs) {
|
|
238
|
+
const matches = await findSymbolAcrossLibraries(name, dirs, lib);
|
|
239
|
+
const exact = matches.filter((m) => m.exact).map((m) => `${m.lib}:${m.name}`);
|
|
240
|
+
if (exact.length)
|
|
241
|
+
return exact;
|
|
242
|
+
return matches.map((m) => `${m.lib}:${m.name}`);
|
|
243
|
+
}
|
|
244
|
+
export class SymbolSource {
|
|
245
|
+
repoRoot;
|
|
246
|
+
searchDirs;
|
|
247
|
+
vendor;
|
|
248
|
+
cache = new Map();
|
|
249
|
+
/**
|
|
250
|
+
* @param repoRoot project root; the vendored cache lives at `<root>/sym-lib-cache/`
|
|
251
|
+
* @param searchDirs override for the installed-library search path (tests)
|
|
252
|
+
* @param vendor when false, resolution never writes: symbols come from the
|
|
253
|
+
* vendored cache or the installed libraries verbatim, but nothing is copied
|
|
254
|
+
* into `sym-lib-cache/`. For read-shaped callers (`draftSchematicToText`, staleness
|
|
255
|
+
* probes) that must not mutate the working tree.
|
|
256
|
+
*/
|
|
257
|
+
constructor(repoRoot, searchDirs, vendor = true) {
|
|
258
|
+
this.repoRoot = repoRoot;
|
|
259
|
+
this.searchDirs = searchDirs;
|
|
260
|
+
this.vendor = vendor;
|
|
261
|
+
}
|
|
262
|
+
cacheDir() {
|
|
263
|
+
return path.join(this.repoRoot, SYM_CACHE_DIR);
|
|
264
|
+
}
|
|
265
|
+
/** Library nicknames vendored (or generated) so far, for the sym-lib-table. */
|
|
266
|
+
libs = new Set();
|
|
267
|
+
vendoredLibs() {
|
|
268
|
+
return [...this.libs].sort();
|
|
269
|
+
}
|
|
270
|
+
/** Write an engine-generated symbol block into the vendored cache (power lib). */
|
|
271
|
+
async vendorGenerated(libId, block) {
|
|
272
|
+
const lib = libId.slice(0, libId.indexOf(':'));
|
|
273
|
+
const name = libId.slice(libId.indexOf(':') + 1);
|
|
274
|
+
const file = path.join(this.cacheDir(), vendorFileName(lib));
|
|
275
|
+
await mkdir(this.cacheDir(), { recursive: true });
|
|
276
|
+
const text = existsSync(file) ? await readFile(file, 'utf8') : emptyVendorLib();
|
|
277
|
+
if (!extractSymbolBlock(text, name))
|
|
278
|
+
await writeFile(file, appendToVendorLib(text, block), 'utf8');
|
|
279
|
+
this.libs.add(lib);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* A derived symbol (`(extends "Base")`) carries no geometry of its own: KiCad
|
|
283
|
+
* stores the pins and body once on the base and lets the derived entry
|
|
284
|
+
* override only properties (Value, Datasheet, description). Resolving one
|
|
285
|
+
* means inheriting the base's geometry under the derived name.
|
|
286
|
+
*
|
|
287
|
+
* Returns null for a symbol that does not extend anything, so the caller
|
|
288
|
+
* falls through to the ordinary path.
|
|
289
|
+
*
|
|
290
|
+
* `sourceText` is the BASE block verbatim. The emitter renames a vendored
|
|
291
|
+
* block to its lib_id on the way into `lib_symbols`
|
|
292
|
+
* (`emit.ts:renameSymbolBlock`), so the base geometry lands under the
|
|
293
|
+
* derived name with no rewriting here. The rename covers the unit children
|
|
294
|
+
* too (`Base_0_1` becomes `Derived_0_1`): KiCad's schematic loader requires
|
|
295
|
+
* the child prefix to match the parent name, and a derived block wrapping
|
|
296
|
+
* the base's children fails to load outright — found when the first
|
|
297
|
+
* reference board with real derived symbols (AMS1117-3.3, ATmega328P-A)
|
|
298
|
+
* refused to open.
|
|
299
|
+
*
|
|
300
|
+
* The derived entry's own property overrides are dropped. Nothing downstream
|
|
301
|
+
* reads them — the engine sets Reference, Value and Footprint from the IR —
|
|
302
|
+
* and keeping them would mean merging two property lists to no effect.
|
|
303
|
+
*/
|
|
304
|
+
async inherit(libId, lib, node, depth) {
|
|
305
|
+
const ext = child(node, 'extends');
|
|
306
|
+
if (!ext)
|
|
307
|
+
return null;
|
|
308
|
+
const baseName = atomAt(ext, 1);
|
|
309
|
+
if (!baseName)
|
|
310
|
+
throw new SymbolResolutionError(libId, 'derived-unsupported');
|
|
311
|
+
// A chain is legal (a derived symbol may extend another), a cycle is not —
|
|
312
|
+
// and a malformed library that extends itself would otherwise recurse until
|
|
313
|
+
// the stack gives out, mid-draft, with no attributable message.
|
|
314
|
+
if (depth >= MAX_EXTENDS_DEPTH)
|
|
315
|
+
throw new SymbolResolutionError(libId, 'derived-unsupported');
|
|
316
|
+
const base = await this.resolve(`${lib}:${baseName}`, depth + 1);
|
|
317
|
+
return {
|
|
318
|
+
libId,
|
|
319
|
+
sourceText: base.sourceText,
|
|
320
|
+
pins: base.pins,
|
|
321
|
+
body: base.body,
|
|
322
|
+
isPower: base.isPower,
|
|
323
|
+
multiUnit: base.multiUnit,
|
|
324
|
+
units: base.units,
|
|
325
|
+
commonUnitPins: base.commonUnitPins,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
/** Resolve a lib_id: vendored copy first, else installed library (then vendor it). */
|
|
329
|
+
async resolve(libId, depth = 0) {
|
|
330
|
+
const hit = this.cache.get(libId);
|
|
331
|
+
if (hit)
|
|
332
|
+
return hit;
|
|
333
|
+
const lib = libId.includes(':') ? libId.slice(0, libId.indexOf(':')) : '';
|
|
334
|
+
const name = libId.includes(':') ? libId.slice(libId.indexOf(':') + 1) : libId;
|
|
335
|
+
const vendored = path.join(this.cacheDir(), vendorFileName(lib));
|
|
336
|
+
let block = null;
|
|
337
|
+
let fromInstalled = false;
|
|
338
|
+
if (existsSync(vendored)) {
|
|
339
|
+
block = extractSymbolBlock(await readFile(vendored, 'utf8'), name);
|
|
340
|
+
if (block)
|
|
341
|
+
this.libs.add(lib);
|
|
342
|
+
}
|
|
343
|
+
if (!block) {
|
|
344
|
+
const dirs = this.searchDirs ?? (await symbolSearchDirs());
|
|
345
|
+
const file = await findLibraryFile(lib, dirs);
|
|
346
|
+
if (!file) {
|
|
347
|
+
const elsewhere = await crossLibrarySuggestions(name, lib, dirs);
|
|
348
|
+
if (elsewhere.length)
|
|
349
|
+
throw new SymbolResolutionError(libId, 'found-elsewhere', elsewhere);
|
|
350
|
+
throw new SymbolResolutionError(libId, 'no-library');
|
|
351
|
+
}
|
|
352
|
+
const libText = await readFile(file, 'utf8');
|
|
353
|
+
block = extractSymbolBlock(libText, name);
|
|
354
|
+
if (!block) {
|
|
355
|
+
// The guessed library exists and simply lacks this name, so its own
|
|
356
|
+
// near-matches are the most useful answer and come first: the caller
|
|
357
|
+
// named the right file and mistyped the part. The scrape matches every
|
|
358
|
+
// `(symbol …)` line including indented sub-unit children;
|
|
359
|
+
// closestSymbolNames filters those out and ranks what remains, so all
|
|
360
|
+
// 8 slots carry placeable symbols. Only when that file offers nothing
|
|
361
|
+
// is a different library worth suggesting — and only an exact hit
|
|
362
|
+
// there, since a cross-library *fuzzy* guess is weaker evidence than
|
|
363
|
+
// "you were close, in the right file".
|
|
364
|
+
const names = [...libText.matchAll(/^\s*\(symbol\s+"([^"]+)"/gm)].map((m) => m[1]);
|
|
365
|
+
const candidates = closestSymbolNames(names, name);
|
|
366
|
+
if (candidates.length)
|
|
367
|
+
throw new SymbolResolutionError(libId, 'no-symbol', candidates);
|
|
368
|
+
const elsewhere = await crossLibrarySuggestions(name, lib, dirs);
|
|
369
|
+
if (elsewhere.length)
|
|
370
|
+
throw new SymbolResolutionError(libId, 'found-elsewhere', elsewhere);
|
|
371
|
+
throw new SymbolResolutionError(libId, 'no-symbol', candidates);
|
|
372
|
+
}
|
|
373
|
+
fromInstalled = true;
|
|
374
|
+
this.libs.add(lib);
|
|
375
|
+
}
|
|
376
|
+
const node = parseSymbolNode(block);
|
|
377
|
+
const inherited = await this.inherit(libId, lib, node, depth);
|
|
378
|
+
if (fromInstalled && this.vendor) {
|
|
379
|
+
// Derived symbols vendor FLATTENED under their own name, never as the
|
|
380
|
+
// library's `extends` stub. A vendored stub makes the project
|
|
381
|
+
// sym-lib-table resolve the derived name to base-geometry-plus-derived-
|
|
382
|
+
// properties while the sheet embeds base-geometry-plus-base-properties,
|
|
383
|
+
// and ERC reports lib_symbol_mismatch on every derived part. The
|
|
384
|
+
// flattened copy is byte-for-byte what the emitter embeds (modulo the
|
|
385
|
+
// lib nickname), exactly like a non-derived vendored block.
|
|
386
|
+
const vendorBlock = inherited ? renameSymbolBlock(inherited.sourceText, name) : block;
|
|
387
|
+
await mkdir(this.cacheDir(), { recursive: true });
|
|
388
|
+
const existing = existsSync(vendored) ? await readFile(vendored, 'utf8') : emptyVendorLib();
|
|
389
|
+
if (!extractSymbolBlock(existing, name)) {
|
|
390
|
+
await writeFile(vendored, appendToVendorLib(existing, vendorBlock), 'utf8');
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
const multiUnit = maxUnitOf(node) >= 2;
|
|
394
|
+
const resolved = inherited ?? {
|
|
395
|
+
libId,
|
|
396
|
+
sourceText: block,
|
|
397
|
+
pins: pinsOf(node),
|
|
398
|
+
body: bodyOf(node),
|
|
399
|
+
isPower: child(node, 'power') !== undefined || libId.startsWith('power:'),
|
|
400
|
+
multiUnit,
|
|
401
|
+
...(multiUnit ? unitViewsOf(node) : {}),
|
|
402
|
+
};
|
|
403
|
+
this.cache.set(libId, resolved);
|
|
404
|
+
return resolved;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* The symbol-name token a power-class net's generated symbol lives under
|
|
409
|
+
* (`copperhead_power:<token>`), which is also what its vendored file is named
|
|
410
|
+
* from. Two nets that sanitize to one token would share one `lib_id` and one
|
|
411
|
+
* embedded pin name, quietly merging their rails in KiCad's netlist —
|
|
412
|
+
* `validateIntent` refuses that pair using this same function, so the collision
|
|
413
|
+
* dies as a numbered finding instead.
|
|
414
|
+
*/
|
|
415
|
+
export const powerNetToken = (net) => net.replace(/[^A-Za-z0-9_+.-]/g, '_');
|
|
416
|
+
/** Escape a string for embedding inside a quoted s-expression atom. Defense in
|
|
417
|
+
* depth: `validateIntent` already refuses net names containing `"` or `\`, but
|
|
418
|
+
* this template must not be able to corrupt a schematic even if called raw. */
|
|
419
|
+
const sexpQuote = (s) => s.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
420
|
+
/**
|
|
421
|
+
* Engine-authored power-port and PWR_FLAG symbols (design D6a). Authored here,
|
|
422
|
+
* not copied from a library: the engine must be able to satisfy ERC's
|
|
423
|
+
* undriven-rail check on any machine without depending on the installed power
|
|
424
|
+
* library's naming. Pin at the origin; the body draws above (rail) or below
|
|
425
|
+
* (ground) it.
|
|
426
|
+
*/
|
|
427
|
+
export function powerSymbolSource(rawNet, kind) {
|
|
428
|
+
const net = sexpQuote(rawNet);
|
|
429
|
+
const name = powerNetToken(rawNet);
|
|
430
|
+
const libId = `copperhead_power:${name}`;
|
|
431
|
+
// Symbol space is Y-up and the schematic transform flips it: negative-Y
|
|
432
|
+
// graphics here render BELOW the connection point on the sheet. Ground bars
|
|
433
|
+
// hang below their pin (angle 270 = line toward -Y body); rail bars sit
|
|
434
|
+
// above (angle 90).
|
|
435
|
+
const body = kind === 'ground'
|
|
436
|
+
? `\t(symbol "${name}_0_1"
|
|
437
|
+
\t\t(polyline (pts (xy -1.27 -1.27) (xy 1.27 -1.27)) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
438
|
+
\t\t(polyline (pts (xy -0.762 -1.778) (xy 0.762 -1.778)) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
439
|
+
\t\t(polyline (pts (xy -0.254 -2.286) (xy 0.254 -2.286)) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
440
|
+
\t)
|
|
441
|
+
\t(symbol "${name}_1_1"
|
|
442
|
+
\t\t(pin power_in line (at 0 0 270) (length 0) hide
|
|
443
|
+
\t\t\t(name "${net}" (effects (font (size 1.27 1.27))))
|
|
444
|
+
\t\t\t(number "1" (effects (font (size 1.27 1.27))))
|
|
445
|
+
\t\t)
|
|
446
|
+
\t)`
|
|
447
|
+
: `\t(symbol "${name}_0_1"
|
|
448
|
+
\t\t(polyline (pts (xy -1.27 1.27) (xy 1.27 1.27)) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
449
|
+
\t)
|
|
450
|
+
\t(symbol "${name}_1_1"
|
|
451
|
+
\t\t(pin power_in line (at 0 0 90) (length 0) hide
|
|
452
|
+
\t\t\t(name "${net}" (effects (font (size 1.27 1.27))))
|
|
453
|
+
\t\t\t(number "1" (effects (font (size 1.27 1.27))))
|
|
454
|
+
\t\t)
|
|
455
|
+
\t)`;
|
|
456
|
+
const sourceText = `(symbol "${name}"
|
|
457
|
+
\t(power)
|
|
458
|
+
\t(pin_names (offset 0))
|
|
459
|
+
\t(exclude_from_sim yes)
|
|
460
|
+
\t(in_bom no)
|
|
461
|
+
\t(on_board no)
|
|
462
|
+
\t(property "Reference" "#PWR" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
463
|
+
\t(property "Value" "${net}" (at 0 ${kind === 'ground' ? '-3.556' : '3.556'} 0) (effects (font (size 1.27 1.27)) hide))
|
|
464
|
+
${body}
|
|
465
|
+
)`;
|
|
466
|
+
return { libId, sourceText };
|
|
467
|
+
}
|
|
468
|
+
export function pwrFlagSource() {
|
|
469
|
+
const libId = 'copperhead_power:PWR_FLAG';
|
|
470
|
+
const sourceText = `(symbol "PWR_FLAG"
|
|
471
|
+
\t(power)
|
|
472
|
+
\t(pin_names (offset 0))
|
|
473
|
+
\t(exclude_from_sim yes)
|
|
474
|
+
\t(in_bom no)
|
|
475
|
+
\t(on_board no)
|
|
476
|
+
\t(property "Reference" "#FLG" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
477
|
+
\t(property "Value" "PWR_FLAG" (at 0 -3.556 0) (effects (font (size 1.27 1.27)) hide))
|
|
478
|
+
\t(symbol "PWR_FLAG_0_1"
|
|
479
|
+
\t\t(polyline (pts (xy 0 1.27) (xy -1.016 1.905) (xy 0 2.54) (xy 1.016 1.905) (xy 0 1.27)) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
480
|
+
\t)
|
|
481
|
+
\t(symbol "PWR_FLAG_1_1"
|
|
482
|
+
\t\t(pin power_out line (at 0 0 90) (length 0) hide
|
|
483
|
+
\t\t\t(name "pwr" (effects (font (size 1.27 1.27))))
|
|
484
|
+
\t\t\t(number "1" (effects (font (size 1.27 1.27))))
|
|
485
|
+
\t\t)
|
|
486
|
+
\t)
|
|
487
|
+
)`;
|
|
488
|
+
return { libId, sourceText };
|
|
489
|
+
}
|
|
490
|
+
//# sourceMappingURL=symsource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symsource.js","sourceRoot":"","sources":["../../../src/kicad/draft/symsource.ts"],"names":[],"mappings":"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"}
|