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,212 @@
1
+ /**
2
+ * Adapter Factory for SolidWorks MCP Server
3
+ *
4
+ * Provides centralized adapter creation with:
5
+ * - Multiple adapter type support
6
+ * - Circuit breaker integration
7
+ * - Connection pooling
8
+ * - Automatic fallback selection
9
+ */
10
+ import { logger } from '../utils/logger.js';
11
+ import { CircuitBreakerAdapter } from './circuit-breaker.js';
12
+ import { ConnectionPoolAdapter } from './connection-pool.js';
13
+ import { WinAxAdapter } from './winax-adapter.js';
14
+ /**
15
+ * Factory for creating and managing SolidWorks adapters
16
+ */
17
+ export class AdapterFactory {
18
+ static instance;
19
+ adapters = new Map();
20
+ defaultConfig = {
21
+ type: 'winax',
22
+ enableCircuitBreaker: true,
23
+ circuitBreakerThreshold: 5,
24
+ circuitBreakerTimeout: 60000,
25
+ enableRetry: true,
26
+ maxRetries: 3,
27
+ retryDelay: 1000,
28
+ enableConnectionPool: false,
29
+ poolSize: 3,
30
+ enableMetrics: true,
31
+ enableLogging: true,
32
+ logLevel: 'info',
33
+ };
34
+ constructor() { }
35
+ /**
36
+ * Get singleton instance of factory
37
+ */
38
+ static getInstance() {
39
+ if (!AdapterFactory.instance) {
40
+ AdapterFactory.instance = new AdapterFactory();
41
+ }
42
+ return AdapterFactory.instance;
43
+ }
44
+ /**
45
+ * Create or get adapter based on configuration
46
+ */
47
+ async createAdapter(config) {
48
+ const fullConfig = { ...this.defaultConfig, ...config };
49
+ const cacheKey = this.getCacheKey(fullConfig);
50
+ // Return cached adapter if available
51
+ if (this.adapters.has(cacheKey)) {
52
+ const adapter = this.adapters.get(cacheKey);
53
+ const health = await adapter.healthCheck();
54
+ if (health.healthy) {
55
+ logger.info(`Reusing cached adapter: ${cacheKey}`);
56
+ return adapter;
57
+ }
58
+ else {
59
+ logger.warn(`Cached adapter unhealthy, creating new one: ${cacheKey}`);
60
+ this.adapters.delete(cacheKey);
61
+ }
62
+ }
63
+ // Create new adapter
64
+ let adapter = await this.createBaseAdapter(fullConfig);
65
+ // Wrap with circuit breaker if enabled
66
+ if (fullConfig.enableCircuitBreaker) {
67
+ adapter = new CircuitBreakerAdapter(adapter, fullConfig.circuitBreakerThreshold, fullConfig.circuitBreakerTimeout);
68
+ }
69
+ // Wrap with connection pool if enabled
70
+ if (fullConfig.enableConnectionPool) {
71
+ adapter = new ConnectionPoolAdapter(() => this.createBaseAdapter(fullConfig), fullConfig.poolSize);
72
+ await adapter.initialize();
73
+ }
74
+ // Cache the adapter
75
+ this.adapters.set(cacheKey, adapter);
76
+ logger.info(`Created new adapter: ${cacheKey}`);
77
+ return adapter;
78
+ }
79
+ /**
80
+ * Create base adapter based on type
81
+ */
82
+ async createBaseAdapter(config) {
83
+ switch (config.type) {
84
+ case 'winax': {
85
+ const winaxAdapter = new WinAxAdapter();
86
+ await winaxAdapter.connect();
87
+ return winaxAdapter;
88
+ }
89
+ case 'macro-fallback': {
90
+ // Create a winax adapter that primarily uses macros
91
+ const macroAdapter = new WinAxAdapter();
92
+ await macroAdapter.connect();
93
+ // Configure to prefer macro execution
94
+ return macroAdapter;
95
+ }
96
+ case 'hybrid': {
97
+ // Create a hybrid adapter that intelligently switches between methods
98
+ const hybridAdapter = new WinAxAdapter();
99
+ await hybridAdapter.connect();
100
+ return hybridAdapter;
101
+ }
102
+ default:
103
+ throw new Error(`Unknown adapter type: ${config.type}`);
104
+ }
105
+ }
106
+ /**
107
+ * Get the best available adapter based on system capabilities
108
+ */
109
+ async getBestAdapter() {
110
+ // Try to determine the best adapter type
111
+ const systemCapabilities = await this.detectSystemCapabilities();
112
+ const config = {};
113
+ if (systemCapabilities.hasWinAx) {
114
+ config.type = 'winax';
115
+ }
116
+ else {
117
+ config.type = 'macro-fallback';
118
+ }
119
+ // Enable circuit breaker for stability
120
+ config.enableCircuitBreaker = true;
121
+ // Enable connection pool for performance if we have enough resources
122
+ if (systemCapabilities.memoryGB > 8) {
123
+ config.enableConnectionPool = true;
124
+ config.poolSize = Math.min(5, Math.floor(systemCapabilities.memoryGB / 4));
125
+ }
126
+ return this.createAdapter(config);
127
+ }
128
+ /**
129
+ * Detect system capabilities
130
+ */
131
+ async detectSystemCapabilities() {
132
+ const capabilities = {
133
+ hasWinAx: false,
134
+ hasDotNet: false,
135
+ memoryGB: 4,
136
+ cpuCores: 2,
137
+ osType: process.platform,
138
+ };
139
+ // Check for winax availability
140
+ try {
141
+ require('winax');
142
+ capabilities.hasWinAx = true;
143
+ }
144
+ catch (_e) {
145
+ capabilities.hasWinAx = false;
146
+ }
147
+ // Get system memory
148
+ try {
149
+ const os = await import('node:os');
150
+ capabilities.memoryGB = Math.floor(os.totalmem() / (1024 * 1024 * 1024));
151
+ capabilities.cpuCores = os.cpus().length;
152
+ }
153
+ catch (_e) {
154
+ // Use defaults
155
+ }
156
+ return capabilities;
157
+ }
158
+ /**
159
+ * Generate cache key for adapter configuration
160
+ */
161
+ getCacheKey(config) {
162
+ return `${config.type}_cb${config.enableCircuitBreaker}_pool${config.enableConnectionPool}`;
163
+ }
164
+ /**
165
+ * Get all cached adapters
166
+ */
167
+ getCachedAdapters() {
168
+ return new Map(this.adapters);
169
+ }
170
+ /**
171
+ * Clear all cached adapters
172
+ */
173
+ async clearCache() {
174
+ for (const [key, adapter] of this.adapters.entries()) {
175
+ try {
176
+ await adapter.disconnect();
177
+ }
178
+ catch (e) {
179
+ logger.error(`Failed to disconnect adapter ${key}:`, e);
180
+ }
181
+ }
182
+ this.adapters.clear();
183
+ }
184
+ /**
185
+ * Health check all cached adapters
186
+ */
187
+ async healthCheckAll() {
188
+ const results = new Map();
189
+ for (const [key, adapter] of this.adapters.entries()) {
190
+ try {
191
+ const health = await adapter.healthCheck();
192
+ results.set(key, health);
193
+ }
194
+ catch (_e) {
195
+ results.set(key, {
196
+ healthy: false,
197
+ lastCheck: new Date(),
198
+ errorCount: 1,
199
+ successCount: 0,
200
+ averageResponseTime: 0,
201
+ connectionStatus: 'error',
202
+ });
203
+ }
204
+ }
205
+ return results;
206
+ }
207
+ }
208
+ /**
209
+ * Singleton export for convenience
210
+ */
211
+ export const adapterFactory = AdapterFactory.getInstance();
212
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/adapters/factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Feature Complexity Analyzer
3
+ *
4
+ * Intelligently analyzes SolidWorks operations to determine the best execution method:
5
+ * - Direct COM for simple operations (≤12 parameters)
6
+ * - VBA Macro fallback for complex operations (13+ parameters)
7
+ *
8
+ * This solves the fundamental limitation of Node.js COM bridges (winax, edge-js)
9
+ * which fail when calling methods with more than 12-13 parameters.
10
+ */
11
+ import type { ExtrusionParameters } from './types.js';
12
+ /**
13
+ * Feature method complexity information
14
+ */
15
+ export interface FeatureComplexity {
16
+ method: string;
17
+ parameterCount: number;
18
+ requiresMacro: boolean;
19
+ criticalParameters: string[];
20
+ alternativeMethod?: string;
21
+ }
22
+ /**
23
+ * Execution strategy recommendation
24
+ */
25
+ export interface ExecutionStrategy {
26
+ method: string;
27
+ strategy: 'direct-com' | 'vba-macro' | 'hybrid';
28
+ confidence: number;
29
+ reason: string;
30
+ estimatedSuccessRate: number;
31
+ }
32
+ /**
33
+ * SolidWorks API method parameter counts
34
+ * Based on SolidWorks API documentation (versions 2021-2025)
35
+ */
36
+ export declare class FeatureComplexityAnalyzer {
37
+ private static readonly COM_PARAMETER_LIMIT;
38
+ private static readonly HYBRID_THRESHOLD;
39
+ /**
40
+ * Feature complexity database
41
+ * Maps SolidWorks API methods to their characteristics
42
+ */
43
+ private static readonly FEATURE_COMPLEXITIES;
44
+ /**
45
+ * Analyze parameter complexity of an operation
46
+ */
47
+ static analyzeParameters(params: Record<string, any>): {
48
+ count: number;
49
+ complexity: 'simple' | 'moderate' | 'complex';
50
+ hasOptionals: boolean;
51
+ };
52
+ /**
53
+ * Determine execution strategy for a feature operation
54
+ */
55
+ static determineStrategy(methodName: string, parameters: Record<string, any>): ExecutionStrategy;
56
+ /**
57
+ * Check if a method requires VBA macro fallback
58
+ */
59
+ static requiresMacro(methodName: string): boolean;
60
+ /**
61
+ * Get parameter count for a method
62
+ */
63
+ static getParameterCount(methodName: string): number;
64
+ /**
65
+ * Get critical parameters that must be set correctly
66
+ */
67
+ static getCriticalParameters(methodName: string): string[];
68
+ /**
69
+ * Analyze extrusion parameters specifically
70
+ */
71
+ static analyzeExtrusion(params: ExtrusionParameters): ExecutionStrategy;
72
+ /**
73
+ * Get all methods that require macro fallback
74
+ */
75
+ static getComplexMethods(): string[];
76
+ /**
77
+ * Get statistics about feature complexity
78
+ */
79
+ static getComplexityStats(): {
80
+ total: number;
81
+ requireMacro: number;
82
+ directCOM: number;
83
+ percentage: number;
84
+ };
85
+ /**
86
+ * Log complexity analysis for debugging
87
+ */
88
+ static logAnalysis(methodName: string, params: Record<string, any>): void;
89
+ }
90
+ /**
91
+ * Helper function to determine if direct COM should be attempted
92
+ */
93
+ export declare function shouldAttemptDirectCOM(methodName: string, params: Record<string, any>): boolean;
94
+ /**
95
+ * Helper function to determine if macro fallback should be used
96
+ */
97
+ export declare function shouldUseMacroFallback(methodName: string, params: Record<string, any>): boolean;
98
+ /**
99
+ * Helper function to get recommended approach
100
+ */
101
+ export declare function getRecommendedApproach(methodName: string, params: Record<string, any>): string;
102
+ //# sourceMappingURL=feature-complexity-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-complexity-analyzer.d.ts","sourceRoot":"","sources":["../../src/adapters/feature-complexity-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAM;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAM;IAE9C;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CA8G1C;IAEF;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QACrD,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;QAC9C,YAAY,EAAE,OAAO,CAAC;KACvB;IAUD;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,iBAAiB;IAgDhG;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAKjD;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAKpD;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAK1D;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,GAAG,iBAAiB;IAiDvE;;OAEG;IACH,MAAM,CAAC,iBAAiB,IAAI,MAAM,EAAE;IAMpC;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI;QAC3B,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB;IAaD;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;CAc1E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAG/F;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAG/F;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAa9F"}
@@ -0,0 +1,322 @@
1
+ /**
2
+ * Feature Complexity Analyzer
3
+ *
4
+ * Intelligently analyzes SolidWorks operations to determine the best execution method:
5
+ * - Direct COM for simple operations (≤12 parameters)
6
+ * - VBA Macro fallback for complex operations (13+ parameters)
7
+ *
8
+ * This solves the fundamental limitation of Node.js COM bridges (winax, edge-js)
9
+ * which fail when calling methods with more than 12-13 parameters.
10
+ */
11
+ import { logger } from '../utils/logger.js';
12
+ /**
13
+ * SolidWorks API method parameter counts
14
+ * Based on SolidWorks API documentation (versions 2021-2025)
15
+ */
16
+ export class FeatureComplexityAnalyzer {
17
+ static COM_PARAMETER_LIMIT = 12; // Empirical limit for Node.js COM bridges
18
+ static HYBRID_THRESHOLD = 10; // Start considering macro at 10 params
19
+ /**
20
+ * Feature complexity database
21
+ * Maps SolidWorks API methods to their characteristics
22
+ */
23
+ static FEATURE_COMPLEXITIES = {
24
+ // ========================================
25
+ // EXTRUSION FEATURES
26
+ // ========================================
27
+ FeatureExtrusion: {
28
+ method: 'FeatureExtrusion',
29
+ parameterCount: 13,
30
+ requiresMacro: true,
31
+ criticalParameters: ['depth', 'draft', 'bothDirections'],
32
+ alternativeMethod: 'FeatureExtrusion2',
33
+ },
34
+ FeatureExtrusion2: {
35
+ method: 'FeatureExtrusion2',
36
+ parameterCount: 16,
37
+ requiresMacro: true,
38
+ criticalParameters: ['depth', 'draft', 'bothDirections', 'thinFeature'],
39
+ alternativeMethod: 'FeatureExtrusion3',
40
+ },
41
+ FeatureExtrusion3: {
42
+ method: 'FeatureExtrusion3',
43
+ parameterCount: 23,
44
+ requiresMacro: true,
45
+ criticalParameters: ['depth', 'depth2', 'draft', 'draftAngle', 'thinFeature', 'capEnds'],
46
+ },
47
+ // ========================================
48
+ // REVOLVE FEATURES
49
+ // ========================================
50
+ FeatureRevolve: {
51
+ method: 'FeatureRevolve',
52
+ parameterCount: 10,
53
+ requiresMacro: false,
54
+ criticalParameters: ['angle', 'direction'],
55
+ },
56
+ FeatureRevolve2: {
57
+ method: 'FeatureRevolve2',
58
+ parameterCount: 12,
59
+ requiresMacro: false, // Right at the limit
60
+ criticalParameters: ['angle', 'direction', 'thinFeature'],
61
+ },
62
+ // ========================================
63
+ // SWEEP FEATURES
64
+ // ========================================
65
+ InsertProtrusionSwept: {
66
+ method: 'InsertProtrusionSwept',
67
+ parameterCount: 10,
68
+ requiresMacro: false,
69
+ criticalParameters: ['profileSketch', 'pathSketch'],
70
+ },
71
+ InsertProtrusionSwept4: {
72
+ method: 'InsertProtrusionSwept4',
73
+ parameterCount: 14,
74
+ requiresMacro: true,
75
+ criticalParameters: ['profileSketch', 'pathSketch', 'twistAngle', 'thinFeature'],
76
+ },
77
+ // ========================================
78
+ // LOFT FEATURES
79
+ // ========================================
80
+ InsertProtrusionLoft: {
81
+ method: 'InsertProtrusionLoft',
82
+ parameterCount: 12,
83
+ requiresMacro: false,
84
+ criticalParameters: ['profiles', 'guides'],
85
+ },
86
+ InsertProtrusionLoft3: {
87
+ method: 'InsertProtrusionLoft3',
88
+ parameterCount: 17,
89
+ requiresMacro: true,
90
+ criticalParameters: ['profiles', 'guides', 'centerCurve', 'thinFeature'],
91
+ },
92
+ // ========================================
93
+ // PATTERN FEATURES
94
+ // ========================================
95
+ FeatureLinearPattern4: {
96
+ method: 'FeatureLinearPattern4',
97
+ parameterCount: 18,
98
+ requiresMacro: true,
99
+ criticalParameters: ['direction1', 'spacing1', 'count1', 'direction2', 'spacing2', 'count2'],
100
+ },
101
+ FeatureCircularPattern: {
102
+ method: 'FeatureCircularPattern',
103
+ parameterCount: 15,
104
+ requiresMacro: true,
105
+ criticalParameters: ['axis', 'count', 'angle'],
106
+ },
107
+ // ========================================
108
+ // SIMPLE OPERATIONS (always direct COM)
109
+ // ========================================
110
+ CreateLine: {
111
+ method: 'CreateLine',
112
+ parameterCount: 6,
113
+ requiresMacro: false,
114
+ criticalParameters: ['x1', 'y1', 'z1', 'x2', 'y2', 'z2'],
115
+ },
116
+ CreateCircle: {
117
+ method: 'CreateCircle',
118
+ parameterCount: 4,
119
+ requiresMacro: false,
120
+ criticalParameters: ['x', 'y', 'z', 'radius'],
121
+ },
122
+ InsertSketch: {
123
+ method: 'InsertSketch',
124
+ parameterCount: 1,
125
+ requiresMacro: false,
126
+ criticalParameters: ['exit'],
127
+ },
128
+ };
129
+ /**
130
+ * Analyze parameter complexity of an operation
131
+ */
132
+ static analyzeParameters(params) {
133
+ const count = Object.keys(params).filter((key) => params[key] !== undefined && params[key] !== null).length;
134
+ return {
135
+ count,
136
+ complexity: count <= 8 ? 'simple' : count <= 12 ? 'moderate' : 'complex',
137
+ hasOptionals: Object.values(params).some((v) => v === undefined || v === null),
138
+ };
139
+ }
140
+ /**
141
+ * Determine execution strategy for a feature operation
142
+ */
143
+ static determineStrategy(methodName, parameters) {
144
+ const complexity = FeatureComplexityAnalyzer.FEATURE_COMPLEXITIES[methodName];
145
+ const paramAnalysis = FeatureComplexityAnalyzer.analyzeParameters(parameters);
146
+ // Unknown method - default to direct COM with low confidence
147
+ if (!complexity) {
148
+ logger.warn(`Unknown method: ${methodName}, defaulting to direct COM`);
149
+ return {
150
+ method: methodName,
151
+ strategy: 'direct-com',
152
+ confidence: 0.5,
153
+ reason: 'Unknown method - attempting direct COM',
154
+ estimatedSuccessRate: 0.7,
155
+ };
156
+ }
157
+ // Complex feature requiring macro
158
+ if (complexity.requiresMacro || paramAnalysis.count > FeatureComplexityAnalyzer.COM_PARAMETER_LIMIT) {
159
+ return {
160
+ method: methodName,
161
+ strategy: 'vba-macro',
162
+ confidence: 0.95,
163
+ reason: `Method has ${complexity.parameterCount} parameters (limit: ${FeatureComplexityAnalyzer.COM_PARAMETER_LIMIT})`,
164
+ estimatedSuccessRate: 0.98,
165
+ };
166
+ }
167
+ // Hybrid approach for moderate complexity
168
+ if (paramAnalysis.count > FeatureComplexityAnalyzer.HYBRID_THRESHOLD) {
169
+ return {
170
+ method: methodName,
171
+ strategy: 'hybrid',
172
+ confidence: 0.85,
173
+ reason: `${paramAnalysis.count} parameters - will try COM first, fallback to macro`,
174
+ estimatedSuccessRate: 0.95,
175
+ };
176
+ }
177
+ // Simple operation - direct COM
178
+ return {
179
+ method: methodName,
180
+ strategy: 'direct-com',
181
+ confidence: 0.99,
182
+ reason: `Simple operation with ${paramAnalysis.count} parameters`,
183
+ estimatedSuccessRate: 0.99,
184
+ };
185
+ }
186
+ /**
187
+ * Check if a method requires VBA macro fallback
188
+ */
189
+ static requiresMacro(methodName) {
190
+ const complexity = FeatureComplexityAnalyzer.FEATURE_COMPLEXITIES[methodName];
191
+ return complexity?.requiresMacro ?? false;
192
+ }
193
+ /**
194
+ * Get parameter count for a method
195
+ */
196
+ static getParameterCount(methodName) {
197
+ const complexity = FeatureComplexityAnalyzer.FEATURE_COMPLEXITIES[methodName];
198
+ return complexity?.parameterCount ?? 0;
199
+ }
200
+ /**
201
+ * Get critical parameters that must be set correctly
202
+ */
203
+ static getCriticalParameters(methodName) {
204
+ const complexity = FeatureComplexityAnalyzer.FEATURE_COMPLEXITIES[methodName];
205
+ return complexity?.criticalParameters ?? [];
206
+ }
207
+ /**
208
+ * Analyze extrusion parameters specifically
209
+ */
210
+ static analyzeExtrusion(params) {
211
+ // Count actual parameters being used
212
+ let paramCount = 0;
213
+ const criticalParams = [];
214
+ if (params.depth) {
215
+ paramCount++;
216
+ criticalParams.push('depth');
217
+ }
218
+ if (params.draft !== undefined && params.draft !== 0) {
219
+ paramCount += 2;
220
+ criticalParams.push('draft', 'draftWhileExtruding');
221
+ }
222
+ if (params.bothDirections) {
223
+ paramCount += 2;
224
+ criticalParams.push('bothDirections', 'depth2');
225
+ }
226
+ if (params.thinFeature) {
227
+ paramCount += 3;
228
+ criticalParams.push('thinFeature', 'thinThickness', 'capEnds');
229
+ }
230
+ if (params.reverse) {
231
+ paramCount++;
232
+ criticalParams.push('reverse');
233
+ }
234
+ if (params.endCondition && params.endCondition !== 'Blind') {
235
+ paramCount++;
236
+ criticalParams.push('endCondition');
237
+ }
238
+ // Always count base parameters
239
+ paramCount += 5; // sd, flip, dir, t1, t2
240
+ const strategy = paramCount > FeatureComplexityAnalyzer.COM_PARAMETER_LIMIT
241
+ ? 'vba-macro'
242
+ : paramCount > FeatureComplexityAnalyzer.HYBRID_THRESHOLD
243
+ ? 'hybrid'
244
+ : 'direct-com';
245
+ return {
246
+ method: 'FeatureExtrusion3',
247
+ strategy,
248
+ confidence: strategy === 'vba-macro' ? 0.95 : 0.85,
249
+ reason: `Extrusion with ${paramCount} effective parameters (${criticalParams.join(', ')})`,
250
+ estimatedSuccessRate: strategy === 'vba-macro' ? 0.98 : 0.9,
251
+ };
252
+ }
253
+ /**
254
+ * Get all methods that require macro fallback
255
+ */
256
+ static getComplexMethods() {
257
+ return Object.entries(FeatureComplexityAnalyzer.FEATURE_COMPLEXITIES)
258
+ .filter(([_, complexity]) => complexity.requiresMacro)
259
+ .map(([method, _]) => method);
260
+ }
261
+ /**
262
+ * Get statistics about feature complexity
263
+ */
264
+ static getComplexityStats() {
265
+ const total = Object.keys(FeatureComplexityAnalyzer.FEATURE_COMPLEXITIES).length;
266
+ const requireMacro = FeatureComplexityAnalyzer.getComplexMethods().length;
267
+ const directCOM = total - requireMacro;
268
+ return {
269
+ total,
270
+ requireMacro,
271
+ directCOM,
272
+ percentage: (requireMacro / total) * 100,
273
+ };
274
+ }
275
+ /**
276
+ * Log complexity analysis for debugging
277
+ */
278
+ static logAnalysis(methodName, params) {
279
+ const strategy = FeatureComplexityAnalyzer.determineStrategy(methodName, params);
280
+ const paramAnalysis = FeatureComplexityAnalyzer.analyzeParameters(params);
281
+ logger.info('Feature complexity analysis', {
282
+ method: methodName,
283
+ strategy: strategy.strategy,
284
+ confidence: strategy.confidence,
285
+ parameterCount: paramAnalysis.count,
286
+ complexity: paramAnalysis.complexity,
287
+ reason: strategy.reason,
288
+ estimatedSuccessRate: strategy.estimatedSuccessRate,
289
+ });
290
+ }
291
+ }
292
+ /**
293
+ * Helper function to determine if direct COM should be attempted
294
+ */
295
+ export function shouldAttemptDirectCOM(methodName, params) {
296
+ const strategy = FeatureComplexityAnalyzer.determineStrategy(methodName, params);
297
+ return strategy.strategy === 'direct-com' || strategy.strategy === 'hybrid';
298
+ }
299
+ /**
300
+ * Helper function to determine if macro fallback should be used
301
+ */
302
+ export function shouldUseMacroFallback(methodName, params) {
303
+ const strategy = FeatureComplexityAnalyzer.determineStrategy(methodName, params);
304
+ return strategy.strategy === 'vba-macro';
305
+ }
306
+ /**
307
+ * Helper function to get recommended approach
308
+ */
309
+ export function getRecommendedApproach(methodName, params) {
310
+ const strategy = FeatureComplexityAnalyzer.determineStrategy(methodName, params);
311
+ switch (strategy.strategy) {
312
+ case 'direct-com':
313
+ return 'Use direct COM call';
314
+ case 'vba-macro':
315
+ return 'Use VBA macro generation';
316
+ case 'hybrid':
317
+ return 'Try direct COM first, fallback to VBA macro on failure';
318
+ default:
319
+ return 'Unknown strategy';
320
+ }
321
+ }
322
+ //# sourceMappingURL=feature-complexity-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-complexity-analyzer.js","sourceRoot":"","sources":["../../src/adapters/feature-complexity-analyzer.ts"],"names":[],"mappings":"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"}