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
@@ -17,71 +17,119 @@ export const sketchTools = [
17
17
  plane: z.enum(['Front', 'Top', 'Right', 'Custom']).default('Front').describe('Reference plane for sketch'),
18
18
  offset: z.number().default(0).describe('Offset distance from plane in mm'),
19
19
  reverse: z.boolean().default(false).describe('Reverse offset direction'),
20
- customPlane: z.object({
20
+ customPlane: z
21
+ .object({
21
22
  origin: z.object({
22
23
  x: z.number().describe('X coordinate in mm'),
23
24
  y: z.number().describe('Y coordinate in mm'),
24
- z: z.number().describe('Z coordinate in mm')
25
+ z: z.number().describe('Z coordinate in mm'),
25
26
  }),
26
27
  normal: z.object({
27
28
  x: z.number().describe('X component of normal vector'),
28
29
  y: z.number().describe('Y component of normal vector'),
29
- z: z.number().describe('Z component of normal vector')
30
- })
31
- }).optional().describe('Custom plane definition')
30
+ z: z.number().describe('Z component of normal vector'),
31
+ }),
32
+ })
33
+ .optional()
34
+ .describe('Custom plane definition'),
32
35
  }),
33
36
  handler: (args, swApi) => {
34
37
  try {
35
38
  const model = swApi.getCurrentModel();
36
39
  if (!model)
37
40
  throw new Error('No active model');
38
- // Select the appropriate plane
39
- let planeRef;
41
+ // For now, let's use a simpler approach without SelectByID2
42
+ // SolidWorks will use the Front plane by default if no plane is selected
40
43
  if (args.plane === 'Custom' && args.customPlane) {
41
44
  // Create custom reference plane
42
- const { origin, normal } = args.customPlane;
43
- planeRef = model.FeatureManager.InsertRefPlane(8, // FirstConstraint: parallel to plane
45
+ const { origin: _origin, normal: _normal } = args.customPlane;
46
+ const planeRef = model.FeatureManager.InsertRefPlane(8, // FirstConstraint: parallel to plane
44
47
  0, // FirstConstraintAngle
45
48
  4, // SecondConstraint: distance
46
49
  args.offset / 1000, // SecondConstraintAngle/Distance
47
50
  0, // ThirdConstraint
48
51
  0 // ThirdConstraintAngle
49
52
  );
53
+ if (!planeRef)
54
+ throw new Error('Failed to create custom plane');
50
55
  }
51
56
  else {
52
- // Use standard plane
53
- planeRef = model.FeatureManager.GetPlane(args.plane);
54
- }
55
- if (!planeRef)
56
- throw new Error('Failed to get reference plane');
57
- // Create offset plane if needed
58
- if (args.offset !== 0) {
59
- model.SelectByID2(args.plane + ' Plane', 'PLANE', 0, 0, 0, false, 0, null, 0);
60
- planeRef = model.FeatureManager.InsertRefPlane(8, // Parallel to plane
61
- 0, 4, // Distance
62
- args.offset / 1000, 0, 0);
57
+ // Try to select plane by index
58
+ // 0 = Front, 1 = Top, 2 = Right
59
+ const planeIndex = args.plane === 'Front' ? 0 : args.plane === 'Top' ? 1 : 2;
60
+ try {
61
+ // Get reference geometry
62
+ const refGeom = model.FeatureManager;
63
+ if (refGeom) {
64
+ // Try to get the plane directly
65
+ const planes = ['Front Plane', 'Top Plane', 'Right Plane'];
66
+ const planeName = planes[planeIndex];
67
+ // Use simpler selection approach
68
+ model.ClearSelection2(true);
69
+ // Try selecting by feature name
70
+ let selected = false;
71
+ try {
72
+ const feature = model.FeatureByName(planeName);
73
+ if (feature) {
74
+ feature.Select2(false, 0);
75
+ selected = true;
76
+ }
77
+ }
78
+ catch (_e) {
79
+ // Feature selection failed, continue
80
+ }
81
+ // If feature selection didn't work, just proceed
82
+ // SolidWorks often defaults to Front plane anyway
83
+ if (!selected && args.plane !== 'Front') {
84
+ console.log(`Note: Could not select ${args.plane} plane, using default`);
85
+ }
86
+ }
87
+ }
88
+ catch (_e) {
89
+ // Plane selection failed, but continue anyway
90
+ console.log('Note: Plane selection failed, using default');
91
+ }
92
+ // Create offset plane if needed
93
+ if (args.offset !== 0) {
94
+ const offsetPlane = model.FeatureManager.InsertRefPlane(8, // Parallel to plane
95
+ 0, 4, // Distance
96
+ args.offset / 1000, 0, 0);
97
+ if (!offsetPlane)
98
+ throw new Error('Failed to create offset plane');
99
+ }
63
100
  }
64
- // Insert sketch on plane
101
+ // Insert sketch - this should work even without plane selection
102
+ // as SolidWorks will use the currently selected plane or default to Front
65
103
  model.SketchManager.InsertSketch(true);
66
- const sketchName = model.SketchManager.ActiveSketch?.Name;
104
+ // Try to get the sketch name
105
+ let sketchName = 'Sketch';
106
+ try {
107
+ const activeSketch = model.SketchManager.ActiveSketch;
108
+ if (activeSketch?.Name) {
109
+ sketchName = activeSketch.Name;
110
+ }
111
+ }
112
+ catch (_e) {
113
+ // Could not get sketch name, use default
114
+ }
67
115
  return {
68
116
  success: true,
69
117
  sketchName,
70
118
  plane: args.plane,
71
119
  offset: args.offset,
72
- message: `Sketch created on ${args.plane} plane${args.offset ? ` with ${args.offset}mm offset` : ''}`
120
+ message: `Sketch created on ${args.plane} plane${args.offset ? ` with ${args.offset}mm offset` : ''}`,
73
121
  };
74
122
  }
75
123
  catch (error) {
76
124
  return `Failed to create sketch: ${error}`;
77
125
  }
78
- }
126
+ },
79
127
  },
80
128
  {
81
129
  name: 'edit_sketch',
82
130
  description: 'Enter sketch edit mode for an existing sketch',
83
131
  inputSchema: z.object({
84
- sketchName: z.string().describe('Name of the sketch to edit')
132
+ sketchName: z.string().describe('Name of the sketch to edit'),
85
133
  }),
86
134
  handler: (args, swApi) => {
87
135
  try {
@@ -89,26 +137,26 @@ export const sketchTools = [
89
137
  if (!model)
90
138
  throw new Error('No active model');
91
139
  // Select the sketch
92
- const selected = model.SelectByID2(args.sketchName, 'SKETCH', 0, 0, 0, false, 0, null, 0);
140
+ const selected = model.Extension.SelectByID2(args.sketchName, 'SKETCH', 0, 0, 0, false, 0, undefined, 0);
93
141
  if (!selected)
94
142
  throw new Error('Sketch not found');
95
143
  // Edit sketch
96
144
  model.EditSketch();
97
145
  return {
98
146
  success: true,
99
- message: `Entered edit mode for sketch: ${args.sketchName}`
147
+ message: `Entered edit mode for sketch: ${args.sketchName}`,
100
148
  };
101
149
  }
102
150
  catch (error) {
103
151
  return `Failed to edit sketch: ${error}`;
104
152
  }
105
- }
153
+ },
106
154
  },
107
155
  {
108
156
  name: 'exit_sketch',
109
157
  description: 'Exit sketch edit mode and rebuild',
110
158
  inputSchema: z.object({
111
- rebuild: z.boolean().default(true).describe('Rebuild model after exiting sketch')
159
+ rebuild: z.boolean().default(true).describe('Rebuild model after exiting sketch'),
112
160
  }),
113
161
  handler: (args, swApi) => {
114
162
  try {
@@ -123,13 +171,13 @@ export const sketchTools = [
123
171
  }
124
172
  return {
125
173
  success: true,
126
- message: 'Exited sketch edit mode'
174
+ message: 'Exited sketch edit mode',
127
175
  };
128
176
  }
129
177
  catch (error) {
130
178
  return `Failed to exit sketch: ${error}`;
131
179
  }
132
- }
180
+ },
133
181
  },
134
182
  // ============================================
135
183
  // SKETCH GEOMETRY - LINES
@@ -141,14 +189,14 @@ export const sketchTools = [
141
189
  start: z.object({
142
190
  x: z.number().describe('Start X coordinate in mm'),
143
191
  y: z.number().describe('Start Y coordinate in mm'),
144
- z: z.number().default(0).describe('Start Z coordinate in mm (for 3D sketches)')
192
+ z: z.number().default(0).describe('Start Z coordinate in mm (for 3D sketches)'),
145
193
  }),
146
194
  end: z.object({
147
195
  x: z.number().describe('End X coordinate in mm'),
148
196
  y: z.number().describe('End Y coordinate in mm'),
149
- z: z.number().default(0).describe('End Z coordinate in mm (for 3D sketches)')
197
+ z: z.number().default(0).describe('End Z coordinate in mm (for 3D sketches)'),
150
198
  }),
151
- construction: z.boolean().default(false).describe('Create as construction geometry')
199
+ construction: z.boolean().default(false).describe('Create as construction geometry'),
152
200
  }),
153
201
  handler: (args, swApi) => {
154
202
  try {
@@ -165,15 +213,13 @@ export const sketchTools = [
165
213
  return {
166
214
  success: true,
167
215
  message: `Line created from (${args.start.x}, ${args.start.y}) to (${args.end.x}, ${args.end.y})`,
168
- length: Math.sqrt(Math.pow(args.end.x - args.start.x, 2) +
169
- Math.pow(args.end.y - args.start.y, 2) +
170
- Math.pow(args.end.z - args.start.z, 2))
216
+ length: Math.sqrt((args.end.x - args.start.x) ** 2 + (args.end.y - args.start.y) ** 2 + (args.end.z - args.start.z) ** 2),
171
217
  };
172
218
  }
173
219
  catch (error) {
174
220
  return `Failed to create line: ${error}`;
175
221
  }
176
- }
222
+ },
177
223
  },
178
224
  {
179
225
  name: 'sketch_centerline',
@@ -181,12 +227,12 @@ export const sketchTools = [
181
227
  inputSchema: z.object({
182
228
  start: z.object({
183
229
  x: z.number().describe('Start X coordinate in mm'),
184
- y: z.number().describe('Start Y coordinate in mm')
230
+ y: z.number().describe('Start Y coordinate in mm'),
185
231
  }),
186
232
  end: z.object({
187
233
  x: z.number().describe('End X coordinate in mm'),
188
- y: z.number().describe('End Y coordinate in mm')
189
- })
234
+ y: z.number().describe('End Y coordinate in mm'),
235
+ }),
190
236
  }),
191
237
  handler: (args, swApi) => {
192
238
  try {
@@ -198,13 +244,13 @@ export const sketchTools = [
198
244
  throw new Error('Failed to create centerline');
199
245
  return {
200
246
  success: true,
201
- message: `Centerline created from (${args.start.x}, ${args.start.y}) to (${args.end.x}, ${args.end.y})`
247
+ message: `Centerline created from (${args.start.x}, ${args.start.y}) to (${args.end.x}, ${args.end.y})`,
202
248
  };
203
249
  }
204
250
  catch (error) {
205
251
  return `Failed to create centerline: ${error}`;
206
252
  }
207
- }
253
+ },
208
254
  },
209
255
  // ============================================
210
256
  // SKETCH GEOMETRY - CIRCLES & ARCS
@@ -216,10 +262,10 @@ export const sketchTools = [
216
262
  center: z.object({
217
263
  x: z.number().describe('Center X coordinate in mm'),
218
264
  y: z.number().describe('Center Y coordinate in mm'),
219
- z: z.number().default(0).describe('Center Z coordinate in mm (for 3D sketches)')
265
+ z: z.number().default(0).describe('Center Z coordinate in mm (for 3D sketches)'),
220
266
  }),
221
267
  radius: z.number().positive().describe('Circle radius in mm'),
222
- construction: z.boolean().default(false).describe('Create as construction geometry')
268
+ construction: z.boolean().default(false).describe('Create as construction geometry'),
223
269
  }),
224
270
  handler: (args, swApi) => {
225
271
  try {
@@ -237,13 +283,13 @@ export const sketchTools = [
237
283
  success: true,
238
284
  message: `Circle created at (${args.center.x}, ${args.center.y}) with radius ${args.radius}mm`,
239
285
  area: Math.PI * args.radius * args.radius,
240
- circumference: 2 * Math.PI * args.radius
286
+ circumference: 2 * Math.PI * args.radius,
241
287
  };
242
288
  }
243
289
  catch (error) {
244
290
  return `Failed to create circle: ${error}`;
245
291
  }
246
- }
292
+ },
247
293
  },
248
294
  {
249
295
  name: 'sketch_arc',
@@ -251,18 +297,18 @@ export const sketchTools = [
251
297
  inputSchema: z.object({
252
298
  center: z.object({
253
299
  x: z.number().describe('Center X coordinate in mm'),
254
- y: z.number().describe('Center Y coordinate in mm')
300
+ y: z.number().describe('Center Y coordinate in mm'),
255
301
  }),
256
302
  start: z.object({
257
303
  x: z.number().describe('Start point X coordinate in mm'),
258
- y: z.number().describe('Start point Y coordinate in mm')
304
+ y: z.number().describe('Start point Y coordinate in mm'),
259
305
  }),
260
306
  end: z.object({
261
307
  x: z.number().describe('End point X coordinate in mm'),
262
- y: z.number().describe('End point Y coordinate in mm')
308
+ y: z.number().describe('End point Y coordinate in mm'),
263
309
  }),
264
310
  direction: z.enum(['clockwise', 'counterclockwise']).default('counterclockwise'),
265
- construction: z.boolean().default(false).describe('Create as construction geometry')
311
+ construction: z.boolean().default(false).describe('Create as construction geometry'),
266
312
  }),
267
313
  handler: (args, swApi) => {
268
314
  try {
@@ -278,19 +324,18 @@ export const sketchTools = [
278
324
  arc.ConstructionGeometry = true;
279
325
  }
280
326
  // Calculate arc properties
281
- const radius = Math.sqrt(Math.pow(args.start.x - args.center.x, 2) +
282
- Math.pow(args.start.y - args.center.y, 2));
327
+ const radius = Math.sqrt((args.start.x - args.center.x) ** 2 + (args.start.y - args.center.y) ** 2);
283
328
  return {
284
329
  success: true,
285
330
  message: `Arc created with center at (${args.center.x}, ${args.center.y})`,
286
331
  radius,
287
- direction: args.direction
332
+ direction: args.direction,
288
333
  };
289
334
  }
290
335
  catch (error) {
291
336
  return `Failed to create arc: ${error}`;
292
337
  }
293
- }
338
+ },
294
339
  },
295
340
  // ============================================
296
341
  // SKETCH GEOMETRY - RECTANGLES & POLYGONS
@@ -301,14 +346,14 @@ export const sketchTools = [
301
346
  inputSchema: z.object({
302
347
  corner1: z.object({
303
348
  x: z.number().describe('First corner X coordinate in mm'),
304
- y: z.number().describe('First corner Y coordinate in mm')
349
+ y: z.number().describe('First corner Y coordinate in mm'),
305
350
  }),
306
351
  corner2: z.object({
307
352
  x: z.number().describe('Opposite corner X coordinate in mm'),
308
- y: z.number().describe('Opposite corner Y coordinate in mm')
353
+ y: z.number().describe('Opposite corner Y coordinate in mm'),
309
354
  }),
310
355
  centered: z.boolean().default(false).describe('Create rectangle centered at corner1'),
311
- construction: z.boolean().default(false).describe('Create as construction geometry')
356
+ construction: z.boolean().default(false).describe('Create as construction geometry'),
312
357
  }),
313
358
  handler: (args, swApi) => {
314
359
  try {
@@ -336,7 +381,7 @@ export const sketchTools = [
336
381
  lines.push(model.SketchManager.CreateLine(x1 / 1000, y2 / 1000, 0, x1 / 1000, y1 / 1000, 0));
337
382
  // Set construction if needed
338
383
  if (args.construction) {
339
- lines.forEach(line => {
384
+ lines.forEach((line) => {
340
385
  if (line)
341
386
  line.ConstructionGeometry = true;
342
387
  });
@@ -349,13 +394,13 @@ export const sketchTools = [
349
394
  width,
350
395
  height,
351
396
  area: width * height,
352
- perimeter: 2 * (width + height)
397
+ perimeter: 2 * (width + height),
353
398
  };
354
399
  }
355
400
  catch (error) {
356
401
  return `Failed to create rectangle: ${error}`;
357
402
  }
358
- }
403
+ },
359
404
  },
360
405
  {
361
406
  name: 'sketch_polygon',
@@ -363,13 +408,13 @@ export const sketchTools = [
363
408
  inputSchema: z.object({
364
409
  center: z.object({
365
410
  x: z.number().describe('Center X coordinate in mm'),
366
- y: z.number().describe('Center Y coordinate in mm')
411
+ y: z.number().describe('Center Y coordinate in mm'),
367
412
  }),
368
413
  sides: z.number().int().min(3).max(100).describe('Number of sides'),
369
414
  radius: z.number().positive().describe('Circumscribed circle radius in mm'),
370
415
  rotation: z.number().default(0).describe('Rotation angle in degrees'),
371
416
  inscribed: z.boolean().default(false).describe('Use inscribed circle radius instead'),
372
- construction: z.boolean().default(false).describe('Create as construction geometry')
417
+ construction: z.boolean().default(false).describe('Create as construction geometry'),
373
418
  }),
374
419
  handler: (args, swApi) => {
375
420
  try {
@@ -386,8 +431,8 @@ export const sketchTools = [
386
431
  // Create polygon lines
387
432
  const lines = [];
388
433
  for (let i = 0; i < args.sides; i++) {
389
- const angle1 = startAngle + (i * angleStep);
390
- const angle2 = startAngle + ((i + 1) * angleStep);
434
+ const angle1 = startAngle + i * angleStep;
435
+ const angle2 = startAngle + (i + 1) * angleStep;
391
436
  const x1 = args.center.x + radius * Math.cos(angle1);
392
437
  const y1 = args.center.y + radius * Math.sin(angle1);
393
438
  const x2 = args.center.x + radius * Math.cos(angle2);
@@ -410,13 +455,13 @@ export const sketchTools = [
410
455
  radius,
411
456
  sideLength,
412
457
  area,
413
- perimeter
458
+ perimeter,
414
459
  };
415
460
  }
416
461
  catch (error) {
417
462
  return `Failed to create polygon: ${error}`;
418
463
  }
419
- }
464
+ },
420
465
  },
421
466
  // ============================================
422
467
  // SKETCH GEOMETRY - SPLINES & CURVES
@@ -425,13 +470,16 @@ export const sketchTools = [
425
470
  name: 'sketch_spline',
426
471
  description: 'Draw a spline through points in the active sketch',
427
472
  inputSchema: z.object({
428
- points: z.array(z.object({
473
+ points: z
474
+ .array(z.object({
429
475
  x: z.number().describe('X coordinate in mm'),
430
476
  y: z.number().describe('Y coordinate in mm'),
431
- z: z.number().default(0).describe('Z coordinate in mm (for 3D sketches)')
432
- })).min(2).describe('Array of points for the spline'),
477
+ z: z.number().default(0).describe('Z coordinate in mm (for 3D sketches)'),
478
+ }))
479
+ .min(2)
480
+ .describe('Array of points for the spline'),
433
481
  closed: z.boolean().default(false).describe('Close the spline'),
434
- construction: z.boolean().default(false).describe('Create as construction geometry')
482
+ construction: z.boolean().default(false).describe('Create as construction geometry'),
435
483
  }),
436
484
  handler: (args, swApi) => {
437
485
  try {
@@ -464,13 +512,13 @@ export const sketchTools = [
464
512
  message: `Spline created through ${args.points.length} points`,
465
513
  pointCount: args.points.length,
466
514
  approximateLength: length,
467
- closed: args.closed
515
+ closed: args.closed,
468
516
  };
469
517
  }
470
518
  catch (error) {
471
519
  return `Failed to create spline: ${error}`;
472
520
  }
473
- }
521
+ },
474
522
  },
475
523
  {
476
524
  name: 'sketch_ellipse',
@@ -478,14 +526,14 @@ export const sketchTools = [
478
526
  inputSchema: z.object({
479
527
  center: z.object({
480
528
  x: z.number().describe('Center X coordinate in mm'),
481
- y: z.number().describe('Center Y coordinate in mm')
529
+ y: z.number().describe('Center Y coordinate in mm'),
482
530
  }),
483
531
  majorAxis: z.object({
484
532
  length: z.number().positive().describe('Major axis length in mm'),
485
- angle: z.number().default(0).describe('Major axis angle in degrees')
533
+ angle: z.number().default(0).describe('Major axis angle in degrees'),
486
534
  }),
487
535
  minorAxis: z.number().positive().describe('Minor axis length in mm'),
488
- construction: z.boolean().default(false).describe('Create as construction geometry')
536
+ construction: z.boolean().default(false).describe('Create as construction geometry'),
489
537
  }),
490
538
  handler: (args, swApi) => {
491
539
  try {
@@ -496,8 +544,8 @@ export const sketchTools = [
496
544
  // Calculate major axis endpoints
497
545
  const major1X = args.center.x + (args.majorAxis.length / 2) * Math.cos(angleRad);
498
546
  const major1Y = args.center.y + (args.majorAxis.length / 2) * Math.sin(angleRad);
499
- const major2X = args.center.x - (args.majorAxis.length / 2) * Math.cos(angleRad);
500
- const major2Y = args.center.y - (args.majorAxis.length / 2) * Math.sin(angleRad);
547
+ const _major2X = args.center.x - (args.majorAxis.length / 2) * Math.cos(angleRad);
548
+ const _major2Y = args.center.y - (args.majorAxis.length / 2) * Math.sin(angleRad);
501
549
  // Calculate minor axis point
502
550
  const minorX = args.center.x + (args.minorAxis / 2) * Math.cos(angleRad + Math.PI / 2);
503
551
  const minorY = args.center.y + (args.minorAxis / 2) * Math.sin(angleRad + Math.PI / 2);
@@ -514,7 +562,7 @@ export const sketchTools = [
514
562
  const b = args.minorAxis / 2;
515
563
  const area = Math.PI * a * b;
516
564
  // Approximate perimeter using Ramanujan's formula
517
- const h = Math.pow((a - b), 2) / Math.pow((a + b), 2);
565
+ const h = (a - b) ** 2 / (a + b) ** 2;
518
566
  const perimeter = Math.PI * (a + b) * (1 + (3 * h) / (10 + Math.sqrt(4 - 3 * h)));
519
567
  return {
520
568
  success: true,
@@ -522,13 +570,13 @@ export const sketchTools = [
522
570
  majorAxis: args.majorAxis.length,
523
571
  minorAxis: args.minorAxis,
524
572
  area,
525
- perimeter
573
+ perimeter,
526
574
  };
527
575
  }
528
576
  catch (error) {
529
577
  return `Failed to create ellipse: ${error}`;
530
578
  }
531
- }
579
+ },
532
580
  },
533
581
  // ============================================
534
582
  // SKETCH CONSTRAINTS
@@ -537,14 +585,25 @@ export const sketchTools = [
537
585
  name: 'add_sketch_constraint',
538
586
  description: 'Add constraints between sketch entities',
539
587
  inputSchema: z.object({
540
- type: z.enum([
541
- 'coincident', 'parallel', 'perpendicular', 'tangent',
542
- 'concentric', 'horizontal', 'vertical', 'equal',
543
- 'symmetric', 'colinear', 'midpoint', 'fix'
544
- ]).describe('Type of constraint to add'),
588
+ type: z
589
+ .enum([
590
+ 'coincident',
591
+ 'parallel',
592
+ 'perpendicular',
593
+ 'tangent',
594
+ 'concentric',
595
+ 'horizontal',
596
+ 'vertical',
597
+ 'equal',
598
+ 'symmetric',
599
+ 'colinear',
600
+ 'midpoint',
601
+ 'fix',
602
+ ])
603
+ .describe('Type of constraint to add'),
545
604
  entity1: z.string().describe('First entity selection'),
546
605
  entity2: z.string().optional().describe('Second entity selection (if required)'),
547
- entity3: z.string().optional().describe('Third entity selection (for symmetric constraint)')
606
+ entity3: z.string().optional().describe('Third entity selection (for symmetric constraint)'),
548
607
  }),
549
608
  handler: (args, swApi) => {
550
609
  try {
@@ -553,28 +612,28 @@ export const sketchTools = [
553
612
  throw new Error('No active model');
554
613
  // Map constraint types to SolidWorks constants
555
614
  const constraintMap = {
556
- 'coincident': 0,
557
- 'parallel': 1,
558
- 'perpendicular': 2,
559
- 'tangent': 3,
560
- 'concentric': 4,
561
- 'horizontal': 5,
562
- 'vertical': 6,
563
- 'equal': 7,
564
- 'symmetric': 8,
565
- 'colinear': 9,
566
- 'midpoint': 10,
567
- 'fix': 11
615
+ coincident: 0,
616
+ parallel: 1,
617
+ perpendicular: 2,
618
+ tangent: 3,
619
+ concentric: 4,
620
+ horizontal: 5,
621
+ vertical: 6,
622
+ equal: 7,
623
+ symmetric: 8,
624
+ colinear: 9,
625
+ midpoint: 10,
626
+ fix: 11,
568
627
  };
569
628
  const constraintType = constraintMap[args.type];
570
629
  // Select entities
571
630
  model.ClearSelection2(true);
572
- model.SelectByID2(args.entity1, 'SKETCHSEGMENT', 0, 0, 0, false, 0, null, 0);
631
+ model.Extension.SelectByID2(args.entity1, 'SKETCHSEGMENT', 0, 0, 0, false, 0, undefined, 0);
573
632
  if (args.entity2) {
574
- model.SelectByID2(args.entity2, 'SKETCHSEGMENT', 0, 0, 0, true, 0, null, 0);
633
+ model.Extension.SelectByID2(args.entity2, 'SKETCHSEGMENT', 0, 0, 0, true, 0, undefined, 0);
575
634
  }
576
635
  if (args.entity3) {
577
- model.SelectByID2(args.entity3, 'SKETCHSEGMENT', 0, 0, 0, true, 0, null, 0);
636
+ model.Extension.SelectByID2(args.entity3, 'SKETCHSEGMENT', 0, 0, 0, true, 0, undefined, 0);
578
637
  }
579
638
  // Add constraint
580
639
  const success = model.SketchManager.AddConstraint(constraintType);
@@ -583,13 +642,13 @@ export const sketchTools = [
583
642
  return {
584
643
  success: true,
585
644
  message: `${args.type} constraint added`,
586
- type: args.type
645
+ type: args.type,
587
646
  };
588
647
  }
589
648
  catch (error) {
590
649
  return `Failed to add constraint: ${error}`;
591
650
  }
592
- }
651
+ },
593
652
  },
594
653
  // ============================================
595
654
  // SKETCH DIMENSIONS
@@ -601,10 +660,13 @@ export const sketchTools = [
601
660
  type: z.enum(['linear', 'angular', 'radial', 'diameter']).describe('Type of dimension'),
602
661
  entity: z.string().describe('Entity to dimension'),
603
662
  value: z.number().describe('Dimension value in mm or degrees'),
604
- position: z.object({
663
+ position: z
664
+ .object({
605
665
  x: z.number().describe('Text position X in mm'),
606
- y: z.number().describe('Text position Y in mm')
607
- }).optional().describe('Text position')
666
+ y: z.number().describe('Text position Y in mm'),
667
+ })
668
+ .optional()
669
+ .describe('Text position'),
608
670
  }),
609
671
  handler: (args, swApi) => {
610
672
  try {
@@ -613,7 +675,7 @@ export const sketchTools = [
613
675
  throw new Error('No active model');
614
676
  // Select entity
615
677
  model.ClearSelection2(true);
616
- model.SelectByID2(args.entity, 'SKETCHSEGMENT', 0, 0, 0, false, 0, null, 0);
678
+ model.Extension.SelectByID2(args.entity, 'SKETCHSEGMENT', 0, 0, 0, false, 0, undefined, 0);
617
679
  // Add dimension
618
680
  const textX = args.position?.x || 0;
619
681
  const textY = args.position?.y || 0;
@@ -635,20 +697,21 @@ export const sketchTools = [
635
697
  if (!dimension)
636
698
  throw new Error('Failed to add dimension');
637
699
  // Set dimension value
638
- dimension.SystemValue = args.type === 'angular'
639
- ? (args.value * Math.PI / 180) // Convert degrees to radians
640
- : (args.value / 1000); // Convert mm to meters
700
+ dimension.SystemValue =
701
+ args.type === 'angular'
702
+ ? (args.value * Math.PI) / 180 // Convert degrees to radians
703
+ : args.value / 1000; // Convert mm to meters
641
704
  return {
642
705
  success: true,
643
706
  message: `${args.type} dimension added with value ${args.value}${args.type === 'angular' ? '°' : 'mm'}`,
644
707
  type: args.type,
645
- value: args.value
708
+ value: args.value,
646
709
  };
647
710
  }
648
711
  catch (error) {
649
712
  return `Failed to add dimension: ${error}`;
650
713
  }
651
- }
714
+ },
652
715
  },
653
716
  // ============================================
654
717
  // SKETCH PATTERNS
@@ -662,14 +725,17 @@ export const sketchTools = [
662
725
  x: z.number().describe('Direction vector X'),
663
726
  y: z.number().describe('Direction vector Y'),
664
727
  count: z.number().int().min(2).describe('Number of instances'),
665
- spacing: z.number().positive().describe('Spacing in mm')
728
+ spacing: z.number().positive().describe('Spacing in mm'),
666
729
  }),
667
- direction2: z.object({
730
+ direction2: z
731
+ .object({
668
732
  x: z.number().describe('Direction vector X'),
669
733
  y: z.number().describe('Direction vector Y'),
670
734
  count: z.number().int().min(2).describe('Number of instances'),
671
- spacing: z.number().positive().describe('Spacing in mm')
672
- }).optional().describe('Second direction for 2D pattern')
735
+ spacing: z.number().positive().describe('Spacing in mm'),
736
+ })
737
+ .optional()
738
+ .describe('Second direction for 2D pattern'),
673
739
  }),
674
740
  handler: (args, swApi) => {
675
741
  try {
@@ -679,7 +745,7 @@ export const sketchTools = [
679
745
  // Select entities to pattern
680
746
  model.ClearSelection2(true);
681
747
  args.entities.forEach((entity) => {
682
- model.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0, null, 0);
748
+ model.Extension.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0, undefined, 0);
683
749
  });
684
750
  // Create pattern
685
751
  const totalInstances = args.direction1.count * (args.direction2?.count || 1);
@@ -689,13 +755,13 @@ export const sketchTools = [
689
755
  message: `Linear pattern created with ${totalInstances} instances`,
690
756
  direction1Count: args.direction1.count,
691
757
  direction2Count: args.direction2?.count || 1,
692
- totalInstances
758
+ totalInstances,
693
759
  };
694
760
  }
695
761
  catch (error) {
696
762
  return `Failed to create linear pattern: ${error}`;
697
763
  }
698
- }
764
+ },
699
765
  },
700
766
  {
701
767
  name: 'sketch_circular_pattern',
@@ -704,11 +770,11 @@ export const sketchTools = [
704
770
  entities: z.array(z.string()).describe('Entities to pattern'),
705
771
  center: z.object({
706
772
  x: z.number().describe('Center X coordinate in mm'),
707
- y: z.number().describe('Center Y coordinate in mm')
773
+ y: z.number().describe('Center Y coordinate in mm'),
708
774
  }),
709
775
  count: z.number().int().min(2).describe('Number of instances'),
710
776
  angle: z.number().default(360).describe('Total angle in degrees'),
711
- equalSpacing: z.boolean().default(true).describe('Equal spacing between instances')
777
+ equalSpacing: z.boolean().default(true).describe('Equal spacing between instances'),
712
778
  }),
713
779
  handler: (args, swApi) => {
714
780
  try {
@@ -718,7 +784,7 @@ export const sketchTools = [
718
784
  // Select entities to pattern
719
785
  model.ClearSelection2(true);
720
786
  args.entities.forEach((entity) => {
721
- model.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0, null, 0);
787
+ model.Extension.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0, undefined, 0);
722
788
  });
723
789
  // Calculate angular spacing
724
790
  const angleStep = args.angle / (args.equalSpacing ? args.count : args.count - 1);
@@ -728,13 +794,13 @@ export const sketchTools = [
728
794
  message: `Circular pattern created with ${args.count} instances`,
729
795
  count: args.count,
730
796
  totalAngle: args.angle,
731
- anglePerInstance: angleStep
797
+ anglePerInstance: angleStep,
732
798
  };
733
799
  }
734
800
  catch (error) {
735
801
  return `Failed to create circular pattern: ${error}`;
736
802
  }
737
- }
803
+ },
738
804
  },
739
805
  // ============================================
740
806
  // SKETCH TRANSFORMATIONS
@@ -745,7 +811,7 @@ export const sketchTools = [
745
811
  inputSchema: z.object({
746
812
  entities: z.array(z.string()).describe('Entities to mirror'),
747
813
  mirrorLine: z.string().describe('Mirror line (centerline or construction line)'),
748
- copy: z.boolean().default(true).describe('Keep original entities')
814
+ copy: z.boolean().default(true).describe('Keep original entities'),
749
815
  }),
750
816
  handler: (args, swApi) => {
751
817
  try {
@@ -755,23 +821,23 @@ export const sketchTools = [
755
821
  // Select entities to mirror
756
822
  model.ClearSelection2(true);
757
823
  args.entities.forEach((entity) => {
758
- model.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0, null, 0);
824
+ model.Extension.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0, undefined, 0);
759
825
  });
760
826
  // Select mirror line
761
- model.SelectByID2(args.mirrorLine, 'SKETCHSEGMENT', 0, 0, 0, true, 1, null, 0);
827
+ model.Extension.SelectByID2(args.mirrorLine, 'SKETCHSEGMENT', 0, 0, 0, true, 1, undefined, 0);
762
828
  // Mirror entities
763
829
  model.SketchManager.MirrorSketch();
764
830
  return {
765
831
  success: true,
766
832
  message: `Mirrored ${args.entities.length} entities`,
767
833
  entityCount: args.entities.length,
768
- keepOriginal: args.copy
834
+ keepOriginal: args.copy,
769
835
  };
770
836
  }
771
837
  catch (error) {
772
838
  return `Failed to mirror entities: ${error}`;
773
839
  }
774
- }
840
+ },
775
841
  },
776
842
  {
777
843
  name: 'sketch_offset',
@@ -781,7 +847,7 @@ export const sketchTools = [
781
847
  distance: z.number().describe('Offset distance in mm (positive = outward)'),
782
848
  side: z.enum(['both', 'left', 'right']).default('both').describe('Offset side'),
783
849
  corner: z.enum(['sharp', 'round', 'natural']).default('natural').describe('Corner treatment'),
784
- cap: z.boolean().default(true).describe('Cap ends for open curves')
850
+ cap: z.boolean().default(true).describe('Cap ends for open curves'),
785
851
  }),
786
852
  handler: (args, swApi) => {
787
853
  try {
@@ -791,10 +857,10 @@ export const sketchTools = [
791
857
  // Select entities to offset
792
858
  model.ClearSelection2(true);
793
859
  args.entities.forEach((entity) => {
794
- model.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0, null, 0);
860
+ model.Extension.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0, undefined, 0);
795
861
  });
796
862
  // Create offset
797
- const sideValue = args.side === 'both' ? 0 : (args.side === 'left' ? 1 : 2);
863
+ const sideValue = args.side === 'both' ? 0 : args.side === 'left' ? 1 : 2;
798
864
  model.SketchManager.SketchOffset2(args.distance / 1000, // Convert to meters
799
865
  sideValue, false, // Not chain
800
866
  args.cap);
@@ -803,13 +869,13 @@ export const sketchTools = [
803
869
  message: `Offset created at ${args.distance}mm`,
804
870
  distance: args.distance,
805
871
  side: args.side,
806
- corner: args.corner
872
+ corner: args.corner,
807
873
  };
808
874
  }
809
875
  catch (error) {
810
876
  return `Failed to create offset: ${error}`;
811
877
  }
812
- }
813
- }
878
+ },
879
+ },
814
880
  ];
815
881
  //# sourceMappingURL=sketch.js.map