easyeda-mcp-pro 0.15.0 → 0.17.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.
@@ -60,6 +60,224 @@ function lowStockIssue(ref, supplier, stock) {
60
60
  stock,
61
61
  });
62
62
  }
63
+ function staleVendorDataIssue(ref, ageSeconds) {
64
+ return issue('stale_vendor_data', 'warning', ref, `Supplier data is stale (${ageSeconds}s old)`, {
65
+ cacheAgeSeconds: ageSeconds,
66
+ });
67
+ }
68
+ function missingVendorDataIssue(ref) {
69
+ return issue('missing_vendor_data', 'warning', ref, 'No supplier data was available for component quality scoring');
70
+ }
71
+ function packageMismatchIssue(ref, footprint) {
72
+ return issue('package_mismatch', 'error', ref, `Supplier package data does not match footprint ${footprint}`, {
73
+ footprint,
74
+ });
75
+ }
76
+ function manufacturerRiskIssue(ref, reason) {
77
+ return issue('manufacturer_risk', 'warning', ref, reason);
78
+ }
79
+ function lifecycleRiskIssue(ref, reason) {
80
+ return issue('lifecycle_risk', 'error', ref, reason);
81
+ }
82
+ function noSafeAlternateIssue(ref) {
83
+ return issue('no_safe_alternate', 'warning', ref, 'No safe alternate candidate was identified');
84
+ }
85
+ function riskFromScore(score) {
86
+ if (score >= 85)
87
+ return 'low';
88
+ if (score >= 65)
89
+ return 'medium';
90
+ if (score >= 40)
91
+ return 'high';
92
+ return 'critical';
93
+ }
94
+ function dimension(score, reason) {
95
+ return { score, risk: riskFromScore(score), reason };
96
+ }
97
+ function footprintTokens(value) {
98
+ if (!value)
99
+ return [];
100
+ const normalized = value.toUpperCase();
101
+ const tokens = [
102
+ '0201',
103
+ '0402',
104
+ '0603',
105
+ '0805',
106
+ '1206',
107
+ '1210',
108
+ 'SOT-23',
109
+ 'SOT23',
110
+ 'SOIC',
111
+ 'TSSOP',
112
+ 'QFN',
113
+ 'DFN',
114
+ 'BGA',
115
+ 'DIP',
116
+ ];
117
+ return tokens.filter((token) => normalized.includes(token));
118
+ }
119
+ function packageMatches(entryFootprint, result) {
120
+ const expected = footprintTokens(entryFootprint);
121
+ if (expected.length === 0)
122
+ return undefined;
123
+ const descriptionTokens = footprintTokens(result.description);
124
+ if (descriptionTokens.length === 0)
125
+ return undefined;
126
+ return expected.some((token) => descriptionTokens.includes(token));
127
+ }
128
+ function supplierIdentity(result) {
129
+ return result.mpn ?? result.lcsc ?? result.description ?? result.supplier;
130
+ }
131
+ function evaluateAlternate(entry, result) {
132
+ const caveats = [];
133
+ const reasons = [];
134
+ let score = 100;
135
+ let compatibility = 'drop_in';
136
+ const pkg = packageMatches(entry.footprint, result);
137
+ if (result.lifecycle === 'discontinued') {
138
+ compatibility = 'unsafe';
139
+ score -= 60;
140
+ caveats.push('Lifecycle is discontinued or obsolete.');
141
+ }
142
+ else if (result.lifecycle === 'unknown') {
143
+ compatibility = 'review_required';
144
+ score -= 15;
145
+ caveats.push('Lifecycle is unknown; verify with manufacturer datasheet.');
146
+ }
147
+ else {
148
+ reasons.push('Lifecycle is active.');
149
+ }
150
+ if (result.stock <= 0) {
151
+ compatibility = 'unsafe';
152
+ score -= 45;
153
+ caveats.push('No supplier stock is available.');
154
+ }
155
+ else if (result.stock < Math.max(1, entry.quantity * 10)) {
156
+ compatibility = compatibility === 'drop_in' ? 'review_required' : compatibility;
157
+ score -= 15;
158
+ caveats.push('Stock is low relative to BOM quantity.');
159
+ }
160
+ else {
161
+ reasons.push('Supplier stock is available.');
162
+ }
163
+ if (pkg === false) {
164
+ compatibility = 'unsafe';
165
+ score -= 50;
166
+ caveats.push(`Package appears incompatible with footprint ${entry.footprint}.`);
167
+ }
168
+ else if (pkg === undefined && entry.footprint) {
169
+ compatibility = compatibility === 'drop_in' ? 'review_required' : compatibility;
170
+ score -= 10;
171
+ caveats.push('Package could not be verified from supplier description.');
172
+ }
173
+ else if (pkg === true) {
174
+ reasons.push('Package appears compatible with the requested footprint.');
175
+ }
176
+ if (!result.manufacturer) {
177
+ compatibility = compatibility === 'drop_in' ? 'review_required' : compatibility;
178
+ score -= 10;
179
+ caveats.push('Manufacturer is missing from supplier data.');
180
+ }
181
+ if ((result.cacheAgeSeconds ?? 0) > 7 * 24 * 60 * 60) {
182
+ compatibility = compatibility === 'drop_in' ? 'review_required' : compatibility;
183
+ score -= 10;
184
+ caveats.push('Supplier data is stale and should be refreshed.');
185
+ }
186
+ const boundedScore = Math.max(0, Math.min(100, score));
187
+ return {
188
+ supplier: result.supplier,
189
+ mpn: result.mpn,
190
+ lcsc: result.lcsc,
191
+ manufacturer: result.manufacturer,
192
+ description: result.description,
193
+ lifecycle: result.lifecycle,
194
+ stock: result.stock,
195
+ unitPrice: result.unitPrice,
196
+ currency: result.currency,
197
+ compatibility,
198
+ score: boundedScore,
199
+ reasons: reasons.length > 0 ? reasons : [`Candidate ${supplierIdentity(result)} requires review.`],
200
+ caveats,
201
+ };
202
+ }
203
+ function assessComponentQuality(entry, supplierData, config) {
204
+ const found = supplierData.filter((result) => result.found);
205
+ const live = supplierData.filter((result) => !result.fromCache);
206
+ const cached = supplierData.filter((result) => result.fromCache);
207
+ const totalStock = found.reduce((acc, result) => acc + result.stock, 0);
208
+ const oldestCacheAge = supplierData.reduce((max, result) => Math.max(max, result.cacheAgeSeconds ?? 0), 0);
209
+ const newestQueryAt = supplierData
210
+ .map((result) => result.queriedAt)
211
+ .sort()
212
+ .at(-1);
213
+ const allDiscontinued = found.length > 0 && found.every((result) => result.lifecycle === 'discontinued');
214
+ const anyUnknownLifecycle = found.some((result) => result.lifecycle === 'unknown');
215
+ const packageMismatch = found.some((result) => packageMatches(entry.footprint, result) === false);
216
+ const missingPackageEvidence = Boolean(entry.footprint) &&
217
+ found.every((result) => packageMatches(entry.footprint, result) === undefined);
218
+ const lifecycle = allDiscontinued
219
+ ? dimension(0, 'All found supplier records are discontinued or obsolete.')
220
+ : found.length === 0
221
+ ? dimension(25, 'No found supplier records are available for lifecycle review.')
222
+ : anyUnknownLifecycle
223
+ ? dimension(70, 'At least one found supplier record has unknown lifecycle.')
224
+ : dimension(100, 'Found supplier records indicate active lifecycle.');
225
+ const stock = found.length === 0
226
+ ? dimension(20, 'No found supplier stock data is available.')
227
+ : totalStock < entry.quantity
228
+ ? dimension(25, 'Total supplier stock is below BOM quantity.')
229
+ : found.every((result) => result.stock < config.lowStockThreshold)
230
+ ? dimension(55, 'All found suppliers are below the configured low-stock threshold.')
231
+ : dimension(100, 'Supplier stock is above the configured threshold.');
232
+ const manufacturer = !entry.manufacturer && found.every((result) => !result.manufacturer)
233
+ ? dimension(45, 'Manufacturer is missing from BOM and supplier data.')
234
+ : found.length <= 1
235
+ ? dimension(70, 'Part has limited manufacturer/source diversity.')
236
+ : dimension(100, 'Manufacturer/source diversity is acceptable.');
237
+ const pkg = !entry.footprint
238
+ ? dimension(40, 'BOM entry has no footprint/package metadata.')
239
+ : packageMismatch
240
+ ? dimension(25, 'At least one supplier candidate appears package-incompatible.')
241
+ : missingPackageEvidence
242
+ ? dimension(70, 'Package could not be verified from supplier descriptions.')
243
+ : dimension(100, 'Package metadata is present and compatible.');
244
+ const freshness = supplierData.length === 0
245
+ ? dimension(30, 'No vendor data was collected for freshness review.')
246
+ : oldestCacheAge > config.staleVendorDataSeconds
247
+ ? dimension(55, 'At least one supplier response is older than the stale-data threshold.')
248
+ : dimension(100, 'Supplier data freshness is within threshold.');
249
+ const alternates = found
250
+ .map((result) => evaluateAlternate(entry, result))
251
+ .sort((a, b) => b.score - a.score);
252
+ const score = Math.round(lifecycle.score * 0.25 +
253
+ stock.score * 0.25 +
254
+ manufacturer.score * 0.15 +
255
+ pkg.score * 0.2 +
256
+ freshness.score * 0.15);
257
+ const safeAlternate = alternates.some((candidate) => candidate.compatibility !== 'unsafe');
258
+ const recommendedAction = supplierData.length === 0
259
+ ? 'insufficient_data'
260
+ : score < 45 || allDiscontinued || !safeAlternate
261
+ ? 'replace'
262
+ : score < config.minimumQualityScore
263
+ ? 'review'
264
+ : 'accept';
265
+ return {
266
+ score,
267
+ risk: riskFromScore(score),
268
+ dimensions: { lifecycle, stock, manufacturer, package: pkg, freshness },
269
+ alternates,
270
+ recommendedAction,
271
+ provenance: {
272
+ supplierCount: supplierData.length,
273
+ foundSupplierCount: found.length,
274
+ liveSupplierCount: live.length,
275
+ cachedSupplierCount: cached.length,
276
+ oldestCacheAgeSeconds: oldestCacheAge,
277
+ newestQueryAt,
278
+ },
279
+ };
280
+ }
63
281
  // ── Supplier query scope ───────────────────────────────────────────────────
64
282
  /**
65
283
  * Determine which supplier identifiers to query based on what the entry has.
@@ -169,6 +387,27 @@ export async function generateBomQualityReport(bomId, entries, adapters, config
169
387
  }
170
388
  }
171
389
  }
390
+ const componentQuality = assessComponentQuality(entry, supplierData, config);
391
+ if (supplierData.length === 0) {
392
+ issues.push(missingVendorDataIssue(entry.reference));
393
+ }
394
+ if (componentQuality.provenance.oldestCacheAgeSeconds > config.staleVendorDataSeconds) {
395
+ issues.push(staleVendorDataIssue(entry.reference, componentQuality.provenance.oldestCacheAgeSeconds));
396
+ }
397
+ if (componentQuality.dimensions.package.risk === 'critical' ||
398
+ componentQuality.dimensions.package.reason.includes('incompatible')) {
399
+ if (entry.footprint)
400
+ issues.push(packageMismatchIssue(entry.reference, entry.footprint));
401
+ }
402
+ if (componentQuality.dimensions.manufacturer.risk === 'high') {
403
+ issues.push(manufacturerRiskIssue(entry.reference, componentQuality.dimensions.manufacturer.reason));
404
+ }
405
+ if (componentQuality.dimensions.lifecycle.risk === 'critical') {
406
+ issues.push(lifecycleRiskIssue(entry.reference, componentQuality.dimensions.lifecycle.reason));
407
+ }
408
+ if (!componentQuality.alternates.some((candidate) => candidate.compatibility !== 'unsafe')) {
409
+ issues.push(noSafeAlternateIssue(entry.reference));
410
+ }
172
411
  return {
173
412
  reference: entry.reference,
174
413
  description: entry.value ?? '',
@@ -178,6 +417,7 @@ export async function generateBomQualityReport(bomId, entries, adapters, config
178
417
  mpn: entry.mpn,
179
418
  manufacturer: entry.manufacturer,
180
419
  supplierData,
420
+ componentQuality,
181
421
  issues,
182
422
  };
183
423
  }));
@@ -197,6 +437,13 @@ export async function generateBomQualityReport(bomId, entries, adapters, config
197
437
  rateLimitedCount: allIssues.filter((i) => i.type === 'rate_limited').length,
198
438
  timeoutCount: allIssues.filter((i) => i.type === 'timeout').length,
199
439
  invalidResponseCount: allIssues.filter((i) => i.type === 'invalid_response').length,
440
+ staleVendorDataCount: allIssues.filter((i) => i.type === 'stale_vendor_data').length,
441
+ missingVendorDataCount: allIssues.filter((i) => i.type === 'missing_vendor_data').length,
442
+ packageMismatchCount: allIssues.filter((i) => i.type === 'package_mismatch').length,
443
+ manufacturerRiskCount: allIssues.filter((i) => i.type === 'manufacturer_risk').length,
444
+ lifecycleRiskCount: allIssues.filter((i) => i.type === 'lifecycle_risk').length,
445
+ noSafeAlternateCount: allIssues.filter((i) => i.type === 'no_safe_alternate').length,
446
+ highRiskComponentCount: reportEntries.filter((e) => e.componentQuality.risk === 'high' || e.componentQuality.risk === 'critical').length,
200
447
  };
201
448
  return {
202
449
  bomId,
@@ -1 +1 @@
1
- {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../src/bom-quality/quality.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,8EAA8E;AAE9E,SAAS,KAAK,CACZ,IAAyB,EACzB,QAAsC,EACtC,SAAiB,EACjB,OAAe,EACf,OAAiC;IAEjC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,QAAgB,EAAE,MAAc;IACrE,OAAO,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE,yBAAyB,QAAQ,KAAK,MAAM,EAAE,EAAE;QACxF,QAAQ;QACR,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW,EAAE,MAA2B;IACnE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACtE,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7D,MAAM,IAAI,GACR,MAAM,KAAK,cAAc;QACzB,MAAM,KAAK,cAAc;QACzB,MAAM,KAAK,SAAS;QACpB,MAAM,KAAK,kBAAkB;QAC3B,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,aAAa,CAAC;IAEpB,MAAM,QAAQ,GAAG,MAAM,KAAK,cAAc,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IAEzF,OAAO,KAAK,CACV,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,YAAY,MAAM,CAAC,QAAQ,UAAU,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,oBAAoB,EAAE,EACvF;QACE,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM;QACN,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW,EAAE,SAAyB;IAC/D,OAAO,KAAK,CACV,eAAe,EACf,SAAS,EACT,GAAG,EACH,yCAAyC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAChE,EAAE,SAAS,EAAE,CACd,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,OAAO,KAAK,CACV,aAAa,EACb,SAAS,EACT,GAAG,EACH,yEAAyE,CAC1E,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW;IACxC,OAAO,KAAK,CACV,mBAAmB,EACnB,SAAS,EACT,GAAG,EACH,4EAA4E,CAC7E,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,GAAW,EAAE,QAAgB,EAAE,KAAa;IACjE,OAAO,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,gBAAgB,QAAQ,KAAK,KAAK,QAAQ,EAAE;QACpF,QAAQ;QACR,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAE9E;;;;GAIG;AACH,SAAS,YAAY,CACnB,KAAe;IAEf,MAAM,OAAO,GAGR,EAAE,CAAC;IAER,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4EAA4E;AAE5E,KAAK,UAAU,sBAAsB,CACnC,KAAe,EACf,aAAiD,EACjD,OAAoB;IAEpB,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,YAAY,GAA0B,EAAE,CAAC;IAC/C,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC1D,IAAI,MAAM,EAAE,CAAC;gBACX,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1B,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK;oBAAE,SAAS,GAAG,IAAI,CAAC;YACpD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;YAC/D,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AACnE,CAAC;AAED,8EAA8E;AAE9E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAa,EACb,OAAmB,EACnB,QAAoB,EACpB,SAA2B,0BAA0B;IAErD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAE9B,kCAAkC;IAClC,MAAM,WAAW,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC1B,sEAAsE;QACtE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,sBAAsB,CAC5E,KAAK,EACL,aAAa,EACb,MAAM,CACP,CAAC;QACF,IAAI,SAAS;YAAE,iBAAiB,GAAG,IAAI,CAAC;QAExC,sEAAsE;QACtE,MAAM,MAAM,GAAsB,EAAE,CAAC;QAErC,yEAAyE;QACzE,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3D,MAAM,qBAAqB,GAAG,YAAY,CAAC,MAAM,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,KAAK,cAAc,CACjD,CAAC;QAEF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,6CAA6C;YAC7C,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/D,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,2BAA2B,CAAC,CAAC,CAAC;QACvF,CAAC;QAED,KAAK,MAAM,EAAE,IAAI,qBAAqB,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC,CAAC;QACzF,CAAC;QAED,KAAK,MAAM,cAAc,IAAI,YAAY,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YACzE,IAAI,WAAW;gBAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;QAED,uBAAuB;QACvB,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjF,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YAC1D,0EAA0E;YAC1E,0DAA0D;YAC1D,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,qBAAqB;QACrB,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,2BAA2B;QAC3B,IAAI,MAAM,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,6CAA6C;QAC7C,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAC/E,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;oBAChC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,WAAW,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;YAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,YAAY;YACZ,MAAM;SACP,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,2EAA2E;IAC3E,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG;QACd,WAAW,EAAE,SAAS,CAAC,MAAM;QAC7B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM;QAC9D,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM;QAClE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;QAC3D,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,MAAM;QAC1E,iBAAiB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,MAAM;QAC7E,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,MAAM;QACzE,qBAAqB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC,MAAM;QACrF,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,MAAM;QACrE,iBAAiB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,MAAM;QAC5E,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,MAAM;QAC3E,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,MAAM;QAClE,oBAAoB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,MAAM;KACpF,CAAC;IAEF,OAAO;QACL,KAAK;QACL,WAAW,EAAE,GAAG;QAChB,YAAY,EAAE,OAAO,CAAC,MAAM;QAC5B,OAAO,EAAE,aAAa;QACtB,OAAO;QACP,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../src/bom-quality/quality.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,10 @@
7
7
  export type SupplierKind = 'lcsc' | 'mouser' | 'digikey' | 'jlcpcb';
8
8
  /** Lifecycle / status of a part at a supplier. */
9
9
  export type PartLifecycle = 'active' | 'discontinued' | 'unknown';
10
+ /** Normalized quality risk level. */
11
+ export type ComponentRiskLevel = 'low' | 'medium' | 'high' | 'critical';
12
+ /** Substitution compatibility classification. */
13
+ export type SubstitutionCompatibility = 'drop_in' | 'review_required' | 'unsafe';
10
14
  /** BOM entry as passed to quality check, extended with metadata. */
11
15
  export interface BomEntry {
12
16
  reference: string;
@@ -54,7 +58,51 @@ export interface SupplierQueryResult {
54
58
  statusCode?: number;
55
59
  }
56
60
  /** Issue type identifiers for the BOM quality report. */
57
- export type BomQualityIssueType = 'unavailable' | 'unauthorized' | 'rate_limited' | 'timeout' | 'invalid_response' | 'single_source' | 'missing_mpn' | 'missing_footprint' | 'low_stock';
61
+ export type BomQualityIssueType = 'stale_vendor_data' | 'missing_vendor_data' | 'package_mismatch' | 'manufacturer_risk' | 'lifecycle_risk' | 'no_safe_alternate' | 'unavailable' | 'unauthorized' | 'rate_limited' | 'timeout' | 'invalid_response' | 'single_source' | 'missing_mpn' | 'missing_footprint' | 'low_stock';
62
+ /** Per-dimension component quality score. */
63
+ export interface ComponentQualityDimension {
64
+ score: number;
65
+ risk: ComponentRiskLevel;
66
+ reason: string;
67
+ }
68
+ /** Suggested alternate or substitution candidate. */
69
+ export interface ComponentAlternateCandidate {
70
+ supplier: SupplierKind;
71
+ mpn?: string;
72
+ lcsc?: string;
73
+ manufacturer?: string;
74
+ description?: string;
75
+ lifecycle: PartLifecycle;
76
+ stock: number;
77
+ unitPrice?: number;
78
+ currency?: string;
79
+ compatibility: SubstitutionCompatibility;
80
+ score: number;
81
+ reasons: string[];
82
+ caveats: string[];
83
+ }
84
+ /** Aggregated lifecycle, stock, package and sourcing quality assessment. */
85
+ export interface ComponentQualityAssessment {
86
+ score: number;
87
+ risk: ComponentRiskLevel;
88
+ dimensions: {
89
+ lifecycle: ComponentQualityDimension;
90
+ stock: ComponentQualityDimension;
91
+ manufacturer: ComponentQualityDimension;
92
+ package: ComponentQualityDimension;
93
+ freshness: ComponentQualityDimension;
94
+ };
95
+ alternates: ComponentAlternateCandidate[];
96
+ recommendedAction: 'accept' | 'review' | 'replace' | 'insufficient_data';
97
+ provenance: {
98
+ supplierCount: number;
99
+ foundSupplierCount: number;
100
+ liveSupplierCount: number;
101
+ cachedSupplierCount: number;
102
+ oldestCacheAgeSeconds: number;
103
+ newestQueryAt?: string;
104
+ };
105
+ }
58
106
  /** A single quality issue found for a BOM entry. */
59
107
  export interface BomQualityIssue {
60
108
  type: BomQualityIssueType;
@@ -78,6 +126,8 @@ export interface BomQualityReport {
78
126
  manufacturer?: string;
79
127
  /** Supplier-specific data collected during the check. */
80
128
  supplierData: SupplierQueryResult[];
129
+ /** Lifecycle, stock, package, source diversity, freshness and alternate assessment. */
130
+ componentQuality: ComponentQualityAssessment;
81
131
  issues: BomQualityIssue[];
82
132
  }>;
83
133
  summary: {
@@ -94,6 +144,13 @@ export interface BomQualityReport {
94
144
  rateLimitedCount: number;
95
145
  timeoutCount: number;
96
146
  invalidResponseCount: number;
147
+ staleVendorDataCount: number;
148
+ missingVendorDataCount: number;
149
+ packageMismatchCount: number;
150
+ manufacturerRiskCount: number;
151
+ lifecycleRiskCount: number;
152
+ noSafeAlternateCount: number;
153
+ highRiskComponentCount: number;
97
154
  };
98
155
  /** Whether any suppliers returned errors during the check. */
99
156
  hasSupplierErrors: boolean;
@@ -108,5 +165,9 @@ export interface BomQualityConfig {
108
165
  requireMpn: boolean;
109
166
  /** Whether to treat a missing footprint as a warning. */
110
167
  requireFootprint: boolean;
168
+ /** Cache age above which supplier data is considered stale. */
169
+ staleVendorDataSeconds: number;
170
+ /** Minimum acceptable aggregate component quality score. */
171
+ minimumQualityScore: number;
111
172
  }
112
173
  export declare const DEFAULT_BOM_QUALITY_CONFIG: BomQualityConfig;
@@ -8,5 +8,7 @@ export const DEFAULT_BOM_QUALITY_CONFIG = {
8
8
  requireLcsc: false,
9
9
  requireMpn: true,
10
10
  requireFootprint: true,
11
+ staleVendorDataSeconds: 7 * 24 * 60 * 60,
12
+ minimumQualityScore: 70,
11
13
  };
12
14
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/bom-quality/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqIH,MAAM,CAAC,MAAM,0BAA0B,GAAqB;IAC1D,iBAAiB,EAAE,GAAG;IACtB,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,IAAI;IAChB,gBAAgB,EAAE,IAAI;CACvB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/bom-quality/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6MH,MAAM,CAAC,MAAM,0BAA0B,GAAqB;IAC1D,iBAAiB,EAAE,GAAG;IACtB,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,IAAI;IAChB,gBAAgB,EAAE,IAAI;IACtB,sBAAsB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;IACxC,mBAAmB,EAAE,EAAE;CACxB,CAAC"}
@@ -10,21 +10,21 @@ export const PROFILE_DEFINITIONS = {
10
10
  name: 'pro',
11
11
  label: 'Pro',
12
12
  description: 'Adds pick-and-place, PDF, netlist export for manufacturing workflows',
13
- approxToolCount: '46',
13
+ approxToolCount: '47',
14
14
  isDefault: false,
15
15
  },
16
16
  full: {
17
17
  name: 'full',
18
18
  label: 'Full',
19
19
  description: 'Adds controlled documented EasyEDA API method calls for full runtime control without raw JavaScript execution',
20
- approxToolCount: '55',
20
+ approxToolCount: '56',
21
21
  isDefault: false,
22
22
  },
23
23
  dev: {
24
24
  name: 'dev',
25
25
  label: 'Dev',
26
26
  description: 'Adds diagnostics probes for bridge methods and live component runtime shape inspection',
27
- approxToolCount: '59',
27
+ approxToolCount: '60',
28
28
  isDefault: false,
29
29
  },
30
30
  experimental: {
@@ -1 +1 @@
1
- export declare const SERVER_VERSION = "0.15.0";
1
+ export declare const SERVER_VERSION = "0.17.0";
@@ -1,2 +1,2 @@
1
- export const SERVER_VERSION = '0.15.0'; // x-release-please-version
1
+ export const SERVER_VERSION = '0.17.0'; // x-release-please-version
2
2
  //# sourceMappingURL=version.js.map
@@ -0,0 +1,2 @@
1
+ export { evaluateQuoteWorkflow } from './workflow.js';
2
+ export type * from './types.js';
@@ -0,0 +1,2 @@
1
+ export { evaluateQuoteWorkflow } from './workflow.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/quote-gating/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,87 @@
1
+ /** Quote workflow gating and confirmation types. */
2
+ export type QuoteProvider = 'jlcpcb' | 'custom';
3
+ export type QuoteAction = 'estimate' | 'verify_quote' | 'place_order';
4
+ export type QuoteWorkflowStatus = 'ready' | 'blocked' | 'requires_confirmation';
5
+ export type QuoteRiskLevel = 'low' | 'medium' | 'high' | 'critical';
6
+ export interface QuoteBoardSpec {
7
+ boardCount: number;
8
+ layers: number;
9
+ widthMm: number;
10
+ heightMm: number;
11
+ thicknessMm?: number;
12
+ surfaceFinish?: string;
13
+ solderMask?: string;
14
+ copperWeight?: string;
15
+ assembly?: boolean;
16
+ stencil?: boolean;
17
+ }
18
+ export interface QuoteCostBreakdownItem {
19
+ item: string;
20
+ cost: number;
21
+ }
22
+ export interface QuoteCostSnapshot {
23
+ total?: number;
24
+ currency?: string;
25
+ breakdown?: QuoteCostBreakdownItem[];
26
+ estimated: boolean;
27
+ nonBinding: boolean;
28
+ verifiedAt?: string;
29
+ source: 'local-estimate' | 'vendor-api' | 'user-provided';
30
+ }
31
+ export interface QuoteConfirmationInput {
32
+ confirmed?: boolean;
33
+ confirmationText?: string;
34
+ userId?: string;
35
+ reason?: string;
36
+ }
37
+ export interface QuoteWorkflowInput {
38
+ provider: QuoteProvider;
39
+ action: QuoteAction;
40
+ projectId?: string;
41
+ board: QuoteBoardSpec;
42
+ quote?: QuoteCostSnapshot;
43
+ confirmation?: QuoteConfirmationInput;
44
+ vendorTermsReviewed?: boolean;
45
+ productionFilesReady?: boolean;
46
+ exportManifestVerified?: boolean;
47
+ productionReviewPassed?: boolean;
48
+ allowedPaidOperations?: boolean;
49
+ }
50
+ export interface QuoteGateIssue {
51
+ code: 'QUOTE_VENDOR_TERMS_NOT_REVIEWED' | 'QUOTE_PRODUCTION_FILES_NOT_READY' | 'QUOTE_EXPORT_MANIFEST_NOT_VERIFIED' | 'QUOTE_PRODUCTION_REVIEW_NOT_PASSED' | 'QUOTE_PAID_OPERATION_UNSUPPORTED' | 'QUOTE_CONFIRMATION_REQUIRED' | 'QUOTE_NON_BINDING_ESTIMATE' | 'QUOTE_BOARD_SPEC_RISK';
52
+ severity: 'error' | 'warning' | 'info';
53
+ message: string;
54
+ remediationHint: string;
55
+ details?: Record<string, unknown>;
56
+ }
57
+ export interface QuoteAuditEvent {
58
+ id: string;
59
+ createdAt: string;
60
+ provider: QuoteProvider;
61
+ action: QuoteAction;
62
+ projectId?: string;
63
+ confirmed: boolean;
64
+ userId?: string;
65
+ confirmationText?: string;
66
+ reason?: string;
67
+ paidOperationAttempted: boolean;
68
+ paidOperationAllowed: boolean;
69
+ }
70
+ export interface QuoteWorkflowReport {
71
+ provider: QuoteProvider;
72
+ action: QuoteAction;
73
+ projectId: string;
74
+ status: QuoteWorkflowStatus;
75
+ allowed: boolean;
76
+ quote: QuoteCostSnapshot;
77
+ risk: {
78
+ level: QuoteRiskLevel;
79
+ paidOperation: boolean;
80
+ humanConfirmationRequired: boolean;
81
+ nonBindingEstimate: boolean;
82
+ vendorTermsReviewed: boolean;
83
+ };
84
+ issues: QuoteGateIssue[];
85
+ audit: QuoteAuditEvent;
86
+ summary: string;
87
+ }
@@ -0,0 +1,3 @@
1
+ /** Quote workflow gating and confirmation types. */
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/quote-gating/types.ts"],"names":[],"mappings":"AAAA,oDAAoD"}
@@ -0,0 +1,3 @@
1
+ import type { QuoteWorkflowInput, QuoteWorkflowReport } from './types.js';
2
+ export declare function evaluateQuoteWorkflow(input: QuoteWorkflowInput): QuoteWorkflowReport;
3
+ export declare const QUOTE_CONFIRMATION_TEXT = "I understand this quote workflow is non-binding and no paid order will be placed by this tool";