solidworks-mcp-server 2.2.0 → 3.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.
- package/README.md +33 -10
- package/dist/application/services/command-bus.d.ts +39 -0
- package/dist/application/services/command-bus.d.ts.map +1 -0
- package/dist/application/services/command-bus.js +88 -0
- package/dist/application/services/command-bus.js.map +1 -0
- package/dist/application/services/event-bus.d.ts +31 -0
- package/dist/application/services/event-bus.d.ts.map +1 -0
- package/dist/application/services/event-bus.js +83 -0
- package/dist/application/services/event-bus.js.map +1 -0
- package/dist/application/services/query-bus.d.ts +30 -0
- package/dist/application/services/query-bus.d.ts.map +1 -0
- package/dist/application/services/query-bus.js +59 -0
- package/dist/application/services/query-bus.js.map +1 -0
- package/dist/application/services/tool-registry.d.ts +53 -0
- package/dist/application/services/tool-registry.d.ts.map +1 -0
- package/dist/application/services/tool-registry.js +81 -0
- package/dist/application/services/tool-registry.js.map +1 -0
- package/dist/application/use-cases/analysis/index.d.ts +13 -0
- package/dist/application/use-cases/analysis/index.d.ts.map +1 -0
- package/dist/application/use-cases/analysis/index.js +17 -0
- package/dist/application/use-cases/analysis/index.js.map +1 -0
- package/dist/application/use-cases/drawing/index.d.ts +13 -0
- package/dist/application/use-cases/drawing/index.d.ts.map +1 -0
- package/dist/application/use-cases/drawing/index.js +17 -0
- package/dist/application/use-cases/drawing/index.js.map +1 -0
- package/dist/application/use-cases/export/index.d.ts +13 -0
- package/dist/application/use-cases/export/index.d.ts.map +1 -0
- package/dist/application/use-cases/export/index.js +17 -0
- package/dist/application/use-cases/export/index.js.map +1 -0
- package/dist/application/use-cases/macro/index.d.ts +13 -0
- package/dist/application/use-cases/macro/index.d.ts.map +1 -0
- package/dist/application/use-cases/macro/index.js +17 -0
- package/dist/application/use-cases/macro/index.js.map +1 -0
- package/dist/application/use-cases/modeling/index.d.ts +56 -0
- package/dist/application/use-cases/modeling/index.d.ts.map +1 -0
- package/dist/application/use-cases/modeling/index.js +385 -0
- package/dist/application/use-cases/modeling/index.js.map +1 -0
- package/dist/core/interfaces/core-abstractions.d.ts +289 -0
- package/dist/core/interfaces/core-abstractions.d.ts.map +1 -0
- package/dist/core/interfaces/core-abstractions.js +121 -0
- package/dist/core/interfaces/core-abstractions.js.map +1 -0
- package/dist/index.refactored.d.ts +7 -0
- package/dist/index.refactored.d.ts.map +1 -0
- package/dist/index.refactored.js +254 -0
- package/dist/index.refactored.js.map +1 -0
- package/dist/infrastructure/config/configuration-manager.d.ts +381 -0
- package/dist/infrastructure/config/configuration-manager.d.ts.map +1 -0
- package/dist/infrastructure/config/configuration-manager.js +566 -0
- package/dist/infrastructure/config/configuration-manager.js.map +1 -0
- package/dist/infrastructure/container/service-locator.d.ts +14 -0
- package/dist/infrastructure/container/service-locator.d.ts.map +1 -0
- package/dist/infrastructure/container/service-locator.js +38 -0
- package/dist/infrastructure/container/service-locator.js.map +1 -0
- package/dist/infrastructure/logging/logger.d.ts +24 -0
- package/dist/infrastructure/logging/logger.d.ts.map +1 -0
- package/dist/infrastructure/logging/logger.js +65 -0
- package/dist/infrastructure/logging/logger.js.map +1 -0
- package/dist/infrastructure/solidworks/solidworks-adapter.d.ts +43 -0
- package/dist/infrastructure/solidworks/solidworks-adapter.d.ts.map +1 -0
- package/dist/infrastructure/solidworks/solidworks-adapter.js +527 -0
- package/dist/infrastructure/solidworks/solidworks-adapter.js.map +1 -0
- package/dist/presentation/mcp/request-handler.d.ts +41 -0
- package/dist/presentation/mcp/request-handler.d.ts.map +1 -0
- package/dist/presentation/mcp/request-handler.js +100 -0
- package/dist/presentation/mcp/request-handler.js.map +1 -0
- package/dist/presentation/transformers/error-transformer.d.ts +16 -0
- package/dist/presentation/transformers/error-transformer.d.ts.map +1 -0
- package/dist/presentation/transformers/error-transformer.js +44 -0
- package/dist/presentation/transformers/error-transformer.js.map +1 -0
- package/dist/presentation/transformers/response-transformer.d.ts +24 -0
- package/dist/presentation/transformers/response-transformer.d.ts.map +1 -0
- package/dist/presentation/transformers/response-transformer.js +102 -0
- package/dist/presentation/transformers/response-transformer.js.map +1 -0
- package/dist/resources/design-table.d.ts +28 -28
- package/dist/resources/pdm.d.ts +70 -70
- package/dist/shared/constants/solidworks-constants.d.ts +302 -0
- package/dist/shared/constants/solidworks-constants.d.ts.map +1 -0
- package/dist/shared/constants/solidworks-constants.js +471 -0
- package/dist/shared/constants/solidworks-constants.js.map +1 -0
- package/dist/tools/diagnostics.d.ts +21 -0
- package/dist/tools/diagnostics.d.ts.map +1 -0
- package/dist/tools/diagnostics.js +120 -0
- package/dist/tools/diagnostics.js.map +1 -0
- package/dist/tools/drawing-analysis.d.ts +9 -0
- package/dist/tools/drawing-analysis.d.ts.map +1 -0
- package/dist/tools/drawing-analysis.js +239 -0
- package/dist/tools/drawing-analysis.js.map +1 -0
- package/dist/tools/drawing.d.ts +4 -4
- package/dist/tools/enhanced-drawing.d.ts +51 -0
- package/dist/tools/enhanced-drawing.d.ts.map +1 -0
- package/dist/tools/enhanced-drawing.js +193 -0
- package/dist/tools/enhanced-drawing.js.map +1 -0
- package/dist/tools/export.d.ts +6 -6
- package/dist/tools/macro-security.d.ts +9 -0
- package/dist/tools/macro-security.d.ts.map +1 -0
- package/dist/tools/macro-security.js +86 -0
- package/dist/tools/macro-security.js.map +1 -0
- package/dist/tools/vba-advanced.d.ts +12 -12
- package/dist/tools/vba-assembly.d.ts +8 -8
- package/dist/tools/vba-drawing.d.ts +14 -14
- package/dist/tools/vba-file-management.d.ts +16 -16
- package/dist/tools/vba-part.d.ts +10 -10
- package/dist/tools/vba.d.ts +67 -67
- package/package.json +12 -7
package/README.md
CHANGED
|
@@ -17,14 +17,27 @@ A comprehensive Model Context Protocol (MCP) server that enables AI assistants t
|
|
|
17
17
|
|
|
18
18
|
## 🎯 Quick Start
|
|
19
19
|
|
|
20
|
+
### Option 1: Install from npm (Recommended)
|
|
20
21
|
```bash
|
|
21
|
-
# Install globally
|
|
22
|
+
# Install globally from npm registry
|
|
22
23
|
npm install -g solidworks-mcp-server
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Option 2: Manual Installation
|
|
27
|
+
```bash
|
|
28
|
+
# Clone the repository
|
|
29
|
+
git clone https://github.com/vespo92/SolidworksMCP-TS
|
|
30
|
+
cd SolidworksMCP-TS
|
|
31
|
+
npm install
|
|
32
|
+
npm run build
|
|
23
33
|
|
|
24
|
-
#
|
|
25
|
-
|
|
34
|
+
# Link globally for use with Claude Desktop
|
|
35
|
+
npm link
|
|
26
36
|
```
|
|
27
37
|
|
|
38
|
+
### Configure Claude Desktop
|
|
39
|
+
After installation, add to your Claude Desktop config and restart Claude Desktop.
|
|
40
|
+
|
|
28
41
|
Then in Claude Desktop:
|
|
29
42
|
```
|
|
30
43
|
"Generate VBA to batch export all parts in my folder to STEP format"
|
|
@@ -44,6 +57,7 @@ Then in Claude Desktop:
|
|
|
44
57
|
- **Resource-Based Architecture** - Modular, extensible design pattern
|
|
45
58
|
|
|
46
59
|
### New in v2.1.0 - Comprehensive VBA Generation Suite
|
|
60
|
+
⚠️ **IMPORTANT: VBA script generation features are NOT WORKING in the current iteration and require additional testing**
|
|
47
61
|
- 🔧 **Part Modeling VBA** - Advanced features, patterns, sheet metal, surfaces
|
|
48
62
|
- 🏗️ **Assembly Automation** - Mates, components, interference analysis
|
|
49
63
|
- 📐 **Drawing Generation** - Views, dimensions, annotations, tables
|
|
@@ -70,12 +84,22 @@ Then in Claude Desktop:
|
|
|
70
84
|
|
|
71
85
|
## 🛠️ Installation
|
|
72
86
|
|
|
73
|
-
### 1. Install
|
|
87
|
+
### 1. Install the MCP Server
|
|
74
88
|
|
|
89
|
+
#### From npm Registry (Recommended):
|
|
75
90
|
```bash
|
|
76
91
|
npm install -g solidworks-mcp-server
|
|
77
92
|
```
|
|
78
93
|
|
|
94
|
+
#### Or Manual Installation:
|
|
95
|
+
```bash
|
|
96
|
+
git clone https://github.com/vespo92/SolidworksMCP-TS
|
|
97
|
+
cd SolidworksMCP-TS
|
|
98
|
+
npm install
|
|
99
|
+
npm run build
|
|
100
|
+
npm link # Makes it available globally
|
|
101
|
+
```
|
|
102
|
+
|
|
79
103
|
### 2. Configure Claude Desktop
|
|
80
104
|
|
|
81
105
|
Add to your Claude Desktop configuration:
|
|
@@ -195,7 +219,7 @@ LOG_LEVEL=info
|
|
|
195
219
|
### Macro Tools
|
|
196
220
|
- `macro_start_recording` - Begin recording operations
|
|
197
221
|
- `macro_stop_recording` - End recording and save
|
|
198
|
-
- `macro_export_vba` - Export macro to VBA code
|
|
222
|
+
- `macro_export_vba` - Export macro to VBA code ⚠️ **NOT WORKING - Requires additional testing**
|
|
199
223
|
- `macro_execute` - Run recorded macro
|
|
200
224
|
|
|
201
225
|
### Design Table Tools
|
|
@@ -223,7 +247,7 @@ All original tools remain available:
|
|
|
223
247
|
- Modeling tools (create, modify, analyze)
|
|
224
248
|
- Drawing tools (views, dimensions, annotations)
|
|
225
249
|
- Export tools (STEP, IGES, STL, PDF, etc.)
|
|
226
|
-
- VBA tools
|
|
250
|
+
- VBA tools ⚠️ **NOTE: VBA script generation is NOT WORKING in the current iteration and requires additional testing**
|
|
227
251
|
- Analysis tools (mass properties, interference)
|
|
228
252
|
|
|
229
253
|
## 📚 API Reference
|
|
@@ -275,7 +299,7 @@ All original tools remain available:
|
|
|
275
299
|
### Building from Source
|
|
276
300
|
|
|
277
301
|
```bash
|
|
278
|
-
git clone https://github.com/
|
|
302
|
+
git clone https://github.com/vespo92/SolidworksMCP-TS
|
|
279
303
|
cd solidworks-mcp-server
|
|
280
304
|
npm install
|
|
281
305
|
npm run build
|
|
@@ -373,9 +397,8 @@ We welcome contributions! Please see CONTRIBUTING.md for guidelines.
|
|
|
373
397
|
|
|
374
398
|
## 📞 Support
|
|
375
399
|
|
|
376
|
-
- Issues: [GitHub Issues](https://github.com/
|
|
377
|
-
- Discussions: [GitHub Discussions](https://github.com/
|
|
378
|
-
- Email: support@solidworksmcp.dev
|
|
400
|
+
- Issues: [GitHub Issues](https://github.com/vespo92/SolidworksMCP-TS/issues)
|
|
401
|
+
- Discussions: [GitHub Discussions](https://github.com/vespo92/SolidworksMCP-TS/discussions)
|
|
379
402
|
|
|
380
403
|
## 🚀 Roadmap
|
|
381
404
|
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command Bus Implementation
|
|
3
|
+
* Handles command execution with middleware support
|
|
4
|
+
*/
|
|
5
|
+
import { Result, ILogger, IMiddleware } from '../../core/interfaces/core-abstractions.js';
|
|
6
|
+
export interface CommandHandler<TParams = unknown, TResult = unknown> {
|
|
7
|
+
handle(params: TParams): Promise<Result<TResult>>;
|
|
8
|
+
}
|
|
9
|
+
export declare class CommandBus {
|
|
10
|
+
private logger;
|
|
11
|
+
private handlers;
|
|
12
|
+
private middleware;
|
|
13
|
+
constructor(logger: ILogger);
|
|
14
|
+
/**
|
|
15
|
+
* Register a command handler
|
|
16
|
+
*/
|
|
17
|
+
register<TParams, TResult>(commandName: string, handler: CommandHandler<TParams, TResult>): void;
|
|
18
|
+
/**
|
|
19
|
+
* Execute a command
|
|
20
|
+
*/
|
|
21
|
+
execute<TParams, TResult>(commandName: string, params: TParams): Promise<Result<TResult>>;
|
|
22
|
+
/**
|
|
23
|
+
* Add middleware
|
|
24
|
+
*/
|
|
25
|
+
use(middleware: IMiddleware): void;
|
|
26
|
+
/**
|
|
27
|
+
* Apply middleware chain
|
|
28
|
+
*/
|
|
29
|
+
private applyMiddleware;
|
|
30
|
+
/**
|
|
31
|
+
* Check if a handler is registered
|
|
32
|
+
*/
|
|
33
|
+
hasHandler(commandName: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Clear all handlers
|
|
36
|
+
*/
|
|
37
|
+
clear(): void;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=command-bus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-bus.d.ts","sourceRoot":"","sources":["../../../src/application/services/command-bus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,MAAM,EAEN,OAAO,EACP,WAAW,EACZ,MAAM,4CAA4C,CAAC;AAEpD,MAAM,WAAW,cAAc,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IAClE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;CACnD;AAED,qBAAa,UAAU;IAIT,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,UAAU,CAAqB;gBAEnB,MAAM,EAAE,OAAO;IAEnC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,GACxC,IAAI;IAQP;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,OAAO,EAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAiC3B;;OAEG;IACH,GAAG,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI;IAIlC;;OAEG;YACW,eAAe;IAe7B;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command Bus Implementation
|
|
3
|
+
* Handles command execution with middleware support
|
|
4
|
+
*/
|
|
5
|
+
import { ResultUtil } from '../../core/interfaces/core-abstractions.js';
|
|
6
|
+
export class CommandBus {
|
|
7
|
+
logger;
|
|
8
|
+
handlers = new Map();
|
|
9
|
+
middleware = [];
|
|
10
|
+
constructor(logger) {
|
|
11
|
+
this.logger = logger;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Register a command handler
|
|
15
|
+
*/
|
|
16
|
+
register(commandName, handler) {
|
|
17
|
+
if (this.handlers.has(commandName)) {
|
|
18
|
+
this.logger.warn(`Command handler ${commandName} is already registered`);
|
|
19
|
+
}
|
|
20
|
+
this.handlers.set(commandName, handler);
|
|
21
|
+
this.logger.debug(`Registered command handler: ${commandName}`);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Execute a command
|
|
25
|
+
*/
|
|
26
|
+
async execute(commandName, params) {
|
|
27
|
+
try {
|
|
28
|
+
const handler = this.handlers.get(commandName);
|
|
29
|
+
if (!handler) {
|
|
30
|
+
return ResultUtil.fail(new Error(`No handler registered for command: ${commandName}`));
|
|
31
|
+
}
|
|
32
|
+
// Apply middleware
|
|
33
|
+
const context = { commandName, params, handler };
|
|
34
|
+
const middlewareResult = await this.applyMiddleware(context);
|
|
35
|
+
if (!ResultUtil.isSuccess(middlewareResult)) {
|
|
36
|
+
return middlewareResult;
|
|
37
|
+
}
|
|
38
|
+
// Execute the command
|
|
39
|
+
this.logger.debug(`Executing command: ${commandName}`, { params });
|
|
40
|
+
const result = await handler.handle(params);
|
|
41
|
+
if (ResultUtil.isSuccess(result)) {
|
|
42
|
+
this.logger.debug(`Command executed successfully: ${commandName}`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.logger.warn(`Command failed: ${commandName}`, { error: result.error });
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
this.logger.error(`Unexpected error executing command: ${commandName}`, error);
|
|
51
|
+
return ResultUtil.fail(error);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Add middleware
|
|
56
|
+
*/
|
|
57
|
+
use(middleware) {
|
|
58
|
+
this.middleware.push(middleware);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Apply middleware chain
|
|
62
|
+
*/
|
|
63
|
+
async applyMiddleware(context) {
|
|
64
|
+
let index = 0;
|
|
65
|
+
const next = async () => {
|
|
66
|
+
if (index >= this.middleware.length) {
|
|
67
|
+
return ResultUtil.ok(undefined);
|
|
68
|
+
}
|
|
69
|
+
const currentMiddleware = this.middleware[index++];
|
|
70
|
+
return currentMiddleware.execute(context, next);
|
|
71
|
+
};
|
|
72
|
+
return next();
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Check if a handler is registered
|
|
76
|
+
*/
|
|
77
|
+
hasHandler(commandName) {
|
|
78
|
+
return this.handlers.has(commandName);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Clear all handlers
|
|
82
|
+
*/
|
|
83
|
+
clear() {
|
|
84
|
+
this.handlers.clear();
|
|
85
|
+
this.middleware = [];
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=command-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-bus.js","sourceRoot":"","sources":["../../../src/application/services/command-bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Bus Implementation
|
|
3
|
+
* Handles event publishing and subscription
|
|
4
|
+
*/
|
|
5
|
+
import { IEventBus, IEvent, IEventHandler, Result, ILogger } from '../../core/interfaces/core-abstractions.js';
|
|
6
|
+
export declare class EventBus implements IEventBus {
|
|
7
|
+
private logger;
|
|
8
|
+
private handlers;
|
|
9
|
+
constructor(logger: ILogger);
|
|
10
|
+
/**
|
|
11
|
+
* Publish an event to all registered handlers
|
|
12
|
+
*/
|
|
13
|
+
publish(event: IEvent): Promise<Result<void>>;
|
|
14
|
+
/**
|
|
15
|
+
* Subscribe to an event type
|
|
16
|
+
*/
|
|
17
|
+
subscribe(eventType: string, handler: IEventHandler): void;
|
|
18
|
+
/**
|
|
19
|
+
* Unsubscribe from an event type
|
|
20
|
+
*/
|
|
21
|
+
unsubscribe(eventType: string, handler: IEventHandler): void;
|
|
22
|
+
/**
|
|
23
|
+
* Clear all subscriptions
|
|
24
|
+
*/
|
|
25
|
+
clear(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Get the number of handlers for an event type
|
|
28
|
+
*/
|
|
29
|
+
getHandlerCount(eventType: string): number;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=event-bus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../../src/application/services/event-bus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,SAAS,EACT,MAAM,EACN,aAAa,EACb,MAAM,EAEN,OAAO,EACR,MAAM,4CAA4C,CAAC;AAEpD,qBAAa,QAAS,YAAW,SAAS;IAG5B,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,QAAQ,CAA8C;gBAE1C,MAAM,EAAE,OAAO;IAEnC;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAuCnD;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAQ1D;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAW5D;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAI3C"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Bus Implementation
|
|
3
|
+
* Handles event publishing and subscription
|
|
4
|
+
*/
|
|
5
|
+
import { ResultUtil } from '../../core/interfaces/core-abstractions.js';
|
|
6
|
+
export class EventBus {
|
|
7
|
+
logger;
|
|
8
|
+
handlers = new Map();
|
|
9
|
+
constructor(logger) {
|
|
10
|
+
this.logger = logger;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Publish an event to all registered handlers
|
|
14
|
+
*/
|
|
15
|
+
async publish(event) {
|
|
16
|
+
try {
|
|
17
|
+
const handlers = this.handlers.get(event.type);
|
|
18
|
+
if (!handlers || handlers.size === 0) {
|
|
19
|
+
this.logger.debug(`No handlers for event type: ${event.type}`);
|
|
20
|
+
return ResultUtil.ok(undefined);
|
|
21
|
+
}
|
|
22
|
+
this.logger.debug(`Publishing event: ${event.type}`, {
|
|
23
|
+
eventId: event.id,
|
|
24
|
+
handlerCount: handlers.size
|
|
25
|
+
});
|
|
26
|
+
const promises = [];
|
|
27
|
+
for (const handler of handlers) {
|
|
28
|
+
if (handler.canHandle(event)) {
|
|
29
|
+
promises.push(handler.handle(event));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const results = await Promise.allSettled(promises);
|
|
33
|
+
const failures = results.filter((result) => result.status === 'rejected');
|
|
34
|
+
if (failures.length > 0) {
|
|
35
|
+
this.logger.warn(`Some event handlers failed for: ${event.type}`, {
|
|
36
|
+
failures: failures.map(f => f.reason)
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return ResultUtil.ok(undefined);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
this.logger.error(`Failed to publish event: ${event.type}`, error);
|
|
43
|
+
return ResultUtil.fail(error);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Subscribe to an event type
|
|
48
|
+
*/
|
|
49
|
+
subscribe(eventType, handler) {
|
|
50
|
+
if (!this.handlers.has(eventType)) {
|
|
51
|
+
this.handlers.set(eventType, new Set());
|
|
52
|
+
}
|
|
53
|
+
this.handlers.get(eventType).add(handler);
|
|
54
|
+
this.logger.debug(`Subscribed to event: ${eventType}`);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Unsubscribe from an event type
|
|
58
|
+
*/
|
|
59
|
+
unsubscribe(eventType, handler) {
|
|
60
|
+
const handlers = this.handlers.get(eventType);
|
|
61
|
+
if (handlers) {
|
|
62
|
+
handlers.delete(handler);
|
|
63
|
+
if (handlers.size === 0) {
|
|
64
|
+
this.handlers.delete(eventType);
|
|
65
|
+
}
|
|
66
|
+
this.logger.debug(`Unsubscribed from event: ${eventType}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Clear all subscriptions
|
|
71
|
+
*/
|
|
72
|
+
clear() {
|
|
73
|
+
this.handlers.clear();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get the number of handlers for an event type
|
|
77
|
+
*/
|
|
78
|
+
getHandlerCount(eventType) {
|
|
79
|
+
const handlers = this.handlers.get(eventType);
|
|
80
|
+
return handlers ? handlers.size : 0;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=event-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../../src/application/services/event-bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query Bus Implementation
|
|
3
|
+
* Handles query execution for read operations
|
|
4
|
+
*/
|
|
5
|
+
import { Result, ILogger } from '../../core/interfaces/core-abstractions.js';
|
|
6
|
+
export interface QueryHandler<TParams = unknown, TResult = unknown> {
|
|
7
|
+
handle(params: TParams): Promise<Result<TResult>>;
|
|
8
|
+
}
|
|
9
|
+
export declare class QueryBus {
|
|
10
|
+
private logger;
|
|
11
|
+
private handlers;
|
|
12
|
+
constructor(logger: ILogger);
|
|
13
|
+
/**
|
|
14
|
+
* Register a query handler
|
|
15
|
+
*/
|
|
16
|
+
register<TParams, TResult>(queryName: string, handler: QueryHandler<TParams, TResult>): void;
|
|
17
|
+
/**
|
|
18
|
+
* Execute a query
|
|
19
|
+
*/
|
|
20
|
+
execute<TParams, TResult>(queryName: string, params: TParams): Promise<Result<TResult>>;
|
|
21
|
+
/**
|
|
22
|
+
* Check if a handler is registered
|
|
23
|
+
*/
|
|
24
|
+
hasHandler(queryName: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Clear all handlers
|
|
27
|
+
*/
|
|
28
|
+
clear(): void;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=query-bus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-bus.d.ts","sourceRoot":"","sources":["../../../src/application/services/query-bus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,MAAM,EAEN,OAAO,EACR,MAAM,4CAA4C,CAAC;AAEpD,MAAM,WAAW,YAAY,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IAChE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;CACnD;AAED,qBAAa,QAAQ;IAGP,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,QAAQ,CAAwC;gBAEpC,MAAM,EAAE,OAAO;IAEnC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,GACtC,IAAI;IAQP;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,OAAO,EAC5B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAyB3B;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query Bus Implementation
|
|
3
|
+
* Handles query execution for read operations
|
|
4
|
+
*/
|
|
5
|
+
import { ResultUtil } from '../../core/interfaces/core-abstractions.js';
|
|
6
|
+
export class QueryBus {
|
|
7
|
+
logger;
|
|
8
|
+
handlers = new Map();
|
|
9
|
+
constructor(logger) {
|
|
10
|
+
this.logger = logger;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Register a query handler
|
|
14
|
+
*/
|
|
15
|
+
register(queryName, handler) {
|
|
16
|
+
if (this.handlers.has(queryName)) {
|
|
17
|
+
this.logger.warn(`Query handler ${queryName} is already registered`);
|
|
18
|
+
}
|
|
19
|
+
this.handlers.set(queryName, handler);
|
|
20
|
+
this.logger.debug(`Registered query handler: ${queryName}`);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Execute a query
|
|
24
|
+
*/
|
|
25
|
+
async execute(queryName, params) {
|
|
26
|
+
try {
|
|
27
|
+
const handler = this.handlers.get(queryName);
|
|
28
|
+
if (!handler) {
|
|
29
|
+
return ResultUtil.fail(new Error(`No handler registered for query: ${queryName}`));
|
|
30
|
+
}
|
|
31
|
+
this.logger.debug(`Executing query: ${queryName}`, { params });
|
|
32
|
+
const result = await handler.handle(params);
|
|
33
|
+
if (ResultUtil.isSuccess(result)) {
|
|
34
|
+
this.logger.debug(`Query executed successfully: ${queryName}`);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
this.logger.warn(`Query failed: ${queryName}`, { error: result.error });
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
this.logger.error(`Unexpected error executing query: ${queryName}`, error);
|
|
43
|
+
return ResultUtil.fail(error);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if a handler is registered
|
|
48
|
+
*/
|
|
49
|
+
hasHandler(queryName) {
|
|
50
|
+
return this.handlers.has(queryName);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Clear all handlers
|
|
54
|
+
*/
|
|
55
|
+
clear() {
|
|
56
|
+
this.handlers.clear();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=query-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-bus.js","sourceRoot":"","sources":["../../../src/application/services/query-bus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAGL,UAAU,EAEX,MAAM,4CAA4C,CAAC;AAMpD,MAAM,OAAO,QAAQ;IAGC;IAFZ,QAAQ,GAA8B,IAAI,GAAG,EAAE,CAAC;IAExD,YAAoB,MAAe;QAAf,WAAM,GAAN,MAAM,CAAS;IAAG,CAAC;IAEvC;;OAEG;IACH,QAAQ,CACN,SAAiB,EACjB,OAAuC;QAEvC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,SAAS,wBAAwB,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,SAAiB,EACjB,MAAe;QAEf,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,UAAU,CAAC,IAAI,CACpB,IAAI,KAAK,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAC3D,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAE5C,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,SAAS,EAAE,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1E,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,SAAS,EAAE,EAAE,KAAc,CAAC,CAAC;YACpF,OAAO,UAAU,CAAC,IAAI,CAAC,KAAc,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Registry Service
|
|
3
|
+
* Manages and provides access to all available tools
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { ILogger } from '../../core/interfaces/core-abstractions.js';
|
|
7
|
+
export interface Tool {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
inputSchema: z.ZodSchema;
|
|
11
|
+
handler: (args: any) => Promise<any> | any;
|
|
12
|
+
category?: string;
|
|
13
|
+
tags?: string[];
|
|
14
|
+
}
|
|
15
|
+
export declare class ToolRegistry {
|
|
16
|
+
private logger;
|
|
17
|
+
private tools;
|
|
18
|
+
private categories;
|
|
19
|
+
constructor(logger: ILogger);
|
|
20
|
+
/**
|
|
21
|
+
* Register a new tool
|
|
22
|
+
*/
|
|
23
|
+
register(tool: Tool): void;
|
|
24
|
+
/**
|
|
25
|
+
* Get a tool by name
|
|
26
|
+
*/
|
|
27
|
+
get(name: string): Tool | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Get all tools
|
|
30
|
+
*/
|
|
31
|
+
getAll(): Tool[];
|
|
32
|
+
/**
|
|
33
|
+
* Get tools by category
|
|
34
|
+
*/
|
|
35
|
+
getByCategory(category: string): Tool[];
|
|
36
|
+
/**
|
|
37
|
+
* Check if a tool exists
|
|
38
|
+
*/
|
|
39
|
+
has(name: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Get the number of registered tools
|
|
42
|
+
*/
|
|
43
|
+
count(): number;
|
|
44
|
+
/**
|
|
45
|
+
* Get all categories
|
|
46
|
+
*/
|
|
47
|
+
getCategories(): string[];
|
|
48
|
+
/**
|
|
49
|
+
* Clear all tools
|
|
50
|
+
*/
|
|
51
|
+
clear(): void;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=tool-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../../src/application/services/tool-registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,4CAA4C,CAAC;AAErE,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC;IACzB,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,qBAAa,YAAY;IAIX,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,UAAU,CAAuC;gBAErC,MAAM,EAAE,OAAO;IAEnC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAqB1B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAInC;;OAEG;IACH,MAAM,IAAI,IAAI,EAAE;IAIhB;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE;IASvC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,KAAK,IAAI,MAAM;IAIf;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAIzB;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Registry Service
|
|
3
|
+
* Manages and provides access to all available tools
|
|
4
|
+
*/
|
|
5
|
+
export class ToolRegistry {
|
|
6
|
+
logger;
|
|
7
|
+
tools = new Map();
|
|
8
|
+
categories = new Map();
|
|
9
|
+
constructor(logger) {
|
|
10
|
+
this.logger = logger;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Register a new tool
|
|
14
|
+
*/
|
|
15
|
+
register(tool) {
|
|
16
|
+
if (this.tools.has(tool.name)) {
|
|
17
|
+
this.logger.warn(`Tool ${tool.name} is already registered, overwriting`);
|
|
18
|
+
}
|
|
19
|
+
this.tools.set(tool.name, tool);
|
|
20
|
+
// Add to category index
|
|
21
|
+
if (tool.category) {
|
|
22
|
+
if (!this.categories.has(tool.category)) {
|
|
23
|
+
this.categories.set(tool.category, new Set());
|
|
24
|
+
}
|
|
25
|
+
this.categories.get(tool.category).add(tool.name);
|
|
26
|
+
}
|
|
27
|
+
this.logger.debug(`Registered tool: ${tool.name}`, {
|
|
28
|
+
category: tool.category,
|
|
29
|
+
tags: tool.tags
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get a tool by name
|
|
34
|
+
*/
|
|
35
|
+
get(name) {
|
|
36
|
+
return this.tools.get(name);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get all tools
|
|
40
|
+
*/
|
|
41
|
+
getAll() {
|
|
42
|
+
return Array.from(this.tools.values());
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get tools by category
|
|
46
|
+
*/
|
|
47
|
+
getByCategory(category) {
|
|
48
|
+
const toolNames = this.categories.get(category);
|
|
49
|
+
if (!toolNames)
|
|
50
|
+
return [];
|
|
51
|
+
return Array.from(toolNames)
|
|
52
|
+
.map(name => this.tools.get(name))
|
|
53
|
+
.filter((tool) => tool !== undefined);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Check if a tool exists
|
|
57
|
+
*/
|
|
58
|
+
has(name) {
|
|
59
|
+
return this.tools.has(name);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get the number of registered tools
|
|
63
|
+
*/
|
|
64
|
+
count() {
|
|
65
|
+
return this.tools.size;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get all categories
|
|
69
|
+
*/
|
|
70
|
+
getCategories() {
|
|
71
|
+
return Array.from(this.categories.keys());
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Clear all tools
|
|
75
|
+
*/
|
|
76
|
+
clear() {
|
|
77
|
+
this.tools.clear();
|
|
78
|
+
this.categories.clear();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=tool-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../../src/application/services/tool-registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,MAAM,OAAO,YAAY;IAIH;IAHZ,KAAK,GAAsB,IAAI,GAAG,EAAE,CAAC;IACrC,UAAU,GAA6B,IAAI,GAAG,EAAE,CAAC;IAEzD,YAAoB,MAAe;QAAf,WAAM,GAAN,MAAM,CAAS;IAAG,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,IAAU;QACjB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,qCAAqC,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAEhC,wBAAwB;QACxB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,IAAI,EAAE,EAAE;YACjD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAgB;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAE1B,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;aACzB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACjC,MAAM,CAAC,CAAC,IAAI,EAAgB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analysis Use Cases
|
|
3
|
+
* Business logic for SolidWorks analysis operations
|
|
4
|
+
*/
|
|
5
|
+
import { ISolidWorksAdapter, ILogger } from '../../../core/interfaces/core-abstractions.js';
|
|
6
|
+
import { Tool } from '../../services/tool-registry.js';
|
|
7
|
+
export declare class AnalysisUseCases {
|
|
8
|
+
private swAdapter;
|
|
9
|
+
private logger;
|
|
10
|
+
constructor(swAdapter: ISolidWorksAdapter, logger: ILogger);
|
|
11
|
+
getTools(): Tool[];
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/application/use-cases/analysis/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,kBAAkB,EAClB,OAAO,EACR,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAEvD,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;gBADN,SAAS,EAAE,kBAAkB,EAC7B,MAAM,EAAE,OAAO;IAGzB,QAAQ,IAAI,IAAI,EAAE;CAInB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analysis Use Cases
|
|
3
|
+
* Business logic for SolidWorks analysis operations
|
|
4
|
+
*/
|
|
5
|
+
export class AnalysisUseCases {
|
|
6
|
+
swAdapter;
|
|
7
|
+
logger;
|
|
8
|
+
constructor(swAdapter, logger) {
|
|
9
|
+
this.swAdapter = swAdapter;
|
|
10
|
+
this.logger = logger;
|
|
11
|
+
}
|
|
12
|
+
getTools() {
|
|
13
|
+
// Placeholder - will be implemented with actual analysis tools
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/application/use-cases/analysis/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,OAAO,gBAAgB;IAEjB;IACA;IAFV,YACU,SAA6B,EAC7B,MAAe;QADf,cAAS,GAAT,SAAS,CAAoB;QAC7B,WAAM,GAAN,MAAM,CAAS;IACtB,CAAC;IAEJ,QAAQ;QACN,+DAA+D;QAC/D,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drawing Use Cases
|
|
3
|
+
* Business logic for SolidWorks drawing operations
|
|
4
|
+
*/
|
|
5
|
+
import { ISolidWorksAdapter, ILogger } from '../../../core/interfaces/core-abstractions.js';
|
|
6
|
+
import { Tool } from '../../services/tool-registry.js';
|
|
7
|
+
export declare class DrawingUseCases {
|
|
8
|
+
private swAdapter;
|
|
9
|
+
private logger;
|
|
10
|
+
constructor(swAdapter: ISolidWorksAdapter, logger: ILogger);
|
|
11
|
+
getTools(): Tool[];
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|