@intelligentelectron/pcb-lens 0.0.3 → 0.0.5
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/CHANGELOG.md +25 -0
- package/dist/cli/commands.js +1 -1
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/updater.d.ts +0 -1
- package/dist/cli/updater.d.ts.map +1 -1
- package/dist/cli/updater.js +1 -2
- package/dist/cli/updater.js.map +1 -1
- package/dist/cli/version.d.ts.map +1 -0
- package/dist/{version.js → cli/version.js} +1 -1
- package/dist/cli/version.js.map +1 -0
- package/dist/index.js +4 -7
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +19 -133
- package/dist/server.js.map +1 -1
- package/dist/tools/export-cadence-board.d.ts +8 -0
- package/dist/tools/export-cadence-board.d.ts.map +1 -0
- package/dist/tools/export-cadence-board.js +108 -0
- package/dist/tools/export-cadence-board.js.map +1 -0
- package/dist/tools/export-cadence-constraints.d.ts +7 -0
- package/dist/tools/export-cadence-constraints.d.ts.map +1 -0
- package/dist/tools/export-cadence-constraints.js +93 -0
- package/dist/tools/export-cadence-constraints.js.map +1 -0
- package/dist/tools/get-design-overview.d.ts +5 -0
- package/dist/tools/get-design-overview.d.ts.map +1 -0
- package/dist/tools/get-design-overview.js +103 -0
- package/dist/tools/get-design-overview.js.map +1 -0
- package/dist/tools/lib/async-mutex.d.ts.map +1 -0
- package/dist/tools/lib/async-mutex.js.map +1 -0
- package/dist/tools/lib/cadence.d.ts +24 -0
- package/dist/tools/lib/cadence.d.ts.map +1 -0
- package/dist/tools/lib/cadence.js +58 -0
- package/dist/tools/lib/cadence.js.map +1 -0
- package/dist/{types.d.ts → tools/lib/types.d.ts} +64 -0
- package/dist/tools/lib/types.d.ts.map +1 -0
- package/dist/tools/lib/types.js.map +1 -0
- package/dist/tools/lib/wasm-embed.d.ts.map +1 -0
- package/dist/tools/lib/wasm-embed.js.map +1 -0
- package/dist/tools/lib/xml-utils.d.ts.map +1 -0
- package/dist/tools/lib/xml-utils.js.map +1 -0
- package/dist/tools/query-components.d.ts +5 -0
- package/dist/tools/query-components.d.ts.map +1 -0
- package/dist/tools/query-components.js +127 -0
- package/dist/tools/query-components.js.map +1 -0
- package/dist/tools/query-constraints.d.ts +5 -0
- package/dist/tools/query-constraints.d.ts.map +1 -0
- package/dist/tools/query-constraints.js +309 -0
- package/dist/tools/query-constraints.js.map +1 -0
- package/dist/tools/query-net.d.ts +5 -0
- package/dist/tools/query-net.d.ts.map +1 -0
- package/dist/tools/query-net.js +148 -0
- package/dist/tools/query-net.js.map +1 -0
- package/dist/tools/render-net.d.ts +5 -0
- package/dist/tools/render-net.d.ts.map +1 -0
- package/dist/tools/render-net.js +683 -0
- package/dist/tools/render-net.js.map +1 -0
- package/dist/tools/shared.d.ts +20 -0
- package/dist/tools/shared.d.ts.map +1 -0
- package/dist/tools/shared.js +102 -0
- package/dist/tools/shared.js.map +1 -0
- package/package.json +1 -1
- package/dist/async-mutex.d.ts.map +0 -1
- package/dist/async-mutex.js.map +0 -1
- package/dist/service.d.ts +0 -25
- package/dist/service.d.ts.map +0 -1
- package/dist/service.js +0 -1270
- package/dist/service.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js.map +0 -1
- package/dist/wasm-embed.d.ts.map +0 -1
- package/dist/wasm-embed.js.map +0 -1
- package/dist/xml-utils.d.ts.map +0 -1
- package/dist/xml-utils.js.map +0 -1
- /package/dist/{version.d.ts → cli/version.d.ts} +0 -0
- /package/dist/{async-mutex.d.ts → tools/lib/async-mutex.d.ts} +0 -0
- /package/dist/{async-mutex.js → tools/lib/async-mutex.js} +0 -0
- /package/dist/{types.js → tools/lib/types.js} +0 -0
- /package/dist/{wasm-embed.d.ts → tools/lib/wasm-embed.d.ts} +0 -0
- /package/dist/{wasm-embed.js → tools/lib/wasm-embed.js} +0 -0
- /package/dist/{xml-utils.d.ts → tools/lib/xml-utils.d.ts} +0 -0
- /package/dist/{xml-utils.js → tools/lib/xml-utils.js} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,29 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.0.5] - 2026-02-27
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- `export_cadence_constraints` tool for exporting Cadence `.brd` constraint data to `.tcfx` XML (Windows only)
|
|
13
|
+
- `query_constraints` tool for parsing `.tcfx` files: overview mode (section names, object counts) and section query mode (constraint objects with attributes, references, members, cross-section stackup)
|
|
14
|
+
- Shared Cadence utilities module (`src/tools/lib/cadence.ts`) with install detection, license mutex, and platform guard
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Refactored `export_cadence_board` to use shared Cadence utilities, ensuring a single mutex across all Cadence export tools
|
|
19
|
+
- Enforced strict module hierarchy: tool files import only from `./lib/` and `./shared.js`, no peer imports
|
|
20
|
+
|
|
21
|
+
### Removed
|
|
22
|
+
|
|
23
|
+
- Claude Code Review and Claude CI/CD GitHub workflows
|
|
24
|
+
|
|
25
|
+
## [0.0.4] - 2026-02-24
|
|
26
|
+
|
|
27
|
+
### Removed
|
|
28
|
+
|
|
29
|
+
- `--no-update` CLI flag: auto-update now always runs on startup
|
|
30
|
+
|
|
8
31
|
## [0.0.3] - 2026-02-23
|
|
9
32
|
|
|
10
33
|
### Fixed
|
|
@@ -39,6 +62,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
39
62
|
- Release automation with CI workflows and binary compilation
|
|
40
63
|
- Integration tests against IPC-2581 consortium fixtures
|
|
41
64
|
|
|
65
|
+
[0.0.5]: https://github.com/IntelligentElectron/pcb-lens/releases/tag/v0.0.5
|
|
66
|
+
[0.0.4]: https://github.com/IntelligentElectron/pcb-lens/releases/tag/v0.0.4
|
|
42
67
|
[0.0.3]: https://github.com/IntelligentElectron/pcb-lens/releases/tag/v0.0.3
|
|
43
68
|
[0.0.2]: https://github.com/IntelligentElectron/pcb-lens/releases/tag/v0.0.2
|
|
44
69
|
[0.0.1]: https://github.com/IntelligentElectron/pcb-lens/releases/tag/v0.0.1
|
package/dist/cli/commands.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { existsSync, rmSync } from "node:fs";
|
|
5
5
|
import { dirname } from "node:path";
|
|
6
|
-
import { VERSION, GITHUB_REPO, BINARY_NAME } from "
|
|
6
|
+
import { VERSION, GITHUB_REPO, BINARY_NAME } from "./version.js";
|
|
7
7
|
import { checkForUpdate, performUpdate, isNpmInstall, getCurrentExecutablePath, } from "./updater.js";
|
|
8
8
|
import { confirm } from "./prompts.js";
|
|
9
9
|
import { removeFromPath } from "./shell.js";
|
package/dist/cli/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/updater.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../../src/cli/updater.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../../src/cli/updater.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwBH,iCAAiC;AACjC,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,QAAO,OAG/B,CAAC;AAwEF;;GAEG;AACH,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,iBAAiB,CA8BhE,CAAC;AAiCF;;GAEG;AACH,eAAO,MAAM,wBAAwB,QAAO,MAS3C,CAAC;AAkCF;;GAEG;AACH,eAAO,MAAM,aAAa,GACxB,aAAa,MAAM,EACnB,YAAY,MAAM,KACjB,OAAO,CAAC,YAAY,CAmEtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,QAAO,KAuBzB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,QAAa,OAAO,CAAC,OAAO,CA6BlD,CAAC"}
|
package/dist/cli/updater.js
CHANGED
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
* Auto-updater for pcb-lens server.
|
|
3
3
|
*
|
|
4
4
|
* Checks GitHub Releases for newer versions and self-updates on startup.
|
|
5
|
-
* Can be disabled via --no-update CLI flag.
|
|
6
5
|
*/
|
|
7
6
|
import { createWriteStream, chmodSync, renameSync, unlinkSync, existsSync, readdirSync, } from "node:fs";
|
|
8
7
|
import { tmpdir } from "node:os";
|
|
9
8
|
import { join, dirname, basename } from "node:path";
|
|
10
9
|
import { spawn } from "node:child_process";
|
|
11
|
-
import { VERSION, GITHUB_REPO, BINARY_NAME } from "
|
|
10
|
+
import { VERSION, GITHUB_REPO, BINARY_NAME } from "./version.js";
|
|
12
11
|
/**
|
|
13
12
|
* Detect if running as an npm global install or via npx.
|
|
14
13
|
* npm installs run from node_modules, not as compiled binaries.
|
package/dist/cli/updater.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updater.js","sourceRoot":"","sources":["../../src/cli/updater.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"updater.js","sourceRoot":"","sources":["../../src/cli/updater.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,qCAAqC;AACrC,eAAO,MAAM,OAAO,QAahB,CAAC;AAEL,8CAA8C;AAC9C,eAAO,MAAM,WAAW,iCAAiC,CAAC;AAE1D,+CAA+C;AAC/C,eAAO,MAAM,WAAW,aAAa,CAAC"}
|
|
@@ -11,7 +11,7 @@ export const VERSION = (() => {
|
|
|
11
11
|
// Node.js/npm: read from package.json
|
|
12
12
|
try {
|
|
13
13
|
const require = createRequire(import.meta.url);
|
|
14
|
-
const pkg = require("
|
|
14
|
+
const pkg = require("../../package.json");
|
|
15
15
|
return pkg.version;
|
|
16
16
|
}
|
|
17
17
|
catch {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5C,qCAAqC;AACrC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;IAC3B,4CAA4C;IAC5C,IAAI,OAAO,aAAa,KAAK,WAAW,EAAE,CAAC;QACzC,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,sCAAsC;IACtC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;QACjE,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AAEL,8CAA8C;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAG,8BAA8B,CAAC;AAE1D,+CAA+C;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -45,13 +45,10 @@ const main = async () => {
|
|
|
45
45
|
console.log("Run with --help for available options.");
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
|
-
// Auto-update on startup
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
// Re-execute with the new binary
|
|
53
|
-
reexec();
|
|
54
|
-
}
|
|
48
|
+
// Auto-update on startup
|
|
49
|
+
const updated = await autoUpdate();
|
|
50
|
+
if (updated) {
|
|
51
|
+
reexec();
|
|
55
52
|
}
|
|
56
53
|
await runServer();
|
|
57
54
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,YAAY,EACZ,SAAS,EACT,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,wBAAwB;IACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,YAAY,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,qBAAqB;IACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,kBAAkB;IAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,mBAAmB,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,qBAAqB;IACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,MAAM,sBAAsB,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,mFAAmF;IACnF,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CACT,mHAAmH,CACpH,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,YAAY,EACZ,SAAS,EACT,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,wBAAwB;IACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,YAAY,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,qBAAqB;IACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,kBAAkB;IAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,mBAAmB,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,qBAAqB;IACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,MAAM,sBAAsB,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,mFAAmF;IACnF,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CACT,mHAAmH,CACpH,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,yBAAyB;IACzB,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IACnC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,EAAE,CAAC;IACX,CAAC;IAED,MAAM,SAAS,EAAE,CAAC;AACpB,CAAC,CAAC;AAEF,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiDpE;;GAEG;AACH,eAAO,MAAM,YAAY,QAAO,SAuB/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,QAAa,OAAO,CAAC,IAAI,CAI9C,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
8
8
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
9
|
+
import { VERSION } from "./cli/version.js";
|
|
10
|
+
import { register as registerGetDesignOverview } from "./tools/get-design-overview.js";
|
|
11
|
+
import { register as registerQueryComponents } from "./tools/query-components.js";
|
|
12
|
+
import { register as registerQueryNet } from "./tools/query-net.js";
|
|
13
|
+
import { register as registerExportCadenceBoard } from "./tools/export-cadence-board.js";
|
|
14
|
+
import { register as registerExportCadenceConstraints } from "./tools/export-cadence-constraints.js";
|
|
15
|
+
import { register as registerQueryConstraints } from "./tools/query-constraints.js";
|
|
16
16
|
// =============================================================================
|
|
17
17
|
// Server Instructions
|
|
18
18
|
// =============================================================================
|
|
@@ -25,10 +25,11 @@ Supports IPC-2581 XML files (RevA, RevB, RevC) exported from any compliant EDA t
|
|
|
25
25
|
## Workflow Guidance
|
|
26
26
|
|
|
27
27
|
1. If starting from a Cadence Allegro .brd file, use \`export_cadence_board\` to generate the IPC-2581 XML first (Windows only)
|
|
28
|
-
2.
|
|
29
|
-
3. Use \`
|
|
30
|
-
4. Use \`
|
|
31
|
-
5. Use \`
|
|
28
|
+
2. To access design constraints (trace width rules, spacing rules, net classes, stackup), use \`export_cadence_constraints\` to generate a .tcfx file, then \`query_constraints\` to read it
|
|
29
|
+
3. Use \`get_design_overview\` first to understand the design structure, layer stackup, and size
|
|
30
|
+
4. Use \`query_components\` to find component placements by refdes pattern (regex)
|
|
31
|
+
5. Use \`query_net\` to trace a net's routing, trace widths, vias, and connected pins
|
|
32
|
+
6. Use \`render_net\` to visualize a net's routing geometry as SVG
|
|
32
33
|
|
|
33
34
|
## Tool Usage Tips
|
|
34
35
|
|
|
@@ -46,51 +47,6 @@ Results with an \`error\` field indicate a problem:
|
|
|
46
47
|
- Invalid regex: Check pattern syntax
|
|
47
48
|
`.trim();
|
|
48
49
|
// =============================================================================
|
|
49
|
-
// Helper Functions
|
|
50
|
-
// =============================================================================
|
|
51
|
-
/**
|
|
52
|
-
* Format a result as MCP tool response content.
|
|
53
|
-
*/
|
|
54
|
-
const formatResult = (result) => ({
|
|
55
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
56
|
-
});
|
|
57
|
-
let wasmInitialized = false;
|
|
58
|
-
const resolveWasmBuffer = async () => {
|
|
59
|
-
if (typeof BUILD_VERSION !== "undefined") {
|
|
60
|
-
const { default: wasmPath } = await import("./wasm-embed.js");
|
|
61
|
-
return readFile(wasmPath);
|
|
62
|
-
}
|
|
63
|
-
const wasmUrl = import.meta.resolve("@resvg/resvg-wasm/index_bg.wasm");
|
|
64
|
-
return readFile(fileURLToPath(wasmUrl));
|
|
65
|
-
};
|
|
66
|
-
const ensureWasmInitialized = async () => {
|
|
67
|
-
if (wasmInitialized)
|
|
68
|
-
return;
|
|
69
|
-
await initWasm(await resolveWasmBuffer());
|
|
70
|
-
wasmInitialized = true;
|
|
71
|
-
};
|
|
72
|
-
/**
|
|
73
|
-
* Render SVG to PNG using resvg-wasm, return as MCP image content + stats text.
|
|
74
|
-
*/
|
|
75
|
-
const formatRenderResult = async (result) => {
|
|
76
|
-
await ensureWasmInitialized();
|
|
77
|
-
const resvg = new Resvg(result.svg, { fitTo: { mode: "width", value: 1200 } });
|
|
78
|
-
const png = resvg.render().asPng();
|
|
79
|
-
return {
|
|
80
|
-
content: [
|
|
81
|
-
{
|
|
82
|
-
type: "image",
|
|
83
|
-
data: Buffer.from(png).toString("base64"),
|
|
84
|
-
mimeType: "image/png",
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
type: "text",
|
|
88
|
-
text: JSON.stringify({ netName: result.netName, units: result.units, stats: result.stats }, null, 2),
|
|
89
|
-
},
|
|
90
|
-
],
|
|
91
|
-
};
|
|
92
|
-
};
|
|
93
|
-
// =============================================================================
|
|
94
50
|
// Server Setup
|
|
95
51
|
// =============================================================================
|
|
96
52
|
/**
|
|
@@ -106,83 +62,13 @@ export const createServer = () => {
|
|
|
106
62
|
},
|
|
107
63
|
instructions: SERVER_INSTRUCTIONS,
|
|
108
64
|
});
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
server
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
},
|
|
117
|
-
}, async ({ file }) => {
|
|
118
|
-
const result = await getDesignOverview(file);
|
|
119
|
-
return formatResult(result);
|
|
120
|
-
});
|
|
121
|
-
// -------------------------------------------------------------------------
|
|
122
|
-
// Tool: query_components
|
|
123
|
-
// -------------------------------------------------------------------------
|
|
124
|
-
server.registerTool("query_components", {
|
|
125
|
-
description: "Find components by refdes pattern in an IPC-2581 file. Returns placement coordinates, rotation, layer, package, and BOM data.",
|
|
126
|
-
inputSchema: {
|
|
127
|
-
file: z.string().describe("Path to IPC-2581 XML file"),
|
|
128
|
-
pattern: z
|
|
129
|
-
.string()
|
|
130
|
-
.describe("Regex pattern for component refdes (e.g., '^U1$', '^C\\\\d+', 'R10[0-9]')"),
|
|
131
|
-
},
|
|
132
|
-
}, async ({ file, pattern }) => {
|
|
133
|
-
const result = await queryComponents(file, pattern);
|
|
134
|
-
return formatResult(result);
|
|
135
|
-
});
|
|
136
|
-
// -------------------------------------------------------------------------
|
|
137
|
-
// Tool: query_net
|
|
138
|
-
// -------------------------------------------------------------------------
|
|
139
|
-
server.registerTool("query_net", {
|
|
140
|
-
description: "Query a net by name pattern in an IPC-2581 file. Returns connected pins, routing per layer (trace widths, segment counts), and via information.",
|
|
141
|
-
inputSchema: {
|
|
142
|
-
file: z.string().describe("Path to IPC-2581 XML file"),
|
|
143
|
-
pattern: z
|
|
144
|
-
.string()
|
|
145
|
-
.describe("Regex pattern for net name (e.g., '^DDR_D0$', 'CLK', '^VCC_3V3$')"),
|
|
146
|
-
},
|
|
147
|
-
}, async ({ file, pattern }) => {
|
|
148
|
-
const result = await queryNet(file, pattern);
|
|
149
|
-
return formatResult(result);
|
|
150
|
-
});
|
|
151
|
-
// -------------------------------------------------------------------------
|
|
152
|
-
// Tool: render_net
|
|
153
|
-
// -------------------------------------------------------------------------
|
|
154
|
-
server.registerTool("render_net", {
|
|
155
|
-
description: "Render a net's routing geometry as SVG from an IPC-2581 file. Returns an SVG showing board outline, trace paths by layer, exact SMD pad shapes, via annular rings, and pin labels.",
|
|
156
|
-
inputSchema: {
|
|
157
|
-
file: z.string().describe("Path to IPC-2581 XML file"),
|
|
158
|
-
pattern: z.string().describe("Regex pattern for net name (e.g., '^VDD_3V3B$', 'CLK')"),
|
|
159
|
-
},
|
|
160
|
-
}, async ({ file, pattern }) => {
|
|
161
|
-
const result = await renderNet(file, pattern);
|
|
162
|
-
if (isErrorResult(result))
|
|
163
|
-
return formatResult(result);
|
|
164
|
-
return await formatRenderResult(result);
|
|
165
|
-
});
|
|
166
|
-
// -------------------------------------------------------------------------
|
|
167
|
-
// Tool: export_cadence_board
|
|
168
|
-
// -------------------------------------------------------------------------
|
|
169
|
-
server.registerTool("export_cadence_board", {
|
|
170
|
-
description: "Export a Cadence Allegro .brd file to IPC-2581 XML. Windows only. Requires Cadence SPB installation (auto-detected). Calls are serialized internally to avoid license conflicts.",
|
|
171
|
-
inputSchema: {
|
|
172
|
-
board: z.string().describe("Path to Cadence Allegro .brd file"),
|
|
173
|
-
output: z
|
|
174
|
-
.string()
|
|
175
|
-
.optional()
|
|
176
|
-
.describe("Output path (without .xml extension — Cadence appends it). Defaults to <boardname>_ipc2581.xml next to the .brd"),
|
|
177
|
-
revision: z
|
|
178
|
-
.enum(["B", "C"])
|
|
179
|
-
.optional()
|
|
180
|
-
.describe('IPC-2581 revision: "B" (1.03) or "C" (1.04, default). Rev C is richest.'),
|
|
181
|
-
},
|
|
182
|
-
}, async ({ board, output, revision }) => {
|
|
183
|
-
const result = await exportCadenceBoard(board, { output, revision });
|
|
184
|
-
return formatResult(result);
|
|
185
|
-
});
|
|
65
|
+
registerGetDesignOverview(server);
|
|
66
|
+
registerQueryComponents(server);
|
|
67
|
+
registerQueryNet(server);
|
|
68
|
+
registerExportCadenceBoard(server);
|
|
69
|
+
registerExportCadenceConstraints(server);
|
|
70
|
+
registerQueryConstraints(server);
|
|
71
|
+
// TODO: register render-net once PNG output via resvg-wasm is stable in compiled binaries
|
|
186
72
|
return server;
|
|
187
73
|
};
|
|
188
74
|
/**
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,QAAQ,IAAI,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AACvF,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,QAAQ,IAAI,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,QAAQ,IAAI,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACrG,OAAO,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAEpF,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B3B,CAAC,IAAI,EAAE,CAAC;AAET,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAc,EAAE;IAC1C,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;SACV;QACD,YAAY,EAAE,mBAAmB;KAClC,CACF,CAAC;IAEF,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,gCAAgC,CAAC,MAAM,CAAC,CAAC;IACzC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,0FAA0F;IAE1F,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,IAAmB,EAAE;IACjD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { ErrorResult, ExportCadenceBoardResult } from "./lib/types.js";
|
|
3
|
+
export declare const exportCadenceBoard: (brdPath: string, options?: {
|
|
4
|
+
output?: string;
|
|
5
|
+
revision?: "B" | "C";
|
|
6
|
+
}) => Promise<ExportCadenceBoardResult | ErrorResult>;
|
|
7
|
+
export declare const register: (server: McpServer) => void;
|
|
8
|
+
//# sourceMappingURL=export-cadence-board.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-cadence-board.d.ts","sourceRoot":"","sources":["../../src/tools/export-cadence-board.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAQ5E,eAAO,MAAM,kBAAkB,GAC7B,SAAS,MAAM,EACf,UAAU;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,CAAA;CAAE,KAClD,OAAO,CAAC,wBAAwB,GAAG,WAAW,CAqFhD,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,QAAQ,SAAS,KAAG,IAyB5C,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { stat } from "node:fs/promises";
|
|
2
|
+
import { exec } from "node:child_process";
|
|
3
|
+
import { promisify } from "node:util";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { detectCadenceInstalls, requireWindows, serializeCadenceCall } from "./lib/cadence.js";
|
|
7
|
+
import { formatResult } from "./shared.js";
|
|
8
|
+
const execAsync = promisify(exec);
|
|
9
|
+
const REV_B_FLAGS = "-f 1.03 -u MICRON -d -b -l -R -K -n -p -t -c -O -I -D -M -S -k -e";
|
|
10
|
+
const REV_C_FLAGS = "-f 1.04 -u MICRON -d -b -l -R -K -G -Y -p -t -c -O -I -D -M -A -B -C -U -k -e";
|
|
11
|
+
export const exportCadenceBoard = async (brdPath, options) => {
|
|
12
|
+
const windowsError = requireWindows("Cadence export");
|
|
13
|
+
if (windowsError)
|
|
14
|
+
return windowsError;
|
|
15
|
+
const resolvedBrd = path.resolve(brdPath);
|
|
16
|
+
if (!resolvedBrd.toLowerCase().endsWith(".brd")) {
|
|
17
|
+
return { error: `Expected a .brd file, got: '${path.basename(resolvedBrd)}'` };
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const s = await stat(resolvedBrd);
|
|
21
|
+
if (!s.isFile()) {
|
|
22
|
+
return { error: `'${resolvedBrd}' is not a file` };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return { error: `Board file not found: '${resolvedBrd}'` };
|
|
27
|
+
}
|
|
28
|
+
const installs = await detectCadenceInstalls("ipc2581_out.exe");
|
|
29
|
+
if (installs.length === 0) {
|
|
30
|
+
return {
|
|
31
|
+
error: "No Cadence SPB installation with ipc2581_out.exe found in C:/Cadence. Ensure Cadence Allegro/OrCAD PCB Editor is installed.",
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const cadence = installs[0];
|
|
35
|
+
const revision = options?.revision ?? "C";
|
|
36
|
+
const flags = revision === "B" ? REV_B_FLAGS : REV_C_FLAGS;
|
|
37
|
+
const brdDir = path.dirname(resolvedBrd);
|
|
38
|
+
const brdName = path.basename(resolvedBrd, ".brd");
|
|
39
|
+
const outputBase = options?.output ?? path.join(brdDir, `${brdName}_ipc2581`);
|
|
40
|
+
const expectedOutput = outputBase.endsWith(".xml") ? outputBase : `${outputBase}.xml`;
|
|
41
|
+
const command = `"${cadence.exePath}" ${flags} -o "${outputBase}" "${resolvedBrd}"`;
|
|
42
|
+
return serializeCadenceCall(async () => {
|
|
43
|
+
try {
|
|
44
|
+
const { stdout, stderr } = await execAsync(command, {
|
|
45
|
+
cwd: brdDir,
|
|
46
|
+
timeout: 300_000,
|
|
47
|
+
});
|
|
48
|
+
const log = (stdout + stderr).trim();
|
|
49
|
+
if (log.includes("License checking failed. Terminating")) {
|
|
50
|
+
return {
|
|
51
|
+
error: `Cadence license check failed. Ensure a valid Allegro license is available. Log: ${log}`,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
if (!log.includes("a2ipc2581 complete")) {
|
|
55
|
+
return {
|
|
56
|
+
error: `Export did not complete successfully. Log: ${log}`,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
const outStat = await stat(expectedOutput);
|
|
61
|
+
if (outStat.size < 1024) {
|
|
62
|
+
return {
|
|
63
|
+
error: `Output file is suspiciously small (${outStat.size} bytes): '${expectedOutput}'`,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return {
|
|
69
|
+
error: `Export reported success but output file not found: '${expectedOutput}'`,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
success: true,
|
|
74
|
+
outputPath: expectedOutput,
|
|
75
|
+
revision,
|
|
76
|
+
cadenceVersion: cadence.version,
|
|
77
|
+
log: log || undefined,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
const execError = err;
|
|
82
|
+
const combinedLog = [execError.stdout, execError.stderr].filter(Boolean).join("\n").trim();
|
|
83
|
+
return {
|
|
84
|
+
error: `Cadence ipc2581_out failed: ${execError.message ?? "Unknown error"}${combinedLog ? `\nLog: ${combinedLog}` : ""}`,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
export const register = (server) => {
|
|
90
|
+
server.registerTool("export_cadence_board", {
|
|
91
|
+
description: "Export a Cadence Allegro .brd file to IPC-2581 XML. Windows only. Requires Cadence SPB installation (auto-detected). Calls are serialized internally to avoid license conflicts.",
|
|
92
|
+
inputSchema: {
|
|
93
|
+
board: z.string().describe("Path to Cadence Allegro .brd file"),
|
|
94
|
+
output: z
|
|
95
|
+
.string()
|
|
96
|
+
.optional()
|
|
97
|
+
.describe("Output path (without .xml extension — Cadence appends it). Defaults to <boardname>_ipc2581.xml next to the .brd"),
|
|
98
|
+
revision: z
|
|
99
|
+
.enum(["B", "C"])
|
|
100
|
+
.optional()
|
|
101
|
+
.describe('IPC-2581 revision: "B" (1.03) or "C" (1.04, default). Rev C is richest.'),
|
|
102
|
+
},
|
|
103
|
+
}, async ({ board, output, revision }) => {
|
|
104
|
+
const result = await exportCadenceBoard(board, { output, revision });
|
|
105
|
+
return formatResult(result);
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=export-cadence-board.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-cadence-board.js","sourceRoot":"","sources":["../../src/tools/export-cadence-board.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { ErrorResult, ExportCadenceConstraintsResult } from "./lib/types.js";
|
|
3
|
+
export declare const exportCadenceConstraints: (brdPath: string, options?: {
|
|
4
|
+
output?: string;
|
|
5
|
+
}) => Promise<ExportCadenceConstraintsResult | ErrorResult>;
|
|
6
|
+
export declare const register: (server: McpServer) => void;
|
|
7
|
+
//# sourceMappingURL=export-cadence-constraints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-cadence-constraints.d.ts","sourceRoot":"","sources":["../../src/tools/export-cadence-constraints.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,WAAW,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAKlF,eAAO,MAAM,wBAAwB,GACnC,SAAS,MAAM,EACf,UAAU;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAC5B,OAAO,CAAC,8BAA8B,GAAG,WAAW,CA0EtD,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,QAAQ,SAAS,KAAG,IAmB5C,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { stat } from "node:fs/promises";
|
|
2
|
+
import { exec } from "node:child_process";
|
|
3
|
+
import { promisify } from "node:util";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { detectCadenceInstalls, requireWindows, serializeCadenceCall } from "./lib/cadence.js";
|
|
7
|
+
import { formatResult } from "./shared.js";
|
|
8
|
+
const execAsync = promisify(exec);
|
|
9
|
+
export const exportCadenceConstraints = async (brdPath, options) => {
|
|
10
|
+
const windowsError = requireWindows("Cadence constraint export");
|
|
11
|
+
if (windowsError)
|
|
12
|
+
return windowsError;
|
|
13
|
+
const resolvedBrd = path.resolve(brdPath);
|
|
14
|
+
if (!resolvedBrd.toLowerCase().endsWith(".brd")) {
|
|
15
|
+
return { error: `Expected a .brd file, got: '${path.basename(resolvedBrd)}'` };
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const s = await stat(resolvedBrd);
|
|
19
|
+
if (!s.isFile()) {
|
|
20
|
+
return { error: `'${resolvedBrd}' is not a file` };
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return { error: `Board file not found: '${resolvedBrd}'` };
|
|
25
|
+
}
|
|
26
|
+
const installs = await detectCadenceInstalls("techfile.exe");
|
|
27
|
+
if (installs.length === 0) {
|
|
28
|
+
return {
|
|
29
|
+
error: "No Cadence SPB installation with techfile.exe found in C:/Cadence. Ensure Cadence Allegro/OrCAD PCB Editor is installed.",
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const cadence = installs[0];
|
|
33
|
+
const brdDir = path.dirname(resolvedBrd);
|
|
34
|
+
const brdName = path.basename(resolvedBrd, ".brd");
|
|
35
|
+
const outputPath = options?.output ?? path.join(brdDir, `${brdName}_constraints.tcfx`);
|
|
36
|
+
const command = `"${cadence.exePath}" -w "${resolvedBrd}" "${outputPath}"`;
|
|
37
|
+
return serializeCadenceCall(async () => {
|
|
38
|
+
try {
|
|
39
|
+
const { stdout, stderr } = await execAsync(command, {
|
|
40
|
+
cwd: brdDir,
|
|
41
|
+
timeout: 120_000,
|
|
42
|
+
});
|
|
43
|
+
const log = (stdout + stderr).trim();
|
|
44
|
+
if (log.includes("License checking failed")) {
|
|
45
|
+
return {
|
|
46
|
+
error: `Cadence license check failed. Ensure a valid Allegro license is available. Log: ${log}`,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const outStat = await stat(outputPath);
|
|
51
|
+
if (outStat.size < 100) {
|
|
52
|
+
return {
|
|
53
|
+
error: `Output file is suspiciously small (${outStat.size} bytes): '${outputPath}'`,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return {
|
|
59
|
+
error: `Export completed but output file not found: '${outputPath}'`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
success: true,
|
|
64
|
+
outputPath,
|
|
65
|
+
cadenceVersion: cadence.version,
|
|
66
|
+
log: log || undefined,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
const execError = err;
|
|
71
|
+
const combinedLog = [execError.stdout, execError.stderr].filter(Boolean).join("\n").trim();
|
|
72
|
+
return {
|
|
73
|
+
error: `Cadence techfile failed: ${execError.message ?? "Unknown error"}${combinedLog ? `\nLog: ${combinedLog}` : ""}`,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
export const register = (server) => {
|
|
79
|
+
server.registerTool("export_cadence_constraints", {
|
|
80
|
+
description: "Export a Cadence Allegro .brd file to .tcfx constraint XML. Windows only. Requires Cadence SPB installation (auto-detected). Calls are serialized internally to avoid license conflicts.",
|
|
81
|
+
inputSchema: {
|
|
82
|
+
board: z.string().describe("Path to Cadence Allegro .brd file"),
|
|
83
|
+
output: z
|
|
84
|
+
.string()
|
|
85
|
+
.optional()
|
|
86
|
+
.describe("Output .tcfx path. Defaults to <boardname>_constraints.tcfx next to the .brd"),
|
|
87
|
+
},
|
|
88
|
+
}, async ({ board, output }) => {
|
|
89
|
+
const result = await exportCadenceConstraints(board, { output });
|
|
90
|
+
return formatResult(result);
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=export-cadence-constraints.js.map
|