easyeda-mcp-pro 0.3.2 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +369 -52
- package/dist/bom-quality/adapter.d.ts +90 -0
- package/dist/bom-quality/adapter.js +295 -0
- package/dist/bom-quality/adapter.js.map +1 -0
- package/dist/bom-quality/index.d.ts +10 -0
- package/dist/bom-quality/index.js +9 -0
- package/dist/bom-quality/index.js.map +1 -0
- package/dist/bom-quality/quality.d.ts +28 -0
- package/dist/bom-quality/quality.js +179 -0
- package/dist/bom-quality/quality.js.map +1 -0
- package/dist/bom-quality/types.d.ts +94 -0
- package/dist/bom-quality/types.js +12 -0
- package/dist/bom-quality/types.js.map +1 -0
- package/dist/bridge/manager.d.ts +41 -0
- package/dist/bridge/manager.js +334 -47
- package/dist/bridge/manager.js.map +1 -1
- package/dist/bridge/protocol.d.ts +48 -1
- package/dist/bridge/protocol.js +43 -1
- package/dist/bridge/protocol.js.map +1 -1
- package/dist/bridge/types.d.ts +6 -0
- package/dist/bridge/types.js +6 -0
- package/dist/bridge/types.js.map +1 -1
- package/dist/catalog/errors.d.ts +49 -0
- package/dist/catalog/errors.js +60 -0
- package/dist/catalog/errors.js.map +1 -0
- package/dist/catalog/index.d.ts +15 -0
- package/dist/catalog/index.js +17 -0
- package/dist/catalog/index.js.map +1 -0
- package/dist/catalog/schema.d.ts +268 -0
- package/dist/catalog/schema.js +245 -0
- package/dist/catalog/schema.js.map +1 -0
- package/dist/catalog/starter.d.ts +159 -0
- package/dist/catalog/starter.js +579 -0
- package/dist/catalog/starter.js.map +1 -0
- package/dist/catalog/validation.d.ts +48 -0
- package/dist/catalog/validation.js +263 -0
- package/dist/catalog/validation.js.map +1 -0
- package/dist/circuit/circuit-ir.d.ts +460 -0
- package/dist/circuit/circuit-ir.js +292 -0
- package/dist/circuit/circuit-ir.js.map +1 -0
- package/dist/circuit/compiler.d.ts +55 -0
- package/dist/circuit/compiler.js +197 -0
- package/dist/circuit/compiler.js.map +1 -0
- package/dist/circuit/design-intent.d.ts +94 -0
- package/dist/circuit/design-intent.js +118 -0
- package/dist/circuit/design-intent.js.map +1 -0
- package/dist/circuit/errors.d.ts +50 -0
- package/dist/circuit/errors.js +61 -0
- package/dist/circuit/errors.js.map +1 -0
- package/dist/circuit/index.d.ts +17 -0
- package/dist/circuit/index.js +18 -0
- package/dist/circuit/index.js.map +1 -0
- package/dist/circuit/types.d.ts +186 -0
- package/dist/circuit/types.js +123 -0
- package/dist/circuit/types.js.map +1 -0
- package/dist/cli/auto-setup.d.ts +5 -0
- package/dist/cli/auto-setup.js +355 -0
- package/dist/cli/auto-setup.js.map +1 -0
- package/dist/cli/client-definitions.d.ts +34 -0
- package/dist/cli/client-definitions.js +194 -0
- package/dist/cli/client-definitions.js.map +1 -0
- package/dist/cli/local-setup.d.ts +5 -1
- package/dist/cli/local-setup.js +40 -6
- package/dist/cli/local-setup.js.map +1 -1
- package/dist/config/env.d.ts +6 -1
- package/dist/config/env.js +93 -5
- package/dist/config/env.js.map +1 -1
- package/dist/config/profiles.js +4 -4
- package/dist/config/version.d.ts +1 -1
- package/dist/config/version.js +1 -1
- package/dist/export-manifest/errors.d.ts +55 -0
- package/dist/export-manifest/errors.js +69 -0
- package/dist/export-manifest/errors.js.map +1 -0
- package/dist/export-manifest/index.d.ts +10 -0
- package/dist/export-manifest/index.js +9 -0
- package/dist/export-manifest/index.js.map +1 -0
- package/dist/export-manifest/types.d.ts +170 -0
- package/dist/export-manifest/types.js +36 -0
- package/dist/export-manifest/types.js.map +1 -0
- package/dist/export-manifest/validation.d.ts +39 -0
- package/dist/export-manifest/validation.js +298 -0
- package/dist/export-manifest/validation.js.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/dist/net-validation/errors.d.ts +89 -0
- package/dist/net-validation/errors.js +69 -0
- package/dist/net-validation/errors.js.map +1 -0
- package/dist/net-validation/fixtures.d.ts +38 -0
- package/dist/net-validation/fixtures.js +215 -0
- package/dist/net-validation/fixtures.js.map +1 -0
- package/dist/net-validation/index.d.ts +10 -0
- package/dist/net-validation/index.js +9 -0
- package/dist/net-validation/index.js.map +1 -0
- package/dist/net-validation/schema.d.ts +118 -0
- package/dist/net-validation/schema.js +140 -0
- package/dist/net-validation/schema.js.map +1 -0
- package/dist/net-validation/validation.d.ts +45 -0
- package/dist/net-validation/validation.js +369 -0
- package/dist/net-validation/validation.js.map +1 -0
- package/dist/pcb-constraints/errors.d.ts +39 -0
- package/dist/pcb-constraints/errors.js +133 -0
- package/dist/pcb-constraints/errors.js.map +1 -0
- package/dist/pcb-constraints/index.d.ts +9 -0
- package/dist/pcb-constraints/index.js +9 -0
- package/dist/pcb-constraints/index.js.map +1 -0
- package/dist/pcb-constraints/types.d.ts +102 -0
- package/dist/pcb-constraints/types.js +7 -0
- package/dist/pcb-constraints/types.js.map +1 -0
- package/dist/pcb-constraints/validation.d.ts +70 -0
- package/dist/pcb-constraints/validation.js +309 -0
- package/dist/pcb-constraints/validation.js.map +1 -0
- package/dist/server/factory.js +2 -0
- package/dist/server/factory.js.map +1 -1
- package/dist/server/transports/http.d.ts +20 -1
- package/dist/server/transports/http.js +156 -34
- package/dist/server/transports/http.js.map +1 -1
- package/dist/storage/database.d.ts +25 -0
- package/dist/storage/database.js +126 -51
- package/dist/storage/database.js.map +1 -1
- package/dist/tools/{L0_diagnostics.d.ts → L0_diagnostics_api.d.ts} +2 -2
- package/dist/tools/L0_diagnostics_api.js +152 -0
- package/dist/tools/L0_diagnostics_api.js.map +1 -0
- package/dist/tools/L0_diagnostics_core.d.ts +6 -0
- package/dist/tools/{L0_diagnostics.js → L0_diagnostics_core.js} +50 -124
- package/dist/tools/L0_diagnostics_core.js.map +1 -0
- package/dist/tools/L1_board.js +20 -4
- package/dist/tools/L1_board.js.map +1 -1
- package/dist/tools/{L1_bom.d.ts → L1_bom_core.d.ts} +2 -2
- package/dist/tools/{L1_bom.js → L1_bom_core.js} +21 -101
- package/dist/tools/L1_bom_core.js.map +1 -0
- package/dist/tools/{L1_schematic.d.ts → L1_bom_sourcing.d.ts} +2 -2
- package/dist/tools/L1_bom_sourcing.js +265 -0
- package/dist/tools/L1_bom_sourcing.js.map +1 -0
- package/dist/tools/L1_drc_erc.js +15 -3
- package/dist/tools/L1_drc_erc.js.map +1 -1
- package/dist/tools/L1_export.js +20 -4
- package/dist/tools/L1_export.js.map +1 -1
- package/dist/tools/L1_pcb_constraints.d.ts +6 -0
- package/dist/tools/L1_pcb_constraints.js +234 -0
- package/dist/tools/L1_pcb_constraints.js.map +1 -0
- package/dist/tools/L1_pcb_write.js +26 -12
- package/dist/tools/L1_pcb_write.js.map +1 -1
- package/dist/tools/L1_schematic_read.d.ts +6 -0
- package/dist/tools/{L1_schematic.js → L1_schematic_read.js} +125 -190
- package/dist/tools/L1_schematic_read.js.map +1 -0
- package/dist/tools/L1_schematic_write.d.ts +6 -0
- package/dist/tools/L1_schematic_write.js +516 -0
- package/dist/tools/L1_schematic_write.js.map +1 -0
- package/dist/tools/register.js +15 -7
- package/dist/tools/register.js.map +1 -1
- package/dist/tools/registry.d.ts +41 -7
- package/dist/tools/registry.js +111 -12
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/types.d.ts +16 -0
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/vendors/base-http-client.d.ts +48 -0
- package/dist/vendors/base-http-client.js +75 -0
- package/dist/vendors/base-http-client.js.map +1 -0
- package/dist/vendors/digikey/client.js +10 -19
- package/dist/vendors/digikey/client.js.map +1 -1
- package/dist/vendors/jlcpcb/client.js +41 -70
- package/dist/vendors/jlcpcb/client.js.map +1 -1
- package/dist/vendors/lcsc/client.js +5 -18
- package/dist/vendors/lcsc/client.js.map +1 -1
- package/dist/vendors/mouser/client.js +4 -12
- package/dist/vendors/mouser/client.js.map +1 -1
- package/easyeda-bridge-extension.eext +0 -0
- package/package.json +41 -26
- package/dist/tools/L0_diagnostics.js.map +0 -1
- package/dist/tools/L1_bom.js.map +0 -1
- package/dist/tools/L1_schematic.js.map +0 -1
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared enums and primitive types for DesignIntent and CircuitIR.
|
|
3
|
+
*
|
|
4
|
+
* These types are schema-agnostic — they define the vocabulary used by
|
|
5
|
+
* both DesignIntent (user-facing requirements) and CircuitIR (machine-readable
|
|
6
|
+
* resolved model).
|
|
7
|
+
*/
|
|
8
|
+
// ── Enums ──────────────────────────────────────────────────────────────────
|
|
9
|
+
/** High-level board / application category. */
|
|
10
|
+
export var BoardType;
|
|
11
|
+
(function (BoardType) {
|
|
12
|
+
BoardType["PowerSupply"] = "power-supply";
|
|
13
|
+
BoardType["McuBoard"] = "mcu-board";
|
|
14
|
+
BoardType["SensorBoard"] = "sensor-board";
|
|
15
|
+
BoardType["AcDcIot"] = "ac-dc-iot";
|
|
16
|
+
BoardType["Hierarchical"] = "hierarchical";
|
|
17
|
+
BoardType["Custom"] = "custom";
|
|
18
|
+
})(BoardType || (BoardType = {}));
|
|
19
|
+
/** Validation lifecycle state of a CircuitIR model. */
|
|
20
|
+
export var ValidationStatus;
|
|
21
|
+
(function (ValidationStatus) {
|
|
22
|
+
ValidationStatus["Draft"] = "draft";
|
|
23
|
+
ValidationStatus["Validated"] = "validated";
|
|
24
|
+
ValidationStatus["Rejected"] = "rejected";
|
|
25
|
+
})(ValidationStatus || (ValidationStatus = {}));
|
|
26
|
+
/** Classification of an electrical net. */
|
|
27
|
+
export var NetType;
|
|
28
|
+
(function (NetType) {
|
|
29
|
+
NetType["Power"] = "power";
|
|
30
|
+
NetType["Signal"] = "signal";
|
|
31
|
+
NetType["Ground"] = "ground";
|
|
32
|
+
})(NetType || (NetType = {}));
|
|
33
|
+
/** Classification of a functional block. */
|
|
34
|
+
export var BlockType;
|
|
35
|
+
(function (BlockType) {
|
|
36
|
+
BlockType["PowerManagement"] = "power-management";
|
|
37
|
+
BlockType["Microcontroller"] = "microcontroller";
|
|
38
|
+
BlockType["Sensor"] = "sensor";
|
|
39
|
+
BlockType["Communication"] = "communication";
|
|
40
|
+
BlockType["Interface"] = "interface";
|
|
41
|
+
BlockType["Protection"] = "protection";
|
|
42
|
+
BlockType["Analog"] = "analog";
|
|
43
|
+
BlockType["Custom"] = "custom";
|
|
44
|
+
})(BlockType || (BlockType = {}));
|
|
45
|
+
/** Severity of a circuit constraint. */
|
|
46
|
+
export var ConstraintSeverity;
|
|
47
|
+
(function (ConstraintSeverity) {
|
|
48
|
+
ConstraintSeverity["Required"] = "required";
|
|
49
|
+
ConstraintSeverity["Recommended"] = "recommended";
|
|
50
|
+
ConstraintSeverity["Informational"] = "informational";
|
|
51
|
+
})(ConstraintSeverity || (ConstraintSeverity = {}));
|
|
52
|
+
/** Kind of constraint. */
|
|
53
|
+
export var ConstraintType;
|
|
54
|
+
(function (ConstraintType) {
|
|
55
|
+
ConstraintType["Electrical"] = "electrical";
|
|
56
|
+
ConstraintType["Mechanical"] = "mechanical";
|
|
57
|
+
ConstraintType["Thermal"] = "thermal";
|
|
58
|
+
ConstraintType["Regulatory"] = "regulatory";
|
|
59
|
+
ConstraintType["Cost"] = "cost";
|
|
60
|
+
ConstraintType["PcbLayout"] = "pcb-layout";
|
|
61
|
+
ConstraintType["Manufacturing"] = "manufacturing";
|
|
62
|
+
})(ConstraintType || (ConstraintType = {}));
|
|
63
|
+
// ── PCB-specific enums ────────────────────────────────────────────────────
|
|
64
|
+
/** PCB layer function / type. */
|
|
65
|
+
export var BoardLayerType;
|
|
66
|
+
(function (BoardLayerType) {
|
|
67
|
+
BoardLayerType["Signal"] = "signal";
|
|
68
|
+
BoardLayerType["Power"] = "power";
|
|
69
|
+
BoardLayerType["Ground"] = "ground";
|
|
70
|
+
BoardLayerType["Plane"] = "plane";
|
|
71
|
+
BoardLayerType["Mechanical"] = "mechanical";
|
|
72
|
+
BoardLayerType["SolderMask"] = "solder-mask";
|
|
73
|
+
BoardLayerType["Paste"] = "paste";
|
|
74
|
+
BoardLayerType["Silkscreen"] = "silkscreen";
|
|
75
|
+
BoardLayerType["Drill"] = "drill";
|
|
76
|
+
BoardLayerType["Keepout"] = "keepout";
|
|
77
|
+
})(BoardLayerType || (BoardLayerType = {}));
|
|
78
|
+
/** Side of the board for component placement. */
|
|
79
|
+
export var PlacementSide;
|
|
80
|
+
(function (PlacementSide) {
|
|
81
|
+
PlacementSide["Top"] = "top";
|
|
82
|
+
PlacementSide["Bottom"] = "bottom";
|
|
83
|
+
PlacementSide["Both"] = "both";
|
|
84
|
+
})(PlacementSide || (PlacementSide = {}));
|
|
85
|
+
/** Restriction applied to a keepout area. */
|
|
86
|
+
export var KeepoutRestriction;
|
|
87
|
+
(function (KeepoutRestriction) {
|
|
88
|
+
KeepoutRestriction["All"] = "all";
|
|
89
|
+
KeepoutRestriction["Tracks"] = "tracks";
|
|
90
|
+
KeepoutRestriction["Vias"] = "vias";
|
|
91
|
+
KeepoutRestriction["Components"] = "components";
|
|
92
|
+
KeepoutRestriction["Copper"] = "copper";
|
|
93
|
+
KeepoutRestriction["Routing"] = "routing";
|
|
94
|
+
})(KeepoutRestriction || (KeepoutRestriction = {}));
|
|
95
|
+
/** Type of mounting hole. */
|
|
96
|
+
export var MountingHoleType;
|
|
97
|
+
(function (MountingHoleType) {
|
|
98
|
+
MountingHoleType["Unplated"] = "unplated";
|
|
99
|
+
MountingHoleType["Plated"] = "plated";
|
|
100
|
+
MountingHoleType["Tooling"] = "tooling";
|
|
101
|
+
})(MountingHoleType || (MountingHoleType = {}));
|
|
102
|
+
/** Purpose for a placement zone. */
|
|
103
|
+
export var PlacementZoneType;
|
|
104
|
+
(function (PlacementZoneType) {
|
|
105
|
+
PlacementZoneType["Power"] = "power";
|
|
106
|
+
PlacementZoneType["Analog"] = "analog";
|
|
107
|
+
PlacementZoneType["Digital"] = "digital";
|
|
108
|
+
PlacementZoneType["Usb"] = "usb";
|
|
109
|
+
PlacementZoneType["Sensor"] = "sensor";
|
|
110
|
+
PlacementZoneType["AcDc"] = "ac-dc";
|
|
111
|
+
PlacementZoneType["HighVoltage"] = "high-voltage";
|
|
112
|
+
PlacementZoneType["Rf"] = "rf";
|
|
113
|
+
PlacementZoneType["Thermal"] = "thermal";
|
|
114
|
+
PlacementZoneType["General"] = "general";
|
|
115
|
+
})(PlacementZoneType || (PlacementZoneType = {}));
|
|
116
|
+
// ── Type guard / helper functions ─────────────────────────────────────────
|
|
117
|
+
export function isValidBoardType(value) {
|
|
118
|
+
return Object.values(BoardType).includes(value);
|
|
119
|
+
}
|
|
120
|
+
export function isValidBlockType(value) {
|
|
121
|
+
return Object.values(BlockType).includes(value);
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/circuit/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8EAA8E;AAE9E,+CAA+C;AAC/C,MAAM,CAAN,IAAY,SAOX;AAPD,WAAY,SAAS;IACnB,yCAA4B,CAAA;IAC5B,mCAAsB,CAAA;IACtB,yCAA4B,CAAA;IAC5B,kCAAqB,CAAA;IACrB,0CAA6B,CAAA;IAC7B,8BAAiB,CAAA;AACnB,CAAC,EAPW,SAAS,KAAT,SAAS,QAOpB;AAED,uDAAuD;AACvD,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,mCAAe,CAAA;IACf,2CAAuB,CAAA;IACvB,yCAAqB,CAAA;AACvB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAED,2CAA2C;AAC3C,MAAM,CAAN,IAAY,OAIX;AAJD,WAAY,OAAO;IACjB,0BAAe,CAAA;IACf,4BAAiB,CAAA;IACjB,4BAAiB,CAAA;AACnB,CAAC,EAJW,OAAO,KAAP,OAAO,QAIlB;AAED,4CAA4C;AAC5C,MAAM,CAAN,IAAY,SASX;AATD,WAAY,SAAS;IACnB,iDAAoC,CAAA;IACpC,gDAAmC,CAAA;IACnC,8BAAiB,CAAA;IACjB,4CAA+B,CAAA;IAC/B,oCAAuB,CAAA;IACvB,sCAAyB,CAAA;IACzB,8BAAiB,CAAA;IACjB,8BAAiB,CAAA;AACnB,CAAC,EATW,SAAS,KAAT,SAAS,QASpB;AAED,wCAAwC;AACxC,MAAM,CAAN,IAAY,kBAIX;AAJD,WAAY,kBAAkB;IAC5B,2CAAqB,CAAA;IACrB,iDAA2B,CAAA;IAC3B,qDAA+B,CAAA;AACjC,CAAC,EAJW,kBAAkB,KAAlB,kBAAkB,QAI7B;AAED,0BAA0B;AAC1B,MAAM,CAAN,IAAY,cAQX;AARD,WAAY,cAAc;IACxB,2CAAyB,CAAA;IACzB,2CAAyB,CAAA;IACzB,qCAAmB,CAAA;IACnB,2CAAyB,CAAA;IACzB,+BAAa,CAAA;IACb,0CAAwB,CAAA;IACxB,iDAA+B,CAAA;AACjC,CAAC,EARW,cAAc,KAAd,cAAc,QAQzB;AAED,6EAA6E;AAE7E,iCAAiC;AACjC,MAAM,CAAN,IAAY,cAWX;AAXD,WAAY,cAAc;IACxB,mCAAiB,CAAA;IACjB,iCAAe,CAAA;IACf,mCAAiB,CAAA;IACjB,iCAAe,CAAA;IACf,2CAAyB,CAAA;IACzB,4CAA0B,CAAA;IAC1B,iCAAe,CAAA;IACf,2CAAyB,CAAA;IACzB,iCAAe,CAAA;IACf,qCAAmB,CAAA;AACrB,CAAC,EAXW,cAAc,KAAd,cAAc,QAWzB;AAED,iDAAiD;AACjD,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,4BAAW,CAAA;IACX,kCAAiB,CAAA;IACjB,8BAAa,CAAA;AACf,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAED,6CAA6C;AAC7C,MAAM,CAAN,IAAY,kBAOX;AAPD,WAAY,kBAAkB;IAC5B,iCAAW,CAAA;IACX,uCAAiB,CAAA;IACjB,mCAAa,CAAA;IACb,+CAAyB,CAAA;IACzB,uCAAiB,CAAA;IACjB,yCAAmB,CAAA;AACrB,CAAC,EAPW,kBAAkB,KAAlB,kBAAkB,QAO7B;AAED,6BAA6B;AAC7B,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,yCAAqB,CAAA;IACrB,qCAAiB,CAAA;IACjB,uCAAmB,CAAA;AACrB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAED,oCAAoC;AACpC,MAAM,CAAN,IAAY,iBAWX;AAXD,WAAY,iBAAiB;IAC3B,oCAAe,CAAA;IACf,sCAAiB,CAAA;IACjB,wCAAmB,CAAA;IACnB,gCAAW,CAAA;IACX,sCAAiB,CAAA;IACjB,mCAAc,CAAA;IACd,iDAA4B,CAAA;IAC5B,8BAAS,CAAA;IACT,wCAAmB,CAAA;IACnB,wCAAmB,CAAA;AACrB,CAAC,EAXW,iBAAiB,KAAjB,iBAAiB,QAW5B;AAmGD,6EAA6E;AAE7E,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAkB,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAkB,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type SetupOptions } from './client-definitions.js';
|
|
2
|
+
export declare function runSetup(options: SetupOptions): string;
|
|
3
|
+
export declare function runExtension(options: SetupOptions): string;
|
|
4
|
+
export declare function formatClientList(): string;
|
|
5
|
+
export declare function runInteractiveInit(): Promise<void>;
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { createInterface } from 'node:readline/promises';
|
|
4
|
+
import { stdin as input, stdout as output } from 'node:process';
|
|
5
|
+
import { getLogger } from '../utils/logger.js';
|
|
6
|
+
import { SERVER_NAME, NPX_COMMAND, NPX_ARGS, CLIENTS, findConfigPath, detectInstalledClients, getExtensionPath, configHasServer, openFileLocation, ok, info, warn, } from './client-definitions.js';
|
|
7
|
+
// ── Safe logger fallback for CLI paths where pino may not be initialized yet ──
|
|
8
|
+
function logError(message, err) {
|
|
9
|
+
try {
|
|
10
|
+
getLogger().error(err, message);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
console.error(message, err);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
// ── Server entry builder ────────────────────────────────────
|
|
17
|
+
function buildServerEntry(profile, client) {
|
|
18
|
+
const base = {
|
|
19
|
+
command: NPX_COMMAND,
|
|
20
|
+
args: [...NPX_ARGS],
|
|
21
|
+
};
|
|
22
|
+
if (profile !== 'core') {
|
|
23
|
+
base.env = { TOOL_PROFILE: profile };
|
|
24
|
+
}
|
|
25
|
+
// Cline has extra fields
|
|
26
|
+
if (client.name === 'cline') {
|
|
27
|
+
base.disabled = false;
|
|
28
|
+
base.autoApprove = [];
|
|
29
|
+
}
|
|
30
|
+
// Zed uses different structure
|
|
31
|
+
if (client.name === 'zed') {
|
|
32
|
+
return {
|
|
33
|
+
command: {
|
|
34
|
+
path: NPX_COMMAND,
|
|
35
|
+
args: [...NPX_ARGS],
|
|
36
|
+
env: profile !== 'core' ? { TOOL_PROFILE: profile } : undefined,
|
|
37
|
+
},
|
|
38
|
+
settings: {},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return base;
|
|
42
|
+
}
|
|
43
|
+
function readJsonFile(path) {
|
|
44
|
+
try {
|
|
45
|
+
const raw = readFileSync(path, 'utf8');
|
|
46
|
+
return JSON.parse(raw);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return {};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function writeJsonFile(path, data) {
|
|
53
|
+
const dir = dirname(path);
|
|
54
|
+
if (!existsSync(dir)) {
|
|
55
|
+
mkdirSync(dir, { recursive: true });
|
|
56
|
+
}
|
|
57
|
+
writeFileSync(path, JSON.stringify(data, null, 2) + '\n', 'utf8');
|
|
58
|
+
}
|
|
59
|
+
function mergeServerEntry(existing, serverKey, serverEntry) {
|
|
60
|
+
const servers = existing[serverKey] ?? {};
|
|
61
|
+
servers[SERVER_NAME] = serverEntry;
|
|
62
|
+
return { ...existing, [serverKey]: servers };
|
|
63
|
+
}
|
|
64
|
+
// ── Core: setup a single client ─────────────────────────────
|
|
65
|
+
function setupClient(client, profile) {
|
|
66
|
+
const lines = [];
|
|
67
|
+
const configPath = findConfigPath(client);
|
|
68
|
+
if (!configPath) {
|
|
69
|
+
lines.push(warn(`No config path found for ${client.displayName} on ${process.platform}`));
|
|
70
|
+
return lines;
|
|
71
|
+
}
|
|
72
|
+
const serverEntry = buildServerEntry(profile, client);
|
|
73
|
+
const fileExists = existsSync(configPath);
|
|
74
|
+
const existing = fileExists ? readJsonFile(configPath) : {};
|
|
75
|
+
const merged = mergeServerEntry(existing, client.serverKey, serverEntry);
|
|
76
|
+
writeJsonFile(configPath, merged);
|
|
77
|
+
if (fileExists) {
|
|
78
|
+
lines.push(ok(`Updated ${client.displayName} config`));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
lines.push(ok(`Created ${client.displayName} config`));
|
|
82
|
+
}
|
|
83
|
+
lines.push(info(`Path: ${configPath}`));
|
|
84
|
+
return lines;
|
|
85
|
+
}
|
|
86
|
+
// ── Public: run setup command ───────────────────────────────
|
|
87
|
+
export function runSetup(options) {
|
|
88
|
+
const profile = options.profile ?? 'core';
|
|
89
|
+
const clientName = options.client ?? 'list';
|
|
90
|
+
if (clientName === 'list') {
|
|
91
|
+
return formatClientList();
|
|
92
|
+
}
|
|
93
|
+
const lines = [`easyeda-mcp-pro setup (profile: ${profile})`, ''];
|
|
94
|
+
if (clientName === 'all') {
|
|
95
|
+
const detected = detectInstalledClients();
|
|
96
|
+
if (detected.length === 0) {
|
|
97
|
+
lines.push(warn('No MCP clients detected on this system.'));
|
|
98
|
+
lines.push('');
|
|
99
|
+
lines.push('Supported clients:');
|
|
100
|
+
for (const c of CLIENTS) {
|
|
101
|
+
lines.push(` • ${c.displayName} (${c.name})`);
|
|
102
|
+
}
|
|
103
|
+
return lines.join('\n');
|
|
104
|
+
}
|
|
105
|
+
lines.push(`Detected ${detected.length} client(s):`);
|
|
106
|
+
lines.push('');
|
|
107
|
+
for (const client of detected) {
|
|
108
|
+
lines.push(`── ${client.displayName} ──`);
|
|
109
|
+
lines.push(...setupClient(client, profile));
|
|
110
|
+
lines.push('');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
const client = CLIENTS.find((c) => c.name === clientName);
|
|
115
|
+
if (!client) {
|
|
116
|
+
lines.push(warn(`Unknown client: ${clientName}`));
|
|
117
|
+
lines.push('');
|
|
118
|
+
lines.push('Available clients:');
|
|
119
|
+
for (const c of CLIENTS) {
|
|
120
|
+
lines.push(` • ${c.name} — ${c.displayName}`);
|
|
121
|
+
}
|
|
122
|
+
return lines.join('\n');
|
|
123
|
+
}
|
|
124
|
+
lines.push(`── ${client.displayName} ──`);
|
|
125
|
+
lines.push(...setupClient(client, profile));
|
|
126
|
+
}
|
|
127
|
+
lines.push('');
|
|
128
|
+
lines.push('Next steps:');
|
|
129
|
+
lines.push(' 1. Install the EasyEDA Pro bridge extension:');
|
|
130
|
+
lines.push(` npx ${SERVER_NAME} extension`);
|
|
131
|
+
lines.push(' 2. Restart your MCP client to load the new server.');
|
|
132
|
+
lines.push(' 3. Open a project in EasyEDA Pro, then click MCP Bridge > Connect.');
|
|
133
|
+
return lines.join('\n');
|
|
134
|
+
}
|
|
135
|
+
// ── Public: extension command ───────────────────────────────
|
|
136
|
+
export function runExtension(options) {
|
|
137
|
+
const extPath = getExtensionPath();
|
|
138
|
+
const exists = existsSync(extPath);
|
|
139
|
+
const lines = ['easyeda-mcp-pro extension', ''];
|
|
140
|
+
if (exists) {
|
|
141
|
+
lines.push(ok(`Extension package found`));
|
|
142
|
+
lines.push(info(`Path: ${extPath}`));
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
lines.push(warn('Extension package not found.'));
|
|
146
|
+
lines.push(info(`Expected at: ${extPath}`));
|
|
147
|
+
lines.push('');
|
|
148
|
+
lines.push('Build it with:');
|
|
149
|
+
lines.push(' pnpm build:extension');
|
|
150
|
+
return lines.join('\n');
|
|
151
|
+
}
|
|
152
|
+
if (options.open) {
|
|
153
|
+
lines.push('');
|
|
154
|
+
lines.push(info('Opening extension file location...'));
|
|
155
|
+
openFileLocation(extPath);
|
|
156
|
+
}
|
|
157
|
+
if (options.copy) {
|
|
158
|
+
const dest = join(options.copy, 'easyeda-bridge-extension.eext');
|
|
159
|
+
try {
|
|
160
|
+
const data = readFileSync(extPath);
|
|
161
|
+
const destDir = dirname(dest);
|
|
162
|
+
if (!existsSync(destDir))
|
|
163
|
+
mkdirSync(destDir, { recursive: true });
|
|
164
|
+
writeFileSync(dest, data);
|
|
165
|
+
lines.push(ok(`Copied to ${dest}`));
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
lines.push(warn(`Failed to copy: ${err}`));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
lines.push('');
|
|
172
|
+
lines.push('Installation:');
|
|
173
|
+
lines.push(' 1. Open EasyEDA Pro');
|
|
174
|
+
lines.push(' 2. Go to Settings → Extensions → Extension Manager');
|
|
175
|
+
lines.push(' 3. Click "Import Extension" and select the .eext file above');
|
|
176
|
+
lines.push(' 4. Enable "Allow External Interaction" for the extension');
|
|
177
|
+
lines.push(' 5. Click MCP Bridge → Connect in the menu bar');
|
|
178
|
+
return lines.join('\n');
|
|
179
|
+
}
|
|
180
|
+
// ── Public: list available clients ──────────────────────────
|
|
181
|
+
export function formatClientList() {
|
|
182
|
+
const lines = ['easyeda-mcp-pro — supported MCP clients', ''];
|
|
183
|
+
const detected = detectInstalledClients();
|
|
184
|
+
for (const client of CLIENTS) {
|
|
185
|
+
const isDetected = detected.some((d) => d.name === client.name);
|
|
186
|
+
const configPath = findConfigPath(client);
|
|
187
|
+
const hasConfig = configPath ? existsSync(configPath) : false;
|
|
188
|
+
const hasEntry = hasConfig && configPath ? configHasServer(configPath, client.serverKey) : false;
|
|
189
|
+
let status;
|
|
190
|
+
if (hasEntry) {
|
|
191
|
+
status = '✅ configured';
|
|
192
|
+
}
|
|
193
|
+
else if (isDetected) {
|
|
194
|
+
status = '🔵 detected';
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
status = '⚪ not found';
|
|
198
|
+
}
|
|
199
|
+
lines.push(` ${status} ${client.displayName} (${client.name})`);
|
|
200
|
+
}
|
|
201
|
+
lines.push('');
|
|
202
|
+
lines.push('Usage:');
|
|
203
|
+
lines.push(` npx ${SERVER_NAME} setup <client> Configure a specific client`);
|
|
204
|
+
lines.push(` npx ${SERVER_NAME} setup all Configure all detected clients`);
|
|
205
|
+
lines.push(` npx ${SERVER_NAME} setup claude Example: Claude Desktop`);
|
|
206
|
+
lines.push('');
|
|
207
|
+
lines.push('Options:');
|
|
208
|
+
lines.push(' --profile <name> Tool profile: core (default), pro, full, dev');
|
|
209
|
+
return lines.join('\n');
|
|
210
|
+
}
|
|
211
|
+
// ── Interactive Setup Wizard ────────────────────────────────
|
|
212
|
+
export async function runInteractiveInit() {
|
|
213
|
+
const rl = createInterface({ input, output });
|
|
214
|
+
console.log('╔══════════════════════════════════════════════════════════╗');
|
|
215
|
+
console.log('║ easyeda-mcp-pro Setup Wizard ║');
|
|
216
|
+
console.log('╚══════════════════════════════════════════════════════════╝');
|
|
217
|
+
console.log();
|
|
218
|
+
try {
|
|
219
|
+
// 1. Client Choice
|
|
220
|
+
console.log('Step 1: Choose MCP Client to Configure');
|
|
221
|
+
console.log('--------------------------------------');
|
|
222
|
+
const detected = detectInstalledClients();
|
|
223
|
+
const clientOptions = [
|
|
224
|
+
{ name: 'claude', display: 'Claude Desktop' },
|
|
225
|
+
{ name: 'cursor', display: 'Cursor IDE' },
|
|
226
|
+
{ name: 'vscode', display: 'VS Code (Copilot)' },
|
|
227
|
+
{ name: 'windsurf', display: 'Windsurf (Codeium)' },
|
|
228
|
+
{ name: 'cline', display: 'Cline' },
|
|
229
|
+
{ name: 'gemini', display: 'Gemini CLI / Antigravity' },
|
|
230
|
+
{ name: 'zed', display: 'Zed Editor' },
|
|
231
|
+
{ name: 'amazonq', display: 'Amazon Q Developer' },
|
|
232
|
+
{ name: 'continue', display: 'Continue.dev' },
|
|
233
|
+
];
|
|
234
|
+
for (let i = 0; i < clientOptions.length; i++) {
|
|
235
|
+
const opt = clientOptions[i];
|
|
236
|
+
const isDet = detected.some((d) => d.name === opt.name);
|
|
237
|
+
console.log(` ${i + 1}. ${opt.display}${isDet ? ' (Detected 🔵)' : ''}`);
|
|
238
|
+
}
|
|
239
|
+
console.log(` ${clientOptions.length + 1}. Configure All Detected`);
|
|
240
|
+
console.log();
|
|
241
|
+
let clientChoiceIndex = -1;
|
|
242
|
+
while (true) {
|
|
243
|
+
const answer = await rl.question(`Select client [1-${clientOptions.length + 1}]: `);
|
|
244
|
+
const val = parseInt(answer.trim(), 10);
|
|
245
|
+
if (val >= 1 && val <= clientOptions.length + 1) {
|
|
246
|
+
clientChoiceIndex = val - 1;
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
console.log('Invalid choice. Please select a valid number.');
|
|
250
|
+
}
|
|
251
|
+
const selectedClient = clientChoiceIndex === clientOptions.length ? 'all' : clientOptions[clientChoiceIndex].name;
|
|
252
|
+
console.log();
|
|
253
|
+
// 2. Profile Choice
|
|
254
|
+
console.log('Step 2: Choose Tool Profile');
|
|
255
|
+
console.log('---------------------------');
|
|
256
|
+
console.log(' 1. core - Basic tools for normal workflow (default)');
|
|
257
|
+
console.log(' 2. pro - Core tools + manufacturing exports (Gerber, PDF, pick-place)');
|
|
258
|
+
console.log(' 3. full - Pro tools + documented EasyEDA API full control');
|
|
259
|
+
console.log(' 4. dev - Full tools + runtime/bridge debugging probes');
|
|
260
|
+
console.log();
|
|
261
|
+
let profileChoice = 'core';
|
|
262
|
+
while (true) {
|
|
263
|
+
const answer = await rl.question('Select profile [1-4, default 1]: ');
|
|
264
|
+
const val = answer.trim();
|
|
265
|
+
if (!val) {
|
|
266
|
+
profileChoice = 'core';
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
const num = parseInt(val, 10);
|
|
270
|
+
if (num === 1) {
|
|
271
|
+
profileChoice = 'core';
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
if (num === 2) {
|
|
275
|
+
profileChoice = 'pro';
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
if (num === 3) {
|
|
279
|
+
profileChoice = 'full';
|
|
280
|
+
break;
|
|
281
|
+
}
|
|
282
|
+
if (num === 4) {
|
|
283
|
+
profileChoice = 'dev';
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
console.log('Invalid choice. Please select a valid number.');
|
|
287
|
+
}
|
|
288
|
+
console.log();
|
|
289
|
+
// 3. Extension Choice
|
|
290
|
+
console.log('Step 3: Setup EasyEDA Pro Bridge Extension');
|
|
291
|
+
console.log('------------------------------------------');
|
|
292
|
+
console.log(' 1. Open folder containing extension package (.eext)');
|
|
293
|
+
console.log(' 2. Copy extension package to a custom folder');
|
|
294
|
+
console.log(' 3. Skip for now');
|
|
295
|
+
console.log();
|
|
296
|
+
let extChoice = 3;
|
|
297
|
+
while (true) {
|
|
298
|
+
const answer = await rl.question('Select option [1-3, default 1]: ');
|
|
299
|
+
const val = answer.trim();
|
|
300
|
+
if (!val) {
|
|
301
|
+
extChoice = 1;
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
const num = parseInt(val, 10);
|
|
305
|
+
if (num >= 1 && num <= 3) {
|
|
306
|
+
extChoice = num;
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
console.log('Invalid choice. Please select a valid number.');
|
|
310
|
+
}
|
|
311
|
+
let copyTarget;
|
|
312
|
+
if (extChoice === 2) {
|
|
313
|
+
while (true) {
|
|
314
|
+
const answer = await rl.question('Enter destination directory path: ');
|
|
315
|
+
const dir = answer.trim();
|
|
316
|
+
if (dir) {
|
|
317
|
+
copyTarget = dir;
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
console.log('Path cannot be empty.');
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
console.log();
|
|
324
|
+
console.log('=== Configuring... ===');
|
|
325
|
+
console.log();
|
|
326
|
+
// Perform Client Setup
|
|
327
|
+
const setupResult = runSetup({ client: selectedClient, profile: profileChoice });
|
|
328
|
+
console.log(setupResult);
|
|
329
|
+
console.log();
|
|
330
|
+
// Perform Extension Setup
|
|
331
|
+
if (extChoice === 1) {
|
|
332
|
+
const extResult = runExtension({ open: true });
|
|
333
|
+
console.log(extResult);
|
|
334
|
+
}
|
|
335
|
+
else if (extChoice === 2 && copyTarget) {
|
|
336
|
+
const extResult = runExtension({ copy: copyTarget });
|
|
337
|
+
console.log(extResult);
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
console.log('Extension setup skipped. You can always run:');
|
|
341
|
+
console.log(' npx easyeda-mcp-pro extension --open');
|
|
342
|
+
}
|
|
343
|
+
console.log();
|
|
344
|
+
console.log('════════════════════════════════════════════════════════════');
|
|
345
|
+
console.log('🎉 Setup wizard complete! Please restart your client IDE.');
|
|
346
|
+
console.log('════════════════════════════════════════════════════════════');
|
|
347
|
+
}
|
|
348
|
+
catch (err) {
|
|
349
|
+
logError('Error during setup wizard', err);
|
|
350
|
+
}
|
|
351
|
+
finally {
|
|
352
|
+
rl.close();
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=auto-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-setup.js","sourceRoot":"","sources":["../../src/cli/auto-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type ClientName = 'claude' | 'cursor' | 'vscode' | 'windsurf' | 'cline' | 'gemini' | 'zed' | 'amazonq' | 'continue';
|
|
2
|
+
export type SetupAction = 'setup' | 'extension';
|
|
3
|
+
export interface SetupOptions {
|
|
4
|
+
client?: ClientName | 'all' | 'list';
|
|
5
|
+
profile?: string;
|
|
6
|
+
open?: boolean;
|
|
7
|
+
copy?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ClientDefinition {
|
|
10
|
+
name: ClientName;
|
|
11
|
+
displayName: string;
|
|
12
|
+
configPaths: ConfigPath[];
|
|
13
|
+
serverKey: string;
|
|
14
|
+
wrapKey?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ConfigPath {
|
|
17
|
+
platform: 'win32' | 'darwin' | 'linux' | 'all';
|
|
18
|
+
path: string;
|
|
19
|
+
}
|
|
20
|
+
export declare const SERVER_NAME = "easyeda-mcp-pro";
|
|
21
|
+
export declare const NPX_COMMAND = "npx";
|
|
22
|
+
export declare const NPX_ARGS: string[];
|
|
23
|
+
export declare function resolvePackageRoot(): string;
|
|
24
|
+
export declare function getExtensionPath(): string;
|
|
25
|
+
export declare function home(): string;
|
|
26
|
+
export declare function appData(): string;
|
|
27
|
+
export declare const CLIENTS: ClientDefinition[];
|
|
28
|
+
export declare function findConfigPath(client: ClientDefinition): string | null;
|
|
29
|
+
export declare function detectInstalledClients(): ClientDefinition[];
|
|
30
|
+
export declare function configHasServer(configPath: string, serverKey: string): boolean;
|
|
31
|
+
export declare function openFileLocation(filePath: string): void;
|
|
32
|
+
export declare function ok(text: string): string;
|
|
33
|
+
export declare function info(text: string): string;
|
|
34
|
+
export declare function warn(text: string): string;
|