sdd-mcp-server 1.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 (165) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +256 -0
  3. package/dist/__tests__/setup.d.ts +44 -0
  4. package/dist/__tests__/setup.js +178 -0
  5. package/dist/__tests__/setup.js.map +1 -0
  6. package/dist/__tests__/test-helpers/mock-factories.d.ts +26 -0
  7. package/dist/__tests__/test-helpers/mock-factories.js +466 -0
  8. package/dist/__tests__/test-helpers/mock-factories.js.map +1 -0
  9. package/dist/adapters/cli/SDDToolAdapter.d.ts +26 -0
  10. package/dist/adapters/cli/SDDToolAdapter.js +273 -0
  11. package/dist/adapters/cli/SDDToolAdapter.js.map +1 -0
  12. package/dist/application/services/CodebaseAnalysisService.d.ts +38 -0
  13. package/dist/application/services/CodebaseAnalysisService.js +737 -0
  14. package/dist/application/services/CodebaseAnalysisService.js.map +1 -0
  15. package/dist/application/services/LocalizationService.d.ts +184 -0
  16. package/dist/application/services/LocalizationService.js +536 -0
  17. package/dist/application/services/LocalizationService.js.map +1 -0
  18. package/dist/application/services/ProjectContextService.d.ts +61 -0
  19. package/dist/application/services/ProjectContextService.js +550 -0
  20. package/dist/application/services/ProjectContextService.js.map +1 -0
  21. package/dist/application/services/ProjectInitializationService.d.ts +57 -0
  22. package/dist/application/services/ProjectInitializationService.js +485 -0
  23. package/dist/application/services/ProjectInitializationService.js.map +1 -0
  24. package/dist/application/services/ProjectService.d.ts +19 -0
  25. package/dist/application/services/ProjectService.js +159 -0
  26. package/dist/application/services/ProjectService.js.map +1 -0
  27. package/dist/application/services/QualityGateService.d.ts +62 -0
  28. package/dist/application/services/QualityGateService.js +428 -0
  29. package/dist/application/services/QualityGateService.js.map +1 -0
  30. package/dist/application/services/QualityService.d.ts +43 -0
  31. package/dist/application/services/QualityService.js +245 -0
  32. package/dist/application/services/QualityService.js.map +1 -0
  33. package/dist/application/services/SteeringDocumentService.d.ts +62 -0
  34. package/dist/application/services/SteeringDocumentService.js +694 -0
  35. package/dist/application/services/SteeringDocumentService.js.map +1 -0
  36. package/dist/application/services/TemplateService.d.ts +47 -0
  37. package/dist/application/services/TemplateService.js +438 -0
  38. package/dist/application/services/TemplateService.js.map +1 -0
  39. package/dist/application/services/WorkflowEngineService.d.ts +56 -0
  40. package/dist/application/services/WorkflowEngineService.js +348 -0
  41. package/dist/application/services/WorkflowEngineService.js.map +1 -0
  42. package/dist/application/services/WorkflowService.d.ts +22 -0
  43. package/dist/application/services/WorkflowService.js +147 -0
  44. package/dist/application/services/WorkflowService.js.map +1 -0
  45. package/dist/application/services/WorkflowValidationService.d.ts +51 -0
  46. package/dist/application/services/WorkflowValidationService.js +665 -0
  47. package/dist/application/services/WorkflowValidationService.js.map +1 -0
  48. package/dist/domain/context/ProjectContext.d.ts +350 -0
  49. package/dist/domain/context/ProjectContext.js +138 -0
  50. package/dist/domain/context/ProjectContext.js.map +1 -0
  51. package/dist/domain/i18n/index.d.ts +286 -0
  52. package/dist/domain/i18n/index.js +97 -0
  53. package/dist/domain/i18n/index.js.map +1 -0
  54. package/dist/domain/plugins/index.d.ts +498 -0
  55. package/dist/domain/plugins/index.js +157 -0
  56. package/dist/domain/plugins/index.js.map +1 -0
  57. package/dist/domain/ports.d.ts +54 -0
  58. package/dist/domain/ports.js +3 -0
  59. package/dist/domain/ports.js.map +1 -0
  60. package/dist/domain/quality/index.d.ts +361 -0
  61. package/dist/domain/quality/index.js +113 -0
  62. package/dist/domain/quality/index.js.map +1 -0
  63. package/dist/domain/services/DomainService.d.ts +18 -0
  64. package/dist/domain/services/DomainService.js +71 -0
  65. package/dist/domain/services/DomainService.js.map +1 -0
  66. package/dist/domain/templates/index.d.ts +158 -0
  67. package/dist/domain/templates/index.js +22 -0
  68. package/dist/domain/templates/index.js.map +1 -0
  69. package/dist/domain/types.d.ts +115 -0
  70. package/dist/domain/types.js +37 -0
  71. package/dist/domain/types.js.map +1 -0
  72. package/dist/domain/workflow/WorkflowStateMachine.d.ts +62 -0
  73. package/dist/domain/workflow/WorkflowStateMachine.js +286 -0
  74. package/dist/domain/workflow/WorkflowStateMachine.js.map +1 -0
  75. package/dist/index.d.ts +19 -0
  76. package/dist/index.js +97 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/infrastructure/adapters/AjvValidationAdapter.d.ts +7 -0
  79. package/dist/infrastructure/adapters/AjvValidationAdapter.js +37 -0
  80. package/dist/infrastructure/adapters/AjvValidationAdapter.js.map +1 -0
  81. package/dist/infrastructure/adapters/ConsoleLoggerAdapter.d.ts +8 -0
  82. package/dist/infrastructure/adapters/ConsoleLoggerAdapter.js +41 -0
  83. package/dist/infrastructure/adapters/ConsoleLoggerAdapter.js.map +1 -0
  84. package/dist/infrastructure/adapters/FileBasedTaskTracker.d.ts +9 -0
  85. package/dist/infrastructure/adapters/FileBasedTaskTracker.js +41 -0
  86. package/dist/infrastructure/adapters/FileBasedTaskTracker.js.map +1 -0
  87. package/dist/infrastructure/adapters/HandlebarsTemplateEngine.d.ts +8 -0
  88. package/dist/infrastructure/adapters/HandlebarsTemplateEngine.js +38 -0
  89. package/dist/infrastructure/adapters/HandlebarsTemplateEngine.js.map +1 -0
  90. package/dist/infrastructure/adapters/JsonConfigurationAdapter.d.ts +7 -0
  91. package/dist/infrastructure/adapters/JsonConfigurationAdapter.js +24 -0
  92. package/dist/infrastructure/adapters/JsonConfigurationAdapter.js.map +1 -0
  93. package/dist/infrastructure/adapters/LinusQualityAnalyzer.d.ts +9 -0
  94. package/dist/infrastructure/adapters/LinusQualityAnalyzer.js +75 -0
  95. package/dist/infrastructure/adapters/LinusQualityAnalyzer.js.map +1 -0
  96. package/dist/infrastructure/adapters/NodeFileSystemAdapter.d.ts +12 -0
  97. package/dist/infrastructure/adapters/NodeFileSystemAdapter.js +39 -0
  98. package/dist/infrastructure/adapters/NodeFileSystemAdapter.js.map +1 -0
  99. package/dist/infrastructure/di/container.d.ts +3 -0
  100. package/dist/infrastructure/di/container.js +98 -0
  101. package/dist/infrastructure/di/container.js.map +1 -0
  102. package/dist/infrastructure/di/types.d.ts +39 -0
  103. package/dist/infrastructure/di/types.js +45 -0
  104. package/dist/infrastructure/di/types.js.map +1 -0
  105. package/dist/infrastructure/i18n/I18nextService.d.ts +27 -0
  106. package/dist/infrastructure/i18n/I18nextService.js +357 -0
  107. package/dist/infrastructure/i18n/I18nextService.js.map +1 -0
  108. package/dist/infrastructure/mcp/CapabilityNegotiator.d.ts +21 -0
  109. package/dist/infrastructure/mcp/CapabilityNegotiator.js +75 -0
  110. package/dist/infrastructure/mcp/CapabilityNegotiator.js.map +1 -0
  111. package/dist/infrastructure/mcp/ErrorHandler.d.ts +29 -0
  112. package/dist/infrastructure/mcp/ErrorHandler.js +101 -0
  113. package/dist/infrastructure/mcp/ErrorHandler.js.map +1 -0
  114. package/dist/infrastructure/mcp/MCPServer.d.ts +25 -0
  115. package/dist/infrastructure/mcp/MCPServer.js +246 -0
  116. package/dist/infrastructure/mcp/MCPServer.js.map +1 -0
  117. package/dist/infrastructure/mcp/PromptManager.d.ts +18 -0
  118. package/dist/infrastructure/mcp/PromptManager.js +373 -0
  119. package/dist/infrastructure/mcp/PromptManager.js.map +1 -0
  120. package/dist/infrastructure/mcp/ResourceManager.d.ts +15 -0
  121. package/dist/infrastructure/mcp/ResourceManager.js +229 -0
  122. package/dist/infrastructure/mcp/ResourceManager.js.map +1 -0
  123. package/dist/infrastructure/mcp/SessionManager.d.ts +64 -0
  124. package/dist/infrastructure/mcp/SessionManager.js +221 -0
  125. package/dist/infrastructure/mcp/SessionManager.js.map +1 -0
  126. package/dist/infrastructure/mcp/ToolRegistry.d.ts +48 -0
  127. package/dist/infrastructure/mcp/ToolRegistry.js +235 -0
  128. package/dist/infrastructure/mcp/ToolRegistry.js.map +1 -0
  129. package/dist/infrastructure/platform/PlatformAdapter.d.ts +46 -0
  130. package/dist/infrastructure/platform/PlatformAdapter.js +355 -0
  131. package/dist/infrastructure/platform/PlatformAdapter.js.map +1 -0
  132. package/dist/infrastructure/plugins/HookSystem.d.ts +40 -0
  133. package/dist/infrastructure/plugins/HookSystem.js +415 -0
  134. package/dist/infrastructure/plugins/HookSystem.js.map +1 -0
  135. package/dist/infrastructure/plugins/PluginManager.d.ts +51 -0
  136. package/dist/infrastructure/plugins/PluginManager.js +650 -0
  137. package/dist/infrastructure/plugins/PluginManager.js.map +1 -0
  138. package/dist/infrastructure/plugins/PluginSteeringRegistry.d.ts +63 -0
  139. package/dist/infrastructure/plugins/PluginSteeringRegistry.js +439 -0
  140. package/dist/infrastructure/plugins/PluginSteeringRegistry.js.map +1 -0
  141. package/dist/infrastructure/plugins/PluginToolRegistry.d.ts +54 -0
  142. package/dist/infrastructure/plugins/PluginToolRegistry.js +490 -0
  143. package/dist/infrastructure/plugins/PluginToolRegistry.js.map +1 -0
  144. package/dist/infrastructure/quality/ASTAnalyzer.d.ts +65 -0
  145. package/dist/infrastructure/quality/ASTAnalyzer.js +439 -0
  146. package/dist/infrastructure/quality/ASTAnalyzer.js.map +1 -0
  147. package/dist/infrastructure/quality/LinusCodeReviewer.d.ts +52 -0
  148. package/dist/infrastructure/quality/LinusCodeReviewer.js +551 -0
  149. package/dist/infrastructure/quality/LinusCodeReviewer.js.map +1 -0
  150. package/dist/infrastructure/repositories/InMemoryProjectRepository.d.ts +10 -0
  151. package/dist/infrastructure/repositories/InMemoryProjectRepository.js +35 -0
  152. package/dist/infrastructure/repositories/InMemoryProjectRepository.js.map +1 -0
  153. package/dist/infrastructure/schemas/project.schema.d.ts +192 -0
  154. package/dist/infrastructure/schemas/project.schema.js +114 -0
  155. package/dist/infrastructure/schemas/project.schema.js.map +1 -0
  156. package/dist/infrastructure/templates/FileGenerator.d.ts +15 -0
  157. package/dist/infrastructure/templates/FileGenerator.js +385 -0
  158. package/dist/infrastructure/templates/FileGenerator.js.map +1 -0
  159. package/dist/infrastructure/templates/HandlebarsRenderer.d.ts +16 -0
  160. package/dist/infrastructure/templates/HandlebarsRenderer.js +252 -0
  161. package/dist/infrastructure/templates/HandlebarsRenderer.js.map +1 -0
  162. package/dist/infrastructure/templates/TemplateManager.d.ts +36 -0
  163. package/dist/infrastructure/templates/TemplateManager.js +777 -0
  164. package/dist/infrastructure/templates/TemplateManager.js.map +1 -0
  165. package/package.json +89 -0
@@ -0,0 +1,64 @@
1
+ import { LoggerPort, ConfigurationPort } from '../../domain/ports.js';
2
+ export interface ClientSession {
3
+ id: string;
4
+ clientInfo: {
5
+ name?: string;
6
+ version?: string;
7
+ };
8
+ capabilities: {
9
+ tools: boolean;
10
+ resources: boolean;
11
+ prompts: boolean;
12
+ logging: boolean;
13
+ };
14
+ context: {
15
+ currentProject?: string;
16
+ workingDirectory?: string;
17
+ preferences: Record<string, unknown>;
18
+ };
19
+ createdAt: Date;
20
+ lastActivity: Date;
21
+ isActive: boolean;
22
+ }
23
+ export interface SessionPersistence {
24
+ sessionId: string;
25
+ projectState: Record<string, unknown>;
26
+ contextData: Record<string, unknown>;
27
+ timestamp: Date;
28
+ }
29
+ export declare class SessionManager {
30
+ private readonly logger;
31
+ private readonly config;
32
+ private readonly sessions;
33
+ private readonly persistenceStore;
34
+ private readonly sessionTimeout;
35
+ constructor(logger: LoggerPort, config: ConfigurationPort);
36
+ createSession(clientInfo?: {
37
+ name?: string;
38
+ version?: string;
39
+ }): ClientSession;
40
+ getSession(sessionId: string): ClientSession | null;
41
+ updateSessionCapabilities(sessionId: string, capabilities: Partial<ClientSession['capabilities']>): boolean;
42
+ updateSessionContext(sessionId: string, context: Partial<ClientSession['context']>): boolean;
43
+ setCurrentProject(sessionId: string, projectId: string): boolean;
44
+ getCurrentProject(sessionId: string): string | undefined;
45
+ persistSession(sessionId: string, projectState: Record<string, unknown>): void;
46
+ restoreSession(sessionId: string): SessionPersistence | null;
47
+ deactivateSession(sessionId: string): void;
48
+ removeSession(sessionId: string): void;
49
+ getActiveSessions(): ClientSession[];
50
+ getSessionStats(): {
51
+ total: number;
52
+ active: number;
53
+ expired: number;
54
+ byClient: Record<string, number>;
55
+ };
56
+ supportsCapability(sessionId: string, capability: keyof ClientSession['capabilities']): boolean;
57
+ private isSessionValid;
58
+ private setupPeriodicCleanup;
59
+ isolateProjectContext(sessionId: string, projectId: string): {
60
+ getContextData: () => Record<string, unknown>;
61
+ setContextData: (data: Record<string, unknown>) => void;
62
+ isLocked: () => boolean;
63
+ };
64
+ }
@@ -0,0 +1,221 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { injectable, inject } from 'inversify';
14
+ import { v4 as uuidv4 } from 'uuid';
15
+ import { TYPES } from '../di/types.js';
16
+ let SessionManager = class SessionManager {
17
+ logger;
18
+ config;
19
+ sessions = new Map();
20
+ persistenceStore = new Map();
21
+ sessionTimeout = 30 * 60 * 1000; // 30 minutes
22
+ constructor(logger, config) {
23
+ this.logger = logger;
24
+ this.config = config;
25
+ this.setupPeriodicCleanup();
26
+ }
27
+ createSession(clientInfo) {
28
+ const sessionId = uuidv4();
29
+ const session = {
30
+ id: sessionId,
31
+ clientInfo: clientInfo || {},
32
+ capabilities: {
33
+ tools: true,
34
+ resources: false,
35
+ prompts: false,
36
+ logging: false
37
+ },
38
+ context: {
39
+ preferences: {}
40
+ },
41
+ createdAt: new Date(),
42
+ lastActivity: new Date(),
43
+ isActive: true
44
+ };
45
+ this.sessions.set(sessionId, session);
46
+ this.logger.info('Client session created', {
47
+ sessionId,
48
+ clientName: clientInfo?.name,
49
+ clientVersion: clientInfo?.version
50
+ });
51
+ return session;
52
+ }
53
+ getSession(sessionId) {
54
+ const session = this.sessions.get(sessionId);
55
+ if (!session) {
56
+ return null;
57
+ }
58
+ if (!this.isSessionValid(session)) {
59
+ this.deactivateSession(sessionId);
60
+ return null;
61
+ }
62
+ // Update last activity
63
+ session.lastActivity = new Date();
64
+ return session;
65
+ }
66
+ updateSessionCapabilities(sessionId, capabilities) {
67
+ const session = this.sessions.get(sessionId);
68
+ if (!session) {
69
+ return false;
70
+ }
71
+ session.capabilities = { ...session.capabilities, ...capabilities };
72
+ session.lastActivity = new Date();
73
+ this.logger.info('Session capabilities updated', {
74
+ sessionId,
75
+ capabilities: session.capabilities
76
+ });
77
+ return true;
78
+ }
79
+ updateSessionContext(sessionId, context) {
80
+ const session = this.sessions.get(sessionId);
81
+ if (!session) {
82
+ return false;
83
+ }
84
+ session.context = {
85
+ ...session.context,
86
+ ...context,
87
+ preferences: { ...session.context.preferences, ...context.preferences }
88
+ };
89
+ session.lastActivity = new Date();
90
+ this.logger.debug('Session context updated', {
91
+ sessionId,
92
+ context: session.context
93
+ });
94
+ return true;
95
+ }
96
+ setCurrentProject(sessionId, projectId) {
97
+ return this.updateSessionContext(sessionId, { currentProject: projectId });
98
+ }
99
+ getCurrentProject(sessionId) {
100
+ const session = this.getSession(sessionId);
101
+ return session?.context.currentProject;
102
+ }
103
+ persistSession(sessionId, projectState) {
104
+ const session = this.getSession(sessionId);
105
+ if (!session) {
106
+ return;
107
+ }
108
+ const persistence = {
109
+ sessionId,
110
+ projectState,
111
+ contextData: session.context,
112
+ timestamp: new Date()
113
+ };
114
+ this.persistenceStore.set(sessionId, persistence);
115
+ this.logger.debug('Session state persisted', {
116
+ sessionId,
117
+ dataKeys: Object.keys(projectState)
118
+ });
119
+ }
120
+ restoreSession(sessionId) {
121
+ const persistence = this.persistenceStore.get(sessionId);
122
+ if (!persistence) {
123
+ return null;
124
+ }
125
+ // Check if persistence is not too old (24 hours)
126
+ const maxAge = 24 * 60 * 60 * 1000; // 24 hours
127
+ if (Date.now() - persistence.timestamp.getTime() > maxAge) {
128
+ this.persistenceStore.delete(sessionId);
129
+ return null;
130
+ }
131
+ this.logger.info('Session state restored', {
132
+ sessionId,
133
+ timestamp: persistence.timestamp
134
+ });
135
+ return persistence;
136
+ }
137
+ deactivateSession(sessionId) {
138
+ const session = this.sessions.get(sessionId);
139
+ if (session) {
140
+ session.isActive = false;
141
+ this.logger.info('Session deactivated', {
142
+ sessionId,
143
+ duration: Date.now() - session.createdAt.getTime()
144
+ });
145
+ }
146
+ }
147
+ removeSession(sessionId) {
148
+ this.sessions.delete(sessionId);
149
+ this.persistenceStore.delete(sessionId);
150
+ this.logger.info('Session removed', { sessionId });
151
+ }
152
+ getActiveSessions() {
153
+ return Array.from(this.sessions.values()).filter(session => session.isActive && this.isSessionValid(session));
154
+ }
155
+ getSessionStats() {
156
+ const sessions = Array.from(this.sessions.values());
157
+ const active = sessions.filter(s => s.isActive && this.isSessionValid(s));
158
+ const expired = sessions.filter(s => !this.isSessionValid(s));
159
+ const byClient = {};
160
+ for (const session of active) {
161
+ const client = session.clientInfo.name || 'unknown';
162
+ byClient[client] = (byClient[client] || 0) + 1;
163
+ }
164
+ return {
165
+ total: sessions.length,
166
+ active: active.length,
167
+ expired: expired.length,
168
+ byClient
169
+ };
170
+ }
171
+ supportsCapability(sessionId, capability) {
172
+ const session = this.getSession(sessionId);
173
+ return session?.capabilities[capability] ?? false;
174
+ }
175
+ isSessionValid(session) {
176
+ if (!session.isActive) {
177
+ return false;
178
+ }
179
+ const timeSinceActivity = Date.now() - session.lastActivity.getTime();
180
+ return timeSinceActivity < this.sessionTimeout;
181
+ }
182
+ setupPeriodicCleanup() {
183
+ const cleanupInterval = 5 * 60 * 1000; // 5 minutes
184
+ setInterval(() => {
185
+ const expiredSessions = Array.from(this.sessions.entries())
186
+ .filter(([_, session]) => !this.isSessionValid(session))
187
+ .map(([sessionId]) => sessionId);
188
+ for (const sessionId of expiredSessions) {
189
+ this.deactivateSession(sessionId);
190
+ }
191
+ if (expiredSessions.length > 0) {
192
+ this.logger.info('Cleaned up expired sessions', {
193
+ expiredCount: expiredSessions.length
194
+ });
195
+ }
196
+ }, cleanupInterval);
197
+ }
198
+ // Thread safety for concurrent client access
199
+ isolateProjectContext(sessionId, projectId) {
200
+ const lockKey = `${sessionId}:${projectId}`;
201
+ const locks = new Set();
202
+ return {
203
+ getContextData: () => {
204
+ const session = this.getSession(sessionId);
205
+ return session?.context.preferences || {};
206
+ },
207
+ setContextData: (data) => {
208
+ this.updateSessionContext(sessionId, { preferences: data });
209
+ },
210
+ isLocked: () => locks.has(lockKey)
211
+ };
212
+ }
213
+ };
214
+ SessionManager = __decorate([
215
+ injectable(),
216
+ __param(0, inject(TYPES.LoggerPort)),
217
+ __param(1, inject(TYPES.ConfigurationPort)),
218
+ __metadata("design:paramtypes", [Object, Object])
219
+ ], SessionManager);
220
+ export { SessionManager };
221
+ //# sourceMappingURL=SessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/infrastructure/mcp/SessionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import { LoggerPort, ValidationPort } from '../../domain/ports.js';
3
+ import { SDDToolAdapter, SDDToolHandler } from '../../adapters/cli/SDDToolAdapter.js';
4
+ export interface ToolExecutionContext {
5
+ sessionId: string;
6
+ toolName: string;
7
+ arguments: Record<string, unknown>;
8
+ correlationId: string;
9
+ }
10
+ export interface ToolExecutionResult {
11
+ success: boolean;
12
+ data?: unknown;
13
+ error?: string;
14
+ metadata?: {
15
+ executionTime: number;
16
+ sessionId: string;
17
+ correlationId: string;
18
+ };
19
+ }
20
+ export declare class ToolRegistry {
21
+ private readonly logger;
22
+ private readonly validation;
23
+ private readonly tools;
24
+ private readonly toolSchemas;
25
+ constructor(logger: LoggerPort, validation: ValidationPort);
26
+ initialize(sddToolAdapter: SDDToolAdapter): Promise<void>;
27
+ registerTool(toolHandler: SDDToolHandler): void;
28
+ unregisterTool(name: string): boolean;
29
+ listTools(): Tool[];
30
+ getTool(name: string): Tool | null;
31
+ executeTool(context: ToolExecutionContext): Promise<ToolExecutionResult>;
32
+ hasToolAccess(sessionId: string, toolName: string): boolean;
33
+ getToolDocumentation(toolName: string): {
34
+ name: string;
35
+ description: string;
36
+ inputSchema?: object;
37
+ examples?: Array<{
38
+ description: string;
39
+ arguments: Record<string, unknown>;
40
+ }>;
41
+ } | null;
42
+ private getToolExamples;
43
+ getToolStats(): {
44
+ totalTools: number;
45
+ toolNames: string[];
46
+ toolsByCategory: Record<string, string[]>;
47
+ };
48
+ }
@@ -0,0 +1,235 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { injectable, inject } from 'inversify';
14
+ import { v4 as uuidv4 } from 'uuid';
15
+ import { TYPES } from '../di/types.js';
16
+ let ToolRegistry = class ToolRegistry {
17
+ logger;
18
+ validation;
19
+ tools = new Map();
20
+ toolSchemas = new Map();
21
+ constructor(logger, validation) {
22
+ this.logger = logger;
23
+ this.validation = validation;
24
+ }
25
+ async initialize(sddToolAdapter) {
26
+ const correlationId = uuidv4();
27
+ this.logger.info('Initializing tool registry', { correlationId });
28
+ const sddTools = sddToolAdapter.getSDDTools();
29
+ for (const toolHandler of sddTools) {
30
+ this.registerTool(toolHandler);
31
+ }
32
+ this.logger.info('Tool registry initialization completed', {
33
+ correlationId,
34
+ registeredTools: Array.from(this.tools.keys())
35
+ });
36
+ }
37
+ registerTool(toolHandler) {
38
+ const { name, tool, handler } = toolHandler;
39
+ // Validate tool definition
40
+ if (!name || !tool || !handler) {
41
+ throw new Error(`Invalid tool registration: ${name}`);
42
+ }
43
+ if (this.tools.has(name)) {
44
+ this.logger.warn('Tool already registered, overriding', { toolName: name });
45
+ }
46
+ this.tools.set(name, toolHandler);
47
+ if (tool.inputSchema) {
48
+ this.toolSchemas.set(name, tool.inputSchema);
49
+ }
50
+ this.logger.info('Tool registered successfully', {
51
+ toolName: name,
52
+ hasInputSchema: !!tool.inputSchema
53
+ });
54
+ }
55
+ unregisterTool(name) {
56
+ const removed = this.tools.delete(name);
57
+ this.toolSchemas.delete(name);
58
+ if (removed) {
59
+ this.logger.info('Tool unregistered', { toolName: name });
60
+ }
61
+ return removed;
62
+ }
63
+ listTools() {
64
+ return Array.from(this.tools.values()).map(handler => handler.tool);
65
+ }
66
+ getTool(name) {
67
+ const handler = this.tools.get(name);
68
+ return handler?.tool || null;
69
+ }
70
+ async executeTool(context) {
71
+ const { sessionId, toolName, arguments: args, correlationId } = context;
72
+ const startTime = Date.now();
73
+ this.logger.info('Executing tool', {
74
+ correlationId,
75
+ sessionId,
76
+ toolName,
77
+ argumentKeys: Object.keys(args)
78
+ });
79
+ try {
80
+ // Get tool handler
81
+ const handler = this.tools.get(toolName);
82
+ if (!handler) {
83
+ throw new Error(`Tool not found: ${toolName}`);
84
+ }
85
+ // Validate arguments if schema exists
86
+ const schema = this.toolSchemas.get(toolName);
87
+ if (schema) {
88
+ await this.validation.validate(args, schema);
89
+ }
90
+ // Execute tool
91
+ const result = await handler.handler(args);
92
+ const executionTime = Date.now() - startTime;
93
+ this.logger.info('Tool execution completed successfully', {
94
+ correlationId,
95
+ sessionId,
96
+ toolName,
97
+ executionTime
98
+ });
99
+ return {
100
+ success: true,
101
+ data: result,
102
+ metadata: {
103
+ executionTime,
104
+ sessionId,
105
+ correlationId
106
+ }
107
+ };
108
+ }
109
+ catch (error) {
110
+ const executionTime = Date.now() - startTime;
111
+ const errorMessage = error instanceof Error ? error.message : String(error);
112
+ this.logger.error('Tool execution failed', error, {
113
+ correlationId,
114
+ sessionId,
115
+ toolName,
116
+ executionTime
117
+ });
118
+ return {
119
+ success: false,
120
+ error: errorMessage,
121
+ metadata: {
122
+ executionTime,
123
+ sessionId,
124
+ correlationId
125
+ }
126
+ };
127
+ }
128
+ }
129
+ hasToolAccess(sessionId, toolName) {
130
+ // Basic access control - can be extended with more sophisticated rules
131
+ const handler = this.tools.get(toolName);
132
+ if (!handler) {
133
+ return false;
134
+ }
135
+ // For now, all registered tools are accessible
136
+ // TODO: Implement role-based access control based on session capabilities
137
+ return true;
138
+ }
139
+ getToolDocumentation(toolName) {
140
+ const handler = this.tools.get(toolName);
141
+ if (!handler) {
142
+ return null;
143
+ }
144
+ const examples = this.getToolExamples(toolName);
145
+ return {
146
+ name: handler.tool.name,
147
+ description: handler.tool.description,
148
+ inputSchema: handler.tool.inputSchema,
149
+ examples
150
+ };
151
+ }
152
+ getToolExamples(toolName) {
153
+ const examples = {
154
+ 'sdd-init': [
155
+ {
156
+ description: 'Initialize a new SDD project',
157
+ arguments: {
158
+ name: 'my-api-project',
159
+ path: '/workspace/my-api',
160
+ language: 'en'
161
+ }
162
+ }
163
+ ],
164
+ 'sdd-status': [
165
+ {
166
+ description: 'Check project status by ID',
167
+ arguments: {
168
+ projectId: 'proj_123456'
169
+ }
170
+ },
171
+ {
172
+ description: 'Check project status by path',
173
+ arguments: {
174
+ projectPath: '/workspace/my-api'
175
+ }
176
+ }
177
+ ],
178
+ 'sdd-requirements': [
179
+ {
180
+ description: 'Generate requirements document',
181
+ arguments: {
182
+ projectId: 'proj_123456'
183
+ }
184
+ }
185
+ ],
186
+ 'sdd-design': [
187
+ {
188
+ description: 'Generate design document',
189
+ arguments: {
190
+ projectId: 'proj_123456'
191
+ }
192
+ }
193
+ ],
194
+ 'sdd-tasks': [
195
+ {
196
+ description: 'Generate implementation tasks',
197
+ arguments: {
198
+ projectId: 'proj_123456'
199
+ }
200
+ }
201
+ ],
202
+ 'sdd-quality-check': [
203
+ {
204
+ description: 'Perform Linus-style code review',
205
+ arguments: {
206
+ code: 'function example() {\n if (condition) {\n return result;\n }\n}',
207
+ language: 'typescript'
208
+ }
209
+ }
210
+ ]
211
+ };
212
+ return examples[toolName] || [];
213
+ }
214
+ getToolStats() {
215
+ const tools = Array.from(this.tools.keys());
216
+ const toolsByCategory = {
217
+ 'Project Management': ['sdd-init', 'sdd-status'],
218
+ 'Workflow': ['sdd-requirements', 'sdd-design', 'sdd-tasks'],
219
+ 'Quality Assurance': ['sdd-quality-check']
220
+ };
221
+ return {
222
+ totalTools: tools.length,
223
+ toolNames: tools,
224
+ toolsByCategory
225
+ };
226
+ }
227
+ };
228
+ ToolRegistry = __decorate([
229
+ injectable(),
230
+ __param(0, inject(TYPES.LoggerPort)),
231
+ __param(1, inject(TYPES.ValidationPort)),
232
+ __metadata("design:paramtypes", [Object, Object])
233
+ ], ToolRegistry);
234
+ export { ToolRegistry };
235
+ //# sourceMappingURL=ToolRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolRegistry.js","sourceRoot":"","sources":["../../../src/infrastructure/mcp/ToolRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { LoggerPort } from '../../domain/ports.js';
2
+ import type { PlatformAdapter as IPlatformAdapter, SupportedLanguage, SystemInfo } from '../../domain/i18n/index.js';
3
+ interface EnvironmentInfo {
4
+ readonly isProduction: boolean;
5
+ readonly isDevelopment: boolean;
6
+ readonly isTest: boolean;
7
+ readonly nodeEnv: string;
8
+ readonly processTitle: string;
9
+ readonly workingDirectory: string;
10
+ readonly userHome: string;
11
+ }
12
+ export declare class PlatformAdapter implements IPlatformAdapter {
13
+ private readonly logger;
14
+ private readonly platformConfig;
15
+ private cachedSystemInfo;
16
+ private cachedEnvironmentInfo;
17
+ constructor(logger: LoggerPort);
18
+ detectLocale(): Promise<SupportedLanguage>;
19
+ getSystemInfo(): Promise<SystemInfo>;
20
+ formatPath(inputPath: string): string;
21
+ getEnvironmentVariables(): Record<string, string>;
22
+ getPreferredLanguages(): Promise<SupportedLanguage[]>;
23
+ isWindows(): boolean;
24
+ isMacOS(): boolean;
25
+ isLinux(): boolean;
26
+ isUnix(): boolean;
27
+ getPathSeparator(): string;
28
+ getLineEnding(): string;
29
+ getExecutableExtension(): string;
30
+ getConfigDirectory(): string;
31
+ getTempDirectory(): string;
32
+ getDefaultShell(): string;
33
+ isCaseSensitive(): boolean;
34
+ getAvailableDiskSpace(path: string): Promise<number>;
35
+ createPlatformSpecificPath(...segments: string[]): Promise<string>;
36
+ normalizePath(inputPath: string): string;
37
+ getEnvironmentInfo(): Promise<EnvironmentInfo>;
38
+ private initializePlatformConfig;
39
+ private getPlatform;
40
+ private getArchitecture;
41
+ private normalizeLocale;
42
+ private getFallbackLanguages;
43
+ private isAbsolutePath;
44
+ private getDefaultEncoding;
45
+ }
46
+ export {};