solidworks-mcp-server 2.0.0

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 (88) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/LICENSE +21 -0
  3. package/README.md +333 -0
  4. package/dist/cache/manager.d.ts +50 -0
  5. package/dist/cache/manager.d.ts.map +1 -0
  6. package/dist/cache/manager.js +127 -0
  7. package/dist/cache/manager.js.map +1 -0
  8. package/dist/db/connection.d.ts +48 -0
  9. package/dist/db/connection.d.ts.map +1 -0
  10. package/dist/db/connection.js +132 -0
  11. package/dist/db/connection.js.map +1 -0
  12. package/dist/index.d.ts +37 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +402 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/knowledge/chromadb.d.ts +16 -0
  17. package/dist/knowledge/chromadb.d.ts.map +1 -0
  18. package/dist/knowledge/chromadb.js +80 -0
  19. package/dist/knowledge/chromadb.js.map +1 -0
  20. package/dist/macro/index.d.ts +6 -0
  21. package/dist/macro/index.d.ts.map +1 -0
  22. package/dist/macro/index.js +6 -0
  23. package/dist/macro/index.js.map +1 -0
  24. package/dist/macro/recorder.d.ts +72 -0
  25. package/dist/macro/recorder.d.ts.map +1 -0
  26. package/dist/macro/recorder.js +228 -0
  27. package/dist/macro/recorder.js.map +1 -0
  28. package/dist/macro/types.d.ts +77 -0
  29. package/dist/macro/types.d.ts.map +1 -0
  30. package/dist/macro/types.js +5 -0
  31. package/dist/macro/types.js.map +1 -0
  32. package/dist/resources/base.d.ts +116 -0
  33. package/dist/resources/base.d.ts.map +1 -0
  34. package/dist/resources/base.js +161 -0
  35. package/dist/resources/base.js.map +1 -0
  36. package/dist/resources/design-table.d.ts +384 -0
  37. package/dist/resources/design-table.d.ts.map +1 -0
  38. package/dist/resources/design-table.js +337 -0
  39. package/dist/resources/design-table.js.map +1 -0
  40. package/dist/resources/pdm.d.ts +1277 -0
  41. package/dist/resources/pdm.d.ts.map +1 -0
  42. package/dist/resources/pdm.js +358 -0
  43. package/dist/resources/pdm.js.map +1 -0
  44. package/dist/resources/registry.d.ts +59 -0
  45. package/dist/resources/registry.d.ts.map +1 -0
  46. package/dist/resources/registry.js +88 -0
  47. package/dist/resources/registry.js.map +1 -0
  48. package/dist/solidworks/api.d.ts +24 -0
  49. package/dist/solidworks/api.d.ts.map +1 -0
  50. package/dist/solidworks/api.js +226 -0
  51. package/dist/solidworks/api.js.map +1 -0
  52. package/dist/solidworks/types.d.ts +55 -0
  53. package/dist/solidworks/types.d.ts.map +1 -0
  54. package/dist/solidworks/types.js +2 -0
  55. package/dist/solidworks/types.js.map +1 -0
  56. package/dist/state/store.d.ts +101 -0
  57. package/dist/state/store.d.ts.map +1 -0
  58. package/dist/state/store.js +262 -0
  59. package/dist/state/store.js.map +1 -0
  60. package/dist/tools/analysis.d.ts +37 -0
  61. package/dist/tools/analysis.d.ts.map +1 -0
  62. package/dist/tools/analysis.js +169 -0
  63. package/dist/tools/analysis.js.map +1 -0
  64. package/dist/tools/drawing.d.ts +151 -0
  65. package/dist/tools/drawing.d.ts.map +1 -0
  66. package/dist/tools/drawing.js +171 -0
  67. package/dist/tools/drawing.js.map +1 -0
  68. package/dist/tools/export.d.ts +97 -0
  69. package/dist/tools/export.d.ts.map +1 -0
  70. package/dist/tools/export.js +128 -0
  71. package/dist/tools/export.js.map +1 -0
  72. package/dist/tools/modeling.d.ts +9 -0
  73. package/dist/tools/modeling.d.ts.map +1 -0
  74. package/dist/tools/modeling.js +120 -0
  75. package/dist/tools/modeling.js.map +1 -0
  76. package/dist/tools/vba.d.ts +123 -0
  77. package/dist/tools/vba.d.ts.map +1 -0
  78. package/dist/tools/vba.js +158 -0
  79. package/dist/tools/vba.js.map +1 -0
  80. package/dist/utils/config.d.ts +18 -0
  81. package/dist/utils/config.d.ts.map +1 -0
  82. package/dist/utils/config.js +26 -0
  83. package/dist/utils/config.js.map +1 -0
  84. package/dist/utils/logger.d.ts +14 -0
  85. package/dist/utils/logger.d.ts.map +1 -0
  86. package/dist/utils/logger.js +84 -0
  87. package/dist/utils/logger.js.map +1 -0
  88. package/package.json +76 -0
@@ -0,0 +1,226 @@
1
+ // @ts-ignore - winax module doesn't have proper TypeScript definitions
2
+ import winax from 'winax';
3
+ const { createActiveXObject } = winax;
4
+ import { logger } from '../utils/logger.js';
5
+ export class SolidWorksAPI {
6
+ swApp;
7
+ currentModel;
8
+ constructor() {
9
+ this.swApp = null;
10
+ this.currentModel = null;
11
+ }
12
+ async connect() {
13
+ try {
14
+ // Create or get running instance of SolidWorks
15
+ this.swApp = createActiveXObject('SldWorks.Application');
16
+ this.swApp.Visible = true;
17
+ logger.info('Connected to SolidWorks');
18
+ }
19
+ catch (error) {
20
+ throw new Error(`Failed to connect to SolidWorks: ${error}`);
21
+ }
22
+ }
23
+ async disconnect() {
24
+ if (this.currentModel) {
25
+ this.currentModel = null;
26
+ }
27
+ if (this.swApp) {
28
+ // Don't close SolidWorks, just disconnect
29
+ this.swApp = null;
30
+ }
31
+ }
32
+ isConnected() {
33
+ return this.swApp !== null;
34
+ }
35
+ // Model operations
36
+ async openModel(filePath) {
37
+ if (!this.swApp)
38
+ throw new Error('Not connected to SolidWorks');
39
+ const errors = { value: 0 };
40
+ const warnings = { value: 0 };
41
+ // Determine file type from extension
42
+ const ext = filePath.toLowerCase().split('.').pop();
43
+ let docType = 1; // swDocPART
44
+ if (ext === 'sldasm')
45
+ docType = 2; // swDocASSEMBLY
46
+ if (ext === 'slddrw')
47
+ docType = 3; // swDocDRAWING
48
+ this.currentModel = this.swApp.OpenDoc6(filePath, docType, 1, // swOpenDocOptions_Silent
49
+ '', errors, warnings);
50
+ if (!this.currentModel) {
51
+ throw new Error(`Failed to open model: ${filePath}`);
52
+ }
53
+ return {
54
+ path: filePath,
55
+ name: this.currentModel.GetTitle(),
56
+ type: ['Part', 'Assembly', 'Drawing'][docType - 1],
57
+ isActive: true,
58
+ };
59
+ }
60
+ async closeModel(save = false) {
61
+ if (!this.currentModel)
62
+ return;
63
+ if (save) {
64
+ this.currentModel.Save3(1, 0, 0); // swSaveAsOptions_Silent
65
+ }
66
+ this.swApp.CloseDoc(this.currentModel.GetTitle());
67
+ this.currentModel = null;
68
+ }
69
+ async createPart() {
70
+ if (!this.swApp)
71
+ throw new Error('Not connected to SolidWorks');
72
+ // Create new part document
73
+ this.currentModel = this.swApp.NewDocument(this.swApp.GetUserPreferenceStringValue(8), // swDefaultTemplatePart
74
+ 0, 0, 0);
75
+ return {
76
+ path: '',
77
+ name: this.currentModel.GetTitle(),
78
+ type: 'Part',
79
+ isActive: true,
80
+ };
81
+ }
82
+ // Macro support methods
83
+ async createSketch(params) {
84
+ if (!this.currentModel)
85
+ throw new Error('No active model');
86
+ const { plane = 'Front' } = params;
87
+ const planeRef = this.currentModel.FeatureManager.GetPlane(plane);
88
+ if (planeRef) {
89
+ this.currentModel.SketchManager.InsertSketch(true);
90
+ const sketchName = this.currentModel.SketchManager.ActiveSketch.Name;
91
+ return { success: true, sketchId: sketchName };
92
+ }
93
+ return { success: false, error: 'Failed to create sketch' };
94
+ }
95
+ async addLine(params) {
96
+ if (!this.currentModel)
97
+ throw new Error('No active model');
98
+ const { x1 = 0, y1 = 0, z1 = 0, x2 = 100, y2 = 0, z2 = 0 } = params;
99
+ const line = this.currentModel.SketchManager.CreateLine(x1 / 1000, y1 / 1000, z1 / 1000, // Convert mm to m
100
+ x2 / 1000, y2 / 1000, z2 / 1000);
101
+ if (line) {
102
+ return { success: true, lineId: `line_${Date.now()}` };
103
+ }
104
+ return { success: false, error: 'Failed to create line' };
105
+ }
106
+ async extrude(params) {
107
+ if (!this.currentModel)
108
+ throw new Error('No active model');
109
+ const { depth = 25, reverse = false, draft = 0 } = params;
110
+ const feature = await this.createExtrude(depth, draft, reverse);
111
+ if (feature) {
112
+ return { success: true, featureId: feature.name };
113
+ }
114
+ return { success: false, error: 'Failed to create extrusion' };
115
+ }
116
+ // Feature operations
117
+ async createExtrude(depth, draft = 0, reverse = false) {
118
+ if (!this.currentModel)
119
+ throw new Error('No model open');
120
+ const feature = this.currentModel.FeatureManager.FeatureExtrusion3(true, // sd
121
+ reverse, // flip
122
+ false, // dir
123
+ 0, // t1
124
+ 0, // t2
125
+ depth / 1000, // convert mm to m
126
+ 0.01, // d2
127
+ false, // dchk1
128
+ false, // dchk2
129
+ false, // dang
130
+ draft * Math.PI / 180, // convert degrees to radians
131
+ 0, // d2ang
132
+ false, // offsetReverse1
133
+ false, // offsetReverse2
134
+ false, // translateSurface1
135
+ false, // translateSurface2
136
+ false, // merge
137
+ true, // useFeatScope
138
+ true // useAutoSelect
139
+ );
140
+ if (!feature) {
141
+ throw new Error('Failed to create extrusion');
142
+ }
143
+ return {
144
+ name: feature.Name,
145
+ type: 'Extrusion',
146
+ suppressed: false,
147
+ };
148
+ }
149
+ // Dimension operations
150
+ async getDimension(name) {
151
+ if (!this.currentModel)
152
+ throw new Error('No model open');
153
+ const dimension = this.currentModel.Parameter(name);
154
+ if (!dimension) {
155
+ throw new Error(`Dimension "${name}" not found`);
156
+ }
157
+ return dimension.SystemValue * 1000; // Convert m to mm
158
+ }
159
+ async setDimension(name, value) {
160
+ if (!this.currentModel)
161
+ throw new Error('No model open');
162
+ const dimension = this.currentModel.Parameter(name);
163
+ if (!dimension) {
164
+ throw new Error(`Dimension "${name}" not found`);
165
+ }
166
+ dimension.SystemValue = value / 1000; // Convert mm to m
167
+ this.currentModel.EditRebuild3();
168
+ }
169
+ // Export operations
170
+ async exportFile(filePath, format) {
171
+ if (!this.currentModel)
172
+ throw new Error('No model open');
173
+ const formatMap = {
174
+ 'step': 0,
175
+ 'iges': 1,
176
+ 'stl': 2,
177
+ 'pdf': 3,
178
+ 'dxf': 4,
179
+ 'dwg': 5,
180
+ };
181
+ const exportFormat = formatMap[format.toLowerCase()];
182
+ if (exportFormat === undefined) {
183
+ throw new Error(`Unsupported export format: ${format}`);
184
+ }
185
+ const success = this.currentModel.SaveAs3(filePath, 0, // version
186
+ 1 // options
187
+ );
188
+ if (!success) {
189
+ throw new Error(`Failed to export to ${format}`);
190
+ }
191
+ }
192
+ // VBA operations
193
+ async runMacro(macroPath, moduleName, procedureName, args = []) {
194
+ if (!this.swApp)
195
+ throw new Error('Not connected to SolidWorks');
196
+ const result = this.swApp.RunMacro2(macroPath, moduleName, procedureName, 1, // swRunMacroOption
197
+ 0 // error
198
+ );
199
+ return result;
200
+ }
201
+ // Mass properties
202
+ async getMassProperties() {
203
+ if (!this.currentModel)
204
+ throw new Error('No model open');
205
+ const massProps = this.currentModel.Extension.CreateMassProperty();
206
+ return {
207
+ mass: massProps.Mass,
208
+ volume: massProps.Volume,
209
+ surfaceArea: massProps.SurfaceArea,
210
+ centerOfMass: {
211
+ x: massProps.CenterOfMass[0],
212
+ y: massProps.CenterOfMass[1],
213
+ z: massProps.CenterOfMass[2],
214
+ },
215
+ };
216
+ }
217
+ // Helper to get current model
218
+ getCurrentModel() {
219
+ return this.currentModel;
220
+ }
221
+ // Helper to get SolidWorks app
222
+ getApp() {
223
+ return this.swApp;
224
+ }
225
+ }
226
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/solidworks/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ export interface SolidWorksModel {
2
+ path: string;
3
+ name: string;
4
+ type: 'Part' | 'Assembly' | 'Drawing';
5
+ isActive: boolean;
6
+ }
7
+ export interface SolidWorksFeature {
8
+ name: string;
9
+ type: string;
10
+ suppressed: boolean;
11
+ }
12
+ export interface SolidWorksDrawing {
13
+ name: string;
14
+ sheets: number;
15
+ scale: number;
16
+ }
17
+ export interface SolidWorksDimension {
18
+ name: string;
19
+ value: number;
20
+ units: string;
21
+ }
22
+ export interface SolidWorksConfiguration {
23
+ name: string;
24
+ isActive: boolean;
25
+ parent?: string;
26
+ }
27
+ export interface MassProperties {
28
+ mass: number;
29
+ volume: number;
30
+ surfaceArea: number;
31
+ centerOfMass: {
32
+ x: number;
33
+ y: number;
34
+ z: number;
35
+ };
36
+ }
37
+ export interface ExportOptions {
38
+ format: 'STEP' | 'IGES' | 'STL' | 'PDF' | 'DXF' | 'DWG';
39
+ version?: string;
40
+ binary?: boolean;
41
+ units?: 'mm' | 'in' | 'm';
42
+ }
43
+ export interface VBAScript {
44
+ name: string;
45
+ description: string;
46
+ code: string;
47
+ parameters?: VBAParameter[];
48
+ }
49
+ export interface VBAParameter {
50
+ name: string;
51
+ type: 'string' | 'number' | 'boolean' | 'array';
52
+ description: string;
53
+ default?: any;
54
+ }
55
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/solidworks/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IACtC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/solidworks/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * State Store for SolidWorks MCP Server
3
+ * Manages resource states and provides persistence
4
+ */
5
+ import { ResourceState, ResourceStatus } from '../resources/base.js';
6
+ export interface StateSnapshot {
7
+ version: string;
8
+ timestamp: string;
9
+ resources: Map<string, ResourceState>;
10
+ metadata: {
11
+ totalResources: number;
12
+ byType: Record<string, number>;
13
+ byStatus: Record<string, number>;
14
+ };
15
+ }
16
+ export declare class ResourceStateStore {
17
+ private resources;
18
+ private stateFilePath;
19
+ private autoSave;
20
+ private saveInterval;
21
+ constructor(stateFilePath?: string, autoSave?: boolean);
22
+ /**
23
+ * Add or update a resource state
24
+ */
25
+ setState(resourceId: string, state: ResourceState): Promise<void>;
26
+ /**
27
+ * Get a resource state by ID
28
+ */
29
+ getState(resourceId: string): ResourceState | undefined;
30
+ /**
31
+ * Get all resource states
32
+ */
33
+ getAllStates(): ResourceState[];
34
+ /**
35
+ * Get states by type
36
+ */
37
+ getStatesByType(type: string): ResourceState[];
38
+ /**
39
+ * Get states by status
40
+ */
41
+ getStatesByStatus(status: ResourceStatus): ResourceState[];
42
+ /**
43
+ * Remove a resource state
44
+ */
45
+ removeState(resourceId: string): Promise<boolean>;
46
+ /**
47
+ * Clear all states
48
+ */
49
+ clear(): Promise<void>;
50
+ /**
51
+ * Save state to file
52
+ */
53
+ save(): Promise<void>;
54
+ /**
55
+ * Load state from file
56
+ */
57
+ load(): Promise<void>;
58
+ /**
59
+ * Create a state snapshot
60
+ */
61
+ createSnapshot(): StateSnapshot;
62
+ /**
63
+ * Start auto-save interval
64
+ */
65
+ private startAutoSave;
66
+ /**
67
+ * Stop auto-save interval
68
+ */
69
+ stopAutoSave(): void;
70
+ /**
71
+ * Get statistics about stored states
72
+ */
73
+ getStatistics(): Record<string, any>;
74
+ /**
75
+ * Get the oldest resource
76
+ */
77
+ private getOldestResource;
78
+ /**
79
+ * Get the newest resource
80
+ */
81
+ private getNewestResource;
82
+ /**
83
+ * Query states with filters
84
+ */
85
+ queryStates(filters: {
86
+ type?: string;
87
+ status?: ResourceStatus;
88
+ tags?: Record<string, string>;
89
+ createdAfter?: string;
90
+ createdBefore?: string;
91
+ }): ResourceState[];
92
+ /**
93
+ * Export states to JSON
94
+ */
95
+ exportToJSON(filePath: string): Promise<void>;
96
+ /**
97
+ * Import states from JSON
98
+ */
99
+ importFromJSON(filePath: string): Promise<void>;
100
+ }
101
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/state/store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKrE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtC,QAAQ,EAAE;QACR,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC;CACH;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,YAAY,CAA+B;gBAEvC,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAc;IAS5D;;OAEG;IACG,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IASvE;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIvD;;OAEG;IACH,YAAY,IAAI,aAAa,EAAE;IAI/B;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE;IAI9C;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,aAAa,EAAE;IAI1D;;OAEG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAavD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC3B;;OAEG;IACH,cAAc,IAAI,aAAa;IAqB/B;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,YAAY,IAAI,IAAI;IAOpB;;OAEG;IACH,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAWpC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,cAAc,CAAC;QACxB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,aAAa,EAAE;IAiCnB;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnD;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBtD"}
@@ -0,0 +1,262 @@
1
+ /**
2
+ * State Store for SolidWorks MCP Server
3
+ * Manages resource states and provides persistence
4
+ */
5
+ import { logger } from '../utils/logger.js';
6
+ import * as fs from 'fs/promises';
7
+ import * as path from 'path';
8
+ export class ResourceStateStore {
9
+ resources = new Map();
10
+ stateFilePath;
11
+ autoSave;
12
+ saveInterval = null;
13
+ constructor(stateFilePath, autoSave = true) {
14
+ this.stateFilePath = stateFilePath || path.join(process.cwd(), '.solidworks-mcp-state.json');
15
+ this.autoSave = autoSave;
16
+ if (this.autoSave) {
17
+ this.startAutoSave();
18
+ }
19
+ }
20
+ /**
21
+ * Add or update a resource state
22
+ */
23
+ async setState(resourceId, state) {
24
+ this.resources.set(resourceId, state);
25
+ logger.debug(`State updated for resource: ${resourceId}`, { type: state.type, status: state.status });
26
+ if (this.autoSave) {
27
+ await this.save();
28
+ }
29
+ }
30
+ /**
31
+ * Get a resource state by ID
32
+ */
33
+ getState(resourceId) {
34
+ return this.resources.get(resourceId);
35
+ }
36
+ /**
37
+ * Get all resource states
38
+ */
39
+ getAllStates() {
40
+ return Array.from(this.resources.values());
41
+ }
42
+ /**
43
+ * Get states by type
44
+ */
45
+ getStatesByType(type) {
46
+ return this.getAllStates().filter(state => state.type === type);
47
+ }
48
+ /**
49
+ * Get states by status
50
+ */
51
+ getStatesByStatus(status) {
52
+ return this.getAllStates().filter(state => state.status === status);
53
+ }
54
+ /**
55
+ * Remove a resource state
56
+ */
57
+ async removeState(resourceId) {
58
+ const deleted = this.resources.delete(resourceId);
59
+ if (deleted) {
60
+ logger.debug(`State removed for resource: ${resourceId}`);
61
+ if (this.autoSave) {
62
+ await this.save();
63
+ }
64
+ }
65
+ return deleted;
66
+ }
67
+ /**
68
+ * Clear all states
69
+ */
70
+ async clear() {
71
+ this.resources.clear();
72
+ logger.info('All resource states cleared');
73
+ if (this.autoSave) {
74
+ await this.save();
75
+ }
76
+ }
77
+ /**
78
+ * Save state to file
79
+ */
80
+ async save() {
81
+ try {
82
+ const snapshot = this.createSnapshot();
83
+ const json = JSON.stringify(snapshot, null, 2);
84
+ await fs.writeFile(this.stateFilePath, json, 'utf-8');
85
+ logger.debug(`State saved to ${this.stateFilePath}`);
86
+ }
87
+ catch (error) {
88
+ logger.error('Failed to save state', error);
89
+ throw error;
90
+ }
91
+ }
92
+ /**
93
+ * Load state from file
94
+ */
95
+ async load() {
96
+ try {
97
+ const data = await fs.readFile(this.stateFilePath, 'utf-8');
98
+ const snapshot = JSON.parse(data);
99
+ this.resources.clear();
100
+ // Convert array back to Map
101
+ if (Array.isArray(snapshot.resources)) {
102
+ for (const state of snapshot.resources) {
103
+ this.resources.set(state.id, state);
104
+ }
105
+ }
106
+ else if (snapshot.resources) {
107
+ // Handle Map serialized as object
108
+ for (const [id, state] of Object.entries(snapshot.resources)) {
109
+ this.resources.set(id, state);
110
+ }
111
+ }
112
+ logger.info(`State loaded from ${this.stateFilePath}`, {
113
+ totalResources: this.resources.size
114
+ });
115
+ }
116
+ catch (error) {
117
+ if (error.code === 'ENOENT') {
118
+ logger.debug('No state file found, starting with empty state');
119
+ }
120
+ else {
121
+ logger.error('Failed to load state', error);
122
+ throw error;
123
+ }
124
+ }
125
+ }
126
+ /**
127
+ * Create a state snapshot
128
+ */
129
+ createSnapshot() {
130
+ const byType = {};
131
+ const byStatus = {};
132
+ for (const state of this.resources.values()) {
133
+ byType[state.type] = (byType[state.type] || 0) + 1;
134
+ byStatus[state.status] = (byStatus[state.status] || 0) + 1;
135
+ }
136
+ return {
137
+ version: '1.0.0',
138
+ timestamp: new Date().toISOString(),
139
+ resources: this.resources,
140
+ metadata: {
141
+ totalResources: this.resources.size,
142
+ byType,
143
+ byStatus
144
+ }
145
+ };
146
+ }
147
+ /**
148
+ * Start auto-save interval
149
+ */
150
+ startAutoSave() {
151
+ // Save every 30 seconds
152
+ this.saveInterval = setInterval(async () => {
153
+ if (this.resources.size > 0) {
154
+ await this.save();
155
+ }
156
+ }, 30000);
157
+ }
158
+ /**
159
+ * Stop auto-save interval
160
+ */
161
+ stopAutoSave() {
162
+ if (this.saveInterval) {
163
+ clearInterval(this.saveInterval);
164
+ this.saveInterval = null;
165
+ }
166
+ }
167
+ /**
168
+ * Get statistics about stored states
169
+ */
170
+ getStatistics() {
171
+ const snapshot = this.createSnapshot();
172
+ return {
173
+ totalResources: snapshot.metadata.totalResources,
174
+ byType: snapshot.metadata.byType,
175
+ byStatus: snapshot.metadata.byStatus,
176
+ oldestResource: this.getOldestResource(),
177
+ newestResource: this.getNewestResource()
178
+ };
179
+ }
180
+ /**
181
+ * Get the oldest resource
182
+ */
183
+ getOldestResource() {
184
+ let oldest;
185
+ for (const state of this.resources.values()) {
186
+ if (!oldest || state.metadata.createdAt < oldest.metadata.createdAt) {
187
+ oldest = state;
188
+ }
189
+ }
190
+ return oldest;
191
+ }
192
+ /**
193
+ * Get the newest resource
194
+ */
195
+ getNewestResource() {
196
+ let newest;
197
+ for (const state of this.resources.values()) {
198
+ if (!newest || state.metadata.createdAt > newest.metadata.createdAt) {
199
+ newest = state;
200
+ }
201
+ }
202
+ return newest;
203
+ }
204
+ /**
205
+ * Query states with filters
206
+ */
207
+ queryStates(filters) {
208
+ let results = this.getAllStates();
209
+ if (filters.type) {
210
+ results = results.filter(s => s.type === filters.type);
211
+ }
212
+ if (filters.status) {
213
+ results = results.filter(s => s.status === filters.status);
214
+ }
215
+ if (filters.tags) {
216
+ results = results.filter(s => {
217
+ for (const [key, value] of Object.entries(filters.tags)) {
218
+ if (s.metadata.tags[key] !== value) {
219
+ return false;
220
+ }
221
+ }
222
+ return true;
223
+ });
224
+ }
225
+ if (filters.createdAfter) {
226
+ results = results.filter(s => s.metadata.createdAt >= filters.createdAfter);
227
+ }
228
+ if (filters.createdBefore) {
229
+ results = results.filter(s => s.metadata.createdAt <= filters.createdBefore);
230
+ }
231
+ return results;
232
+ }
233
+ /**
234
+ * Export states to JSON
235
+ */
236
+ async exportToJSON(filePath) {
237
+ const snapshot = this.createSnapshot();
238
+ const json = JSON.stringify(snapshot, null, 2);
239
+ await fs.writeFile(filePath, json, 'utf-8');
240
+ logger.info(`States exported to ${filePath}`);
241
+ }
242
+ /**
243
+ * Import states from JSON
244
+ */
245
+ async importFromJSON(filePath) {
246
+ const data = await fs.readFile(filePath, 'utf-8');
247
+ const snapshot = JSON.parse(data);
248
+ // Merge with existing states
249
+ if (Array.isArray(snapshot.resources)) {
250
+ for (const state of snapshot.resources) {
251
+ this.resources.set(state.id, state);
252
+ }
253
+ }
254
+ logger.info(`States imported from ${filePath}`, {
255
+ imported: snapshot.resources.length || 0
256
+ });
257
+ if (this.autoSave) {
258
+ await this.save();
259
+ }
260
+ }
261
+ }
262
+ //# sourceMappingURL=store.js.map