copperhead 0.9.0 → 0.11.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 +47 -8
- package/dist/agent/context.js +2 -0
- package/dist/agent/context.js.map +1 -0
- package/dist/agent/dock-renderer.js +2 -2
- package/dist/agent/dock-renderer.js.map +1 -1
- package/dist/agent/envelope.js +105 -0
- package/dist/agent/envelope.js.map +1 -0
- 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 +63 -72
- 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/claude-code.js +17 -1
- package/dist/agent/providers/claude-code.js.map +1 -1
- package/dist/agent/providers/codex.js +84 -39
- package/dist/agent/providers/codex.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 +186 -15
- package/dist/agent/recovery.js.map +1 -1
- package/dist/agent/registry.js +49 -0
- package/dist/agent/registry.js.map +1 -0
- package/dist/agent/render.js +2 -2
- package/dist/agent/render.js.map +1 -1
- package/dist/agent/theme.js +10 -5
- package/dist/agent/theme.js.map +1 -1
- package/dist/agent/tools.js +100 -586
- 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/capabilities/define.js +35 -0
- package/dist/capabilities/define.js.map +1 -0
- package/dist/capabilities/handlers.js +744 -0
- package/dist/capabilities/handlers.js.map +1 -0
- package/dist/capabilities/helpers.js +39 -0
- package/dist/capabilities/helpers.js.map +1 -0
- package/dist/capabilities/index.js +50 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/skills/generate-report.js +23 -0
- package/dist/capabilities/skills/generate-report.js.map +1 -0
- package/dist/cli.js +158 -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 +181 -26
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/doctor.js +83 -6
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/skill.js +109 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/sync.js +3 -1
- package/dist/commands/sync.js.map +1 -1
- package/dist/config.js +19 -6
- 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/cli.js +106 -18
- package/dist/kicad/cli.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 +135 -0
- package/dist/kicad/draft/draft.js.map +1 -0
- package/dist/kicad/draft/engine.js +5310 -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 +504 -0
- package/dist/kicad/draft/symsource.js.map +1 -0
- package/dist/kicad/emit.js +220 -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 +608 -0
- package/dist/kicad/legibility.js.map +1 -0
- package/dist/kicad/score.js +431 -0
- package/dist/kicad/score.js.map +1 -0
- package/dist/kicad/sexp.js +265 -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/mcp/server.js +485 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/memory/bom-table.js +75 -39
- package/dist/memory/bom-table.js.map +1 -1
- package/dist/memory/scaffold.js +14 -1
- 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 +13 -8
- package/src/agent/context.ts +35 -0
- package/src/agent/dock-renderer.ts +3 -2
- package/src/agent/envelope.ts +124 -0
- package/src/agent/filetools.ts +26 -1
- package/src/agent/ledger.ts +24 -0
- package/src/agent/loop.ts +73 -78
- package/src/agent/prompts.ts +4 -3
- package/src/agent/providers/claude-code.ts +22 -1
- package/src/agent/providers/codex.ts +91 -42
- package/src/agent/providers/tool-protocol.ts +22 -0
- package/src/agent/recovery.ts +183 -13
- package/src/agent/registry.ts +58 -0
- package/src/agent/render.ts +4 -3
- package/src/agent/theme.ts +15 -5
- package/src/agent/tools.ts +124 -628
- package/src/agent/transcript.ts +6 -0
- package/src/agent/types.ts +10 -5
- package/src/capabilities/define.ts +88 -0
- package/src/capabilities/handlers.ts +769 -0
- package/src/capabilities/helpers.ts +37 -0
- package/src/capabilities/index.ts +53 -0
- package/src/capabilities/skills/generate-report.ts +25 -0
- package/src/cli.ts +154 -0
- package/src/commands/check.ts +51 -1
- package/src/commands/create.ts +183 -21
- package/src/commands/doctor.ts +85 -6
- package/src/commands/skill.ts +127 -0
- package/src/commands/sync.ts +5 -3
- package/src/config.ts +56 -8
- package/src/kicad/bootstrap.ts +24 -3
- package/src/kicad/cli.ts +129 -18
- package/src/kicad/dossier.ts +217 -0
- package/src/kicad/draft/draft.ts +173 -0
- package/src/kicad/draft/engine.ts +5274 -0
- package/src/kicad/draft/ir.ts +416 -0
- package/src/kicad/draft/symsource.ts +549 -0
- package/src/kicad/emit.ts +300 -0
- package/src/kicad/fab.ts +15 -0
- package/src/kicad/legibility.ts +695 -0
- package/src/kicad/score.ts +502 -0
- package/src/kicad/sexp.ts +346 -6
- package/src/kicad/symlib.ts +364 -18
- package/src/mcp/server.ts +560 -0
- package/src/memory/bom-table.ts +85 -38
- package/src/memory/scaffold.ts +14 -1
- 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
package/dist/kicad/symlib.js
CHANGED
|
@@ -17,9 +17,36 @@
|
|
|
17
17
|
* matter most. When the exact name is absent, we surface close candidates
|
|
18
18
|
* instead of guessing.
|
|
19
19
|
*/
|
|
20
|
-
import { readFile, access } from 'node:fs/promises';
|
|
20
|
+
import { readFile, readdir, access, stat } from 'node:fs/promises';
|
|
21
21
|
import path from 'node:path';
|
|
22
22
|
import { parseSexp, children, child, isList } from './sexp.js';
|
|
23
|
+
/** Numeric-aware, case-insensitive pin-number ordering ("2" < "10", "a1" ~ "A1")
|
|
24
|
+
* shared by every pin-table renderer so orderings never diverge. */
|
|
25
|
+
const pinNumberCollator = new Intl.Collator('en', { numeric: true, sensitivity: 'base' });
|
|
26
|
+
export const comparePinNumbers = (a, b) => pinNumberCollator.compare(a, b);
|
|
27
|
+
/**
|
|
28
|
+
* Symbol-name index of a `.kicad_sym`, cached by mtime. The stock set is ~220
|
|
29
|
+
* files that never change within a run, but discovery-heavy callers (the
|
|
30
|
+
* dossier's per-part search, the recovery probe loop) would otherwise re-read
|
|
31
|
+
* and re-scrape all of them per query. Returns null when the file is
|
|
32
|
+
* unreadable, so callers skip it the same way a failed readFile did.
|
|
33
|
+
*/
|
|
34
|
+
const symbolNameCache = new Map();
|
|
35
|
+
async function libSymbolNames(file) {
|
|
36
|
+
try {
|
|
37
|
+
const { mtimeMs } = await stat(file);
|
|
38
|
+
const hit = symbolNameCache.get(file);
|
|
39
|
+
if (hit && hit.mtimeMs === mtimeMs)
|
|
40
|
+
return hit.names;
|
|
41
|
+
const text = await readFile(file, 'utf8');
|
|
42
|
+
const names = [...text.matchAll(/^\s*\(symbol\s+"([^"]+)"/gm)].map((m) => m[1]);
|
|
43
|
+
symbolNameCache.set(file, { mtimeMs, names });
|
|
44
|
+
return names;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
23
50
|
const tag = (n) => (isList(n) && typeof n[0] === 'string' ? n[0] : null);
|
|
24
51
|
const atomAt = (node, idx) => {
|
|
25
52
|
const v = node?.[idx];
|
|
@@ -33,8 +60,13 @@ const normPinName = (n) => (n === '~' ? '' : n);
|
|
|
33
60
|
* Candidate directories holding KiCad's stock `.kicad_sym` libraries, most
|
|
34
61
|
* specific first. Env overrides win (KiCad exports these), then the standard
|
|
35
62
|
* install locations for Linux/macOS/Windows. Only existing dirs are returned.
|
|
63
|
+
*
|
|
64
|
+
* @param winRoot test seam for the Windows `C:\Program Files\KiCad` root;
|
|
65
|
+
* defaults to the real path. Without this, the Windows version-directory
|
|
66
|
+
* discovery below can only be exercised on an actual Windows machine with
|
|
67
|
+
* KiCad installed at the default location.
|
|
36
68
|
*/
|
|
37
|
-
export async function symbolSearchDirs(env = process.env) {
|
|
69
|
+
export async function symbolSearchDirs(env = process.env, winRoot = 'C:/Program Files/KiCad') {
|
|
38
70
|
const fromEnv = [
|
|
39
71
|
env.KICAD_SYMBOL_DIR,
|
|
40
72
|
env.KICAD10_SYMBOL_DIR,
|
|
@@ -45,10 +77,15 @@ export async function symbolSearchDirs(env = process.env) {
|
|
|
45
77
|
'/usr/share/kicad/symbols',
|
|
46
78
|
'/usr/local/share/kicad/symbols',
|
|
47
79
|
'/Applications/KiCad/KiCad.app/Contents/SharedSupport/symbols',
|
|
48
|
-
|
|
80
|
+
// Windows installs under a version-numbered directory
|
|
81
|
+
// (C:\Program Files\KiCad\10.0\...), unlike Linux/macOS, so there is no
|
|
82
|
+
// single fixed path here. Discovered below instead.
|
|
49
83
|
];
|
|
50
84
|
const out = [];
|
|
51
|
-
|
|
85
|
+
// An env override is exclusive: a caller pinning KICAD_SYMBOL_DIR at an
|
|
86
|
+
// isolated directory (tests, a pinned library set) must get only that
|
|
87
|
+
// directory back, not the machine's stock install appended after it.
|
|
88
|
+
for (const dir of fromEnv.length ? fromEnv : defaults) {
|
|
52
89
|
try {
|
|
53
90
|
await access(dir);
|
|
54
91
|
if (!out.includes(dir))
|
|
@@ -58,10 +95,57 @@ export async function symbolSearchDirs(env = process.env) {
|
|
|
58
95
|
// not present on this machine; skip
|
|
59
96
|
}
|
|
60
97
|
}
|
|
98
|
+
// Windows: KiCad's own installer picks the version directory
|
|
99
|
+
// (`10.0`, `9.0`, `8.0`, ...), so no fixed path is ever correct. List
|
|
100
|
+
// `C:\Program Files\KiCad` and check each version folder instead. Sorted
|
|
101
|
+
// descending so a machine with more than one version prefers the newest.
|
|
102
|
+
// Skipped entirely when an env override is set: "env overrides win" means
|
|
103
|
+
// exactly that, not "env overrides win, plus whatever else this discovers"
|
|
104
|
+
// — a caller pointing KICAD_SYMBOL_DIR at an isolated directory (tests, a
|
|
105
|
+
// pinned library set) must get only that directory back.
|
|
106
|
+
const kicadRoot = winRoot;
|
|
107
|
+
if (fromEnv.length === 0) {
|
|
108
|
+
try {
|
|
109
|
+
const entries = await readdir(kicadRoot, { withFileTypes: true });
|
|
110
|
+
const versions = entries
|
|
111
|
+
.filter((e) => e.isDirectory())
|
|
112
|
+
.map((e) => e.name)
|
|
113
|
+
.sort((a, b) => b.localeCompare(a, undefined, { numeric: true }));
|
|
114
|
+
for (const version of versions) {
|
|
115
|
+
const dir = `${kicadRoot}/${version}/share/kicad/symbols`;
|
|
116
|
+
try {
|
|
117
|
+
await access(dir);
|
|
118
|
+
if (!out.includes(dir))
|
|
119
|
+
out.push(dir);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// this version folder has no symbols dir; skip
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Some installs put share/ directly under the KiCad root with no
|
|
126
|
+
// version directory; probe that layout after the versioned ones.
|
|
127
|
+
const flat = `${kicadRoot}/share/kicad/symbols`;
|
|
128
|
+
try {
|
|
129
|
+
await access(flat);
|
|
130
|
+
if (!out.includes(flat))
|
|
131
|
+
out.push(flat);
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// no non-versioned layout either; skip
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// C:\Program Files\KiCad doesn't exist on this machine (not Windows, or KiCad not installed here); skip
|
|
139
|
+
}
|
|
140
|
+
}
|
|
61
141
|
return out;
|
|
62
142
|
}
|
|
63
|
-
/** Path to `<lib>.kicad_sym` in the first search dir that has it, or null.
|
|
143
|
+
/** Path to `<lib>.kicad_sym` in the first search dir that has it, or null.
|
|
144
|
+
* The nickname is model-supplied text: a separator or `..` in it would escape
|
|
145
|
+
* the search directories, so such a nickname resolves to nothing. */
|
|
64
146
|
export async function findLibraryFile(lib, dirs) {
|
|
147
|
+
if (lib.includes('/') || lib.includes('\\') || lib.includes('..'))
|
|
148
|
+
return null;
|
|
65
149
|
for (const dir of dirs) {
|
|
66
150
|
const p = path.join(dir, `${lib}.kicad_sym`);
|
|
67
151
|
try {
|
|
@@ -74,6 +158,216 @@ export async function findLibraryFile(lib, dirs) {
|
|
|
74
158
|
}
|
|
75
159
|
return null;
|
|
76
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* Rank a library's symbol names against a queried name that failed to resolve.
|
|
163
|
+
* Comparison is case-insensitive with separators (`_`, `-`, `.`) stripped, so
|
|
164
|
+
* `Rotary_Encoder` finds `RotaryEncoder_Switch` and `microSD_Card` finds
|
|
165
|
+
* `Micro_SD_Card` — KiCad's own naming is inconsistent on exactly this axis.
|
|
166
|
+
* Sub-unit children (`Name_<unit>_<style>`) are internal structure, not
|
|
167
|
+
* placeable symbols, and never candidates. The name-inside-query direction
|
|
168
|
+
* requires at least 3 significant characters: a stock library is full of
|
|
169
|
+
* single-letter generics (`R`, `C`, `D`) that would otherwise "match" nearly
|
|
170
|
+
* any part number and crowd out the real near-miss.
|
|
171
|
+
*/
|
|
172
|
+
const canonSymName = (s) => s.toLowerCase().replace(/[_\-.]/g, '');
|
|
173
|
+
/** Names must be this long before a single edit is distinctive enough to match. */
|
|
174
|
+
const MIN_EDIT_MATCH_LEN = 5;
|
|
175
|
+
/**
|
|
176
|
+
* The shared one-edit rule for "same part family, variant spelling": within one
|
|
177
|
+
* edit (SHT40 vs SHT4x, STM32F103C8T6 vs STM32F103C8Tx), except a
|
|
178
|
+
* digit-for-digit substitution, which names a *different real part*
|
|
179
|
+
* (TPS22860 vs TPS22810) rather than a family wildcard. Used by both resolvers
|
|
180
|
+
* so search and cross-library discovery can never disagree about what counts
|
|
181
|
+
* as a near-miss.
|
|
182
|
+
*/
|
|
183
|
+
function oneEditFamilyVariant(a, b) {
|
|
184
|
+
if (a.length < MIN_EDIT_MATCH_LEN || b.length < MIN_EDIT_MATCH_LEN)
|
|
185
|
+
return false;
|
|
186
|
+
if (editDistanceWithin(a, b, 1) > 1)
|
|
187
|
+
return false;
|
|
188
|
+
if (a.length === b.length) {
|
|
189
|
+
for (let i = 0; i < a.length; i++) {
|
|
190
|
+
if (a[i] !== b[i]) {
|
|
191
|
+
return !(/[0-9]/.test(a[i]) && /[0-9]/.test(b[i]));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
/** `closestSymbolNames` with the match rank retained, so a caller merging
|
|
198
|
+
* candidates from several libraries can order them by how well they match
|
|
199
|
+
* rather than by which library happened to be scanned first. */
|
|
200
|
+
export function rankSymbolNames(names, query, cap = 8) {
|
|
201
|
+
const canon = canonSymName;
|
|
202
|
+
const q = canon(query);
|
|
203
|
+
if (q.length < 2)
|
|
204
|
+
return [];
|
|
205
|
+
const ranked = [];
|
|
206
|
+
const seen = new Set();
|
|
207
|
+
for (const name of names) {
|
|
208
|
+
if (seen.has(name) || /_\d+_\d+$/.test(name))
|
|
209
|
+
continue;
|
|
210
|
+
seen.add(name);
|
|
211
|
+
const c = canon(name);
|
|
212
|
+
let rank;
|
|
213
|
+
if (c === q)
|
|
214
|
+
rank = 0;
|
|
215
|
+
else if (c.startsWith(q))
|
|
216
|
+
rank = 1;
|
|
217
|
+
else if (c.includes(q))
|
|
218
|
+
rank = 2;
|
|
219
|
+
else if (c.length >= 3 && q.includes(c))
|
|
220
|
+
rank = 3;
|
|
221
|
+
// Without this tier, search declared family-variant stock symbols absent
|
|
222
|
+
// (STM32F103C8T6 vs the installed STM32F103C8Tx) while
|
|
223
|
+
// findSymbolAcrossLibraries found them, and the "machine-verified" dossier
|
|
224
|
+
// rendered a search miss as a false absence claim.
|
|
225
|
+
else if (oneEditFamilyVariant(q, c))
|
|
226
|
+
rank = 4;
|
|
227
|
+
else
|
|
228
|
+
continue;
|
|
229
|
+
ranked.push({ name, rank });
|
|
230
|
+
}
|
|
231
|
+
ranked.sort((a, b) => a.rank - b.rank || a.name.length - b.name.length || (a.name < b.name ? -1 : 1));
|
|
232
|
+
return ranked.slice(0, cap);
|
|
233
|
+
}
|
|
234
|
+
export function closestSymbolNames(names, query, cap = 8) {
|
|
235
|
+
return rankSymbolNames(names, query, cap).map((r) => r.name);
|
|
236
|
+
}
|
|
237
|
+
/** Every installed `<lib>.kicad_sym`, keyed by library nickname; the first
|
|
238
|
+
* search dir claims a nickname, matching `findLibraryFile`'s precedence. */
|
|
239
|
+
export async function listInstalledLibraries(dirs) {
|
|
240
|
+
const map = new Map();
|
|
241
|
+
for (const dir of dirs) {
|
|
242
|
+
let entries;
|
|
243
|
+
try {
|
|
244
|
+
entries = await readdir(dir);
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
for (const e of entries) {
|
|
250
|
+
if (!e.endsWith('.kicad_sym'))
|
|
251
|
+
continue;
|
|
252
|
+
const lib = e.slice(0, -'.kicad_sym'.length);
|
|
253
|
+
if (!map.has(lib))
|
|
254
|
+
map.set(lib, path.join(dir, e));
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return map;
|
|
258
|
+
}
|
|
259
|
+
/** Levenshtein edit distance, capped: returns `cap + 1` once the true distance
|
|
260
|
+
* would exceed `cap`, so a caller doing a cheap "is this close enough" check
|
|
261
|
+
* never pays for the full O(n·m) table on two names that are obviously
|
|
262
|
+
* unrelated. */
|
|
263
|
+
function editDistanceWithin(a, b, cap) {
|
|
264
|
+
if (Math.abs(a.length - b.length) > cap)
|
|
265
|
+
return cap + 1;
|
|
266
|
+
let prev = Array.from({ length: b.length + 1 }, (_, j) => j);
|
|
267
|
+
for (let i = 1; i <= a.length; i++) {
|
|
268
|
+
const cur = [i];
|
|
269
|
+
let rowMin = i;
|
|
270
|
+
for (let j = 1; j <= b.length; j++) {
|
|
271
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
272
|
+
const v = Math.min(prev[j] + 1, cur[j - 1] + 1, prev[j - 1] + cost);
|
|
273
|
+
cur.push(v);
|
|
274
|
+
if (v < rowMin)
|
|
275
|
+
rowMin = v;
|
|
276
|
+
}
|
|
277
|
+
if (rowMin > cap)
|
|
278
|
+
return cap + 1; // whole row exceeded cap: no cell can recover
|
|
279
|
+
prev = cur;
|
|
280
|
+
}
|
|
281
|
+
return prev[b.length];
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* A part is unresolvable at its guessed `lib_id`, but the guess itself is often
|
|
285
|
+
* right about the *part*, just wrong about which stock file it lives in (a
|
|
286
|
+
* chip's library nickname is not derivable from its part number). Rather than
|
|
287
|
+
* fail outright, check every other discovered `.kicad_sym` for a symbol with
|
|
288
|
+
* this exact name; when none matches exactly, fall back to the same
|
|
289
|
+
* closest-candidate substring heuristic `resolveLibrarySymbol` already uses
|
|
290
|
+
* within one file, just applied across all of them.
|
|
291
|
+
*
|
|
292
|
+
* Returns matches sorted exact-first; the caller decides what "found" means
|
|
293
|
+
* (one exact hit resolves unambiguously, several means the agent must pick).
|
|
294
|
+
*/
|
|
295
|
+
export async function findSymbolAcrossLibraries(name, dirs, excludeLib) {
|
|
296
|
+
const q = name.toLowerCase();
|
|
297
|
+
const exact = [];
|
|
298
|
+
const fuzzy = [];
|
|
299
|
+
for (const [lib, file] of await listInstalledLibraries(dirs)) {
|
|
300
|
+
// `excludeLib` is only known not to hold this *exact* name; it can still
|
|
301
|
+
// hold the near-miss the caller actually wants (SHT40 guessed in
|
|
302
|
+
// Sensor_Humidity, where the real symbol is SHT4x). Skip its exact check,
|
|
303
|
+
// never its fuzzy one.
|
|
304
|
+
const skipExact = lib === excludeLib;
|
|
305
|
+
const names = await libSymbolNames(file);
|
|
306
|
+
if (!names)
|
|
307
|
+
continue;
|
|
308
|
+
if (!skipExact && names.includes(name)) {
|
|
309
|
+
exact.push({ lib, name, exact: true });
|
|
310
|
+
continue;
|
|
311
|
+
}
|
|
312
|
+
// The "does the query contain the library name" direction is only
|
|
313
|
+
// meaningful for a reasonably specific name (>= 3 chars): a stock library
|
|
314
|
+
// is full of single-letter generics ("R", "C", "L", "D", "U", "Q"), and
|
|
315
|
+
// "does <any part number> contain the letter R" is true for nearly
|
|
316
|
+
// everything, which would fuzzy-match almost any query against them.
|
|
317
|
+
const MIN_SHORT_NAME_LEN = 3;
|
|
318
|
+
// Substring alone misses the most common real near-miss: a datasheet part
|
|
319
|
+
// number against a library's family name, differing mid-string rather than
|
|
320
|
+
// at either end (SHT40 vs SHT4x). Neither contains the other; the shared
|
|
321
|
+
// one-edit family-variant rule catches it while refusing digit-for-digit
|
|
322
|
+
// swaps (TPS22860 vs TPS22810 are different real parts).
|
|
323
|
+
// The matched candidate string, not just whether one exists: a fuzzy hit
|
|
324
|
+
// must report the real symbol name (`n`) so the caller can build a lib_id
|
|
325
|
+
// that actually resolves. Suggesting `${lib}:${query}` back would name a
|
|
326
|
+
// part that was never found in that library — the exact regression this
|
|
327
|
+
// fuzzy path exists to avoid repeating.
|
|
328
|
+
const fuzzyHit = names.find((n) => {
|
|
329
|
+
const lower = n.toLowerCase();
|
|
330
|
+
if (lower.includes(q))
|
|
331
|
+
return true;
|
|
332
|
+
if (lower.length >= MIN_SHORT_NAME_LEN && q.includes(lower))
|
|
333
|
+
return true;
|
|
334
|
+
return oneEditFamilyVariant(q, lower);
|
|
335
|
+
});
|
|
336
|
+
if (fuzzyHit) {
|
|
337
|
+
fuzzy.push({ lib, name: fuzzyHit, exact: false });
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return [...exact, ...fuzzy];
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Search every installed library for symbols matching a part name, returning
|
|
344
|
+
* ranked `Lib:Name` lib_ids with exact (separator-insensitive) matches first.
|
|
345
|
+
* This is the discovery primitive a bare lib_id probe cannot provide: a wrong
|
|
346
|
+
* library-nickname guess is otherwise indistinguishable from a missing part,
|
|
347
|
+
* and KiCad's nicknames rarely follow from the part number (TPS61165DBV lives
|
|
348
|
+
* in Driver_LED, AudioJack3 in Connector_Audio, INA226 in Sensor_Energy).
|
|
349
|
+
*/
|
|
350
|
+
export async function searchInstalledSymbols(query, dirs, cap = 24) {
|
|
351
|
+
if (canonSymName(query).length < 2)
|
|
352
|
+
return [];
|
|
353
|
+
// Rank globally, not per library: a library scanned early contributes only
|
|
354
|
+
// weak matches, and capping in scan order would drop a later library's
|
|
355
|
+
// stronger candidate — the exact case this tool exists to surface, since a
|
|
356
|
+
// caller reaching for it has already guessed the nickname wrong.
|
|
357
|
+
const hits = [];
|
|
358
|
+
for (const [lib, file] of await listInstalledLibraries(dirs)) {
|
|
359
|
+
const names = await libSymbolNames(file);
|
|
360
|
+
if (!names)
|
|
361
|
+
continue;
|
|
362
|
+
for (const { name, rank } of rankSymbolNames(names, query, 4)) {
|
|
363
|
+
hits.push({ libId: `${lib}:${name}`, rank, name });
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
hits.sort((a, b) => a.rank - b.rank ||
|
|
367
|
+
a.name.length - b.name.length ||
|
|
368
|
+
(a.libId < b.libId ? -1 : a.libId > b.libId ? 1 : 0));
|
|
369
|
+
return hits.slice(0, cap).map((h) => h.libId);
|
|
370
|
+
}
|
|
77
371
|
/** Collect pins (number, name, electrical type) from a `(symbol …)` node,
|
|
78
372
|
* including its nested unit sub-symbols. Same walk `libPinDefs` uses, plus the
|
|
79
373
|
* electrical-type atom that pin-position parsing does not need. */
|
|
@@ -98,6 +392,19 @@ export function pinsOfSymbolNode(sym) {
|
|
|
98
392
|
walk(sym);
|
|
99
393
|
return pins;
|
|
100
394
|
}
|
|
395
|
+
/** Highest unit index among a symbol's `Name_<unit>_<style>` children: 1 for a
|
|
396
|
+
* single-unit part. Unit 0 holds common graphics, so it never raises the count.
|
|
397
|
+
* The drafting engine refuses symbols with units >= 2 (they share symbol-space
|
|
398
|
+
* pin coordinates), which makes this the drawability half of availability. */
|
|
399
|
+
function maxUnitIndex(sym) {
|
|
400
|
+
let max = 1;
|
|
401
|
+
for (const c of children(sym, 'symbol')) {
|
|
402
|
+
const m = atomAt(c, 1)?.match(/_(\d+)_\d+$/);
|
|
403
|
+
if (m)
|
|
404
|
+
max = Math.max(max, Number(m[1]));
|
|
405
|
+
}
|
|
406
|
+
return max;
|
|
407
|
+
}
|
|
101
408
|
/** The top-level `(symbol "name" …)` entries of a parsed `.kicad_sym` root. */
|
|
102
409
|
function librarySymbols(root) {
|
|
103
410
|
const map = new Map();
|
|
@@ -117,8 +424,12 @@ function librarySymbols(root) {
|
|
|
117
424
|
export async function resolveLibrarySymbol(libId, dirs) {
|
|
118
425
|
const [lib, name] = libId.includes(':') ? [libId.slice(0, libId.indexOf(':')), libId.slice(libId.indexOf(':') + 1)] : ['', libId];
|
|
119
426
|
const file = await findLibraryFile(lib, dirs);
|
|
120
|
-
if (!file)
|
|
427
|
+
if (!file) {
|
|
428
|
+
const elsewhere = await findSymbolAcrossLibraries(name, dirs, lib);
|
|
429
|
+
if (elsewhere.length)
|
|
430
|
+
return { status: 'found-elsewhere', libIds: elsewhere.map((m) => `${m.lib}:${m.name}`) };
|
|
121
431
|
return { status: 'no-library' };
|
|
432
|
+
}
|
|
122
433
|
const root = parseSexp(await readFile(file, 'utf8'))[0];
|
|
123
434
|
if (root === undefined || !isList(root))
|
|
124
435
|
return { status: 'no-library' };
|
|
@@ -132,21 +443,23 @@ export async function resolveLibrarySymbol(libId, dirs) {
|
|
|
132
443
|
break;
|
|
133
444
|
const pins = pinsOfSymbolNode(sym);
|
|
134
445
|
if (pins.length)
|
|
135
|
-
return { status: 'ok', pins };
|
|
446
|
+
return { status: 'ok', pins, units: maxUnitIndex(sym) };
|
|
136
447
|
// no pins of its own → follow an `extends` base if present
|
|
137
448
|
const base = atomAt(child(sym, 'extends'), 1);
|
|
138
449
|
if (!base)
|
|
139
|
-
return { status: 'ok', pins }; // genuinely pinless (e.g. a graphic)
|
|
450
|
+
return { status: 'ok', pins, units: maxUnitIndex(sym) }; // genuinely pinless (e.g. a graphic)
|
|
140
451
|
current = base;
|
|
141
452
|
}
|
|
142
|
-
//
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
453
|
+
// The guessed library exists and simply lacks this name, so its own ranked
|
|
454
|
+
// near-matches are the most useful answer and come first: the caller named
|
|
455
|
+
// the right file and mistyped the part. Only when that file offers nothing
|
|
456
|
+
// is a different library worth suggesting (mirrors SymbolSource.resolve).
|
|
457
|
+
const candidates = closestSymbolNames(symbols.keys(), name);
|
|
458
|
+
if (candidates.length)
|
|
459
|
+
return { status: 'no-symbol', candidates };
|
|
460
|
+
const elsewhere = await findSymbolAcrossLibraries(name, dirs, lib);
|
|
461
|
+
if (elsewhere.length)
|
|
462
|
+
return { status: 'found-elsewhere', libIds: elsewhere.map((m) => `${m.lib}:${m.name}`) };
|
|
150
463
|
return { status: 'no-symbol', candidates };
|
|
151
464
|
}
|
|
152
465
|
/** A schematic lib_symbols entry: its lib_id and the pins as authored. */
|
|
@@ -197,6 +510,23 @@ export async function verifySchematicSymbols(schPath, env = process.env) {
|
|
|
197
510
|
});
|
|
198
511
|
continue;
|
|
199
512
|
}
|
|
513
|
+
if (resolved.status === 'found-elsewhere') {
|
|
514
|
+
// A distinct kind from 'no-library': the part IS verifiable, just filed
|
|
515
|
+
// under another name — callers counting real issues must include it,
|
|
516
|
+
// while 'no-library' stays "could not check". When every suggestion
|
|
517
|
+
// shares the queried nickname the library was right and only the symbol
|
|
518
|
+
// name is a variant; saying "wrong library" there contradicts the fix.
|
|
519
|
+
const nick = entry.libId.includes(':') ? entry.libId.slice(0, entry.libId.indexOf(':')) : '';
|
|
520
|
+
const sameLib = nick !== '' && resolved.libIds.every((id) => id.startsWith(`${nick}:`));
|
|
521
|
+
findings.push({
|
|
522
|
+
libId: entry.libId,
|
|
523
|
+
kind: 'wrong-library',
|
|
524
|
+
detail: sameLib
|
|
525
|
+
? `"${entry.libId}" does not exist in that library — closest real name: ${resolved.libIds.join(' or ')}. The library was right; use the real symbol name.`
|
|
526
|
+
: `"${entry.libId}" names the wrong library, not the wrong part: use ${resolved.libIds.join(' or ')} instead.`,
|
|
527
|
+
});
|
|
528
|
+
continue;
|
|
529
|
+
}
|
|
200
530
|
checked++;
|
|
201
531
|
const real = resolved.pins;
|
|
202
532
|
const authored = entry.pins;
|
package/dist/kicad/symlib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symlib.js","sourceRoot":"","sources":["../../src/kicad/symlib.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"symlib.js","sourceRoot":"","sources":["../../src/kicad/symlib.ts"],"names":[],"mappings":"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"}
|