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.
Files changed (90) hide show
  1. package/NOTICE +1 -1
  2. package/README.md +6 -6
  3. package/dist/agent/filetools.js +24 -1
  4. package/dist/agent/filetools.js.map +1 -1
  5. package/dist/agent/ledger.js +24 -0
  6. package/dist/agent/ledger.js.map +1 -1
  7. package/dist/agent/loop.js +29 -58
  8. package/dist/agent/loop.js.map +1 -1
  9. package/dist/agent/prompts.js +4 -3
  10. package/dist/agent/prompts.js.map +1 -1
  11. package/dist/agent/providers/tool-protocol.js +21 -0
  12. package/dist/agent/providers/tool-protocol.js.map +1 -1
  13. package/dist/agent/recovery.js +95 -1
  14. package/dist/agent/recovery.js.map +1 -1
  15. package/dist/agent/tools.js +185 -1
  16. package/dist/agent/tools.js.map +1 -1
  17. package/dist/agent/transcript.js +2 -0
  18. package/dist/agent/transcript.js.map +1 -1
  19. package/dist/cli.js +75 -0
  20. package/dist/cli.js.map +1 -1
  21. package/dist/commands/check.js +33 -1
  22. package/dist/commands/check.js.map +1 -1
  23. package/dist/commands/create.js +177 -25
  24. package/dist/commands/create.js.map +1 -1
  25. package/dist/commands/doctor.js +50 -3
  26. package/dist/commands/doctor.js.map +1 -1
  27. package/dist/config.js +1 -0
  28. package/dist/config.js.map +1 -1
  29. package/dist/kicad/bootstrap.js +24 -3
  30. package/dist/kicad/bootstrap.js.map +1 -1
  31. package/dist/kicad/dossier.js +207 -0
  32. package/dist/kicad/dossier.js.map +1 -0
  33. package/dist/kicad/draft/draft.js +132 -0
  34. package/dist/kicad/draft/draft.js.map +1 -0
  35. package/dist/kicad/draft/engine.js +2389 -0
  36. package/dist/kicad/draft/engine.js.map +1 -0
  37. package/dist/kicad/draft/ir.js +368 -0
  38. package/dist/kicad/draft/ir.js.map +1 -0
  39. package/dist/kicad/draft/symsource.js +490 -0
  40. package/dist/kicad/draft/symsource.js.map +1 -0
  41. package/dist/kicad/emit.js +181 -0
  42. package/dist/kicad/emit.js.map +1 -0
  43. package/dist/kicad/fab.js +13 -0
  44. package/dist/kicad/fab.js.map +1 -1
  45. package/dist/kicad/legibility.js +561 -0
  46. package/dist/kicad/legibility.js.map +1 -0
  47. package/dist/kicad/score.js +261 -0
  48. package/dist/kicad/score.js.map +1 -0
  49. package/dist/kicad/sexp.js +239 -6
  50. package/dist/kicad/sexp.js.map +1 -1
  51. package/dist/kicad/symlib.js +346 -16
  52. package/dist/kicad/symlib.js.map +1 -1
  53. package/dist/memory/bom-table.js +75 -39
  54. package/dist/memory/bom-table.js.map +1 -1
  55. package/dist/memory/scaffold.js +6 -0
  56. package/dist/memory/scaffold.js.map +1 -1
  57. package/dist/util/redact.js +6 -0
  58. package/dist/util/redact.js.map +1 -1
  59. package/package.json +9 -7
  60. package/src/agent/filetools.ts +26 -1
  61. package/src/agent/ledger.ts +24 -0
  62. package/src/agent/loop.ts +28 -61
  63. package/src/agent/prompts.ts +4 -3
  64. package/src/agent/providers/tool-protocol.ts +22 -0
  65. package/src/agent/recovery.ts +94 -1
  66. package/src/agent/tools.ts +189 -1
  67. package/src/agent/transcript.ts +6 -0
  68. package/src/cli.ts +71 -0
  69. package/src/commands/check.ts +51 -1
  70. package/src/commands/create.ts +179 -20
  71. package/src/commands/doctor.ts +51 -3
  72. package/src/config.ts +24 -0
  73. package/src/kicad/bootstrap.ts +24 -3
  74. package/src/kicad/dossier.ts +217 -0
  75. package/src/kicad/draft/draft.ts +171 -0
  76. package/src/kicad/draft/engine.ts +2466 -0
  77. package/src/kicad/draft/ir.ts +416 -0
  78. package/src/kicad/draft/symsource.ts +535 -0
  79. package/src/kicad/emit.ts +236 -0
  80. package/src/kicad/fab.ts +15 -0
  81. package/src/kicad/legibility.ts +646 -0
  82. package/src/kicad/score.ts +323 -0
  83. package/src/kicad/sexp.ts +315 -6
  84. package/src/kicad/symlib.ts +364 -18
  85. package/src/memory/bom-table.ts +85 -38
  86. package/src/memory/scaffold.ts +6 -0
  87. package/src/util/redact.ts +6 -0
  88. package/dist/memory/synap.js +0 -152
  89. package/dist/memory/synap.js.map +0 -1
  90. 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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"}