easyeda-mcp-pro 0.20.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/README.md +84 -16
  2. package/dist/bom-quality/adapter.js +4 -1
  3. package/dist/bom-quality/adapter.js.map +1 -1
  4. package/dist/bom-quality/types.d.ts +2 -0
  5. package/dist/bom-quality/types.js.map +1 -1
  6. package/dist/bridge/hotswap-watcher.d.ts +12 -0
  7. package/dist/bridge/hotswap-watcher.js +96 -0
  8. package/dist/bridge/hotswap-watcher.js.map +1 -0
  9. package/dist/bridge/hotswap.d.ts +50 -0
  10. package/dist/bridge/hotswap.js +69 -0
  11. package/dist/bridge/hotswap.js.map +1 -0
  12. package/dist/bridge/manager.d.ts +20 -0
  13. package/dist/bridge/manager.js +144 -14
  14. package/dist/bridge/manager.js.map +1 -1
  15. package/dist/bridge/protocol.d.ts +6 -0
  16. package/dist/bridge/protocol.js +16 -0
  17. package/dist/bridge/protocol.js.map +1 -1
  18. package/dist/bridge/types.d.ts +41 -24
  19. package/dist/bridge/types.js +17 -0
  20. package/dist/bridge/types.js.map +1 -1
  21. package/dist/catalog/errors.d.ts +2 -0
  22. package/dist/catalog/errors.js +2 -0
  23. package/dist/catalog/errors.js.map +1 -1
  24. package/dist/catalog/index.d.ts +3 -1
  25. package/dist/catalog/index.js +3 -1
  26. package/dist/catalog/index.js.map +1 -1
  27. package/dist/catalog/ingest.d.ts +56 -0
  28. package/dist/catalog/ingest.js +166 -0
  29. package/dist/catalog/ingest.js.map +1 -0
  30. package/dist/catalog/schema.d.ts +13 -3
  31. package/dist/catalog/schema.js +10 -0
  32. package/dist/catalog/schema.js.map +1 -1
  33. package/dist/catalog/validation.js +25 -1
  34. package/dist/catalog/validation.js.map +1 -1
  35. package/dist/circuit/circuit-ir.d.ts +20 -20
  36. package/dist/circuit/component-planning.d.ts +36 -8
  37. package/dist/circuit/component-planning.js +78 -15
  38. package/dist/circuit/component-planning.js.map +1 -1
  39. package/dist/cli/auto-setup.js +38 -0
  40. package/dist/cli/auto-setup.js.map +1 -1
  41. package/dist/cli/local-setup.d.ts +4 -1
  42. package/dist/cli/local-setup.js +51 -5
  43. package/dist/cli/local-setup.js.map +1 -1
  44. package/dist/config/env.d.ts +6 -0
  45. package/dist/config/env.js +18 -0
  46. package/dist/config/env.js.map +1 -1
  47. package/dist/config/profiles.js +8 -8
  48. package/dist/config/profiles.js.map +1 -1
  49. package/dist/config/version.d.ts +1 -1
  50. package/dist/config/version.js +1 -1
  51. package/dist/design-rules/clearance.d.ts +33 -0
  52. package/dist/design-rules/clearance.js +68 -0
  53. package/dist/design-rules/clearance.js.map +1 -0
  54. package/dist/design-rules/decoupling.d.ts +40 -0
  55. package/dist/design-rules/decoupling.js +133 -0
  56. package/dist/design-rules/decoupling.js.map +1 -0
  57. package/dist/design-rules/dfm-checklist.d.ts +33 -0
  58. package/dist/design-rules/dfm-checklist.js +152 -0
  59. package/dist/design-rules/dfm-checklist.js.map +1 -0
  60. package/dist/design-rules/index.d.ts +11 -0
  61. package/dist/design-rules/index.js +7 -0
  62. package/dist/design-rules/index.js.map +1 -0
  63. package/dist/design-rules/protocol-routing.d.ts +32 -0
  64. package/dist/design-rules/protocol-routing.js +147 -0
  65. package/dist/design-rules/protocol-routing.js.map +1 -0
  66. package/dist/design-rules/trace-width.d.ts +58 -0
  67. package/dist/design-rules/trace-width.js +79 -0
  68. package/dist/design-rules/trace-width.js.map +1 -0
  69. package/dist/index.js +1 -1
  70. package/dist/index.js.map +1 -1
  71. package/dist/live/ngspice-smoke.d.ts +27 -0
  72. package/dist/live/ngspice-smoke.js +106 -0
  73. package/dist/live/ngspice-smoke.js.map +1 -0
  74. package/dist/net-validation/pin-classifier.d.ts +25 -0
  75. package/dist/net-validation/pin-classifier.js +85 -0
  76. package/dist/net-validation/pin-classifier.js.map +1 -0
  77. package/dist/pcb-layout/floorplan.d.ts +62 -0
  78. package/dist/pcb-layout/floorplan.js +161 -0
  79. package/dist/pcb-layout/floorplan.js.map +1 -0
  80. package/dist/pcb-layout/index.d.ts +2 -0
  81. package/dist/pcb-layout/index.js +1 -0
  82. package/dist/pcb-layout/index.js.map +1 -1
  83. package/dist/pcb-layout/planner.js +1 -2
  84. package/dist/pcb-layout/planner.js.map +1 -1
  85. package/dist/power-tree/analysis.d.ts +3 -1
  86. package/dist/power-tree/analysis.js +2 -2
  87. package/dist/power-tree/analysis.js.map +1 -1
  88. package/dist/power-tree/index.d.ts +1 -1
  89. package/dist/power-tree/index.js +1 -1
  90. package/dist/power-tree/index.js.map +1 -1
  91. package/dist/remote/protocol.d.ts +2 -2
  92. package/dist/server/factory.js +42 -3
  93. package/dist/server/factory.js.map +1 -1
  94. package/dist/server/resources-prompts.js +59 -0
  95. package/dist/server/resources-prompts.js.map +1 -1
  96. package/dist/simulation/index.d.ts +9 -0
  97. package/dist/simulation/index.js +7 -0
  98. package/dist/simulation/index.js.map +1 -0
  99. package/dist/simulation/models.d.ts +17 -0
  100. package/dist/simulation/models.js +52 -0
  101. package/dist/simulation/models.js.map +1 -0
  102. package/dist/simulation/netlist.d.ts +15 -0
  103. package/dist/simulation/netlist.js +109 -0
  104. package/dist/simulation/netlist.js.map +1 -0
  105. package/dist/simulation/parser.d.ts +20 -0
  106. package/dist/simulation/parser.js +80 -0
  107. package/dist/simulation/parser.js.map +1 -0
  108. package/dist/simulation/runner.d.ts +21 -0
  109. package/dist/simulation/runner.js +49 -0
  110. package/dist/simulation/runner.js.map +1 -0
  111. package/dist/simulation/types.d.ts +123 -0
  112. package/dist/simulation/types.js +14 -0
  113. package/dist/simulation/types.js.map +1 -0
  114. package/dist/simulation/verify.d.ts +3 -0
  115. package/dist/simulation/verify.js +20 -0
  116. package/dist/simulation/verify.js.map +1 -0
  117. package/dist/storage/database.d.ts +9 -1
  118. package/dist/storage/database.js +86 -0
  119. package/dist/storage/database.js.map +1 -1
  120. package/dist/storage/types.d.ts +17 -0
  121. package/dist/tools/L0_diagnostics_api.js +332 -0
  122. package/dist/tools/L0_diagnostics_api.js.map +1 -1
  123. package/dist/tools/L0_diagnostics_core.js +94 -7
  124. package/dist/tools/L0_diagnostics_core.js.map +1 -1
  125. package/dist/tools/L1_bom_sourcing.js +30 -27
  126. package/dist/tools/L1_bom_sourcing.js.map +1 -1
  127. package/dist/tools/L1_catalog.d.ts +6 -0
  128. package/dist/tools/L1_catalog.js +203 -0
  129. package/dist/tools/L1_catalog.js.map +1 -0
  130. package/dist/tools/L1_design_rules.d.ts +6 -0
  131. package/dist/tools/L1_design_rules.js +253 -0
  132. package/dist/tools/L1_design_rules.js.map +1 -0
  133. package/dist/tools/L1_drc_erc.js +154 -16
  134. package/dist/tools/L1_drc_erc.js.map +1 -1
  135. package/dist/tools/L1_export.js +117 -16
  136. package/dist/tools/L1_export.js.map +1 -1
  137. package/dist/tools/L1_pcb_constraints.d.ts +44 -1
  138. package/dist/tools/L1_pcb_constraints.js +2 -2
  139. package/dist/tools/L1_pcb_constraints.js.map +1 -1
  140. package/dist/tools/L1_pcb_read.d.ts +6 -0
  141. package/dist/tools/L1_pcb_read.js +125 -0
  142. package/dist/tools/L1_pcb_read.js.map +1 -0
  143. package/dist/tools/L1_pcb_write.d.ts +32 -1
  144. package/dist/tools/L1_pcb_write.js +165 -25
  145. package/dist/tools/L1_pcb_write.js.map +1 -1
  146. package/dist/tools/L1_schematic_read.js +127 -34
  147. package/dist/tools/L1_schematic_read.js.map +1 -1
  148. package/dist/tools/L1_schematic_write.js +366 -14
  149. package/dist/tools/L1_schematic_write.js.map +1 -1
  150. package/dist/tools/L1_visual.d.ts +6 -0
  151. package/dist/tools/L1_visual.js +184 -0
  152. package/dist/tools/L1_visual.js.map +1 -0
  153. package/dist/tools/L2_autorouting.d.ts +6 -0
  154. package/dist/tools/L2_autorouting.js +487 -0
  155. package/dist/tools/L2_autorouting.js.map +1 -0
  156. package/dist/tools/L2_simulation.d.ts +7 -0
  157. package/dist/tools/L2_simulation.js +249 -0
  158. package/dist/tools/L2_simulation.js.map +1 -0
  159. package/dist/tools/L2_workflows.d.ts +6 -0
  160. package/dist/tools/L2_workflows.js +560 -0
  161. package/dist/tools/L2_workflows.js.map +1 -0
  162. package/dist/tools/register.js +14 -0
  163. package/dist/tools/register.js.map +1 -1
  164. package/dist/tools/registry.js +19 -1
  165. package/dist/tools/registry.js.map +1 -1
  166. package/dist/tools/schematic-helpers.d.ts +20 -0
  167. package/dist/tools/schematic-helpers.js +35 -0
  168. package/dist/tools/schematic-helpers.js.map +1 -0
  169. package/dist/tools/types.d.ts +23 -0
  170. package/dist/vendors/base-http-client.d.ts +8 -0
  171. package/dist/vendors/base-http-client.js +29 -0
  172. package/dist/vendors/base-http-client.js.map +1 -1
  173. package/dist/vendors/cache.d.ts +21 -0
  174. package/dist/vendors/cache.js +65 -0
  175. package/dist/vendors/cache.js.map +1 -0
  176. package/dist/vendors/lcsc/client.d.ts +46 -13
  177. package/dist/vendors/lcsc/client.js +199 -41
  178. package/dist/vendors/lcsc/client.js.map +1 -1
  179. package/dist/vendors/sourcing-facade.d.ts +44 -0
  180. package/dist/vendors/sourcing-facade.js +58 -0
  181. package/dist/vendors/sourcing-facade.js.map +1 -0
  182. package/dist/workflows/index.d.ts +3 -0
  183. package/dist/workflows/index.js +3 -0
  184. package/dist/workflows/index.js.map +1 -0
  185. package/dist/workflows/planner.d.ts +19 -0
  186. package/dist/workflows/planner.js +174 -0
  187. package/dist/workflows/planner.js.map +1 -0
  188. package/dist/workflows/types.d.ts +99 -0
  189. package/dist/workflows/types.js +3 -0
  190. package/dist/workflows/types.js.map +1 -0
  191. package/easyeda-bridge-extension.eext +0 -0
  192. package/package.json +7 -2
package/README.md CHANGED
@@ -550,12 +550,12 @@ See `.env.example` for the complete list of configuration variables.
550
550
 
551
551
  ## MCP Tools
552
552
 
553
- The server currently registers up to 60 profile-gated tools. Tools are filtered by the active `TOOL_PROFILE`:
553
+ The server currently registers up to 77 profile-gated tools. Tools are filtered by the active `TOOL_PROFILE`:
554
554
 
555
- - `core`: 42 tools
556
- - `pro`: 47 tools
557
- - `full`: 56 tools
558
- - `dev`: 60 tools
555
+ - `core`: 48 tools
556
+ - `pro`: 63 tools
557
+ - `full`: 73 tools
558
+ - `dev`: 77 tools
559
559
 
560
560
  `core` exposes the standard workflow tools, `pro` adds manufacturing exports, `full` adds controlled documented EasyEDA API calls, and `dev` adds runtime probes for debugging.
561
561
 
@@ -694,6 +694,69 @@ Installation: Open EasyEDA Pro → **Settings** → **Extensions** → **Extensi
694
694
 
695
695
  ---
696
696
 
697
+ ## Agent plugin and skills
698
+
699
+ This repository owns the product-level agent plugin and EasyEDA-specific skills for
700
+ EasyEDA MCP Pro. The central [`agent-tools`](https://github.com/oaslananka/agent-tools)
701
+ repository should catalog this plugin, but the manifest and workflow instructions live
702
+ here so they stay synchronized with the actual MCP server, bridge extension, tool
703
+ profiles, and EasyEDA runtime behavior.
704
+
705
+ | File | Purpose |
706
+ | ------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------- |
707
+ | [`.claude-plugin/plugin.json`](.claude-plugin/plugin.json) | Claude Code-valid plugin manifest for compatible agent runtimes and marketplace catalogs. |
708
+ | [`.mcp.json`](.mcp.json) | Project-local Claude Code MCP server configuration. |
709
+ | [`.codex/config.example.toml`](.codex/config.example.toml) | Codex CLI MCP configuration example. |
710
+ | [`.vscode/mcp.example.json`](.vscode/mcp.example.json) | VS Code / GitHub Copilot workspace MCP configuration example. |
711
+ | [`opencode.example.jsonc`](opencode.example.jsonc) | OpenCode project MCP configuration example. |
712
+ | [`.opencode/skills/`](.opencode/skills) | OpenCode-native mirrored skill definitions. |
713
+ | [`docs/agent-runtime-config.md`](docs/agent-runtime-config.md) | Agent runtime setup and validation matrix. |
714
+ | [`skills/easyeda-workflow/SKILL.md`](skills/easyeda-workflow/SKILL.md) | End-to-end EasyEDA setup, inspection, controlled write, export, and reporting workflow. |
715
+ | [`skills/component-search/SKILL.md`](skills/component-search/SKILL.md) | Component search, BOM review, sourcing, pricing, availability, and part-risk workflow. |
716
+ | [`skills/design-validation/SKILL.md`](skills/design-validation/SKILL.md) | DRC/ERC, semantic ERC, PCB constraints, production QA, export, and release-validation workflow. |
717
+
718
+ ### Agent setup
719
+
720
+ EasyEDA MCP Pro can be launched with the published npm package or from a source checkout:
721
+
722
+ ```bash
723
+ npx easyeda-mcp-pro
724
+ TRANSPORT=http HTTP_HOST=127.0.0.1 HTTP_PORT=3000 npx easyeda-mcp-pro
725
+ pnpm build && node dist/index.js
726
+ ```
727
+
728
+ For live EasyEDA Pro workflows, install the EasyEDA bridge extension and confirm the
729
+ bridge is reachable with `easyeda_health_check` and `easyeda_bridge_status`. Tool
730
+ availability depends on `TOOL_PROFILE` and optional `TOOL_SCOPES` restrictions.
731
+
732
+ For source checkouts, run the normal validation path before publishing plugin changes:
733
+
734
+ ```bash
735
+ python3 -m json.tool .claude-plugin/plugin.json >/dev/null
736
+ claude plugin validate .
737
+ pnpm format:check
738
+ pnpm typecheck
739
+ pnpm test
740
+ pnpm build
741
+ pnpm check:metadata
742
+ ```
743
+
744
+ ### Validation workflow
745
+
746
+ Before listing this plugin as active from `agent-tools`, verify at least one compatible
747
+ agent runtime can:
748
+
749
+ 1. Discover `.claude-plugin/plugin.json`.
750
+ 2. Launch or connect to `easyeda-mcp-pro` over `stdio` or HTTP.
751
+ 3. Call `easyeda_health_check`, `easyeda_bridge_status`, or `easyeda_get_capabilities`.
752
+ 4. Load a skill from `skills/` and follow the workflow without referencing missing tools.
753
+ 5. Report bridge state, tool profile, ERC, DRC, BOM, export artifacts, assumptions, and
754
+ human-review requirements separately.
755
+
756
+ EasyEDA MCP Pro is an engineering assistant, not an autonomous manufacturing sign-off
757
+ authority. Generated designs, component selections, and fabrication outputs require
758
+ qualified human review before purchase, fabrication, or assembly.
759
+
697
760
  ## Development
698
761
 
699
762
  ### Prerequisites
@@ -710,15 +773,18 @@ pnpm install
710
773
  cp .env.example .env
711
774
 
712
775
  # All quality gates (lint + format + typecheck + test + build)
776
+ pnpm verify
777
+
778
+ # Or, if you use Go Task:
713
779
  task verify
714
780
 
715
- # Or use pnpm directly:
781
+ # Use focused checks while iterating:
716
782
  pnpm format:check # Prettier
717
783
  pnpm typecheck # TypeScript
718
784
  pnpm lint # ESLint
719
785
 
720
786
  # Test
721
- pnpm test # Vitest (804 tests across 66 files)
787
+ pnpm test # Vitest (812 tests across 67 files)
722
788
  pnpm test:coverage # With coverage report
723
789
 
724
790
  # Golden E2E fixture smoke tests are included in `pnpm test`
@@ -739,15 +805,17 @@ pnpm inspector
739
805
 
740
806
  This project includes a `Taskfile.yml` with the following commands:
741
807
 
742
- | Command | Description |
743
- | ---------------- | ------------------------------- |
744
- | `task install` | Install dependencies |
745
- | `task lint` | Run ESLint |
746
- | `task format` | Check formatting with Prettier |
747
- | `task typecheck` | Run TypeScript type checking |
748
- | `task test` | Run tests |
749
- | `task build` | Build the project |
750
- | `task verify` | Run all quality gates (CI gate) |
808
+ | Command | Description |
809
+ | ---------------- | ---------------------------------- |
810
+ | `task install` | Install dependencies |
811
+ | `task lint` | Run ESLint |
812
+ | `task format` | Check formatting with Prettier |
813
+ | `task typecheck` | Run TypeScript type checking |
814
+ | `task test` | Run tests |
815
+ | `task build` | Build the project |
816
+ | `task verify` | Run all quality gates via Taskfile |
817
+
818
+ The package also exposes `pnpm verify`, which runs the same CI-equivalent local gate without requiring Go Task.
751
819
 
752
820
  Install [Go Task](https://taskfile.dev/installation/) to use these commands.
753
821
 
@@ -174,8 +174,11 @@ export class LcscAdapter {
174
174
  unitPrice,
175
175
  currency: 'USD',
176
176
  leadTimeDays: detail.leadTime,
177
+ classification: detail.classification,
177
178
  queriedAt: now,
178
- ...freshProvenance('lcsc'),
179
+ source: supplierSource('lcsc'),
180
+ cacheAgeSeconds: detail.fromCache ? (detail.cacheAgeSeconds ?? 0) : 0,
181
+ fromCache: detail.fromCache ?? false,
179
182
  confidence: 'high',
180
183
  };
181
184
  }
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/bom-quality/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/bom-quality/adapter.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,8 @@ export interface SupplierQueryResult {
42
42
  unitPrice?: number;
43
43
  currency?: string;
44
44
  leadTimeDays?: number;
45
+ /** Supplier-specific assembly classification (e.g. LCSC/JLCPCB basic/preferred/extended). */
46
+ classification?: string;
45
47
  /** ISO-8601 timestamp of this supplier response. */
46
48
  queriedAt: string;
47
49
  /** Data source endpoint or integration family used for provenance. */
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/bom-quality/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA+MH,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"}
@@ -0,0 +1,12 @@
1
+ import { type EnvConfig } from '../config/env.js';
2
+ import { type BridgeManager } from './manager.js';
3
+ /**
4
+ * The dev hot-swap loop: while BRIDGE_HOT_SWAP_ENABLED is set and
5
+ * BRIDGE_HOT_SWAP_WATCH points at the built dispatcher bundle, push the bundle
6
+ * to the extension whenever (a) the extension (re)connects with a different
7
+ * build than the one on disk — e.g. after an EasyEDA restart it comes back
8
+ * with the stale baked dispatcher — or (b) the bundle file changes on disk
9
+ * (the extension build:watch rebuilt it). Combined with `tsx watch` for the
10
+ * server this closes the edit → run loop without any .eext re-import.
11
+ */
12
+ export declare function startHotSwapWatcher(bridge: BridgeManager, config: EnvConfig): () => void;
@@ -0,0 +1,96 @@
1
+ import { watch, existsSync } from 'node:fs';
2
+ import { getLogger } from '../utils/logger.js';
3
+ import { fetchLoaderStatus, pushDispatcher, readDispatcherArtifact } from './hotswap.js';
4
+ const DEBOUNCE_MS = 300;
5
+ /**
6
+ * The dev hot-swap loop: while BRIDGE_HOT_SWAP_ENABLED is set and
7
+ * BRIDGE_HOT_SWAP_WATCH points at the built dispatcher bundle, push the bundle
8
+ * to the extension whenever (a) the extension (re)connects with a different
9
+ * build than the one on disk — e.g. after an EasyEDA restart it comes back
10
+ * with the stale baked dispatcher — or (b) the bundle file changes on disk
11
+ * (the extension build:watch rebuilt it). Combined with `tsx watch` for the
12
+ * server this closes the edit → run loop without any .eext re-import.
13
+ */
14
+ export function startHotSwapWatcher(bridge, config) {
15
+ const logger = getLogger();
16
+ const bundlePath = config.BRIDGE_HOT_SWAP_WATCH;
17
+ if (!config.BRIDGE_HOT_SWAP_ENABLED || !bundlePath) {
18
+ return () => { };
19
+ }
20
+ if (!existsSync(bundlePath)) {
21
+ logger.warn({ bundlePath }, 'BRIDGE_HOT_SWAP_WATCH does not exist yet; hot-swap auto-push waits for it');
22
+ }
23
+ let syncing = false;
24
+ let pendingResync = false;
25
+ let debounceTimer = null;
26
+ let watcher = null;
27
+ let stopped = false;
28
+ const sync = async (reason) => {
29
+ if (stopped || !bridge.connected)
30
+ return;
31
+ if (syncing) {
32
+ pendingResync = true;
33
+ return;
34
+ }
35
+ syncing = true;
36
+ try {
37
+ const artifact = readDispatcherArtifact(bundlePath);
38
+ const status = await fetchLoaderStatus(bridge.call.bind(bridge));
39
+ if (status.hotSwapCompiled === false) {
40
+ logger.warn('extension build does not include hot-swap support; re-import a dev build once (pnpm --filter bridge-extension build:dev)');
41
+ return;
42
+ }
43
+ if (status.buildId === artifact.buildId) {
44
+ logger.debug({ buildId: artifact.buildId, reason }, 'dispatcher already current');
45
+ return;
46
+ }
47
+ logger.info({ from: status.buildId, to: artifact.buildId, reason }, 'pushing dispatcher hot-swap');
48
+ const result = await pushDispatcher(bridge.call.bind(bridge), artifact, config.BRIDGE_HOT_SWAP_CHUNK_BYTES);
49
+ logger.info({ buildId: result.buildId, methodCount: result.methodCount }, 'dispatcher hot-swap complete');
50
+ }
51
+ catch (err) {
52
+ logger.error({ err, reason }, 'dispatcher hot-swap push failed');
53
+ }
54
+ finally {
55
+ syncing = false;
56
+ if (pendingResync) {
57
+ pendingResync = false;
58
+ void sync('resync');
59
+ }
60
+ }
61
+ };
62
+ const scheduleSync = (reason) => {
63
+ if (debounceTimer)
64
+ clearTimeout(debounceTimer);
65
+ debounceTimer = setTimeout(() => {
66
+ debounceTimer = null;
67
+ void sync(reason);
68
+ }, DEBOUNCE_MS);
69
+ };
70
+ const onConnected = () => scheduleSync('bridge connected');
71
+ bridge.on('connected', onConnected);
72
+ if (bridge.connected)
73
+ scheduleSync('watcher started');
74
+ const startFileWatcher = () => {
75
+ try {
76
+ watcher = watch(bundlePath, () => scheduleSync('bundle changed'));
77
+ }
78
+ catch (err) {
79
+ logger.warn({ err, bundlePath }, 'could not watch dispatcher bundle; retrying in 5s');
80
+ setTimeout(() => {
81
+ if (!stopped)
82
+ startFileWatcher();
83
+ }, 5000);
84
+ }
85
+ };
86
+ startFileWatcher();
87
+ logger.info({ bundlePath }, 'dispatcher hot-swap watcher active');
88
+ return () => {
89
+ stopped = true;
90
+ if (debounceTimer)
91
+ clearTimeout(debounceTimer);
92
+ bridge.off('connected', onConnected);
93
+ watcher?.close();
94
+ };
95
+ }
96
+ //# sourceMappingURL=hotswap-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hotswap-watcher.js","sourceRoot":"","sources":["../../src/bridge/hotswap-watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Dev-only dispatcher hot swap (BRIDGE_HOT_SWAP_ENABLED): pushes a freshly
3
+ * built extension dispatcher bundle (easyeda-bridge-extension/dist/dispatcher.js)
4
+ * over the bridge as system.hotSwap.begin/chunk/commit frames. The extension
5
+ * loader verifies the sha256, evals the bundle, and swaps its active
6
+ * dispatcher — no .eext re-import, no reconnect.
7
+ */
8
+ export interface DispatcherArtifact {
9
+ source: string;
10
+ buildId: string;
11
+ sha256: string;
12
+ byteLength: number;
13
+ }
14
+ export interface LoaderStatus {
15
+ loaderVersion?: string;
16
+ activeDispatcher?: 'baked' | 'pushed';
17
+ buildId?: string;
18
+ bakedBuildId?: string;
19
+ methodCount?: number;
20
+ methodListHash?: string;
21
+ hotSwapCompiled?: boolean;
22
+ hotSwapEnabled?: boolean;
23
+ }
24
+ export interface HotSwapResult {
25
+ swapped: boolean;
26
+ buildId?: string;
27
+ methodCount?: number;
28
+ methodListHash?: string;
29
+ }
30
+ type BridgeCall = <TParams, TResult>(method: string, params?: TParams, opts?: {
31
+ timeoutMs?: number;
32
+ }) => Promise<TResult>;
33
+ /**
34
+ * Read the dispatcher bundle plus its build metadata. The buildId comes from
35
+ * the `dispatcher.meta.json` sidecar written by the extension build script;
36
+ * the hash/size are recomputed from the actual bundle so a stale sidecar can
37
+ * never push mismatched bytes.
38
+ */
39
+ export declare function readDispatcherArtifact(bundlePath: string): DispatcherArtifact;
40
+ export declare function fetchLoaderStatus(call: BridgeCall): Promise<LoaderStatus>;
41
+ /**
42
+ * Drive a full begin → chunk* → commit push. Throws on any step failure; the
43
+ * extension keeps its previous dispatcher in that case.
44
+ */
45
+ export declare function pushDispatcher(call: BridgeCall, artifact: DispatcherArtifact, chunkBytes: number): Promise<HotSwapResult>;
46
+ export declare function revertDispatcher(call: BridgeCall): Promise<{
47
+ reverted: boolean;
48
+ buildId?: string;
49
+ }>;
50
+ export {};
@@ -0,0 +1,69 @@
1
+ import crypto from 'node:crypto';
2
+ import { readFileSync } from 'node:fs';
3
+ const BUILD_ID_PATTERN = /^[A-Za-z0-9x-]{4,64}$/;
4
+ /**
5
+ * Read the dispatcher bundle plus its build metadata. The buildId comes from
6
+ * the `dispatcher.meta.json` sidecar written by the extension build script;
7
+ * the hash/size are recomputed from the actual bundle so a stale sidecar can
8
+ * never push mismatched bytes.
9
+ */
10
+ export function readDispatcherArtifact(bundlePath) {
11
+ const source = readFileSync(bundlePath, 'utf8');
12
+ const metaPath = bundlePath.replace(/\.js$/, '.meta.json');
13
+ let buildId = '';
14
+ try {
15
+ const meta = JSON.parse(readFileSync(metaPath, 'utf8'));
16
+ if (typeof meta.buildId === 'string' && BUILD_ID_PATTERN.test(meta.buildId)) {
17
+ buildId = meta.buildId;
18
+ }
19
+ }
20
+ catch {
21
+ // Sidecar missing/unreadable — fall back to a content hash id below.
22
+ }
23
+ const sha256 = crypto.createHash('sha256').update(source, 'utf8').digest('hex');
24
+ if (!buildId) {
25
+ const h = sha256.slice(0, 12);
26
+ buildId = `d${h.slice(0, 4)}x${h.slice(4, 8)}x${h.slice(8, 12)}`;
27
+ }
28
+ return {
29
+ source,
30
+ buildId,
31
+ sha256,
32
+ byteLength: Buffer.byteLength(source, 'utf8'),
33
+ };
34
+ }
35
+ export async function fetchLoaderStatus(call) {
36
+ return call('system.loaderStatus', {});
37
+ }
38
+ /**
39
+ * Drive a full begin → chunk* → commit push. Throws on any step failure; the
40
+ * extension keeps its previous dispatcher in that case.
41
+ */
42
+ export async function pushDispatcher(call, artifact, chunkBytes) {
43
+ const chunkSize = Math.max(4096, chunkBytes);
44
+ const totalChunks = Math.max(1, Math.ceil(artifact.source.length / chunkSize));
45
+ await call('system.hotSwap.begin', {
46
+ totalChunks,
47
+ byteLength: artifact.byteLength,
48
+ sha256: artifact.sha256,
49
+ buildId: artifact.buildId,
50
+ });
51
+ for (let seq = 0; seq < totalChunks; seq += 1) {
52
+ await call('system.hotSwap.chunk', {
53
+ seq,
54
+ data: artifact.source.slice(seq * chunkSize, (seq + 1) * chunkSize),
55
+ });
56
+ }
57
+ const result = await call('system.hotSwap.commit', {});
58
+ if (!result?.swapped) {
59
+ throw new Error('Hot-swap commit did not report a successful swap');
60
+ }
61
+ if (result.buildId !== artifact.buildId) {
62
+ throw new Error(`Hot-swap build id mismatch: pushed ${artifact.buildId}, extension reports ${result.buildId}`);
63
+ }
64
+ return result;
65
+ }
66
+ export async function revertDispatcher(call) {
67
+ return call('system.hotSwap.revert', {});
68
+ }
69
+ //# sourceMappingURL=hotswap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hotswap.js","sourceRoot":"","sources":["../../src/bridge/hotswap.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,9 @@ export declare class BridgeManager extends EventEmitter {
20
20
  private reconnectStartMs;
21
21
  private pairingChallenges;
22
22
  private _methodRegistryHash;
23
+ private _extensionVersion;
24
+ private _extensionMethodListHash;
25
+ private _loaderVersion;
23
26
  constructor(config: EnvConfig);
24
27
  get lastHeartbeatMs(): number;
25
28
  get activePort(): number;
@@ -31,6 +34,23 @@ export declare class BridgeManager extends EventEmitter {
31
34
  */
32
35
  waitForConnection(timeoutMs: number): Promise<void>;
33
36
  get methodRegistryHash(): string;
37
+ /** EasyEDA Pro application version reported at the last successful handshake. */
38
+ get easyedaVersion(): string | undefined;
39
+ /** Bridge extension version reported at the last successful handshake. */
40
+ get extensionVersion(): string | undefined;
41
+ /** Whether the connected extension's version differs from this server's version. */
42
+ get extensionVersionMismatch(): boolean;
43
+ /** Method-list hash reported by the extension's active dispatcher at handshake. */
44
+ get extensionMethodListHash(): string | undefined;
45
+ /** Extension loader version reported at handshake (tracks the .eext import). */
46
+ get loaderVersion(): string | undefined;
47
+ /**
48
+ * True when the extension reported a dispatcher method-list hash that does
49
+ * not match this server's method registry — i.e. the extension is serving
50
+ * stale (or newer) dispatch logic. Undefined-hash extensions (older builds)
51
+ * report false here; extension_version_mismatch covers those.
52
+ */
53
+ get registryMismatch(): boolean;
34
54
  private isLoopbackHost;
35
55
  private computeMethodRegistryHash;
36
56
  connect(): Promise<void>;