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.
@@ -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 result = await ctx.bridge.call('api.call', {
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;IAEnB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAA6C,UAAU,EAAE;QAC3F,IAAI,EAAE,gDAAgD;QACtD,IAAI,EAAE,CAAC,WAAW,CAAC;KACpB,CAAC,CAAC;IACH,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"}
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
- * Full-sheet pin-coordinate collision scan. Read-only — used both standalone
29
- * (`easyeda_schematic_check_collisions`) and as the basis for the workflow-apply
30
- * reconcile step below.
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 result = await ctx.bridge.call('schematic.listComponents', { projectId, limit: pageSize, offset });
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
- async function buildPinCoordinateMap(ctx, components) {
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
- for (const component of components) {
43
- const pins = await fetchComponentPins(ctx, component.primitiveId);
44
- for (const pin of pins) {
45
- const key = pointKey(pin.x, pin.y);
46
- const bucket = map.get(key) ?? { x: pin.x, y: pin.y, pins: [] };
47
- bucket.pins.push({
48
- primitiveId: component.primitiveId,
49
- pinNumber: pin.pinNumber,
50
- pinName: pin.pinName,
51
- });
52
- map.set(key, bucket);
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
- return map;
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
- * Full-sheet pin-coordinate collision scan. Read-only — used both standalone
71
- * (`easyeda_schematic_check_collisions`) and as the basis for the workflow-apply
72
- * reconcile step below.
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 components = await listAllComponentIds(ctx, projectId);
76
- const map = await buildPinCoordinateMap(ctx, components);
77
- return collisionsFromMap(map);
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 components = await listAllComponentIds(ctx, projectId);
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 map = await buildPinCoordinateMap(ctx, components);
98
- const collisions = collisionsFromMap(map, candidateSet);
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;AAkBnE,+EAA+E;AAC/E,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;AACzE,CAAC;AAED,wFAAwF;AACxF,KAAK,UAAU,mBAAmB,CAChC,GAAgB,EAChB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,GAAG,CAAC;IACrB,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,SAAS,CAAC;QACR,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAGlC,0BAA0B,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,WAAW;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;QACvB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,IAAI,KAAK;YAAE,MAAM;IACnD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAaD,KAAK,UAAU,qBAAqB,CAClC,GAAgB,EAChB,UAA+B;IAE/B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;QAClE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACf,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC,CAAC;YACH,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,iBAAiB,CACxB,GAA6B,EAC7B,aAA2B;IAE3B,MAAM,UAAU,GAAmB,EAAE,CAAC;IACtC,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAC1E,IAAI,kBAAkB,CAAC,IAAI,GAAG,CAAC;YAAE,SAAS;QAC1C,IAAI,aAAa,IAAI,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAAE,SAAS;QAC5F,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,GAAgB,EAChB,SAAiB;IAEjB,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACzD,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AASD,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,GAAgB,EAChB,SAAiB,EACjB,qBAA+B,EAC/B,kBAAyD;IAEzD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAoC,CAAC;IACpE,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,oBAAoB,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAE7D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,cAAc,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAC9D,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACxD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,oBAAoB,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC;QACvD,CAAC;QACD,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;YAC/B,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;QAC/D,CAAC;QAED,MAAM,mBAAmB,GAAG,IAAI,GAAG,CACjC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAC/B,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAC9E,CACF,CAAC;QACF,KAAK,MAAM,WAAW,IAAI,mBAAmB,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,MAAM,MAAM,GAAG;gBACb,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;gBACzC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;aAC1C,CAAC;YACF,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;gBACjD,WAAW;gBACX,QAAQ,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;aACvC,CAAC,CAAC;YACH,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAC5C,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,EAAE,oBAAoB,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC;AACvD,CAAC"}
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;AA8DnE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,+BAA+B,GAAG,KAAK,CAAC;AACrD,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD,+EAA+E;AAC/E,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,OAAO;QACL,SAAS;QACT,UAAU,EAAE,SAAS,GAAG,yBAAyB;QACjD,WAAW,EAAE,0BAA0B;QACvC,gBAAgB,EAAE,+BAA+B;QACjD,gBAAgB,EAAE,yBAAyB;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,MAA2B;IACzD,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACnD,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa,EAAE,MAA2B;IACtE,OAAO,sCAAsC,MAAM,CAAC,gBAAgB,qBAAqB,KAAK,EAAE,CAAC;AACnG,CAAC;AAED,wFAAwF;AACxF,KAAK,UAAU,mBAAmB,CAChC,GAAgB,EAChB,SAAiB,EACjB,MAA2B;IAE3B,MAAM,QAAQ,GAAG,GAAG,CAAC;IACrB,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,SAAS,CAAC;QACR,MAAM,SAAS,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,SAAS,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5F,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAGlC,0BAA0B,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACrF,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,WAAW;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;QACvB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,IAAI,KAAK;YAAE,MAAM;IACnD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,qBAAqB,CAClC,GAAgB,EAChB,UAA+B,EAC/B,MAA2B;IAE3B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,MAAM,gBAAgB,GAA2B,EAAE,CAAC;IACpD,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,MAAM,MAAM,GAAG,KAAK,IAAmB,EAAE;QACvC,SAAS,CAAC;YACR,MAAM,KAAK,GAAG,SAAS,CAAC;YACxB,SAAS,IAAI,CAAC,CAAC;YACf,IAAI,KAAK,IAAI,UAAU,CAAC,MAAM;gBAAE,OAAO;YAEvC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,SAAS;gBAAE,OAAO;YACvB,MAAM,SAAS,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;gBACpB,gBAAgB,CAAC,IAAI,CAAC;oBACpB,WAAW,EAAE,SAAS,CAAC,WAAW;oBAClC,KAAK,EAAE,oBAAoB,CAAC,YAAY,EAAE,MAAM,CAAC;iBAClD,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;gBACjF,iBAAiB,IAAI,CAAC,CAAC;gBACvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;oBACnC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;oBAChE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;wBACf,WAAW,EAAE,SAAS,CAAC,WAAW;wBAClC,SAAS,EAAE,GAAG,CAAC,SAAS;wBACxB,OAAO,EAAE,GAAG,CAAC,OAAO;qBACrB,CAAC,CAAC;oBACH,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,gBAAgB,CAAC,IAAI,CAAC;oBACpB,WAAW,EAAE,SAAS,CAAC,WAAW;oBAClC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACpE,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEvE,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAU,CAAC,CAC9E,CAAC;IACF,gBAAgB,CAAC,IAAI,CACnB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC;QAC9D,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC,CACjE,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,iBAAiB,CACxB,GAA6B,EAC7B,aAA2B;IAE3B,MAAM,UAAU,GAAmB,EAAE,CAAC;IACtC,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAC1E,IAAI,kBAAkB,CAAC,IAAI,GAAG,CAAC;YAAE,SAAS;QAC1C,IAAI,aAAa,IAAI,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAAE,SAAS;QAC5F,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,WAAqC;IAC7E,IAAI,WAAW,CAAC,KAAK,KAAK,uBAAuB,EAAE,CAAC;QAClD,OAAO,2DAA2D,WAAW,CAAC,UAAU,IAAI,sBAAsB,GAAG,CAAC;IACxH,CAAC;IACD,MAAM,SAAS,GAAG,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChG,OAAO,CACL,8BAA8B,WAAW,CAAC,gBAAgB,CAAC,MAAM,IAAI,WAAW,CAAC,cAAc,GAAG;QAClG,+BAA+B,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,2CAA2C,CAC7G,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,GAAgB,EAChB,SAAiB;IAEjB,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACxC,IAAI,UAA+B,CAAC;IAEpC,IAAI,CAAC;QACH,UAAU,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,OAAO;YACL,UAAU,EAAE,EAAE;YACd,WAAW,EAAE;gBACX,KAAK,EAAE,uBAAuB;gBAC9B,cAAc,EAAE,CAAC;gBACjB,iBAAiB,EAAE,CAAC;gBACpB,gBAAgB,EAAE,EAAE;gBACpB,UAAU,EAAE,GAAG,GAAG,MAAM,CAAC,SAAS;gBAClC,sBAAsB,EAAE,GAAG,GAAG,oBAAoB;gBAClD,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,UAAU,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aACnE;SACF,CAAC;IACJ,CAAC;IAED,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,CAAC;IAEtD,OAAO;QACL,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC;QACzC,WAAW,EAAE;YACX,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY;YAC3C,cAAc,EAAE,UAAU,CAAC,MAAM;YACjC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC,SAAS;YACzC,sBAAsB,EAAE,qBAAqB,GAAG,oBAAoB;YACpE,WAAW,EAAE,UAAU,GAAG,kBAAkB;YAC5C,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;SAC1C;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,GAAgB,EAChB,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,iCAAiC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACvE,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,MAAM,CAAC,UAAU,CAAC;AAC3B,CAAC;AASD,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,GAAgB,EAChB,SAAiB,EACjB,qBAA+B,EAC/B,kBAAyD;IAEzD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAoC,CAAC;IACpE,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,oBAAoB,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,iBAAiB,GAAG,gBAAgB,EAAE,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAEhF,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,cAAc,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAChF,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,yBAAyB,CAAC;gBACxB,KAAK,EAAE,YAAY;gBACnB,cAAc,EAAE,UAAU,CAAC,MAAM;gBACjC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,UAAU,EAAE,CAAC;gBACb,sBAAsB,EAAE,CAAC;gBACzB,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,0BAA0B;gBACvC,gBAAgB,EAAE,+BAA+B;gBACjD,gBAAgB,EAAE,yBAAyB;aAC5C,CAAC,CACH,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAC/D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,oBAAoB,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC;QACvD,CAAC;QACD,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;YAC/B,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;QAC/D,CAAC;QAED,MAAM,mBAAmB,GAAG,IAAI,GAAG,CACjC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAC/B,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAC9E,CACF,CAAC;QACF,KAAK,MAAM,WAAW,IAAI,mBAAmB,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,MAAM,MAAM,GAAG;gBACb,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;gBACzC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;aAC1C,CAAC;YACF,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;gBACjD,WAAW;gBACX,QAAQ,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;aACvC,CAAC,CAAC;YACH,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAC5C,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,EAAE,oBAAoB,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC;AACvD,CAAC"}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easyeda-mcp-pro",
3
- "version": "0.34.2",
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",