@intelligentelectron/universal-netlist 0.0.12

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 (105) hide show
  1. package/CHANGELOG.md +121 -0
  2. package/LICENSE +190 -0
  3. package/NOTICE +4 -0
  4. package/README.md +246 -0
  5. package/dist/circuit-traversal.d.ts +73 -0
  6. package/dist/circuit-traversal.d.ts.map +1 -0
  7. package/dist/circuit-traversal.js +299 -0
  8. package/dist/circuit-traversal.js.map +1 -0
  9. package/dist/cli/commands.d.ts +23 -0
  10. package/dist/cli/commands.d.ts.map +1 -0
  11. package/dist/cli/commands.js +140 -0
  12. package/dist/cli/commands.js.map +1 -0
  13. package/dist/cli/prompts.d.ts +10 -0
  14. package/dist/cli/prompts.d.ts.map +1 -0
  15. package/dist/cli/prompts.js +22 -0
  16. package/dist/cli/prompts.js.map +1 -0
  17. package/dist/cli/shell.d.ts +15 -0
  18. package/dist/cli/shell.d.ts.map +1 -0
  19. package/dist/cli/shell.js +66 -0
  20. package/dist/cli/shell.js.map +1 -0
  21. package/dist/cli/updater.d.ts +46 -0
  22. package/dist/cli/updater.d.ts.map +1 -0
  23. package/dist/cli/updater.js +319 -0
  24. package/dist/cli/updater.js.map +1 -0
  25. package/dist/index.d.ts +16 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +63 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/parsers/altium/connectivity.d.ts +32 -0
  30. package/dist/parsers/altium/connectivity.d.ts.map +1 -0
  31. package/dist/parsers/altium/connectivity.js +308 -0
  32. package/dist/parsers/altium/connectivity.js.map +1 -0
  33. package/dist/parsers/altium/discovery.d.ts +30 -0
  34. package/dist/parsers/altium/discovery.d.ts.map +1 -0
  35. package/dist/parsers/altium/discovery.js +174 -0
  36. package/dist/parsers/altium/discovery.js.map +1 -0
  37. package/dist/parsers/altium/hierarchy.d.ts +29 -0
  38. package/dist/parsers/altium/hierarchy.d.ts.map +1 -0
  39. package/dist/parsers/altium/hierarchy.js +94 -0
  40. package/dist/parsers/altium/hierarchy.js.map +1 -0
  41. package/dist/parsers/altium/index.d.ts +53 -0
  42. package/dist/parsers/altium/index.d.ts.map +1 -0
  43. package/dist/parsers/altium/index.js +404 -0
  44. package/dist/parsers/altium/index.js.map +1 -0
  45. package/dist/parsers/altium/net-extractor.d.ts +24 -0
  46. package/dist/parsers/altium/net-extractor.d.ts.map +1 -0
  47. package/dist/parsers/altium/net-extractor.js +295 -0
  48. package/dist/parsers/altium/net-extractor.js.map +1 -0
  49. package/dist/parsers/altium/ole-reader.d.ts +91 -0
  50. package/dist/parsers/altium/ole-reader.d.ts.map +1 -0
  51. package/dist/parsers/altium/ole-reader.js +304 -0
  52. package/dist/parsers/altium/ole-reader.js.map +1 -0
  53. package/dist/parsers/altium/record-parser.d.ts +21 -0
  54. package/dist/parsers/altium/record-parser.d.ts.map +1 -0
  55. package/dist/parsers/altium/record-parser.js +117 -0
  56. package/dist/parsers/altium/record-parser.js.map +1 -0
  57. package/dist/parsers/altium/schemas.d.ts +277 -0
  58. package/dist/parsers/altium/schemas.d.ts.map +1 -0
  59. package/dist/parsers/altium/schemas.js +246 -0
  60. package/dist/parsers/altium/schemas.js.map +1 -0
  61. package/dist/parsers/altium/types.d.ts +213 -0
  62. package/dist/parsers/altium/types.d.ts.map +1 -0
  63. package/dist/parsers/altium/types.js +180 -0
  64. package/dist/parsers/altium/types.js.map +1 -0
  65. package/dist/parsers/cadence/discovery.d.ts +45 -0
  66. package/dist/parsers/cadence/discovery.d.ts.map +1 -0
  67. package/dist/parsers/cadence/discovery.js +277 -0
  68. package/dist/parsers/cadence/discovery.js.map +1 -0
  69. package/dist/parsers/cadence/index.d.ts +41 -0
  70. package/dist/parsers/cadence/index.d.ts.map +1 -0
  71. package/dist/parsers/cadence/index.js +139 -0
  72. package/dist/parsers/cadence/index.js.map +1 -0
  73. package/dist/parsers/cadence/pstchip-parser.d.ts +23 -0
  74. package/dist/parsers/cadence/pstchip-parser.d.ts.map +1 -0
  75. package/dist/parsers/cadence/pstchip-parser.js +82 -0
  76. package/dist/parsers/cadence/pstchip-parser.js.map +1 -0
  77. package/dist/parsers/cadence/pstxnet-parser.d.ts +15 -0
  78. package/dist/parsers/cadence/pstxnet-parser.d.ts.map +1 -0
  79. package/dist/parsers/cadence/pstxnet-parser.js +55 -0
  80. package/dist/parsers/cadence/pstxnet-parser.js.map +1 -0
  81. package/dist/parsers/cadence/pstxprt-parser.d.ts +24 -0
  82. package/dist/parsers/cadence/pstxprt-parser.d.ts.map +1 -0
  83. package/dist/parsers/cadence/pstxprt-parser.js +75 -0
  84. package/dist/parsers/cadence/pstxprt-parser.js.map +1 -0
  85. package/dist/parsers/index.d.ts +33 -0
  86. package/dist/parsers/index.d.ts.map +1 -0
  87. package/dist/parsers/index.js +49 -0
  88. package/dist/parsers/index.js.map +1 -0
  89. package/dist/server.d.ts +16 -0
  90. package/dist/server.d.ts.map +1 -0
  91. package/dist/server.js +277 -0
  92. package/dist/server.js.map +1 -0
  93. package/dist/service.d.ts +129 -0
  94. package/dist/service.d.ts.map +1 -0
  95. package/dist/service.js +759 -0
  96. package/dist/service.js.map +1 -0
  97. package/dist/types.d.ts +242 -0
  98. package/dist/types.d.ts.map +1 -0
  99. package/dist/types.js +27 -0
  100. package/dist/types.js.map +1 -0
  101. package/dist/version.d.ts +10 -0
  102. package/dist/version.d.ts.map +1 -0
  103. package/dist/version.js +25 -0
  104. package/dist/version.js.map +1 -0
  105. package/package.json +74 -0
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Auto-updater for universal-netlist server.
3
+ *
4
+ * Checks GitHub Releases for newer versions and self-updates on startup.
5
+ * Can be disabled via UNIVERSAL_NETLIST_MCP_NO_UPDATE=1 environment variable.
6
+ */
7
+ /** Result of an update check. */
8
+ export interface UpdateCheckResult {
9
+ updateAvailable: boolean;
10
+ currentVersion: string;
11
+ latestVersion: string | null;
12
+ downloadUrl: string | null;
13
+ error?: string;
14
+ }
15
+ /** Result of an update operation. */
16
+ export interface UpdateResult {
17
+ success: boolean;
18
+ previousVersion: string;
19
+ newVersion: string | null;
20
+ error?: string;
21
+ }
22
+ /**
23
+ * Detect if running as an npm global install or via npx.
24
+ * npm installs run from node_modules, not as compiled binaries.
25
+ */
26
+ export declare const isNpmInstall: () => boolean;
27
+ /**
28
+ * Check if an update is available.
29
+ */
30
+ export declare const checkForUpdate: () => Promise<UpdateCheckResult>;
31
+ /**
32
+ * Perform the update by downloading and replacing the current binary.
33
+ */
34
+ export declare const performUpdate: (downloadUrl: string, newVersion: string) => Promise<UpdateResult>;
35
+ /**
36
+ * Re-execute the current process with the same arguments.
37
+ */
38
+ export declare const reexec: () => never;
39
+ /**
40
+ * Check for updates and apply if available.
41
+ * This is the main entry point for auto-updates on startup.
42
+ *
43
+ * @returns true if an update was applied and process should restart
44
+ */
45
+ export declare const autoUpdate: () => Promise<boolean>;
46
+ //# sourceMappingURL=updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../../src/cli/updater.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;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;AA6EF;;GAEG;AACH,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,iBAAiB,CA8BhE,CAAC;AA2FF;;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,CAoClD,CAAC"}
@@ -0,0 +1,319 @@
1
+ /**
2
+ * Auto-updater for universal-netlist server.
3
+ *
4
+ * Checks GitHub Releases for newer versions and self-updates on startup.
5
+ * Can be disabled via UNIVERSAL_NETLIST_MCP_NO_UPDATE=1 environment variable.
6
+ */
7
+ import { createWriteStream, chmodSync, renameSync, unlinkSync, existsSync, readdirSync, } from "node:fs";
8
+ import { tmpdir } from "node:os";
9
+ import { join, dirname, basename } from "node:path";
10
+ import { spawn } from "node:child_process";
11
+ import { VERSION, GITHUB_REPO, BINARY_NAME } from "../version.js";
12
+ /**
13
+ * Detect if running as an npm global install or via npx.
14
+ * npm installs run from node_modules, not as compiled binaries.
15
+ */
16
+ export const isNpmInstall = () => {
17
+ const scriptPath = process.argv[1];
18
+ return scriptPath?.includes("node_modules") ?? false;
19
+ };
20
+ /**
21
+ * Get the platform-specific binary name.
22
+ */
23
+ const getPlatformBinaryName = () => {
24
+ const platform = process.platform;
25
+ const arch = process.arch;
26
+ if (platform === "darwin") {
27
+ return arch === "arm64"
28
+ ? `${BINARY_NAME}-darwin-arm64`
29
+ : `${BINARY_NAME}-darwin-x64`;
30
+ }
31
+ else if (platform === "linux") {
32
+ return arch === "arm64"
33
+ ? `${BINARY_NAME}-linux-arm64`
34
+ : `${BINARY_NAME}-linux-x64`;
35
+ }
36
+ else if (platform === "win32") {
37
+ return `${BINARY_NAME}-windows-x64.exe`;
38
+ }
39
+ throw new Error(`Unsupported platform: ${platform}-${arch}`);
40
+ };
41
+ /**
42
+ * Parse a version string into comparable parts.
43
+ */
44
+ const parseVersion = (version) => {
45
+ const cleaned = version.replace(/^v/, "");
46
+ return cleaned.split(".").map((part) => parseInt(part, 10) || 0);
47
+ };
48
+ /**
49
+ * Compare two version strings. Returns:
50
+ * - Negative if a < b
51
+ * - Zero if a === b
52
+ * - Positive if a > b
53
+ */
54
+ const compareVersions = (a, b) => {
55
+ const partsA = parseVersion(a);
56
+ const partsB = parseVersion(b);
57
+ const maxLen = Math.max(partsA.length, partsB.length);
58
+ for (let i = 0; i < maxLen; i++) {
59
+ const numA = partsA[i] || 0;
60
+ const numB = partsB[i] || 0;
61
+ if (numA !== numB) {
62
+ return numA - numB;
63
+ }
64
+ }
65
+ return 0;
66
+ };
67
+ /**
68
+ * Fetch the latest release from GitHub.
69
+ */
70
+ const fetchLatestRelease = async () => {
71
+ const url = `https://api.github.com/repos/${GITHUB_REPO}/releases/latest`;
72
+ const response = await fetch(url, {
73
+ headers: {
74
+ Accept: "application/vnd.github.v3+json",
75
+ "User-Agent": `${BINARY_NAME}/${VERSION}`,
76
+ },
77
+ });
78
+ if (!response.ok) {
79
+ if (response.status === 404) {
80
+ throw new Error("No releases found");
81
+ }
82
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`);
83
+ }
84
+ return response.json();
85
+ };
86
+ /**
87
+ * Check if an update is available.
88
+ */
89
+ export const checkForUpdate = async () => {
90
+ try {
91
+ const release = await fetchLatestRelease();
92
+ const latestVersion = release.tag_name.replace(/^v/, "");
93
+ const updateAvailable = compareVersions(latestVersion, VERSION) > 0;
94
+ let downloadUrl = null;
95
+ if (updateAvailable) {
96
+ const binaryName = getPlatformBinaryName();
97
+ const asset = release.assets.find((a) => a.name === binaryName);
98
+ if (asset) {
99
+ downloadUrl = asset.browser_download_url;
100
+ }
101
+ }
102
+ return {
103
+ updateAvailable,
104
+ currentVersion: VERSION,
105
+ latestVersion,
106
+ downloadUrl,
107
+ };
108
+ }
109
+ catch (error) {
110
+ return {
111
+ updateAvailable: false,
112
+ currentVersion: VERSION,
113
+ latestVersion: null,
114
+ downloadUrl: null,
115
+ error: error instanceof Error ? error.message : String(error),
116
+ };
117
+ }
118
+ };
119
+ /**
120
+ * Download a file from a URL to a local path.
121
+ */
122
+ const downloadFile = async (url, destPath) => {
123
+ const response = await fetch(url, {
124
+ headers: {
125
+ "User-Agent": `${BINARY_NAME}/${VERSION}`,
126
+ },
127
+ });
128
+ if (!response.ok) {
129
+ throw new Error(`Download failed: ${response.status} ${response.statusText}`);
130
+ }
131
+ const fileStream = createWriteStream(destPath);
132
+ return new Promise((resolve, reject) => {
133
+ if (!response.body) {
134
+ reject(new Error("No response body"));
135
+ return;
136
+ }
137
+ const reader = response.body.getReader();
138
+ const pump = async () => {
139
+ const { done, value } = await reader.read();
140
+ if (done) {
141
+ fileStream.end();
142
+ return;
143
+ }
144
+ fileStream.write(Buffer.from(value));
145
+ return pump();
146
+ };
147
+ fileStream.on("finish", resolve);
148
+ fileStream.on("error", reject);
149
+ pump().catch(reject);
150
+ });
151
+ };
152
+ /**
153
+ * Get the path to the current executable.
154
+ */
155
+ const getCurrentExecutablePath = () => {
156
+ // For Bun-compiled binaries, process.execPath points to the binary itself
157
+ // For Node.js, process.argv[1] is the script path
158
+ if (process.execPath.includes("node") || process.execPath.includes("bun")) {
159
+ // Running via node/bun interpreter - use argv[1]
160
+ return process.argv[1];
161
+ }
162
+ // Compiled binary - use execPath
163
+ return process.execPath;
164
+ };
165
+ /**
166
+ * Generate a unique backup path with timestamp to avoid conflicts with locked files.
167
+ * On Windows, previous backup files may still be locked by the old process.
168
+ */
169
+ const getBackupPath = (currentPath) => {
170
+ return `${currentPath}.backup.${Date.now()}`;
171
+ };
172
+ /**
173
+ * Clean up old backup files from previous updates (best effort).
174
+ * On Windows, backup files may remain if the old process was still running.
175
+ * This is non-fatal - if files are locked, they'll be cleaned up next time.
176
+ */
177
+ const cleanupOldBackups = (currentPath) => {
178
+ const dir = dirname(currentPath);
179
+ const base = basename(currentPath);
180
+ try {
181
+ const files = readdirSync(dir);
182
+ for (const file of files) {
183
+ if (file.startsWith(`${base}.backup.`)) {
184
+ try {
185
+ unlinkSync(join(dir, file));
186
+ }
187
+ catch {
188
+ // Ignore - file may still be locked
189
+ }
190
+ }
191
+ }
192
+ }
193
+ catch {
194
+ // Ignore directory read errors
195
+ }
196
+ };
197
+ /**
198
+ * Perform the update by downloading and replacing the current binary.
199
+ */
200
+ export const performUpdate = async (downloadUrl, newVersion) => {
201
+ const currentPath = getCurrentExecutablePath();
202
+ const tempPath = join(tmpdir(), `${BINARY_NAME}-update-${Date.now()}`);
203
+ // Use timestamped backup to avoid conflicts with locked files from previous updates
204
+ const backupPath = getBackupPath(currentPath);
205
+ // Clean up old backups from previous updates (best effort, non-fatal)
206
+ cleanupOldBackups(currentPath);
207
+ try {
208
+ // Download new binary to temp location
209
+ await downloadFile(downloadUrl, tempPath);
210
+ // Make executable
211
+ if (process.platform !== "win32") {
212
+ chmodSync(tempPath, 0o755);
213
+ }
214
+ // Backup current binary
215
+ if (existsSync(currentPath)) {
216
+ renameSync(currentPath, backupPath);
217
+ }
218
+ // Move new binary into place
219
+ renameSync(tempPath, currentPath);
220
+ // Remove backup (non-fatal on Windows due to file locking)
221
+ if (existsSync(backupPath)) {
222
+ try {
223
+ unlinkSync(backupPath);
224
+ }
225
+ catch {
226
+ // On Windows, the old executable may still be locked.
227
+ // This is fine - it will be cleaned up on next update.
228
+ }
229
+ }
230
+ return {
231
+ success: true,
232
+ previousVersion: VERSION,
233
+ newVersion,
234
+ };
235
+ }
236
+ catch (error) {
237
+ // Attempt to restore backup
238
+ if (existsSync(backupPath) && !existsSync(currentPath)) {
239
+ try {
240
+ renameSync(backupPath, currentPath);
241
+ }
242
+ catch {
243
+ // Ignore restore errors
244
+ }
245
+ }
246
+ // Clean up temp file
247
+ if (existsSync(tempPath)) {
248
+ try {
249
+ unlinkSync(tempPath);
250
+ }
251
+ catch {
252
+ // Ignore cleanup errors
253
+ }
254
+ }
255
+ return {
256
+ success: false,
257
+ previousVersion: VERSION,
258
+ newVersion: null,
259
+ error: error instanceof Error ? error.message : String(error),
260
+ };
261
+ }
262
+ };
263
+ /**
264
+ * Re-execute the current process with the same arguments.
265
+ */
266
+ export const reexec = () => {
267
+ const execPath = getCurrentExecutablePath();
268
+ const args = process.argv.slice(2);
269
+ // Spawn the new process
270
+ const child = spawn(execPath, args, {
271
+ stdio: "inherit",
272
+ detached: false,
273
+ });
274
+ // Exit this process when child exits
275
+ child.on("exit", (code) => {
276
+ process.exit(code ?? 0);
277
+ });
278
+ child.on("error", (err) => {
279
+ console.error("Failed to restart:", err.message);
280
+ process.exit(1);
281
+ });
282
+ // This line is reached but we've set up handlers to exit
283
+ // TypeScript needs the never return type satisfied
284
+ throw new Error("Process should have been replaced");
285
+ };
286
+ /**
287
+ * Check for updates and apply if available.
288
+ * This is the main entry point for auto-updates on startup.
289
+ *
290
+ * @returns true if an update was applied and process should restart
291
+ */
292
+ export const autoUpdate = async () => {
293
+ // Check if updates are disabled
294
+ if (process.env.UNIVERSAL_NETLIST_MCP_NO_UPDATE === "1") {
295
+ return false;
296
+ }
297
+ // Skip auto-update for npm installs - use npm update instead
298
+ if (isNpmInstall()) {
299
+ return false;
300
+ }
301
+ const check = await checkForUpdate();
302
+ if (check.error) {
303
+ // Silently continue if update check fails
304
+ return false;
305
+ }
306
+ if (!check.updateAvailable || !check.downloadUrl || !check.latestVersion) {
307
+ return false;
308
+ }
309
+ // Log update to stderr (MCP uses stdio, so stdout is reserved)
310
+ console.error(`[universal-netlist] Updating from ${VERSION} to ${check.latestVersion}...`);
311
+ const result = await performUpdate(check.downloadUrl, check.latestVersion);
312
+ if (!result.success) {
313
+ console.error(`[universal-netlist] Update failed: ${result.error}`);
314
+ return false;
315
+ }
316
+ console.error(`[universal-netlist] Update complete. Restarting...`);
317
+ return true;
318
+ };
319
+ //# sourceMappingURL=updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updater.js","sourceRoot":"","sources":["../../src/cli/updater.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Universal Netlist MCP Server Entry Point
4
+ *
5
+ * Run with: npx tsx src/index.ts
6
+ * Or after build: node dist/index.js
7
+ *
8
+ * CLI flags:
9
+ * --version, -v Print version and exit
10
+ * --help, -h Show help
11
+ * --update Check for and install updates
12
+ * --uninstall Remove binary and PATH entries
13
+ * --no-update Disable auto-update check on startup
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG"}
package/dist/index.js ADDED
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Universal Netlist MCP Server Entry Point
4
+ *
5
+ * Run with: npx tsx src/index.ts
6
+ * Or after build: node dist/index.js
7
+ *
8
+ * CLI flags:
9
+ * --version, -v Print version and exit
10
+ * --help, -h Show help
11
+ * --update Check for and install updates
12
+ * --uninstall Remove binary and PATH entries
13
+ * --no-update Disable auto-update check on startup
14
+ */
15
+ import { printVersion, printHelp, handleUpdateCommand, handleUninstallCommand, } from "./cli/commands.js";
16
+ import { autoUpdate, reexec } from "./cli/updater.js";
17
+ import { runServer } from "./server.js";
18
+ const main = async () => {
19
+ const args = process.argv.slice(2);
20
+ // Handle --version / -v
21
+ if (args.includes("--version") || args.includes("-v")) {
22
+ printVersion();
23
+ return;
24
+ }
25
+ // Handle --help / -h
26
+ if (args.includes("--help") || args.includes("-h")) {
27
+ printHelp();
28
+ return;
29
+ }
30
+ // Handle --update
31
+ if (args.includes("--update")) {
32
+ await handleUpdateCommand();
33
+ return;
34
+ }
35
+ // Handle --uninstall
36
+ if (args.includes("--uninstall")) {
37
+ await handleUninstallCommand();
38
+ return;
39
+ }
40
+ // If running in a TTY (interactive terminal), show help instead of starting server
41
+ if (process.stdin.isTTY) {
42
+ console.log("This is an MCP server that communicates via stdio.");
43
+ console.log("It should be run by an MCP client (e.g., Claude Desktop), not directly.\n");
44
+ console.log("For setup instructions, see:");
45
+ console.log(" https://github.com/IntelligentElectron/universal-netlist?tab=readme-ov-file#connect-the-mcp-with-your-favorite-ai-tool\n");
46
+ console.log("Run with --help for available options.");
47
+ return;
48
+ }
49
+ // Auto-update on startup (unless --no-update flag is present)
50
+ if (!args.includes("--no-update")) {
51
+ const updated = await autoUpdate();
52
+ if (updated) {
53
+ // Re-execute with the new binary
54
+ reexec();
55
+ }
56
+ }
57
+ await runServer();
58
+ };
59
+ main().catch((error) => {
60
+ console.error("Server error:", error);
61
+ process.exit(1);
62
+ });
63
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;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,CAAC,4HAA4H,CAAC,CAAC;QAC1I,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,8DAA8D;IAC9D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,iCAAiC;YACjC,MAAM,EAAE,CAAC;QACX,CAAC;IACH,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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Altium Connectivity Detection
3
+ *
4
+ * Uses spatial indexing and Union-Find for O(n) connectivity detection
5
+ * instead of O(n²) pairwise comparisons.
6
+ */
7
+ import type { AltiumRecord } from './types.js';
8
+ /**
9
+ * Check if two devices are connected.
10
+ *
11
+ * Connectivity is determined by:
12
+ * 1. For wires: line segment intersection
13
+ * 2. For other devices: point overlap on wire segment
14
+ * 3. Special case: power ports/net labels with same TEXT value
15
+ */
16
+ export declare const isConnected: (deviceA: AltiumRecord, deviceB: AltiumRecord) => boolean;
17
+ /**
18
+ * Find all connected components using spatial indexing and Union-Find.
19
+ * This is O(n) average case instead of O(n²).
20
+ */
21
+ export declare const findAllConnectedComponents: (devices: AltiumRecord[]) => AltiumRecord[][];
22
+ /**
23
+ * Find all devices directly connected to the given device.
24
+ */
25
+ export declare const findNeighbors: (device: AltiumRecord, allDevices: AltiumRecord[]) => AltiumRecord[];
26
+ /**
27
+ * Find all devices connected to a starting device using DFS.
28
+ * Note: This is kept for backwards compatibility but the new
29
+ * findAllConnectedComponents() is preferred for performance.
30
+ */
31
+ export declare const findConnectedDevices: (startDevice: AltiumRecord, allDevices: AltiumRecord[], visited?: AltiumRecord[]) => AltiumRecord[];
32
+ //# sourceMappingURL=connectivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectivity.d.ts","sourceRoot":"","sources":["../../../src/parsers/altium/connectivity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAmM/C;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,YAAY,EAAE,SAAS,YAAY,KAAG,OAsC1E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GAAI,SAAS,YAAY,EAAE,KAAG,YAAY,EAAE,EAuElF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,YAAY,EAAE,YAAY,YAAY,EAAE,KAAG,YAAY,EAc5F,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,aAAa,YAAY,EACzB,YAAY,YAAY,EAAE,EAC1B,UAAS,YAAY,EAAO,KAC3B,YAAY,EAcd,CAAC"}