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
@@ -2,6 +2,8 @@
2
2
  * Native Macro Recording for SolidWorks
3
3
  * Uses SolidWorks' built-in macro recording API for proper VBA initialization
4
4
  */
5
+ import * as fs from 'node:fs';
6
+ import * as path from 'node:path';
5
7
  import { z } from 'zod';
6
8
  /**
7
9
  * Native macro recording tools that use SolidWorks' internal VBA engine
@@ -18,7 +20,7 @@ export const nativeMacroTools = [
18
20
  pauseRecording: z.boolean().default(false).describe('Start in paused state'),
19
21
  recordViewCommands: z.boolean().default(false).describe('Record view manipulation commands'),
20
22
  recordFeatureManager: z.boolean().default(true).describe('Record feature manager commands'),
21
- recordSelections: z.boolean().default(true).describe('Record selection commands')
23
+ recordSelections: z.boolean().default(true).describe('Record selection commands'),
22
24
  }),
23
25
  handler: (args, swApi) => {
24
26
  try {
@@ -28,11 +30,9 @@ export const nativeMacroTools = [
28
30
  // Ensure macro path has correct extension
29
31
  let macroPath = args.macroPath;
30
32
  if (!macroPath.toLowerCase().endsWith('.swp')) {
31
- macroPath = macroPath.replace(/\.[^.]*$/, '') + '.swp';
33
+ macroPath = `${macroPath.replace(/\.[^.]*$/, '')}.swp`;
32
34
  }
33
35
  // Ensure directory exists
34
- const path = require('path');
35
- const fs = require('fs');
36
36
  const dir = path.dirname(macroPath);
37
37
  if (!fs.existsSync(dir)) {
38
38
  fs.mkdirSync(dir, { recursive: true });
@@ -59,21 +59,21 @@ export const nativeMacroTools = [
59
59
  options: {
60
60
  recordViewCommands: args.recordViewCommands,
61
61
  recordFeatureManager: args.recordFeatureManager,
62
- recordSelections: args.recordSelections
63
- }
62
+ recordSelections: args.recordSelections,
63
+ },
64
64
  };
65
65
  }
66
66
  catch (error) {
67
67
  return `Failed to start native macro recording: ${error}`;
68
68
  }
69
- }
69
+ },
70
70
  },
71
71
  {
72
72
  name: 'stop_native_macro_recording',
73
73
  description: 'Stop the current native macro recording and save',
74
74
  inputSchema: z.object({
75
75
  openInEditor: z.boolean().default(false).describe('Open macro in VBA editor after saving'),
76
- runMacro: z.boolean().default(false).describe('Run the macro immediately after saving')
76
+ runMacro: z.boolean().default(false).describe('Run the macro immediately after saving'),
77
77
  }),
78
78
  handler: (args, swApi) => {
79
79
  try {
@@ -90,8 +90,8 @@ export const nativeMacroTools = [
90
90
  }
91
91
  // Run macro if requested
92
92
  if (args.runMacro) {
93
- swApp.RunMacro2(lastMacroPath, "main", // Default module name
94
- "main", // Default procedure name
93
+ swApp.RunMacro2(lastMacroPath, 'main', // Default module name
94
+ 'main', // Default procedure name
95
95
  1 // swRunMacroOption_e.swRunMacroUnloadAfterRun
96
96
  );
97
97
  }
@@ -100,19 +100,19 @@ export const nativeMacroTools = [
100
100
  message: 'Native macro recording stopped and saved',
101
101
  macroPath: lastMacroPath,
102
102
  openedInEditor: args.openInEditor,
103
- executed: args.runMacro
103
+ executed: args.runMacro,
104
104
  };
105
105
  }
106
106
  catch (error) {
107
107
  return `Failed to stop native macro recording: ${error}`;
108
108
  }
109
- }
109
+ },
110
110
  },
111
111
  {
112
112
  name: 'pause_resume_macro_recording',
113
113
  description: 'Pause or resume the current macro recording',
114
114
  inputSchema: z.object({
115
- action: z.enum(['pause', 'resume']).describe('Action to perform')
115
+ action: z.enum(['pause', 'resume']).describe('Action to perform'),
116
116
  }),
117
117
  handler: (args, swApi) => {
118
118
  try {
@@ -128,13 +128,13 @@ export const nativeMacroTools = [
128
128
  return {
129
129
  success: true,
130
130
  message: `Macro recording ${args.action}d`,
131
- status: args.action === 'pause' ? 'paused' : 'recording'
131
+ status: args.action === 'pause' ? 'paused' : 'recording',
132
132
  };
133
133
  }
134
134
  catch (error) {
135
135
  return `Failed to ${args.action} macro recording: ${error}`;
136
136
  }
137
- }
137
+ },
138
138
  },
139
139
  // ============================================
140
140
  // MACRO EXECUTION & MANAGEMENT
@@ -147,7 +147,7 @@ export const nativeMacroTools = [
147
147
  moduleName: z.string().default('main').describe('Module name containing the macro'),
148
148
  procedureName: z.string().default('main').describe('Procedure/subroutine name to run'),
149
149
  arguments: z.array(z.any()).optional().describe('Arguments to pass to the macro'),
150
- unloadAfterRun: z.boolean().default(true).describe('Unload macro from memory after execution')
150
+ unloadAfterRun: z.boolean().default(true).describe('Unload macro from memory after execution'),
151
151
  }),
152
152
  handler: (args, swApi) => {
153
153
  try {
@@ -155,7 +155,6 @@ export const nativeMacroTools = [
155
155
  if (!swApp)
156
156
  throw new Error('SolidWorks application not connected');
157
157
  // Check if macro file exists
158
- const fs = require('fs');
159
158
  if (!fs.existsSync(args.macroPath)) {
160
159
  throw new Error(`Macro file not found: ${args.macroPath}`);
161
160
  }
@@ -165,7 +164,7 @@ export const nativeMacroTools = [
165
164
  let success;
166
165
  if (args.arguments && args.arguments.length > 0) {
167
166
  // Run with arguments (requires special handling)
168
- const vbaApp = swApp.GetAddInObject("SldWorks.MacroRunner");
167
+ const vbaApp = swApp.GetAddInObject('SldWorks.MacroRunner');
169
168
  success = vbaApp.RunMacroWithArguments(args.macroPath, args.moduleName, args.procedureName, args.arguments);
170
169
  }
171
170
  else {
@@ -181,19 +180,19 @@ export const nativeMacroTools = [
181
180
  macroPath: args.macroPath,
182
181
  module: args.moduleName,
183
182
  procedure: args.procedureName,
184
- hadArguments: args.arguments ? args.arguments.length : 0
183
+ hadArguments: args.arguments ? args.arguments.length : 0,
185
184
  };
186
185
  }
187
186
  catch (error) {
188
187
  return `Failed to run macro: ${error}`;
189
188
  }
190
- }
189
+ },
191
190
  },
192
191
  {
193
192
  name: 'edit_macro',
194
193
  description: 'Open a macro in the SolidWorks VBA editor',
195
194
  inputSchema: z.object({
196
- macroPath: z.string().describe('Full path to the macro file')
195
+ macroPath: z.string().describe('Full path to the macro file'),
197
196
  }),
198
197
  handler: (args, swApi) => {
199
198
  try {
@@ -201,7 +200,6 @@ export const nativeMacroTools = [
201
200
  if (!swApp)
202
201
  throw new Error('SolidWorks application not connected');
203
202
  // Check if macro file exists
204
- const fs = require('fs');
205
203
  if (!fs.existsSync(args.macroPath)) {
206
204
  throw new Error(`Macro file not found: ${args.macroPath}`);
207
205
  }
@@ -213,13 +211,13 @@ export const nativeMacroTools = [
213
211
  return {
214
212
  success: true,
215
213
  message: 'Macro opened in VBA editor',
216
- macroPath: args.macroPath
214
+ macroPath: args.macroPath,
217
215
  };
218
216
  }
219
217
  catch (error) {
220
218
  return `Failed to edit macro: ${error}`;
221
219
  }
222
- }
220
+ },
223
221
  },
224
222
  // ============================================
225
223
  // MACRO INITIALIZATION & CONVERSION
@@ -233,7 +231,7 @@ export const nativeMacroTools = [
233
231
  description: z.string().optional().describe('Macro description'),
234
232
  includeErrorHandling: z.boolean().default(true).describe('Include error handling code'),
235
233
  includeComments: z.boolean().default(true).describe('Include helpful comments'),
236
- template: z.enum(['basic', 'part', 'assembly', 'drawing']).default('basic').describe('Macro template type')
234
+ template: z.enum(['basic', 'part', 'assembly', 'drawing']).default('basic').describe('Macro template type'),
237
235
  }),
238
236
  handler: (args, swApi) => {
239
237
  try {
@@ -243,11 +241,9 @@ export const nativeMacroTools = [
243
241
  // Ensure macro path has correct extension
244
242
  let macroPath = args.macroPath;
245
243
  if (!macroPath.toLowerCase().endsWith('.swp')) {
246
- macroPath = macroPath.replace(/\.[^.]*$/, '') + '.swp';
244
+ macroPath = `${macroPath.replace(/\.[^.]*$/, '')}.swp`;
247
245
  }
248
246
  // Create directory if needed
249
- const path = require('path');
250
- const fs = require('fs');
251
247
  const dir = path.dirname(macroPath);
252
248
  if (!fs.existsSync(dir)) {
253
249
  fs.mkdirSync(dir, { recursive: true });
@@ -259,15 +255,15 @@ export const nativeMacroTools = [
259
255
  // Now edit the macro to add our template code
260
256
  swApp.EditMacro(macroPath);
261
257
  // Get VBA environment
262
- const vbaEditor = swApp.GetAddInObject("VBA.Editor");
258
+ const vbaEditor = swApp.GetAddInObject('VBA.Editor');
263
259
  const vbaProject = vbaEditor.ActiveVBProject;
264
- const codeModule = vbaProject.VBComponents("Module1").CodeModule;
260
+ const codeModule = vbaProject.VBComponents('Module1').CodeModule;
265
261
  // Clear existing code
266
262
  if (codeModule.CountOfLines > 0) {
267
263
  codeModule.DeleteLines(1, codeModule.CountOfLines);
268
264
  }
269
265
  // Build template code based on type
270
- let templateCode = generateMacroTemplate(args);
266
+ const templateCode = generateMacroTemplate(args);
271
267
  // Insert the template code
272
268
  codeModule.InsertLines(1, templateCode);
273
269
  // Save the macro
@@ -278,13 +274,13 @@ export const nativeMacroTools = [
278
274
  macroPath,
279
275
  macroName: args.macroName,
280
276
  template: args.template,
281
- linesOfCode: templateCode.split('\n').length
277
+ linesOfCode: templateCode.split('\n').length,
282
278
  };
283
279
  }
284
280
  catch (error) {
285
281
  return `Failed to create initialized macro: ${error}`;
286
282
  }
287
- }
283
+ },
288
284
  },
289
285
  {
290
286
  name: 'convert_text_to_native_macro',
@@ -294,7 +290,7 @@ export const nativeMacroTools = [
294
290
  outputPath: z.string().describe('Path where the converted macro will be saved'),
295
291
  macroName: z.string().describe('Name for the macro'),
296
292
  addInitialization: z.boolean().default(true).describe('Add SolidWorks initialization code'),
297
- addReferences: z.boolean().default(true).describe('Add required type library references')
293
+ addReferences: z.boolean().default(true).describe('Add required type library references'),
298
294
  }),
299
295
  handler: (args, swApi) => {
300
296
  try {
@@ -304,7 +300,7 @@ export const nativeMacroTools = [
304
300
  // Ensure output path has correct extension
305
301
  let outputPath = args.outputPath;
306
302
  if (!outputPath.toLowerCase().endsWith('.swp')) {
307
- outputPath = outputPath.replace(/\.[^.]*$/, '') + '.swp';
303
+ outputPath = `${outputPath.replace(/\.[^.]*$/, '')}.swp`;
308
304
  }
309
305
  // Create an initialized macro first
310
306
  swApp.RecordMacro(outputPath);
@@ -312,16 +308,16 @@ export const nativeMacroTools = [
312
308
  // Open in editor
313
309
  swApp.EditMacro(outputPath);
314
310
  // Get VBA environment
315
- const vbaEditor = swApp.GetAddInObject("VBA.Editor");
311
+ const vbaEditor = swApp.GetAddInObject('VBA.Editor');
316
312
  const vbaProject = vbaEditor.ActiveVBProject;
317
313
  // Add required references if needed
318
314
  if (args.addReferences) {
319
315
  const references = vbaProject.References;
320
316
  // Add SolidWorks type libraries if not present
321
317
  const requiredRefs = [
322
- "SldWorks 2024 Type Library",
323
- "SldWorks 2024 Constant type library",
324
- "SldWorks 2024 Commands type library"
318
+ 'SldWorks 2024 Type Library',
319
+ 'SldWorks 2024 Constant type library',
320
+ 'SldWorks 2024 Commands type library',
325
321
  ];
326
322
  for (const refName of requiredRefs) {
327
323
  try {
@@ -333,7 +329,7 @@ export const nativeMacroTools = [
333
329
  }
334
330
  }
335
331
  // Get the code module
336
- const codeModule = vbaProject.VBComponents("Module1").CodeModule;
332
+ const codeModule = vbaProject.VBComponents('Module1').CodeModule;
337
333
  // Clear existing code
338
334
  if (codeModule.CountOfLines > 0) {
339
335
  codeModule.DeleteLines(1, codeModule.CountOfLines);
@@ -342,40 +338,42 @@ export const nativeMacroTools = [
342
338
  let processedCode = args.vbaCode;
343
339
  // Add initialization if needed
344
340
  if (args.addInitialization && !processedCode.includes('Dim swApp')) {
345
- const initCode = `
346
- ' ${args.macroName}
347
- ' Converted from text VBA by SolidWorks MCP Server
348
- ' Date: ${new Date().toISOString()}
349
-
350
- Option Explicit
351
-
352
- ' SolidWorks Variables
353
- Dim swApp As SldWorks.SldWorks
354
- Dim swModel As SldWorks.ModelDoc2
355
- Dim swPart As SldWorks.PartDoc
356
- Dim swAssembly As SldWorks.AssemblyDoc
357
- Dim swDrawing As SldWorks.DrawingDoc
358
- Dim boolStatus As Boolean
359
- Dim longStatus As Long, longWarnings As Long
360
-
341
+ const initCode = `
342
+ ' ${args.macroName}
343
+ ' Converted from text VBA by SolidWorks MCP Server
344
+ ' Date: ${new Date().toISOString()}
345
+
346
+ Option Explicit
347
+
348
+ ' SolidWorks Variables
349
+ Dim swApp As SldWorks.SldWorks
350
+ Dim swModel As SldWorks.ModelDoc2
351
+ Dim swPart As SldWorks.PartDoc
352
+ Dim swAssembly As SldWorks.AssemblyDoc
353
+ Dim swDrawing As SldWorks.DrawingDoc
354
+ Dim boolStatus As Boolean
355
+ Dim longStatus As Long, longWarnings As Long
356
+
361
357
  `;
362
358
  processedCode = initCode + processedCode;
363
359
  }
364
360
  // Ensure main subroutine exists
365
361
  if (!processedCode.includes('Sub main')) {
366
- processedCode = processedCode + `
367
-
368
- Sub main()
369
- Set swApp = Application.SldWorks
370
- Set swModel = swApp.ActiveDoc
371
-
372
- If swModel Is Nothing Then
373
- MsgBox "Please open a document first."
374
- Exit Sub
375
- End If
376
-
377
- ' Call your main procedure here
378
- ${args.macroName}
362
+ processedCode =
363
+ processedCode +
364
+ `
365
+
366
+ Sub main()
367
+ Set swApp = Application.SldWorks
368
+ Set swModel = swApp.ActiveDoc
369
+
370
+ If swModel Is Nothing Then
371
+ MsgBox "Please open a document first."
372
+ Exit Sub
373
+ End If
374
+
375
+ ' Call your main procedure here
376
+ ${args.macroName}
379
377
  End Sub`;
380
378
  }
381
379
  // Insert the processed code
@@ -389,13 +387,13 @@ End Sub`;
389
387
  macroName: args.macroName,
390
388
  linesOfCode: processedCode.split('\n').length,
391
389
  referencesAdded: args.addReferences,
392
- initializationAdded: args.addInitialization
390
+ initializationAdded: args.addInitialization,
393
391
  };
394
392
  }
395
393
  catch (error) {
396
394
  return `Failed to convert text to native macro: ${error}`;
397
395
  }
398
- }
396
+ },
399
397
  },
400
398
  // ============================================
401
399
  // MACRO BATCH OPERATIONS
@@ -404,15 +402,17 @@ End Sub`;
404
402
  name: 'batch_run_macros',
405
403
  description: 'Run multiple macros in sequence',
406
404
  inputSchema: z.object({
407
- macros: z.array(z.object({
405
+ macros: z
406
+ .array(z.object({
408
407
  path: z.string().describe('Macro file path'),
409
408
  module: z.string().default('main').describe('Module name'),
410
409
  procedure: z.string().default('main').describe('Procedure name'),
411
410
  arguments: z.array(z.any()).optional().describe('Arguments'),
412
- continueOnError: z.boolean().default(true).describe('Continue if this macro fails')
413
- })).describe('Array of macros to run'),
411
+ continueOnError: z.boolean().default(true).describe('Continue if this macro fails'),
412
+ }))
413
+ .describe('Array of macros to run'),
414
414
  delayBetween: z.number().default(1000).describe('Delay between macros in milliseconds'),
415
- stopOnError: z.boolean().default(false).describe('Stop batch if any macro fails')
415
+ stopOnError: z.boolean().default(false).describe('Stop batch if any macro fails'),
416
416
  }),
417
417
  handler: async (args, swApi) => {
418
418
  try {
@@ -424,7 +424,7 @@ End Sub`;
424
424
  successful: 0,
425
425
  failed: 0,
426
426
  skipped: 0,
427
- details: []
427
+ details: [],
428
428
  };
429
429
  for (let i = 0; i < args.macros.length; i++) {
430
430
  const macro = args.macros[i];
@@ -433,11 +433,10 @@ End Sub`;
433
433
  path: macro.path,
434
434
  status: 'pending',
435
435
  message: '',
436
- startTime: new Date().toISOString()
436
+ startTime: new Date().toISOString(),
437
437
  };
438
438
  try {
439
439
  // Check if file exists
440
- const fs = require('fs');
441
440
  if (!fs.existsSync(macro.path)) {
442
441
  throw new Error('Macro file not found');
443
442
  }
@@ -465,190 +464,198 @@ End Sub`;
465
464
  results.details.push(result);
466
465
  // Delay between macros
467
466
  if (i < args.macros.length - 1) {
468
- await new Promise(resolve => setTimeout(resolve, args.delayBetween));
467
+ await new Promise((resolve) => setTimeout(resolve, args.delayBetween));
469
468
  }
470
469
  }
471
470
  return {
472
471
  success: results.failed === 0,
473
472
  message: `Batch execution completed: ${results.successful}/${results.total} successful`,
474
- results
473
+ results,
475
474
  };
476
475
  }
477
476
  catch (error) {
478
477
  return `Failed to run batch macros: ${error}`;
479
478
  }
480
- }
481
- }
479
+ },
480
+ },
482
481
  ];
483
482
  // Helper function to generate macro templates
484
483
  function generateMacroTemplate(args) {
485
484
  const templates = {
486
- basic: `
487
- ' Macro: ${args.macroName}
488
- ' Description: ${args.description || 'Basic SolidWorks macro'}
489
- ' Created: ${new Date().toISOString()}
490
- ' Generated by SolidWorks MCP Server
491
-
492
- Option Explicit
493
-
494
- ' SolidWorks Variables
495
- Dim swApp As SldWorks.SldWorks
496
- Dim swModel As SldWorks.ModelDoc2
497
- Dim boolStatus As Boolean
498
- Dim longStatus As Long, longWarnings As Long
499
-
500
- Sub main()
501
- ${args.includeErrorHandling ? ' On Error GoTo ErrorHandler' : ''}
502
-
503
- ' Get SolidWorks application
504
- Set swApp = Application.SldWorks
505
-
506
- ' Get active document
507
- Set swModel = swApp.ActiveDoc
508
-
509
- ' Check if document is open
510
- If swModel Is Nothing Then
511
- MsgBox "Please open a document first."
512
- Exit Sub
513
- End If
514
-
515
- ${args.includeComments ? "' Your code here" : ''}
516
-
517
- MsgBox "Macro completed successfully!"
518
-
519
- ${args.includeErrorHandling ? `ErrorHandler:
520
- If Err.Number <> 0 Then
521
- MsgBox "Error " & Err.Number & ": " & Err.Description
522
- End If` : ''}
485
+ basic: `
486
+ ' Macro: ${args.macroName}
487
+ ' Description: ${args.description || 'Basic SolidWorks macro'}
488
+ ' Created: ${new Date().toISOString()}
489
+ ' Generated by SolidWorks MCP Server
490
+
491
+ Option Explicit
492
+
493
+ ' SolidWorks Variables
494
+ Dim swApp As SldWorks.SldWorks
495
+ Dim swModel As SldWorks.ModelDoc2
496
+ Dim boolStatus As Boolean
497
+ Dim longStatus As Long, longWarnings As Long
498
+
499
+ Sub main()
500
+ ${args.includeErrorHandling ? ' On Error GoTo ErrorHandler' : ''}
501
+
502
+ ' Get SolidWorks application
503
+ Set swApp = Application.SldWorks
504
+
505
+ ' Get active document
506
+ Set swModel = swApp.ActiveDoc
507
+
508
+ ' Check if document is open
509
+ If swModel Is Nothing Then
510
+ MsgBox "Please open a document first."
511
+ Exit Sub
512
+ End If
513
+
514
+ ${args.includeComments ? "' Your code here" : ''}
515
+
516
+ MsgBox "Macro completed successfully!"
517
+
518
+ ${args.includeErrorHandling
519
+ ? `ErrorHandler:
520
+ If Err.Number <> 0 Then
521
+ MsgBox "Error " & Err.Number & ": " & Err.Description
522
+ End If`
523
+ : ''}
524
+ End Sub`,
525
+ part: `
526
+ ' Macro: ${args.macroName}
527
+ ' Description: ${args.description || 'Part-specific SolidWorks macro'}
528
+ ' Created: ${new Date().toISOString()}
529
+
530
+ Option Explicit
531
+
532
+ Dim swApp As SldWorks.SldWorks
533
+ Dim swModel As SldWorks.ModelDoc2
534
+ Dim swPart As SldWorks.PartDoc
535
+ Dim swFeature As SldWorks.Feature
536
+ Dim swFeatMgr As SldWorks.FeatureManager
537
+
538
+ Sub main()
539
+ ${args.includeErrorHandling ? ' On Error GoTo ErrorHandler' : ''}
540
+
541
+ Set swApp = Application.SldWorks
542
+ Set swModel = swApp.ActiveDoc
543
+
544
+ ' Verify this is a part document
545
+ If swModel Is Nothing Then
546
+ MsgBox "Please open a part document."
547
+ Exit Sub
548
+ End If
549
+
550
+ If swModel.GetType <> swDocPART Then
551
+ MsgBox "This macro only works with part documents."
552
+ Exit Sub
553
+ End If
554
+
555
+ Set swPart = swModel
556
+ Set swFeatMgr = swModel.FeatureManager
557
+
558
+ ${args.includeComments ? "' Part-specific operations here" : ''}
559
+
560
+ ${args.includeErrorHandling
561
+ ? `ErrorHandler:
562
+ If Err.Number <> 0 Then
563
+ MsgBox "Error " & Err.Number & ": " & Err.Description
564
+ End If`
565
+ : ''}
523
566
  End Sub`,
524
- part: `
525
- ' Macro: ${args.macroName}
526
- ' Description: ${args.description || 'Part-specific SolidWorks macro'}
527
- ' Created: ${new Date().toISOString()}
528
-
529
- Option Explicit
530
-
531
- Dim swApp As SldWorks.SldWorks
532
- Dim swModel As SldWorks.ModelDoc2
533
- Dim swPart As SldWorks.PartDoc
534
- Dim swFeature As SldWorks.Feature
535
- Dim swFeatMgr As SldWorks.FeatureManager
536
-
537
- Sub main()
538
- ${args.includeErrorHandling ? ' On Error GoTo ErrorHandler' : ''}
539
-
540
- Set swApp = Application.SldWorks
541
- Set swModel = swApp.ActiveDoc
542
-
543
- ' Verify this is a part document
544
- If swModel Is Nothing Then
545
- MsgBox "Please open a part document."
546
- Exit Sub
547
- End If
548
-
549
- If swModel.GetType <> swDocPART Then
550
- MsgBox "This macro only works with part documents."
551
- Exit Sub
552
- End If
553
-
554
- Set swPart = swModel
555
- Set swFeatMgr = swModel.FeatureManager
556
-
557
- ${args.includeComments ? "' Part-specific operations here" : ''}
558
-
559
- ${args.includeErrorHandling ? `ErrorHandler:
560
- If Err.Number <> 0 Then
561
- MsgBox "Error " & Err.Number & ": " & Err.Description
562
- End If` : ''}
567
+ assembly: `
568
+ ' Macro: ${args.macroName}
569
+ ' Description: ${args.description || 'Assembly-specific SolidWorks macro'}
570
+ ' Created: ${new Date().toISOString()}
571
+
572
+ Option Explicit
573
+
574
+ Dim swApp As SldWorks.SldWorks
575
+ Dim swModel As SldWorks.ModelDoc2
576
+ Dim swAssembly As SldWorks.AssemblyDoc
577
+ Dim swComp As SldWorks.Component2
578
+
579
+ Sub main()
580
+ ${args.includeErrorHandling ? ' On Error GoTo ErrorHandler' : ''}
581
+
582
+ Set swApp = Application.SldWorks
583
+ Set swModel = swApp.ActiveDoc
584
+
585
+ ' Verify this is an assembly document
586
+ If swModel Is Nothing Then
587
+ MsgBox "Please open an assembly document."
588
+ Exit Sub
589
+ End If
590
+
591
+ If swModel.GetType <> swDocASSEMBLY Then
592
+ MsgBox "This macro only works with assembly documents."
593
+ Exit Sub
594
+ End If
595
+
596
+ Set swAssembly = swModel
597
+
598
+ ${args.includeComments ? "' Assembly-specific operations here" : ''}
599
+
600
+ ${args.includeErrorHandling
601
+ ? `ErrorHandler:
602
+ If Err.Number <> 0 Then
603
+ MsgBox "Error " & Err.Number & ": " & Err.Description
604
+ End If`
605
+ : ''}
563
606
  End Sub`,
564
- assembly: `
565
- ' Macro: ${args.macroName}
566
- ' Description: ${args.description || 'Assembly-specific SolidWorks macro'}
567
- ' Created: ${new Date().toISOString()}
568
-
569
- Option Explicit
570
-
571
- Dim swApp As SldWorks.SldWorks
572
- Dim swModel As SldWorks.ModelDoc2
573
- Dim swAssembly As SldWorks.AssemblyDoc
574
- Dim swComp As SldWorks.Component2
575
-
576
- Sub main()
577
- ${args.includeErrorHandling ? ' On Error GoTo ErrorHandler' : ''}
578
-
579
- Set swApp = Application.SldWorks
580
- Set swModel = swApp.ActiveDoc
581
-
582
- ' Verify this is an assembly document
583
- If swModel Is Nothing Then
584
- MsgBox "Please open an assembly document."
585
- Exit Sub
586
- End If
587
-
588
- If swModel.GetType <> swDocASSEMBLY Then
589
- MsgBox "This macro only works with assembly documents."
590
- Exit Sub
591
- End If
592
-
593
- Set swAssembly = swModel
594
-
595
- ${args.includeComments ? "' Assembly-specific operations here" : ''}
596
-
597
- ${args.includeErrorHandling ? `ErrorHandler:
598
- If Err.Number <> 0 Then
599
- MsgBox "Error " & Err.Number & ": " & Err.Description
600
- End If` : ''}
607
+ drawing: `
608
+ ' Macro: ${args.macroName}
609
+ ' Description: ${args.description || 'Drawing-specific SolidWorks macro'}
610
+ ' Created: ${new Date().toISOString()}
611
+
612
+ Option Explicit
613
+
614
+ Dim swApp As SldWorks.SldWorks
615
+ Dim swModel As SldWorks.ModelDoc2
616
+ Dim swDrawing As SldWorks.DrawingDoc
617
+ Dim swSheet As SldWorks.Sheet
618
+ Dim swView As SldWorks.View
619
+
620
+ Sub main()
621
+ ${args.includeErrorHandling ? ' On Error GoTo ErrorHandler' : ''}
622
+
623
+ Set swApp = Application.SldWorks
624
+ Set swModel = swApp.ActiveDoc
625
+
626
+ ' Verify this is a drawing document
627
+ If swModel Is Nothing Then
628
+ MsgBox "Please open a drawing document."
629
+ Exit Sub
630
+ End If
631
+
632
+ If swModel.GetType <> swDocDRAWING Then
633
+ MsgBox "This macro only works with drawing documents."
634
+ Exit Sub
635
+ End If
636
+
637
+ Set swDrawing = swModel
638
+ Set swSheet = swDrawing.GetCurrentSheet
639
+
640
+ ${args.includeComments ? "' Drawing-specific operations here" : ''}
641
+
642
+ ${args.includeErrorHandling
643
+ ? `ErrorHandler:
644
+ If Err.Number <> 0 Then
645
+ MsgBox "Error " & Err.Number & ": " & Err.Description
646
+ End If`
647
+ : ''}
601
648
  End Sub`,
602
- drawing: `
603
- ' Macro: ${args.macroName}
604
- ' Description: ${args.description || 'Drawing-specific SolidWorks macro'}
605
- ' Created: ${new Date().toISOString()}
606
-
607
- Option Explicit
608
-
609
- Dim swApp As SldWorks.SldWorks
610
- Dim swModel As SldWorks.ModelDoc2
611
- Dim swDrawing As SldWorks.DrawingDoc
612
- Dim swSheet As SldWorks.Sheet
613
- Dim swView As SldWorks.View
614
-
615
- Sub main()
616
- ${args.includeErrorHandling ? ' On Error GoTo ErrorHandler' : ''}
617
-
618
- Set swApp = Application.SldWorks
619
- Set swModel = swApp.ActiveDoc
620
-
621
- ' Verify this is a drawing document
622
- If swModel Is Nothing Then
623
- MsgBox "Please open a drawing document."
624
- Exit Sub
625
- End If
626
-
627
- If swModel.GetType <> swDocDRAWING Then
628
- MsgBox "This macro only works with drawing documents."
629
- Exit Sub
630
- End If
631
-
632
- Set swDrawing = swModel
633
- Set swSheet = swDrawing.GetCurrentSheet
634
-
635
- ${args.includeComments ? "' Drawing-specific operations here" : ''}
636
-
637
- ${args.includeErrorHandling ? `ErrorHandler:
638
- If Err.Number <> 0 Then
639
- MsgBox "Error " & Err.Number & ": " & Err.Description
640
- End If` : ''}
641
- End Sub`
642
649
  };
643
650
  return templates[args.template] || templates.basic;
644
651
  }
645
652
  // Helper function to get SolidWorks type library GUIDs
646
653
  function getSolidWorksTypeLibGuid(libName) {
647
654
  const guids = {
648
- "SldWorks 2024 Type Library": "{83A33D31-27C5-11CE-BFD4-00400513BB57}",
649
- "SldWorks 2024 Constant type library": "{4687F359-55D0-4CD3-B6CF-2EB42C11F989}",
650
- "SldWorks 2024 Commands type library": "{0AC0837E-7365-48E8-9651-A141AAB75963}"
655
+ 'SldWorks 2024 Type Library': '{83A33D31-27C5-11CE-BFD4-00400513BB57}',
656
+ 'SldWorks 2024 Constant type library': '{4687F359-55D0-4CD3-B6CF-2EB42C11F989}',
657
+ 'SldWorks 2024 Commands type library': '{0AC0837E-7365-48E8-9651-A141AAB75963}',
651
658
  };
652
- return guids[libName] || "";
659
+ return guids[libName] || '';
653
660
  }
654
661
  //# sourceMappingURL=native-macro.js.map