solidworks-mcp-server 3.0.8 → 3.1.3

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 (243) hide show
  1. package/CHANGELOG.md +175 -98
  2. package/LICENSE +20 -20
  3. package/README.md +195 -423
  4. package/dist/adapters/circuit-breaker.d.ts +84 -0
  5. package/dist/adapters/circuit-breaker.d.ts.map +1 -0
  6. package/dist/adapters/circuit-breaker.js +228 -0
  7. package/dist/adapters/circuit-breaker.js.map +1 -0
  8. package/dist/adapters/connection-pool.d.ts +83 -0
  9. package/dist/adapters/connection-pool.d.ts.map +1 -0
  10. package/dist/adapters/connection-pool.js +282 -0
  11. package/dist/adapters/connection-pool.js.map +1 -0
  12. package/dist/adapters/edge-adapter.d.ts +43 -0
  13. package/dist/adapters/edge-adapter.d.ts.map +1 -0
  14. package/dist/adapters/edge-adapter.js +417 -0
  15. package/dist/adapters/edge-adapter.js.map +1 -0
  16. package/dist/adapters/factory.d.ts +60 -0
  17. package/dist/adapters/factory.d.ts.map +1 -0
  18. package/dist/adapters/factory.js +212 -0
  19. package/dist/adapters/factory.js.map +1 -0
  20. package/dist/adapters/feature-complexity-analyzer.d.ts +102 -0
  21. package/dist/adapters/feature-complexity-analyzer.d.ts.map +1 -0
  22. package/dist/adapters/feature-complexity-analyzer.js +322 -0
  23. package/dist/adapters/feature-complexity-analyzer.js.map +1 -0
  24. package/dist/adapters/macro-generator.d.ts +30 -0
  25. package/dist/adapters/macro-generator.d.ts.map +1 -0
  26. package/dist/adapters/macro-generator.js +524 -0
  27. package/dist/adapters/macro-generator.js.map +1 -0
  28. package/dist/adapters/mock-solidworks-adapter.d.ts +92 -0
  29. package/dist/adapters/mock-solidworks-adapter.d.ts.map +1 -0
  30. package/dist/adapters/mock-solidworks-adapter.js +367 -0
  31. package/dist/adapters/mock-solidworks-adapter.js.map +1 -0
  32. package/dist/adapters/types.d.ts +376 -0
  33. package/dist/adapters/types.d.ts.map +1 -0
  34. package/dist/adapters/types.js +261 -0
  35. package/dist/adapters/types.js.map +1 -0
  36. package/dist/adapters/winax-adapter-enhanced.d.ts +55 -0
  37. package/dist/adapters/winax-adapter-enhanced.d.ts.map +1 -0
  38. package/dist/adapters/winax-adapter-enhanced.js +601 -0
  39. package/dist/adapters/winax-adapter-enhanced.js.map +1 -0
  40. package/dist/adapters/winax-adapter.d.ts +55 -0
  41. package/dist/adapters/winax-adapter.d.ts.map +1 -0
  42. package/dist/adapters/winax-adapter.js +667 -0
  43. package/dist/adapters/winax-adapter.js.map +1 -0
  44. package/dist/api/stainless-api.d.ts +29 -0
  45. package/dist/api/stainless-api.d.ts.map +1 -0
  46. package/dist/api/stainless-api.js +408 -0
  47. package/dist/api/stainless-api.js.map +1 -0
  48. package/dist/cache/manager.d.ts.map +1 -1
  49. package/dist/cache/manager.js +4 -3
  50. package/dist/cache/manager.js.map +1 -1
  51. package/dist/core/interfaces/core-abstractions.d.ts.map +1 -1
  52. package/dist/core/interfaces/core-abstractions.js.map +1 -1
  53. package/dist/db/connection.js +4 -4
  54. package/dist/db/connection.js.map +1 -1
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +86 -79
  57. package/dist/index.js.map +1 -1
  58. package/dist/knowledge/chromadb.d.ts.map +1 -1
  59. package/dist/knowledge/chromadb.js +5 -3
  60. package/dist/knowledge/chromadb.js.map +1 -1
  61. package/dist/macro/recorder.d.ts +1 -1
  62. package/dist/macro/recorder.d.ts.map +1 -1
  63. package/dist/macro/recorder.js +10 -10
  64. package/dist/macro/recorder.js.map +1 -1
  65. package/dist/resources/base.js +10 -10
  66. package/dist/resources/base.js.map +1 -1
  67. package/dist/resources/design-table.d.ts +10 -12
  68. package/dist/resources/design-table.d.ts.map +1 -1
  69. package/dist/resources/design-table.js +42 -39
  70. package/dist/resources/design-table.js.map +1 -1
  71. package/dist/resources/pdm.d.ts +44 -45
  72. package/dist/resources/pdm.d.ts.map +1 -1
  73. package/dist/resources/pdm.js +118 -79
  74. package/dist/resources/pdm.js.map +1 -1
  75. package/dist/resources/registry.d.ts +1 -1
  76. package/dist/resources/registry.d.ts.map +1 -1
  77. package/dist/resources/registry.js +1 -1
  78. package/dist/shared/constants/solidworks-constants.d.ts.map +1 -1
  79. package/dist/shared/constants/solidworks-constants.js +9 -9
  80. package/dist/shared/constants/solidworks-constants.js.map +1 -1
  81. package/dist/solidworks/api.d.ts +8 -6
  82. package/dist/solidworks/api.d.ts.map +1 -1
  83. package/dist/solidworks/api.js +614 -188
  84. package/dist/solidworks/api.js.map +1 -1
  85. package/dist/state/store.d.ts +1 -1
  86. package/dist/state/store.d.ts.map +1 -1
  87. package/dist/state/store.js +14 -14
  88. package/dist/state/store.js.map +1 -1
  89. package/dist/tools/analysis.d.ts +12 -2
  90. package/dist/tools/analysis.d.ts.map +1 -1
  91. package/dist/tools/analysis.js +141 -31
  92. package/dist/tools/analysis.js.map +1 -1
  93. package/dist/tools/diagnostics.d.ts +1 -1
  94. package/dist/tools/diagnostics.d.ts.map +1 -1
  95. package/dist/tools/diagnostics.js +2 -2
  96. package/dist/tools/diagnostics.js.map +1 -1
  97. package/dist/tools/drawing.d.ts +2 -2
  98. package/dist/tools/drawing.d.ts.map +1 -1
  99. package/dist/tools/drawing.js +94 -10
  100. package/dist/tools/drawing.js.map +1 -1
  101. package/dist/tools/enhanced-drawing.d.ts +1 -1
  102. package/dist/tools/enhanced-drawing.d.ts.map +1 -1
  103. package/dist/tools/enhanced-drawing.js +10 -13
  104. package/dist/tools/enhanced-drawing.js.map +1 -1
  105. package/dist/tools/export.d.ts +1 -1
  106. package/dist/tools/export.d.ts.map +1 -1
  107. package/dist/tools/export.js +88 -14
  108. package/dist/tools/export.js.map +1 -1
  109. package/dist/tools/extrusion-helper.d.ts +15 -0
  110. package/dist/tools/extrusion-helper.d.ts.map +1 -0
  111. package/dist/tools/extrusion-helper.js +61 -0
  112. package/dist/tools/extrusion-helper.js.map +1 -0
  113. package/dist/tools/macro-security.d.ts +2 -2
  114. package/dist/tools/macro-security.d.ts.map +1 -1
  115. package/dist/tools/macro-security.js +2 -2
  116. package/dist/tools/macro-security.js.map +1 -1
  117. package/dist/tools/modeling.d.ts +2 -2
  118. package/dist/tools/modeling.d.ts.map +1 -1
  119. package/dist/tools/modeling.js +6 -6
  120. package/dist/tools/modeling.js.map +1 -1
  121. package/dist/tools/native-macro.d.ts +1 -1
  122. package/dist/tools/native-macro.d.ts.map +1 -1
  123. package/dist/tools/native-macro.js +246 -239
  124. package/dist/tools/native-macro.js.map +1 -1
  125. package/dist/tools/sketch.d.ts +28 -28
  126. package/dist/tools/sketch.d.ts.map +1 -1
  127. package/dist/tools/sketch.js +202 -136
  128. package/dist/tools/sketch.js.map +1 -1
  129. package/dist/tools/template-manager.d.ts +5 -5
  130. package/dist/tools/template-manager.d.ts.map +1 -1
  131. package/dist/tools/template-manager.js +66 -65
  132. package/dist/tools/template-manager.js.map +1 -1
  133. package/dist/tools/vba-advanced.d.ts +10 -10
  134. package/dist/tools/vba-advanced.d.ts.map +1 -1
  135. package/dist/tools/vba-advanced.js +791 -708
  136. package/dist/tools/vba-advanced.js.map +1 -1
  137. package/dist/tools/vba-assembly.d.ts +10 -10
  138. package/dist/tools/vba-assembly.d.ts.map +1 -1
  139. package/dist/tools/vba-assembly.js +562 -500
  140. package/dist/tools/vba-assembly.js.map +1 -1
  141. package/dist/tools/vba-drawing.d.ts +12 -12
  142. package/dist/tools/vba-drawing.d.ts.map +1 -1
  143. package/dist/tools/vba-drawing.js +681 -572
  144. package/dist/tools/vba-drawing.js.map +1 -1
  145. package/dist/tools/vba-file-management.d.ts +12 -12
  146. package/dist/tools/vba-file-management.d.ts.map +1 -1
  147. package/dist/tools/vba-file-management.js +662 -589
  148. package/dist/tools/vba-file-management.js.map +1 -1
  149. package/dist/tools/vba-part.d.ts +10 -10
  150. package/dist/tools/vba-part.d.ts.map +1 -1
  151. package/dist/tools/vba-part.js +484 -426
  152. package/dist/tools/vba-part.js.map +1 -1
  153. package/dist/tools/vba.d.ts +361 -361
  154. package/dist/tools/vba.d.ts.map +1 -1
  155. package/dist/tools/vba.js +67 -81
  156. package/dist/tools/vba.js.map +1 -1
  157. package/dist/utils/config.js +2 -2
  158. package/dist/utils/config.js.map +1 -1
  159. package/dist/utils/environment.d.ts +243 -0
  160. package/dist/utils/environment.d.ts.map +1 -0
  161. package/dist/utils/environment.js +207 -0
  162. package/dist/utils/environment.js.map +1 -0
  163. package/dist/utils/logger.d.ts.map +1 -1
  164. package/dist/utils/logger.js +6 -6
  165. package/dist/utils/logger.js.map +1 -1
  166. package/dist/utils/solidworks-config.d.ts +39 -0
  167. package/dist/utils/solidworks-config.d.ts.map +1 -0
  168. package/dist/utils/solidworks-config.js +156 -0
  169. package/dist/utils/solidworks-config.js.map +1 -0
  170. package/package.json +84 -84
  171. package/scripts/setup.js +70 -70
  172. package/dist/application/services/command-bus.d.ts +0 -39
  173. package/dist/application/services/command-bus.d.ts.map +0 -1
  174. package/dist/application/services/command-bus.js +0 -88
  175. package/dist/application/services/command-bus.js.map +0 -1
  176. package/dist/application/services/event-bus.d.ts +0 -31
  177. package/dist/application/services/event-bus.d.ts.map +0 -1
  178. package/dist/application/services/event-bus.js +0 -83
  179. package/dist/application/services/event-bus.js.map +0 -1
  180. package/dist/application/services/query-bus.d.ts +0 -30
  181. package/dist/application/services/query-bus.d.ts.map +0 -1
  182. package/dist/application/services/query-bus.js +0 -59
  183. package/dist/application/services/query-bus.js.map +0 -1
  184. package/dist/application/services/tool-registry.d.ts +0 -53
  185. package/dist/application/services/tool-registry.d.ts.map +0 -1
  186. package/dist/application/services/tool-registry.js +0 -81
  187. package/dist/application/services/tool-registry.js.map +0 -1
  188. package/dist/application/use-cases/analysis/index.d.ts +0 -13
  189. package/dist/application/use-cases/analysis/index.d.ts.map +0 -1
  190. package/dist/application/use-cases/analysis/index.js +0 -17
  191. package/dist/application/use-cases/analysis/index.js.map +0 -1
  192. package/dist/application/use-cases/drawing/index.d.ts +0 -13
  193. package/dist/application/use-cases/drawing/index.d.ts.map +0 -1
  194. package/dist/application/use-cases/drawing/index.js +0 -17
  195. package/dist/application/use-cases/drawing/index.js.map +0 -1
  196. package/dist/application/use-cases/export/index.d.ts +0 -13
  197. package/dist/application/use-cases/export/index.d.ts.map +0 -1
  198. package/dist/application/use-cases/export/index.js +0 -17
  199. package/dist/application/use-cases/export/index.js.map +0 -1
  200. package/dist/application/use-cases/macro/index.d.ts +0 -13
  201. package/dist/application/use-cases/macro/index.d.ts.map +0 -1
  202. package/dist/application/use-cases/macro/index.js +0 -17
  203. package/dist/application/use-cases/macro/index.js.map +0 -1
  204. package/dist/application/use-cases/modeling/index.d.ts +0 -56
  205. package/dist/application/use-cases/modeling/index.d.ts.map +0 -1
  206. package/dist/application/use-cases/modeling/index.js +0 -385
  207. package/dist/application/use-cases/modeling/index.js.map +0 -1
  208. package/dist/index.refactored.d.ts +0 -7
  209. package/dist/index.refactored.d.ts.map +0 -1
  210. package/dist/index.refactored.js +0 -254
  211. package/dist/index.refactored.js.map +0 -1
  212. package/dist/infrastructure/config/configuration-manager.d.ts +0 -381
  213. package/dist/infrastructure/config/configuration-manager.d.ts.map +0 -1
  214. package/dist/infrastructure/config/configuration-manager.js +0 -566
  215. package/dist/infrastructure/config/configuration-manager.js.map +0 -1
  216. package/dist/infrastructure/container/service-locator.d.ts +0 -14
  217. package/dist/infrastructure/container/service-locator.d.ts.map +0 -1
  218. package/dist/infrastructure/container/service-locator.js +0 -38
  219. package/dist/infrastructure/container/service-locator.js.map +0 -1
  220. package/dist/infrastructure/logging/logger.d.ts +0 -24
  221. package/dist/infrastructure/logging/logger.d.ts.map +0 -1
  222. package/dist/infrastructure/logging/logger.js +0 -65
  223. package/dist/infrastructure/logging/logger.js.map +0 -1
  224. package/dist/infrastructure/solidworks/solidworks-adapter.d.ts +0 -43
  225. package/dist/infrastructure/solidworks/solidworks-adapter.d.ts.map +0 -1
  226. package/dist/infrastructure/solidworks/solidworks-adapter.js +0 -527
  227. package/dist/infrastructure/solidworks/solidworks-adapter.js.map +0 -1
  228. package/dist/presentation/mcp/request-handler.d.ts +0 -41
  229. package/dist/presentation/mcp/request-handler.d.ts.map +0 -1
  230. package/dist/presentation/mcp/request-handler.js +0 -100
  231. package/dist/presentation/mcp/request-handler.js.map +0 -1
  232. package/dist/presentation/transformers/error-transformer.d.ts +0 -16
  233. package/dist/presentation/transformers/error-transformer.d.ts.map +0 -1
  234. package/dist/presentation/transformers/error-transformer.js +0 -44
  235. package/dist/presentation/transformers/error-transformer.js.map +0 -1
  236. package/dist/presentation/transformers/response-transformer.d.ts +0 -24
  237. package/dist/presentation/transformers/response-transformer.d.ts.map +0 -1
  238. package/dist/presentation/transformers/response-transformer.js +0 -102
  239. package/dist/presentation/transformers/response-transformer.js.map +0 -1
  240. package/dist/tools/drawing-analysis.d.ts +0 -9
  241. package/dist/tools/drawing-analysis.d.ts.map +0 -1
  242. package/dist/tools/drawing-analysis.js +0 -239
  243. package/dist/tools/drawing-analysis.js.map +0 -1
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Enhanced WinAx Adapter with Intelligent Feature Creation
3
+ *
4
+ * This adapter intelligently decides between direct COM calls and macro fallback
5
+ * based on parameter complexity analysis for ALL SolidWorks features.
6
+ */
7
+ import type { SolidWorksFeature, SolidWorksModel } from '../solidworks/types.js';
8
+ import type { AdapterHealth, AdapterResult, Command, ExtrusionParameters, ISolidWorksAdapter, LoftParameters, MassProperties, RevolveParameters, SweepParameters } from './types.js';
9
+ export declare class EnhancedWinAxAdapter implements ISolidWorksAdapter {
10
+ private swApp;
11
+ private currentModel;
12
+ private macroGenerator;
13
+ private tempMacroPath;
14
+ private metrics;
15
+ constructor();
16
+ connect(): Promise<void>;
17
+ disconnect(): Promise<void>;
18
+ isConnected(): boolean;
19
+ healthCheck(): Promise<AdapterHealth>;
20
+ private getSuccessRate;
21
+ createExtrusion(params: ExtrusionParameters): Promise<SolidWorksFeature>;
22
+ private createExtrusionDirect;
23
+ private createExtrusionViaMacro;
24
+ createRevolve(params: RevolveParameters): Promise<SolidWorksFeature>;
25
+ private createRevolveDirect;
26
+ private createRevolveViaMacro;
27
+ createSweep(params: SweepParameters): Promise<SolidWorksFeature>;
28
+ private createSweepViaMacro;
29
+ createLoft(params: LoftParameters): Promise<SolidWorksFeature>;
30
+ private createLoftDirect;
31
+ private createLoftViaMacro;
32
+ private selectSketchForFeature;
33
+ private updateResponseTime;
34
+ execute<T>(command: Command): Promise<AdapterResult<T>>;
35
+ executeRaw(method: string, args: any[]): Promise<any>;
36
+ openModel(filePath: string): Promise<SolidWorksModel>;
37
+ closeModel(save?: boolean): Promise<void>;
38
+ createPart(): Promise<SolidWorksModel>;
39
+ createAssembly(): Promise<SolidWorksModel>;
40
+ createDrawing(): Promise<SolidWorksModel>;
41
+ createSketch(plane: string): Promise<string>;
42
+ addLine(x1: number, y1: number, x2: number, y2: number): Promise<void>;
43
+ addCircle(centerX: number, centerY: number, radius: number): Promise<void>;
44
+ addRectangle(x1: number, y1: number, x2: number, y2: number): Promise<void>;
45
+ exitSketch(): Promise<void>;
46
+ getMassProperties(): Promise<MassProperties>;
47
+ exportFile(filePath: string, format: string): Promise<void>;
48
+ getDimension(name: string): Promise<number>;
49
+ setDimension(name: string, value: number): Promise<void>;
50
+ }
51
+ /**
52
+ * Factory function to create enhanced adapter
53
+ */
54
+ export declare function createEnhancedWinAxAdapter(): Promise<EnhancedWinAxAdapter>;
55
+ //# sourceMappingURL=winax-adapter-enhanced.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"winax-adapter-enhanced.d.ts","sourceRoot":"","sources":["../../src/adapters/winax-adapter-enhanced.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,601 @@
1
+ /**
2
+ * Enhanced WinAx Adapter with Intelligent Feature Creation
3
+ *
4
+ * This adapter intelligently decides between direct COM calls and macro fallback
5
+ * based on parameter complexity analysis for ALL SolidWorks features.
6
+ */
7
+ import * as fs from 'node:fs/promises';
8
+ import * as path from 'node:path';
9
+ import winax from 'winax';
10
+ import { logger } from '../utils/logger.js';
11
+ import { FeatureComplexityAnalyzer } from './feature-complexity-analyzer.js';
12
+ import { MacroGenerator } from './macro-generator.js';
13
+ export class EnhancedWinAxAdapter {
14
+ swApp;
15
+ currentModel;
16
+ macroGenerator;
17
+ tempMacroPath;
18
+ metrics = {
19
+ directCOMCalls: 0,
20
+ macroFallbacks: 0,
21
+ failures: 0,
22
+ averageResponseTime: 0,
23
+ };
24
+ constructor() {
25
+ this.swApp = null;
26
+ this.currentModel = null;
27
+ this.macroGenerator = new MacroGenerator();
28
+ this.tempMacroPath = process.env.TEMP || 'C:\\Temp';
29
+ }
30
+ // Connection Management
31
+ async connect() {
32
+ try {
33
+ this.swApp = new winax.Object('SldWorks.Application');
34
+ this.swApp.Visible = true;
35
+ logger.info('Connected to SolidWorks via Enhanced WinAx adapter');
36
+ }
37
+ catch (error) {
38
+ logger.error('Failed to connect to SolidWorks', error);
39
+ throw new Error(`Failed to connect to SolidWorks: ${error}`);
40
+ }
41
+ }
42
+ async disconnect() {
43
+ if (this.currentModel) {
44
+ this.currentModel = null;
45
+ }
46
+ if (this.swApp) {
47
+ this.swApp = null;
48
+ }
49
+ logger.info('Disconnected from SolidWorks');
50
+ }
51
+ isConnected() {
52
+ return this.swApp !== null;
53
+ }
54
+ async healthCheck() {
55
+ const healthy = this.isConnected();
56
+ return {
57
+ healthy,
58
+ lastCheck: new Date(),
59
+ errorCount: this.metrics.failures,
60
+ successCount: this.metrics.directCOMCalls + this.metrics.macroFallbacks,
61
+ averageResponseTime: this.metrics.averageResponseTime,
62
+ connectionStatus: healthy ? 'connected' : 'disconnected',
63
+ metrics: {
64
+ directCOMCalls: this.metrics.directCOMCalls,
65
+ macroFallbacks: this.metrics.macroFallbacks,
66
+ successRate: this.getSuccessRate(),
67
+ },
68
+ };
69
+ }
70
+ getSuccessRate() {
71
+ const total = this.metrics.directCOMCalls + this.metrics.macroFallbacks + this.metrics.failures;
72
+ if (total === 0)
73
+ return 100;
74
+ return ((this.metrics.directCOMCalls + this.metrics.macroFallbacks) / total) * 100;
75
+ }
76
+ // Feature Creation with Intelligent Fallback
77
+ async createExtrusion(params) {
78
+ if (!this.currentModel)
79
+ throw new Error('No active model');
80
+ const analysis = FeatureComplexityAnalyzer.analyzeExtrusion(params);
81
+ logger.info(`Extrusion analysis: ${JSON.stringify(analysis)}`);
82
+ if (analysis.strategy === 'direct-com') {
83
+ // Try direct COM call for simple extrusions
84
+ try {
85
+ return await this.createExtrusionDirect(params);
86
+ }
87
+ catch (error) {
88
+ logger.warn('Direct extrusion failed, falling back to macro', error);
89
+ return await this.createExtrusionViaMacro(params);
90
+ }
91
+ }
92
+ else {
93
+ // Complex extrusion - use macro directly
94
+ logger.info(`Using macro fallback: ${analysis.reason}`);
95
+ return await this.createExtrusionViaMacro(params);
96
+ }
97
+ }
98
+ async createExtrusionDirect(params) {
99
+ const startTime = Date.now();
100
+ try {
101
+ // Select sketch
102
+ this.selectSketchForFeature();
103
+ // Simple extrusion with limited parameters (max 12)
104
+ const feature = this.currentModel.FeatureManager.FeatureExtrusion2(true, // Sd
105
+ params.reverse || false, // Flip
106
+ params.bothDirections || false, // Dir
107
+ 0, // T1 (blind)
108
+ 0, // T2
109
+ params.depth / 1000, // D1 (convert mm to m)
110
+ 0.0, // D2
111
+ false, // Dchk1
112
+ false, // Dchk2
113
+ params.draft || 0, // Dang1
114
+ 0, // Dang2
115
+ false // OffsetReverse1
116
+ );
117
+ if (!feature) {
118
+ throw new Error('FeatureExtrusion2 returned null');
119
+ }
120
+ this.metrics.directCOMCalls++;
121
+ this.updateResponseTime(Date.now() - startTime);
122
+ return {
123
+ name: feature.Name || 'Boss-Extrude1',
124
+ type: 'Extrusion',
125
+ suppressed: false,
126
+ };
127
+ }
128
+ catch (error) {
129
+ this.metrics.failures++;
130
+ throw error;
131
+ }
132
+ }
133
+ async createExtrusionViaMacro(params) {
134
+ const startTime = Date.now();
135
+ const macroCode = this.macroGenerator.generateExtrusionMacro(params);
136
+ const macroPath = path.join(this.tempMacroPath, `extrusion_${Date.now()}.swp`);
137
+ await fs.writeFile(macroPath, macroCode);
138
+ try {
139
+ this.swApp.RunMacro2(macroPath, 'Module1', 'CreateExtrusion', 1, 0);
140
+ const feature = this.currentModel.FeatureByPositionReverse(0);
141
+ this.metrics.macroFallbacks++;
142
+ this.updateResponseTime(Date.now() - startTime);
143
+ return {
144
+ name: feature?.Name || 'Boss-Extrude1',
145
+ type: 'Extrusion',
146
+ suppressed: false,
147
+ };
148
+ }
149
+ finally {
150
+ await fs.unlink(macroPath).catch(() => { });
151
+ }
152
+ }
153
+ async createRevolve(params) {
154
+ if (!this.currentModel)
155
+ throw new Error('No active model');
156
+ const analysis = FeatureComplexityAnalyzer.determineStrategy('FeatureRevolve2', params);
157
+ logger.info(`Revolve analysis: ${JSON.stringify(analysis)}`);
158
+ if (analysis.strategy === 'direct-com') {
159
+ try {
160
+ return await this.createRevolveDirect(params);
161
+ }
162
+ catch (error) {
163
+ logger.warn('Direct revolve failed, falling back to macro', error);
164
+ return await this.createRevolveViaMacro(params);
165
+ }
166
+ }
167
+ else {
168
+ return await this.createRevolveViaMacro(params);
169
+ }
170
+ }
171
+ async createRevolveDirect(params) {
172
+ const startTime = Date.now();
173
+ try {
174
+ this.selectSketchForFeature();
175
+ // FeatureRevolve2 has exactly 12 parameters - right at the limit
176
+ const feature = this.currentModel.FeatureManager.FeatureRevolve2(true, // SingleDir
177
+ params.direction === 'Reverse', // IsSolid
178
+ params.direction === 'Both', // IsThin
179
+ false, // Cap
180
+ false, // MakeThinFeature
181
+ (params.angle * Math.PI) / 180, // Angle1
182
+ 0, // Angle2
183
+ 0, // OffsetDistance1
184
+ 0, // OffsetDistance2
185
+ 0, // OffsetReverse1
186
+ 0, // OffsetReverse2
187
+ params.merge !== false // Merge
188
+ );
189
+ if (!feature) {
190
+ throw new Error('FeatureRevolve2 returned null');
191
+ }
192
+ this.metrics.directCOMCalls++;
193
+ this.updateResponseTime(Date.now() - startTime);
194
+ return {
195
+ name: feature.Name || 'Revolve1',
196
+ type: 'Revolution',
197
+ suppressed: false,
198
+ };
199
+ }
200
+ catch (error) {
201
+ this.metrics.failures++;
202
+ throw error;
203
+ }
204
+ }
205
+ async createRevolveViaMacro(params) {
206
+ const startTime = Date.now();
207
+ const macroCode = this.macroGenerator.generateRevolveMacro(params);
208
+ const macroPath = path.join(this.tempMacroPath, `revolve_${Date.now()}.swp`);
209
+ await fs.writeFile(macroPath, macroCode);
210
+ try {
211
+ this.swApp.RunMacro2(macroPath, 'Module1', 'CreateRevolve', 1, 0);
212
+ const feature = this.currentModel.FeatureByPositionReverse(0);
213
+ this.metrics.macroFallbacks++;
214
+ this.updateResponseTime(Date.now() - startTime);
215
+ return {
216
+ name: feature?.Name || 'Revolve1',
217
+ type: 'Revolution',
218
+ suppressed: false,
219
+ };
220
+ }
221
+ finally {
222
+ await fs.unlink(macroPath).catch(() => { });
223
+ }
224
+ }
225
+ async createSweep(params) {
226
+ if (!this.currentModel)
227
+ throw new Error('No active model');
228
+ // Sweep always requires macro due to high parameter count
229
+ const analysis = FeatureComplexityAnalyzer.determineStrategy('InsertProtrusionSwept4', params);
230
+ logger.info(`Sweep analysis: Always complex - strategy: ${analysis.strategy}`);
231
+ return await this.createSweepViaMacro(params);
232
+ }
233
+ async createSweepViaMacro(params) {
234
+ const startTime = Date.now();
235
+ const macroCode = this.macroGenerator.generateSweepMacro(params);
236
+ const macroPath = path.join(this.tempMacroPath, `sweep_${Date.now()}.swp`);
237
+ await fs.writeFile(macroPath, macroCode);
238
+ try {
239
+ this.swApp.RunMacro2(macroPath, 'Module1', 'CreateSweep', 1, 0);
240
+ const feature = this.currentModel.FeatureByPositionReverse(0);
241
+ this.metrics.macroFallbacks++;
242
+ this.updateResponseTime(Date.now() - startTime);
243
+ return {
244
+ name: feature?.Name || 'Sweep1',
245
+ type: 'Sweep',
246
+ suppressed: false,
247
+ };
248
+ }
249
+ finally {
250
+ await fs.unlink(macroPath).catch(() => { });
251
+ }
252
+ }
253
+ async createLoft(params) {
254
+ if (!this.currentModel)
255
+ throw new Error('No active model');
256
+ const analysis = FeatureComplexityAnalyzer.determineStrategy('InsertProtrusionLoft3', params);
257
+ logger.info(`Loft analysis: ${JSON.stringify(analysis)}`);
258
+ if (analysis.strategy === 'direct-com') {
259
+ try {
260
+ return await this.createLoftDirect(params);
261
+ }
262
+ catch (error) {
263
+ logger.warn('Direct loft failed, falling back to macro', error);
264
+ return await this.createLoftViaMacro(params);
265
+ }
266
+ }
267
+ else {
268
+ return await this.createLoftViaMacro(params);
269
+ }
270
+ }
271
+ async createLoftDirect(params) {
272
+ const startTime = Date.now();
273
+ try {
274
+ // Select profiles
275
+ for (const profile of params.profiles) {
276
+ this.currentModel.Extension.SelectByID2(profile, 'SKETCH', 0, 0, 0, true, 0, undefined, 0);
277
+ }
278
+ // Simple loft without guides (12 parameters max)
279
+ const feature = this.currentModel.FeatureManager.InsertProtrusionBlend2(false, // Closed
280
+ true, // KeepTangency
281
+ false, // ForceNonRational
282
+ true, // ThinFeature
283
+ true, // UseFeatScope
284
+ true, // AutoSelect
285
+ params.profiles.length, // NumberOfSections
286
+ 0, // StartConditions
287
+ 0, // EndConditions
288
+ 0, // StartTangentType
289
+ 0, // EndTangentType
290
+ params.merge !== false // Merge
291
+ );
292
+ if (!feature) {
293
+ throw new Error('InsertProtrusionBlend2 returned null');
294
+ }
295
+ this.metrics.directCOMCalls++;
296
+ this.updateResponseTime(Date.now() - startTime);
297
+ return {
298
+ name: feature.Name || 'Loft1',
299
+ type: 'Loft',
300
+ suppressed: false,
301
+ };
302
+ }
303
+ catch (error) {
304
+ this.metrics.failures++;
305
+ throw error;
306
+ }
307
+ }
308
+ async createLoftViaMacro(params) {
309
+ const startTime = Date.now();
310
+ const macroCode = this.macroGenerator.generateLoftMacro(params);
311
+ const macroPath = path.join(this.tempMacroPath, `loft_${Date.now()}.swp`);
312
+ await fs.writeFile(macroPath, macroCode);
313
+ try {
314
+ this.swApp.RunMacro2(macroPath, 'Module1', 'CreateLoft', 1, 0);
315
+ const feature = this.currentModel.FeatureByPositionReverse(0);
316
+ this.metrics.macroFallbacks++;
317
+ this.updateResponseTime(Date.now() - startTime);
318
+ return {
319
+ name: feature?.Name || 'Loft1',
320
+ type: 'Loft',
321
+ suppressed: false,
322
+ };
323
+ }
324
+ finally {
325
+ await fs.unlink(macroPath).catch(() => { });
326
+ }
327
+ }
328
+ // Helper Methods
329
+ selectSketchForFeature() {
330
+ // Method 1 (most reliable): Feature tree traversal
331
+ // Avoids SelectByID2 COM type mismatch issues
332
+ try {
333
+ const featureCount = this.currentModel.GetFeatureCount();
334
+ for (let i = 0; i < Math.min(10, featureCount); i++) {
335
+ const feat = this.currentModel.FeatureByPositionReverse(i);
336
+ if (feat) {
337
+ const typeName = feat.GetTypeName2();
338
+ if (typeName === 'ProfileFeature' || typeName?.toLowerCase().includes('sketch')) {
339
+ feat.Select2(false, 0);
340
+ logger.info(`Selected sketch by feature tree: ${feat.Name || feat.GetName()}`);
341
+ return true;
342
+ }
343
+ }
344
+ }
345
+ }
346
+ catch (e) {
347
+ logger.warn(`Feature tree search failed: ${e}`);
348
+ }
349
+ // Method 2 (fallback): SelectByID2 with undefined for optional params
350
+ const ext = this.currentModel.Extension;
351
+ const sketchNames = ['Sketch1', 'Sketch2', 'Sketch3', 'Sketch4', 'Sketch5'];
352
+ for (const name of sketchNames) {
353
+ try {
354
+ const selected = ext.SelectByID2(name, 'SKETCH', 0, 0, 0, false, 0, undefined, 0);
355
+ if (selected) {
356
+ logger.info(`Selected sketch via SelectByID2: ${name}`);
357
+ return true;
358
+ }
359
+ }
360
+ catch (_e) {
361
+ // Try next
362
+ }
363
+ }
364
+ return false;
365
+ }
366
+ updateResponseTime(duration) {
367
+ const total = this.metrics.directCOMCalls + this.metrics.macroFallbacks;
368
+ this.metrics.averageResponseTime = (this.metrics.averageResponseTime * (total - 1) + duration) / total;
369
+ }
370
+ // Standard adapter methods (implement remaining interface)
371
+ async execute(command) {
372
+ const startTime = Date.now();
373
+ try {
374
+ let result;
375
+ // Route commands to appropriate methods
376
+ switch (command.name) {
377
+ case 'CreateExtrusion':
378
+ result = await this.createExtrusion(command.parameters);
379
+ break;
380
+ case 'CreateRevolve':
381
+ result = await this.createRevolve(command.parameters);
382
+ break;
383
+ case 'CreateSweep':
384
+ result = await this.createSweep(command.parameters);
385
+ break;
386
+ case 'CreateLoft':
387
+ result = await this.createLoft(command.parameters);
388
+ break;
389
+ default:
390
+ result = await this.executeRaw(command.name, [command.parameters]);
391
+ }
392
+ return {
393
+ success: true,
394
+ data: result,
395
+ timing: {
396
+ start: new Date(startTime),
397
+ end: new Date(),
398
+ duration: Date.now() - startTime,
399
+ },
400
+ metadata: {
401
+ adapter: 'EnhancedWinAx',
402
+ metrics: this.metrics,
403
+ },
404
+ };
405
+ }
406
+ catch (error) {
407
+ this.metrics.failures++;
408
+ return {
409
+ success: false,
410
+ error: error?.toString() || 'Command execution failed',
411
+ timing: {
412
+ start: new Date(startTime),
413
+ end: new Date(),
414
+ duration: Date.now() - startTime,
415
+ },
416
+ };
417
+ }
418
+ }
419
+ async executeRaw(method, args) {
420
+ if (!this.swApp)
421
+ throw new Error('Not connected to SolidWorks');
422
+ try {
423
+ const target = this.currentModel || this.swApp;
424
+ return target[method](...args);
425
+ }
426
+ catch (error) {
427
+ logger.error(`Raw execution failed: ${method}`, error);
428
+ throw error;
429
+ }
430
+ }
431
+ // Model operations
432
+ async openModel(filePath) {
433
+ if (!this.swApp)
434
+ throw new Error('Not connected to SolidWorks');
435
+ const errors = { value: 0 };
436
+ const warnings = { value: 0 };
437
+ const ext = filePath.toLowerCase().split('.').pop();
438
+ let docType = 1; // swDocPART
439
+ if (ext === 'sldasm')
440
+ docType = 2; // swDocASSEMBLY
441
+ if (ext === 'slddrw')
442
+ docType = 3; // swDocDRAWING
443
+ this.currentModel = this.swApp.OpenDoc6(filePath, docType, 1, '', errors, warnings);
444
+ if (!this.currentModel) {
445
+ throw new Error(`Failed to open model: ${filePath}`);
446
+ }
447
+ return {
448
+ path: filePath,
449
+ name: this.currentModel.GetTitle(),
450
+ type: ['Part', 'Assembly', 'Drawing'][docType - 1],
451
+ isActive: true,
452
+ };
453
+ }
454
+ async closeModel(save) {
455
+ if (!this.currentModel)
456
+ return;
457
+ if (save) {
458
+ this.currentModel.Save3(1, 0, 0);
459
+ }
460
+ const title = this.currentModel.GetTitle();
461
+ this.swApp.CloseDoc(title);
462
+ this.currentModel = null;
463
+ }
464
+ async createPart() {
465
+ if (!this.swApp)
466
+ throw new Error('Not connected to SolidWorks');
467
+ this.currentModel = this.swApp.NewPart();
468
+ return {
469
+ path: '',
470
+ name: this.currentModel.GetTitle(),
471
+ type: 'Part',
472
+ isActive: true,
473
+ };
474
+ }
475
+ async createAssembly() {
476
+ if (!this.swApp)
477
+ throw new Error('Not connected to SolidWorks');
478
+ this.currentModel = this.swApp.NewAssembly();
479
+ return {
480
+ path: '',
481
+ name: this.currentModel.GetTitle(),
482
+ type: 'Assembly',
483
+ isActive: true,
484
+ };
485
+ }
486
+ async createDrawing() {
487
+ if (!this.swApp)
488
+ throw new Error('Not connected to SolidWorks');
489
+ this.currentModel = this.swApp.NewDrawing();
490
+ return {
491
+ path: '',
492
+ name: this.currentModel.GetTitle(),
493
+ type: 'Drawing',
494
+ isActive: true,
495
+ };
496
+ }
497
+ // Sketch operations
498
+ async createSketch(plane) {
499
+ if (!this.currentModel)
500
+ throw new Error('No active model');
501
+ const ext = this.currentModel.Extension;
502
+ ext.SelectByID2(`${plane} Plane`, 'PLANE', 0, 0, 0, false, 0, undefined, 0);
503
+ this.currentModel.SketchManager.InsertSketch(true);
504
+ return this.currentModel.SketchManager.ActiveSketch.Name;
505
+ }
506
+ async addLine(x1, y1, x2, y2) {
507
+ if (!this.currentModel)
508
+ throw new Error('No active model');
509
+ this.currentModel.SketchManager.CreateLine(x1 / 1000, y1 / 1000, 0, x2 / 1000, y2 / 1000, 0);
510
+ }
511
+ async addCircle(centerX, centerY, radius) {
512
+ if (!this.currentModel)
513
+ throw new Error('No active model');
514
+ this.currentModel.SketchManager.CreateCircle(centerX / 1000, centerY / 1000, 0, (centerX + radius) / 1000, centerY / 1000, 0);
515
+ }
516
+ async addRectangle(x1, y1, x2, y2) {
517
+ if (!this.currentModel)
518
+ throw new Error('No active model');
519
+ const sketchMgr = this.currentModel.SketchManager;
520
+ sketchMgr.CreateLine(x1 / 1000, y1 / 1000, 0, x2 / 1000, y1 / 1000, 0);
521
+ sketchMgr.CreateLine(x2 / 1000, y1 / 1000, 0, x2 / 1000, y2 / 1000, 0);
522
+ sketchMgr.CreateLine(x2 / 1000, y2 / 1000, 0, x1 / 1000, y2 / 1000, 0);
523
+ sketchMgr.CreateLine(x1 / 1000, y2 / 1000, 0, x1 / 1000, y1 / 1000, 0);
524
+ }
525
+ async exitSketch() {
526
+ if (!this.currentModel)
527
+ throw new Error('No active model');
528
+ this.currentModel.SketchManager.InsertSketch(false);
529
+ }
530
+ // Analysis operations
531
+ async getMassProperties() {
532
+ if (!this.currentModel)
533
+ throw new Error('No active model');
534
+ const massProp = this.currentModel.Extension.CreateMassProperty();
535
+ return {
536
+ mass: massProp.Mass,
537
+ volume: massProp.Volume,
538
+ surfaceArea: massProp.SurfaceArea,
539
+ centerOfMass: {
540
+ x: massProp.CenterOfMass[0],
541
+ y: massProp.CenterOfMass[1],
542
+ z: massProp.CenterOfMass[2],
543
+ },
544
+ momentsOfInertia: {
545
+ Ixx: massProp.MomentOfInertia[0],
546
+ Iyy: massProp.MomentOfInertia[4],
547
+ Izz: massProp.MomentOfInertia[8],
548
+ Ixy: massProp.MomentOfInertia[1],
549
+ Iyz: massProp.MomentOfInertia[5],
550
+ Ixz: massProp.MomentOfInertia[2],
551
+ },
552
+ };
553
+ }
554
+ // Export operations
555
+ async exportFile(filePath, format) {
556
+ if (!this.currentModel)
557
+ throw new Error('No active model');
558
+ const formatMap = {
559
+ step: 203,
560
+ iges: 204,
561
+ stl: 216,
562
+ pdf: 217,
563
+ dwg: 218,
564
+ dxf: 219,
565
+ };
566
+ const exportType = formatMap[format.toLowerCase()] || 203;
567
+ const success = this.currentModel.Extension.SaveAs3(filePath, 0, exportType, undefined, undefined, 0, 0);
568
+ if (!success) {
569
+ throw new Error(`Failed to export to ${format}`);
570
+ }
571
+ }
572
+ // Dimension operations
573
+ async getDimension(name) {
574
+ if (!this.currentModel)
575
+ throw new Error('No active model');
576
+ const dim = this.currentModel.Parameter(name);
577
+ if (!dim) {
578
+ throw new Error(`Dimension ${name} not found`);
579
+ }
580
+ return dim.SystemValue * 1000; // Convert m to mm
581
+ }
582
+ async setDimension(name, value) {
583
+ if (!this.currentModel)
584
+ throw new Error('No active model');
585
+ const dim = this.currentModel.Parameter(name);
586
+ if (!dim) {
587
+ throw new Error(`Dimension ${name} not found`);
588
+ }
589
+ dim.SystemValue = value / 1000; // Convert mm to m
590
+ this.currentModel.EditRebuild3();
591
+ }
592
+ }
593
+ /**
594
+ * Factory function to create enhanced adapter
595
+ */
596
+ export async function createEnhancedWinAxAdapter() {
597
+ const adapter = new EnhancedWinAxAdapter();
598
+ await adapter.connect();
599
+ return adapter;
600
+ }
601
+ //# sourceMappingURL=winax-adapter-enhanced.js.map