easyeda-mcp-pro 0.34.2 → 0.34.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -8
- package/dist/bridge/cdp-manager.js +60 -7
- package/dist/bridge/cdp-manager.js.map +1 -1
- package/dist/bridge/types.d.ts +0 -1
- package/dist/bridge/types.js +0 -1
- package/dist/bridge/types.js.map +1 -1
- package/dist/cli/local-setup.js +14 -7
- package/dist/cli/local-setup.js.map +1 -1
- package/dist/config/env.d.ts +19 -17
- package/dist/config/env.js +64 -35
- package/dist/config/env.js.map +1 -1
- package/dist/config/version.d.ts +1 -1
- package/dist/config/version.js +1 -1
- package/dist/pcb-layout/planner.js +11 -14
- package/dist/pcb-layout/planner.js.map +1 -1
- package/dist/pcb-layout/types.d.ts +1 -1
- package/dist/tools/L1_board.js +15 -0
- package/dist/tools/L1_board.js.map +1 -1
- package/dist/tools/L1_drc_erc.js +7 -3
- package/dist/tools/L1_drc_erc.js.map +1 -1
- package/dist/tools/L1_pcb_write.js +17 -30
- package/dist/tools/L1_pcb_write.js.map +1 -1
- package/dist/tools/L1_schematic_read.js +142 -23
- package/dist/tools/L1_schematic_read.js.map +1 -1
- package/dist/tools/registry.d.ts +3 -0
- package/dist/tools/registry.js +4 -3
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/schematic-helpers.d.ts +3 -1
- package/dist/tools/schematic-helpers.js +6 -3
- package/dist/tools/schematic-helpers.js.map +1 -1
- package/dist/workflows/collision.d.ts +33 -3
- package/dist/workflows/collision.js +165 -25
- package/dist/workflows/collision.js.map +1 -1
- package/easyeda-bridge-extension.eext +0 -0
- package/package.json +7 -2
|
@@ -11,11 +11,14 @@ function asString(value) {
|
|
|
11
11
|
* flat-or-nested (top-level x vs state.X) result shape. Shared by
|
|
12
12
|
* easyeda_schematic_component_pins and the semantic-ERC auto-extractor.
|
|
13
13
|
*/
|
|
14
|
-
export async function fetchComponentPins(ctx, primitiveId) {
|
|
15
|
-
const
|
|
14
|
+
export async function fetchComponentPins(ctx, primitiveId, opts) {
|
|
15
|
+
const params = {
|
|
16
16
|
path: 'SCH_PrimitiveComponent.getAllPinsByPrimitiveId',
|
|
17
17
|
args: [primitiveId],
|
|
18
|
-
}
|
|
18
|
+
};
|
|
19
|
+
const result = opts
|
|
20
|
+
? await ctx.bridge.call('api.call', params, opts)
|
|
21
|
+
: await ctx.bridge.call('api.call', params);
|
|
19
22
|
const resultObj = result;
|
|
20
23
|
const pins = Array.isArray(resultObj?.result) ? resultObj.result : [];
|
|
21
24
|
return pins.map((p) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schematic-helpers.js","sourceRoot":"","sources":["../../src/tools/schematic-helpers.ts"],"names":[],"mappings":"AAeA;yEACyE;AACzE,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QACzF,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QACf,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAgB,EAChB,WAAmB;
|
|
1
|
+
{"version":3,"file":"schematic-helpers.js","sourceRoot":"","sources":["../../src/tools/schematic-helpers.ts"],"names":[],"mappings":"AAeA;yEACyE;AACzE,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QACzF,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QACf,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAgB,EAChB,WAAmB,EACnB,IAA6B;IAE7B,MAAM,MAAM,GAAG;QACb,IAAI,EAAE,gDAAgD;QACtD,IAAI,EAAE,CAAC,WAAW,CAAC;KACpB,CAAC;IACF,MAAM,MAAM,GAAG,IAAI;QACjB,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAA6C,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC;QAC7F,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAA6C,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,MAAiE,CAAC;IACpF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAA0B,EAAE,EAAE;QAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,KAA4C,CAAC;QAC7D,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,CAAC;QAC9D,OAAO;YACL,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE;YACpE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE;YAC9D,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1D,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1D,QAAQ,EAAE,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,IAAI,CAAC,CAAC;YACtF,SAAS,EAAE,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,CAAC;YAC1F,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC;SAC3B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -24,10 +24,40 @@ export interface PinCollision {
|
|
|
24
24
|
y: number;
|
|
25
25
|
pins: CollisionPinRef[];
|
|
26
26
|
}
|
|
27
|
+
export interface CollisionScanFailure {
|
|
28
|
+
primitiveId: string;
|
|
29
|
+
error: string;
|
|
30
|
+
}
|
|
31
|
+
export interface CollisionScanDiagnostics {
|
|
32
|
+
stage: 'complete' | 'component_enumeration' | 'pin_lookup';
|
|
33
|
+
componentCount: number;
|
|
34
|
+
componentsScanned: number;
|
|
35
|
+
failedComponents: CollisionScanFailure[];
|
|
36
|
+
durationMs: number;
|
|
37
|
+
componentEnumerationMs: number;
|
|
38
|
+
pinLookupMs: number;
|
|
39
|
+
concurrency: number;
|
|
40
|
+
perCallTimeoutMs: number;
|
|
41
|
+
overallTimeoutMs: number;
|
|
42
|
+
stageError?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface CollisionScanResult {
|
|
45
|
+
collisions: PinCollision[];
|
|
46
|
+
diagnostics: CollisionScanDiagnostics;
|
|
47
|
+
}
|
|
48
|
+
export declare const COLLISION_SCAN_CONCURRENCY = 4;
|
|
49
|
+
export declare const COLLISION_PIN_LOOKUP_TIMEOUT_MS = 5000;
|
|
50
|
+
export declare const COLLISION_SCAN_TIMEOUT_MS = 20000;
|
|
51
|
+
export declare function collisionScanErrorMessage(diagnostics: CollisionScanDiagnostics): string;
|
|
52
|
+
/**
|
|
53
|
+
* Full-sheet pin-coordinate collision scan with timing and failure diagnostics.
|
|
54
|
+
* Successful pin lookups are still analyzed when another component stalls.
|
|
55
|
+
*/
|
|
56
|
+
export declare function scanSheetForPinCollisionsDetailed(ctx: ToolContext, projectId: string): Promise<CollisionScanResult>;
|
|
27
57
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
58
|
+
* Strict compatibility wrapper used by safety-sensitive workflows. Standalone tooling uses
|
|
59
|
+
* the detailed variant so it can expose partial results, while placement reconciliation must
|
|
60
|
+
* fail closed when any component was not inspected.
|
|
31
61
|
*/
|
|
32
62
|
export declare function scanSheetForPinCollisions(ctx: ToolContext, projectId: string): Promise<PinCollision[]>;
|
|
33
63
|
export interface ReconcilePlacementResult {
|
|
@@ -14,17 +14,42 @@
|
|
|
14
14
|
* @module
|
|
15
15
|
*/
|
|
16
16
|
import { fetchComponentPins } from '../tools/schematic-helpers.js';
|
|
17
|
+
export const COLLISION_SCAN_CONCURRENCY = 4;
|
|
18
|
+
export const COLLISION_PIN_LOOKUP_TIMEOUT_MS = 5_000;
|
|
19
|
+
export const COLLISION_SCAN_TIMEOUT_MS = 20_000;
|
|
17
20
|
/** Round to the same precision the bridge's own coordinate-key helper uses. */
|
|
18
21
|
function pointKey(x, y) {
|
|
19
22
|
return `${Math.round(x * 1000) / 1000},${Math.round(y * 1000) / 1000}`;
|
|
20
23
|
}
|
|
24
|
+
function createScanBudget() {
|
|
25
|
+
const startedAt = Date.now();
|
|
26
|
+
return {
|
|
27
|
+
startedAt,
|
|
28
|
+
deadlineAt: startedAt + COLLISION_SCAN_TIMEOUT_MS,
|
|
29
|
+
concurrency: COLLISION_SCAN_CONCURRENCY,
|
|
30
|
+
perCallTimeoutMs: COLLISION_PIN_LOOKUP_TIMEOUT_MS,
|
|
31
|
+
overallTimeoutMs: COLLISION_SCAN_TIMEOUT_MS,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function remainingCallTimeoutMs(budget) {
|
|
35
|
+
const remainingMs = budget.deadlineAt - Date.now();
|
|
36
|
+
if (remainingMs <= 0)
|
|
37
|
+
return 0;
|
|
38
|
+
return Math.max(1, Math.min(budget.perCallTimeoutMs, remainingMs));
|
|
39
|
+
}
|
|
40
|
+
function overallDeadlineError(stage, budget) {
|
|
41
|
+
return `Collision scan overall deadline of ${budget.overallTimeoutMs}ms expired during ${stage}`;
|
|
42
|
+
}
|
|
21
43
|
/** Page through `schematic.listComponents` and return every component's primitiveId. */
|
|
22
|
-
async function listAllComponentIds(ctx, projectId) {
|
|
44
|
+
async function listAllComponentIds(ctx, projectId, budget) {
|
|
23
45
|
const pageSize = 500;
|
|
24
46
|
const all = [];
|
|
25
47
|
let offset = 0;
|
|
26
48
|
for (;;) {
|
|
27
|
-
const
|
|
49
|
+
const timeoutMs = remainingCallTimeoutMs(budget);
|
|
50
|
+
if (timeoutMs === 0)
|
|
51
|
+
throw new Error(overallDeadlineError('component enumeration', budget));
|
|
52
|
+
const result = await ctx.bridge.call('schematic.listComponents', { projectId, limit: pageSize, offset }, { timeoutMs });
|
|
28
53
|
const items = result?.items ?? [];
|
|
29
54
|
for (const item of items) {
|
|
30
55
|
if (item.primitiveId)
|
|
@@ -37,22 +62,61 @@ async function listAllComponentIds(ctx, projectId) {
|
|
|
37
62
|
}
|
|
38
63
|
return all;
|
|
39
64
|
}
|
|
40
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Build a coordinate -> pins map with a bounded worker pool. Each component lookup receives
|
|
67
|
+
* an explicit bridge deadline and failures are retained so callers can return partial,
|
|
68
|
+
* actionable diagnostics instead of abandoning the entire scan at the first stalled RPC.
|
|
69
|
+
*/
|
|
70
|
+
async function buildPinCoordinateMap(ctx, components, budget) {
|
|
41
71
|
const map = new Map();
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
72
|
+
const failedComponents = [];
|
|
73
|
+
let componentsScanned = 0;
|
|
74
|
+
let nextIndex = 0;
|
|
75
|
+
const worker = async () => {
|
|
76
|
+
for (;;) {
|
|
77
|
+
const index = nextIndex;
|
|
78
|
+
nextIndex += 1;
|
|
79
|
+
if (index >= components.length)
|
|
80
|
+
return;
|
|
81
|
+
const component = components[index];
|
|
82
|
+
if (!component)
|
|
83
|
+
return;
|
|
84
|
+
const timeoutMs = remainingCallTimeoutMs(budget);
|
|
85
|
+
if (timeoutMs === 0) {
|
|
86
|
+
failedComponents.push({
|
|
87
|
+
primitiveId: component.primitiveId,
|
|
88
|
+
error: overallDeadlineError('pin lookup', budget),
|
|
89
|
+
});
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const pins = await fetchComponentPins(ctx, component.primitiveId, { timeoutMs });
|
|
94
|
+
componentsScanned += 1;
|
|
95
|
+
for (const pin of pins) {
|
|
96
|
+
const key = pointKey(pin.x, pin.y);
|
|
97
|
+
const bucket = map.get(key) ?? { x: pin.x, y: pin.y, pins: [] };
|
|
98
|
+
bucket.pins.push({
|
|
99
|
+
primitiveId: component.primitiveId,
|
|
100
|
+
pinNumber: pin.pinNumber,
|
|
101
|
+
pinName: pin.pinName,
|
|
102
|
+
});
|
|
103
|
+
map.set(key, bucket);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
failedComponents.push({
|
|
108
|
+
primitiveId: component.primitiveId,
|
|
109
|
+
error: error instanceof Error ? error.message : String(error),
|
|
110
|
+
});
|
|
111
|
+
}
|
|
53
112
|
}
|
|
54
|
-
}
|
|
55
|
-
|
|
113
|
+
};
|
|
114
|
+
const workerCount = Math.min(budget.concurrency, components.length);
|
|
115
|
+
await Promise.all(Array.from({ length: workerCount }, () => worker()));
|
|
116
|
+
const componentOrder = new Map(components.map((component, index) => [component.primitiveId, index]));
|
|
117
|
+
failedComponents.sort((a, b) => (componentOrder.get(a.primitiveId) ?? Number.MAX_SAFE_INTEGER) -
|
|
118
|
+
(componentOrder.get(b.primitiveId) ?? Number.MAX_SAFE_INTEGER));
|
|
119
|
+
return { map, componentsScanned, failedComponents };
|
|
56
120
|
}
|
|
57
121
|
function collisionsFromMap(map, onlyInvolving) {
|
|
58
122
|
const collisions = [];
|
|
@@ -66,15 +130,76 @@ function collisionsFromMap(map, onlyInvolving) {
|
|
|
66
130
|
}
|
|
67
131
|
return collisions;
|
|
68
132
|
}
|
|
133
|
+
export function collisionScanErrorMessage(diagnostics) {
|
|
134
|
+
if (diagnostics.stage === 'component_enumeration') {
|
|
135
|
+
return `Collision scan incomplete during component enumeration: ${diagnostics.stageError ?? 'unknown bridge error'}.`;
|
|
136
|
+
}
|
|
137
|
+
const failedIds = diagnostics.failedComponents.map((failure) => failure.primitiveId).join(', ');
|
|
138
|
+
return (`Collision scan incomplete: ${diagnostics.failedComponents.length}/${diagnostics.componentCount} ` +
|
|
139
|
+
`component pin lookups failed${failedIds ? ` (${failedIds})` : ''}. Partial collision results are included.`);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Full-sheet pin-coordinate collision scan with timing and failure diagnostics.
|
|
143
|
+
* Successful pin lookups are still analyzed when another component stalls.
|
|
144
|
+
*/
|
|
145
|
+
export async function scanSheetForPinCollisionsDetailed(ctx, projectId) {
|
|
146
|
+
const budget = createScanBudget();
|
|
147
|
+
const enumerationStartedAt = Date.now();
|
|
148
|
+
let components;
|
|
149
|
+
try {
|
|
150
|
+
components = await listAllComponentIds(ctx, projectId, budget);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
const now = Date.now();
|
|
154
|
+
return {
|
|
155
|
+
collisions: [],
|
|
156
|
+
diagnostics: {
|
|
157
|
+
stage: 'component_enumeration',
|
|
158
|
+
componentCount: 0,
|
|
159
|
+
componentsScanned: 0,
|
|
160
|
+
failedComponents: [],
|
|
161
|
+
durationMs: now - budget.startedAt,
|
|
162
|
+
componentEnumerationMs: now - enumerationStartedAt,
|
|
163
|
+
pinLookupMs: 0,
|
|
164
|
+
concurrency: budget.concurrency,
|
|
165
|
+
perCallTimeoutMs: budget.perCallTimeoutMs,
|
|
166
|
+
overallTimeoutMs: budget.overallTimeoutMs,
|
|
167
|
+
stageError: error instanceof Error ? error.message : String(error),
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
const enumerationFinishedAt = Date.now();
|
|
172
|
+
const pinLookupStartedAt = enumerationFinishedAt;
|
|
173
|
+
const pinMap = await buildPinCoordinateMap(ctx, components, budget);
|
|
174
|
+
const finishedAt = Date.now();
|
|
175
|
+
const complete = pinMap.failedComponents.length === 0;
|
|
176
|
+
return {
|
|
177
|
+
collisions: collisionsFromMap(pinMap.map),
|
|
178
|
+
diagnostics: {
|
|
179
|
+
stage: complete ? 'complete' : 'pin_lookup',
|
|
180
|
+
componentCount: components.length,
|
|
181
|
+
componentsScanned: pinMap.componentsScanned,
|
|
182
|
+
failedComponents: pinMap.failedComponents,
|
|
183
|
+
durationMs: finishedAt - budget.startedAt,
|
|
184
|
+
componentEnumerationMs: enumerationFinishedAt - enumerationStartedAt,
|
|
185
|
+
pinLookupMs: finishedAt - pinLookupStartedAt,
|
|
186
|
+
concurrency: budget.concurrency,
|
|
187
|
+
perCallTimeoutMs: budget.perCallTimeoutMs,
|
|
188
|
+
overallTimeoutMs: budget.overallTimeoutMs,
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
}
|
|
69
192
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
193
|
+
* Strict compatibility wrapper used by safety-sensitive workflows. Standalone tooling uses
|
|
194
|
+
* the detailed variant so it can expose partial results, while placement reconciliation must
|
|
195
|
+
* fail closed when any component was not inspected.
|
|
73
196
|
*/
|
|
74
197
|
export async function scanSheetForPinCollisions(ctx, projectId) {
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
198
|
+
const result = await scanSheetForPinCollisionsDetailed(ctx, projectId);
|
|
199
|
+
if (result.diagnostics.stage !== 'complete') {
|
|
200
|
+
throw new Error(collisionScanErrorMessage(result.diagnostics));
|
|
201
|
+
}
|
|
202
|
+
return result.collisions;
|
|
78
203
|
}
|
|
79
204
|
const NUDGE_ATTEMPTS = 3;
|
|
80
205
|
const NUDGE_STEP = 30;
|
|
@@ -92,10 +217,25 @@ export async function reconcilePlacementCollisions(ctx, projectId, candidatePrim
|
|
|
92
217
|
if (candidateSet.size === 0) {
|
|
93
218
|
return { unresolvedCollisions: [], movedComponents };
|
|
94
219
|
}
|
|
95
|
-
const
|
|
220
|
+
const enumerationBudget = createScanBudget();
|
|
221
|
+
const components = await listAllComponentIds(ctx, projectId, enumerationBudget);
|
|
96
222
|
for (let attempt = 0; attempt <= NUDGE_ATTEMPTS; attempt += 1) {
|
|
97
|
-
const
|
|
98
|
-
|
|
223
|
+
const pinMap = await buildPinCoordinateMap(ctx, components, createScanBudget());
|
|
224
|
+
if (pinMap.failedComponents.length > 0) {
|
|
225
|
+
throw new Error(collisionScanErrorMessage({
|
|
226
|
+
stage: 'pin_lookup',
|
|
227
|
+
componentCount: components.length,
|
|
228
|
+
componentsScanned: pinMap.componentsScanned,
|
|
229
|
+
failedComponents: pinMap.failedComponents,
|
|
230
|
+
durationMs: 0,
|
|
231
|
+
componentEnumerationMs: 0,
|
|
232
|
+
pinLookupMs: 0,
|
|
233
|
+
concurrency: COLLISION_SCAN_CONCURRENCY,
|
|
234
|
+
perCallTimeoutMs: COLLISION_PIN_LOOKUP_TIMEOUT_MS,
|
|
235
|
+
overallTimeoutMs: COLLISION_SCAN_TIMEOUT_MS,
|
|
236
|
+
}));
|
|
237
|
+
}
|
|
238
|
+
const collisions = collisionsFromMap(pinMap.map, candidateSet);
|
|
99
239
|
if (collisions.length === 0) {
|
|
100
240
|
return { unresolvedCollisions: [], movedComponents };
|
|
101
241
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collision.js","sourceRoot":"","sources":["../../src/workflows/collision.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"collision.js","sourceRoot":"","sources":["../../src/workflows/collision.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "easyeda-mcp-pro",
|
|
3
|
-
"version": "0.34.
|
|
3
|
+
"version": "0.34.4",
|
|
4
4
|
"mcpName": "io.github.oaslananka/easyeda-mcp-pro",
|
|
5
5
|
"description": "MCP server for EasyEDA Pro: PCB inspection, BOM, exports, and hardware review.",
|
|
6
6
|
"keywords": [
|
|
@@ -79,7 +79,12 @@
|
|
|
79
79
|
"eval:golden": "tsx scripts/run-evals.mts",
|
|
80
80
|
"eval:golden:update": "tsx scripts/run-evals.mts --update-baseline",
|
|
81
81
|
"verify": "pnpm format:check && pnpm typecheck && pnpm typecheck:extension && pnpm lint && pnpm lint:tools && pnpm verify:tool-coverage && pnpm test && pnpm test:extension && pnpm build && pnpm build:extension && pnpm check:metadata && pnpm docs:build",
|
|
82
|
-
"smoke:schematic-transactions": "tsx scripts/live-schematic-transaction-smoke.mts"
|
|
82
|
+
"smoke:schematic-transactions": "tsx scripts/live-schematic-transaction-smoke.mts",
|
|
83
|
+
"security:semgrep": "semgrep scan --config .semgrep.yml --error --metrics=off .",
|
|
84
|
+
"security:semgrep:test": "node scripts/test-semgrep-rules.mjs",
|
|
85
|
+
"security:snyk:oss": "corepack pnpm dlx snyk@1.1306.1 test --all-projects --severity-threshold=high",
|
|
86
|
+
"security:snyk:code": "corepack pnpm dlx snyk@1.1306.1 code test --severity-threshold=high",
|
|
87
|
+
"security:snyk": "pnpm security:snyk:oss && pnpm security:snyk:code"
|
|
83
88
|
},
|
|
84
89
|
"dependencies": {
|
|
85
90
|
"@modelcontextprotocol/sdk": "^1.29.0",
|