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,550 @@
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 '../../infrastructure/di/types.js';
16
+ import { ContextChangeType, ContextImpact, ChangeType, ChangeImpact, CodeComplexity } from '../../domain/context/ProjectContext.js';
17
+ import { CodebaseAnalysisService } from './CodebaseAnalysisService.js';
18
+ import { SteeringDocumentService } from './SteeringDocumentService.js';
19
+ let ProjectContextService = class ProjectContextService {
20
+ fileSystem;
21
+ codebaseAnalysis;
22
+ steeringService;
23
+ logger;
24
+ config;
25
+ contextCache = new Map();
26
+ sessionContexts = new Map();
27
+ constructor(fileSystem, codebaseAnalysis, steeringService, logger, config) {
28
+ this.fileSystem = fileSystem;
29
+ this.codebaseAnalysis = codebaseAnalysis;
30
+ this.steeringService = steeringService;
31
+ this.logger = logger;
32
+ this.config = config;
33
+ }
34
+ async loadProjectContext(projectId, projectPath, options = {}) {
35
+ const correlationId = uuidv4();
36
+ this.logger.info('Loading project context', {
37
+ correlationId,
38
+ projectId,
39
+ projectPath,
40
+ options
41
+ });
42
+ try {
43
+ // Check cache first unless force refresh is requested
44
+ if (!options.forceRefresh) {
45
+ const cached = this.contextCache.get(projectId);
46
+ if (cached && this.isCacheValid(cached)) {
47
+ this.logger.debug('Using cached project context', { correlationId, projectId });
48
+ return cached;
49
+ }
50
+ }
51
+ // Load or create session context
52
+ const sessionContext = this.getOrCreateSessionContext(options.sessionId || uuidv4(), projectPath, options.preferences);
53
+ // Load project metadata
54
+ const metadata = await this.loadProjectMetadata(projectPath);
55
+ // Analyze codebase
56
+ const analysisOptions = {
57
+ includeNodeModules: false,
58
+ includeBuildOutputs: false,
59
+ maxDepth: 10
60
+ };
61
+ const codebase = options.includeFullAnalysis !== false
62
+ ? await this.codebaseAnalysis.analyzeCodebase(projectPath, analysisOptions)
63
+ : await this.createMinimalCodebaseAnalysis(projectPath);
64
+ // Load steering context
65
+ const steering = await this.steeringService.loadSteeringContext(projectPath, sessionContext.preferences.language ? {
66
+ autoRefresh: true,
67
+ conditionalPatterns: {},
68
+ excludePatterns: [],
69
+ priority: {}
70
+ } : undefined);
71
+ // Create project context
72
+ const context = {
73
+ projectId,
74
+ basePath: projectPath,
75
+ metadata,
76
+ codebase,
77
+ steering,
78
+ session: sessionContext,
79
+ createdAt: new Date(),
80
+ updatedAt: new Date()
81
+ };
82
+ // Cache the context
83
+ this.contextCache.set(projectId, context);
84
+ // Persist context if needed
85
+ if (sessionContext.preferences.autoSave) {
86
+ await this.persistProjectContext(context);
87
+ }
88
+ this.logger.info('Project context loaded successfully', {
89
+ correlationId,
90
+ projectId,
91
+ filesAnalyzed: codebase.structure.totalFiles,
92
+ steeringDocuments: steering.documents.length,
93
+ cacheSize: this.contextCache.size
94
+ });
95
+ return context;
96
+ }
97
+ catch (error) {
98
+ this.logger.error('Failed to load project context', error, {
99
+ correlationId,
100
+ projectId,
101
+ projectPath
102
+ });
103
+ // Return minimal context on failure
104
+ return this.createMinimalProjectContext(projectId, projectPath, options.sessionId);
105
+ }
106
+ }
107
+ async updateProjectContext(projectId, changes, triggeredBy) {
108
+ const correlationId = uuidv4();
109
+ this.logger.info('Updating project context', {
110
+ correlationId,
111
+ projectId,
112
+ changes: Object.keys(changes),
113
+ triggeredBy
114
+ });
115
+ const context = this.contextCache.get(projectId);
116
+ if (!context) {
117
+ throw new Error(`Project context not found: ${projectId}`);
118
+ }
119
+ // Create change history entry
120
+ const changeEntry = {
121
+ id: uuidv4(),
122
+ timestamp: new Date(),
123
+ type: this.determineChangeType(changes),
124
+ files: [], // TODO: Determine affected files
125
+ impact: this.assessChangeImpact(changes),
126
+ triggeredBy
127
+ };
128
+ // Update metadata
129
+ const updatedMetadata = {
130
+ ...context.metadata,
131
+ ...changes,
132
+ changeHistory: [...context.metadata.changeHistory, changeEntry]
133
+ };
134
+ // Create updated context
135
+ const updatedContext = {
136
+ ...context,
137
+ metadata: updatedMetadata,
138
+ updatedAt: new Date()
139
+ };
140
+ // Update cache
141
+ this.contextCache.set(projectId, updatedContext);
142
+ // Record context change
143
+ this.recordContextChange(context.session.sessionId, ContextChangeType.ANALYSIS_REFRESHED, 'Project context metadata updated', { changes, triggeredBy }, this.mapChangeImpactToContextImpact(this.assessChangeImpact(changes)));
144
+ this.logger.info('Project context updated successfully', {
145
+ correlationId,
146
+ projectId,
147
+ impactLevel: changeEntry.impact
148
+ });
149
+ return updatedContext;
150
+ }
151
+ async refreshProjectContext(projectId, triggeredBy, options = {}) {
152
+ const correlationId = uuidv4();
153
+ this.logger.info('Refreshing project context', {
154
+ correlationId,
155
+ projectId,
156
+ options,
157
+ triggeredBy
158
+ });
159
+ const currentContext = this.contextCache.get(projectId);
160
+ if (!currentContext) {
161
+ throw new Error(`Project context not found: ${projectId}`);
162
+ }
163
+ let changeDetection;
164
+ let hasChanges = false;
165
+ // Detect changes if requested
166
+ if (options.detectChanges) {
167
+ changeDetection = await this.detectContextChanges(currentContext);
168
+ hasChanges = changeDetection.hasChanges;
169
+ }
170
+ let updatedContext = currentContext;
171
+ // Refresh codebase analysis if needed
172
+ if (options.refreshCodebase || hasChanges) {
173
+ const newCodebase = await this.codebaseAnalysis.analyzeCodebase(currentContext.basePath, { includeNodeModules: false, includeBuildOutputs: false });
174
+ updatedContext = {
175
+ ...updatedContext,
176
+ codebase: newCodebase,
177
+ updatedAt: new Date()
178
+ };
179
+ this.recordContextChange(currentContext.session.sessionId, ContextChangeType.ANALYSIS_REFRESHED, 'Codebase analysis refreshed', { fileCount: newCodebase.structure.totalFiles }, ContextImpact.MEDIUM);
180
+ }
181
+ // Refresh steering context if needed
182
+ if (options.refreshSteering || hasChanges) {
183
+ const newSteering = await this.steeringService.refreshSteeringContext(currentContext.basePath, currentContext.steering);
184
+ if (newSteering.lastRefresh.getTime() > currentContext.steering.lastRefresh.getTime()) {
185
+ updatedContext = {
186
+ ...updatedContext,
187
+ steering: newSteering,
188
+ updatedAt: new Date()
189
+ };
190
+ this.recordContextChange(currentContext.session.sessionId, ContextChangeType.STEERING_UPDATED, 'Steering documents refreshed', { documentCount: newSteering.documents.length }, ContextImpact.LOW);
191
+ }
192
+ }
193
+ // Update cache
194
+ this.contextCache.set(projectId, updatedContext);
195
+ this.logger.info('Project context refreshed', {
196
+ correlationId,
197
+ projectId,
198
+ hasChanges,
199
+ refreshedCodebase: options.refreshCodebase,
200
+ refreshedSteering: options.refreshSteering
201
+ });
202
+ const result = {
203
+ context: updatedContext
204
+ };
205
+ if (changeDetection) {
206
+ result.changeDetection = changeDetection;
207
+ }
208
+ return result;
209
+ }
210
+ async detectContextChanges(context) {
211
+ const changedFiles = [];
212
+ const changeTypes = [];
213
+ let impactLevel = ContextImpact.LOW;
214
+ const recommendations = [];
215
+ try {
216
+ // Check for file changes in project directory
217
+ const currentFiles = new Set();
218
+ // Simple file change detection (in production, would use file watching or git)
219
+ for (const file of context.codebase.structure.files) {
220
+ try {
221
+ const filePath = `${context.basePath}/${file.path}`;
222
+ const stat = await this.fileSystem.stat(filePath);
223
+ const currentModified = stat.mtime || new Date();
224
+ if (currentModified.getTime() > file.lastModified.getTime()) {
225
+ changedFiles.push(file.path);
226
+ if (file.type === 'source') {
227
+ changeTypes.push(ContextChangeType.FILE_MODIFIED);
228
+ impactLevel = ContextImpact.MEDIUM;
229
+ }
230
+ else if (file.name === 'package.json') {
231
+ changeTypes.push(ContextChangeType.DEPENDENCY_ADDED);
232
+ impactLevel = ContextImpact.HIGH;
233
+ }
234
+ }
235
+ currentFiles.add(file.path);
236
+ }
237
+ catch (error) {
238
+ // File was deleted
239
+ changedFiles.push(file.path);
240
+ changeTypes.push(ContextChangeType.FILE_DELETED);
241
+ impactLevel = ContextImpact.MEDIUM;
242
+ }
243
+ }
244
+ // Generate recommendations
245
+ if (changedFiles.length > 0) {
246
+ recommendations.push('Consider refreshing codebase analysis');
247
+ if (changedFiles.some(f => f.includes('package.json'))) {
248
+ recommendations.push('Dependencies may have changed - refresh dependency analysis');
249
+ }
250
+ if (changedFiles.some(f => f.includes('.kiro/steering'))) {
251
+ recommendations.push('Steering documents changed - refresh steering context');
252
+ }
253
+ }
254
+ }
255
+ catch (error) {
256
+ this.logger.warn('Failed to detect context changes', {
257
+ projectId: context.projectId,
258
+ error: error.message
259
+ });
260
+ }
261
+ return {
262
+ hasChanges: changedFiles.length > 0,
263
+ changedFiles,
264
+ changeTypes: [...new Set(changeTypes)],
265
+ impactLevel,
266
+ recommendations
267
+ };
268
+ }
269
+ async persistProjectContext(context, options = {}) {
270
+ const correlationId = uuidv4();
271
+ this.logger.debug('Persisting project context', {
272
+ correlationId,
273
+ projectId: context.projectId,
274
+ options
275
+ });
276
+ try {
277
+ const contextDir = `${context.basePath}/.kiro/context`;
278
+ if (!(await this.fileSystem.exists(contextDir))) {
279
+ await this.fileSystem.mkdir(contextDir);
280
+ }
281
+ const contextFile = `${contextDir}/${context.projectId}.json`;
282
+ // Create serializable context (exclude large objects if requested)
283
+ const persistableContext = {
284
+ projectId: context.projectId,
285
+ basePath: context.basePath,
286
+ metadata: options.maxHistoryEntries
287
+ ? {
288
+ ...context.metadata,
289
+ changeHistory: context.metadata.changeHistory.slice(-options.maxHistoryEntries)
290
+ }
291
+ : context.metadata,
292
+ codebase: options.includeAnalysis !== false ? context.codebase : undefined,
293
+ steering: {
294
+ ...context.steering,
295
+ documents: context.steering.documents.map(doc => ({
296
+ ...doc,
297
+ content: doc.content.length > 10000 ? doc.content.substring(0, 10000) + '...' : doc.content
298
+ }))
299
+ },
300
+ session: {
301
+ ...context.session,
302
+ cache: options.includeCache ? context.session.cache : undefined
303
+ },
304
+ createdAt: context.createdAt,
305
+ updatedAt: context.updatedAt
306
+ };
307
+ await this.fileSystem.writeFile(contextFile, JSON.stringify(persistableContext, null, 2));
308
+ this.logger.debug('Project context persisted successfully', {
309
+ correlationId,
310
+ projectId: context.projectId,
311
+ filePath: contextFile
312
+ });
313
+ }
314
+ catch (error) {
315
+ this.logger.error('Failed to persist project context', error, {
316
+ correlationId,
317
+ projectId: context.projectId
318
+ });
319
+ }
320
+ }
321
+ async loadPersistedContext(projectId, projectPath) {
322
+ try {
323
+ const contextFile = `${projectPath}/.kiro/context/${projectId}.json`;
324
+ if (await this.fileSystem.exists(contextFile)) {
325
+ const content = await this.fileSystem.readFile(contextFile);
326
+ const persistedData = JSON.parse(content);
327
+ // Reconstruct full context (this is a simplified version)
328
+ return persistedData;
329
+ }
330
+ }
331
+ catch (error) {
332
+ this.logger.debug('Failed to load persisted context', {
333
+ projectId,
334
+ error: error.message
335
+ });
336
+ }
337
+ return null;
338
+ }
339
+ getOrCreateSessionContext(sessionId, workingDirectory, preferences) {
340
+ let sessionContext = this.sessionContexts.get(sessionId);
341
+ if (!sessionContext) {
342
+ sessionContext = {
343
+ sessionId,
344
+ workingDirectory,
345
+ preferences: preferences || this.getDefaultSessionPreferences(),
346
+ history: [],
347
+ cache: {
348
+ analyses: {},
349
+ dependencies: {},
350
+ steering: {},
351
+ maxAge: 60, // 60 minutes
352
+ size: 0
353
+ }
354
+ };
355
+ this.sessionContexts.set(sessionId, sessionContext);
356
+ }
357
+ return sessionContext;
358
+ }
359
+ getDefaultSessionPreferences() {
360
+ return {
361
+ language: 'en',
362
+ verbosity: 'standard',
363
+ autoSave: true,
364
+ contextWindow: 30 // 30 minutes
365
+ };
366
+ }
367
+ recordContextChange(sessionId, type, description, data, impact) {
368
+ const sessionContext = this.sessionContexts.get(sessionId);
369
+ if (sessionContext) {
370
+ const changeEntry = {
371
+ timestamp: new Date(),
372
+ type,
373
+ description,
374
+ data,
375
+ impact
376
+ };
377
+ // Create updated history
378
+ let updatedHistory = [...sessionContext.history, changeEntry];
379
+ // Keep only recent entries
380
+ const maxEntries = 100;
381
+ if (updatedHistory.length > maxEntries) {
382
+ updatedHistory = updatedHistory.slice(-maxEntries);
383
+ }
384
+ // Update session context with new history
385
+ const updatedSessionContext = {
386
+ ...sessionContext,
387
+ history: updatedHistory
388
+ };
389
+ this.sessionContexts.set(sessionId, updatedSessionContext);
390
+ }
391
+ }
392
+ async loadProjectMetadata(projectPath) {
393
+ // Try to load from spec.json first
394
+ const specJsonPath = `${projectPath}/.kiro/specs`;
395
+ let name = 'Unknown Project';
396
+ let description;
397
+ try {
398
+ if (await this.fileSystem.exists(specJsonPath)) {
399
+ const specs = await this.fileSystem.readdir(specJsonPath);
400
+ if (specs.length > 0) {
401
+ const specFile = `${specJsonPath}/${specs[0]}/spec.json`;
402
+ if (await this.fileSystem.exists(specFile)) {
403
+ const specContent = await this.fileSystem.readFile(specFile);
404
+ const spec = JSON.parse(specContent);
405
+ name = spec.feature_name || name;
406
+ }
407
+ }
408
+ }
409
+ }
410
+ catch (error) {
411
+ this.logger.debug('Failed to load project metadata from spec.json', { projectPath });
412
+ }
413
+ const metadata = {
414
+ name,
415
+ technology: {
416
+ primary: [],
417
+ frameworks: [],
418
+ tools: [],
419
+ runtime: []
420
+ },
421
+ architecture: {
422
+ name: 'unknown',
423
+ confidence: 0,
424
+ evidence: [],
425
+ violations: []
426
+ },
427
+ complexity: CodeComplexity.MODERATE,
428
+ changeHistory: []
429
+ };
430
+ if (description !== undefined) {
431
+ metadata.description = description;
432
+ }
433
+ return metadata;
434
+ }
435
+ async createMinimalCodebaseAnalysis(projectPath) {
436
+ // Return a minimal analysis without full traversal
437
+ return {
438
+ structure: {
439
+ root: projectPath,
440
+ directories: [],
441
+ files: [],
442
+ totalFiles: 0,
443
+ totalDirectories: 0,
444
+ gitIgnored: []
445
+ },
446
+ dependencies: {
447
+ external: [],
448
+ internal: [],
449
+ devDependencies: [],
450
+ peerDependencies: [],
451
+ graph: { nodes: [], edges: [], cycles: [], orphans: [] }
452
+ },
453
+ patterns: [],
454
+ metrics: {
455
+ linesOfCode: 0,
456
+ complexity: {
457
+ cyclomatic: 0,
458
+ cognitive: 0,
459
+ halstead: { vocabulary: 0, length: 0, difficulty: 0, effort: 0, timeToCode: 0, bugsDelivered: 0 },
460
+ nesting: { average: 0, maximum: 0, violationsOver3: 0 }
461
+ },
462
+ maintainability: { index: 0, duplication: 0, cohesion: 0, coupling: 0, debtRatio: 0 },
463
+ qualityScore: 0
464
+ },
465
+ hotspots: [],
466
+ lastAnalyzed: new Date()
467
+ };
468
+ }
469
+ createMinimalProjectContext(projectId, projectPath, sessionId) {
470
+ const sessionContext = this.getOrCreateSessionContext(sessionId || uuidv4(), projectPath);
471
+ return {
472
+ projectId,
473
+ basePath: projectPath,
474
+ metadata: {
475
+ name: 'Unknown Project',
476
+ technology: { primary: [], frameworks: [], tools: [], runtime: [] },
477
+ architecture: { name: 'unknown', confidence: 0, evidence: [], violations: [] },
478
+ complexity: CodeComplexity.MODERATE,
479
+ changeHistory: []
480
+ },
481
+ codebase: {
482
+ structure: { root: projectPath, directories: [], files: [], totalFiles: 0, totalDirectories: 0, gitIgnored: [] },
483
+ dependencies: { external: [], internal: [], devDependencies: [], peerDependencies: [], graph: { nodes: [], edges: [], cycles: [], orphans: [] } },
484
+ patterns: [],
485
+ metrics: { linesOfCode: 0, complexity: { cyclomatic: 0, cognitive: 0, halstead: { vocabulary: 0, length: 0, difficulty: 0, effort: 0, timeToCode: 0, bugsDelivered: 0 }, nesting: { average: 0, maximum: 0, violationsOver3: 0 } }, maintainability: { index: 0, duplication: 0, cohesion: 0, coupling: 0, debtRatio: 0 }, qualityScore: 0 },
486
+ hotspots: [],
487
+ lastAnalyzed: new Date()
488
+ },
489
+ steering: { documents: [], mode: 'manual', activeDocuments: [], lastRefresh: new Date(), preferences: { autoRefresh: true, conditionalPatterns: {}, excludePatterns: [], priority: {} } },
490
+ session: sessionContext,
491
+ createdAt: new Date(),
492
+ updatedAt: new Date()
493
+ };
494
+ }
495
+ isCacheValid(context) {
496
+ const maxAge = 15 * 60 * 1000; // 15 minutes
497
+ return Date.now() - context.updatedAt.getTime() < maxAge;
498
+ }
499
+ determineChangeType(changes) {
500
+ if (changes.technology)
501
+ return ChangeType.DEPENDENCY_CHANGE;
502
+ if (changes.architecture)
503
+ return ChangeType.STRUCTURE_CHANGE;
504
+ return ChangeType.CODE_CHANGE;
505
+ }
506
+ assessChangeImpact(changes) {
507
+ if (changes.architecture || changes.technology)
508
+ return ChangeImpact.MAJOR;
509
+ if (changes.complexity)
510
+ return ChangeImpact.MODERATE;
511
+ return ChangeImpact.MINOR;
512
+ }
513
+ mapChangeImpactToContextImpact(changeImpact) {
514
+ switch (changeImpact) {
515
+ case ChangeImpact.BREAKING:
516
+ case ChangeImpact.MAJOR:
517
+ return ContextImpact.HIGH;
518
+ case ChangeImpact.MODERATE:
519
+ return ContextImpact.MEDIUM;
520
+ case ChangeImpact.MINOR:
521
+ case ChangeImpact.NONE:
522
+ default:
523
+ return ContextImpact.LOW;
524
+ }
525
+ }
526
+ async getContextStats() {
527
+ const oldestContext = Array.from(this.contextCache.values())
528
+ .reduce((oldest, context) => {
529
+ return !oldest || context.createdAt < oldest ? context.createdAt : oldest;
530
+ }, null);
531
+ return {
532
+ cachedContexts: this.contextCache.size,
533
+ activeSessions: this.sessionContexts.size,
534
+ totalMemoryUsage: `${Math.round(process.memoryUsage().heapUsed / 1024 / 1024)}MB`,
535
+ oldestContext
536
+ };
537
+ }
538
+ };
539
+ ProjectContextService = __decorate([
540
+ injectable(),
541
+ __param(0, inject(TYPES.FileSystemPort)),
542
+ __param(1, inject(TYPES.CodebaseAnalysisService)),
543
+ __param(2, inject(TYPES.SteeringDocumentService)),
544
+ __param(3, inject(TYPES.LoggerPort)),
545
+ __param(4, inject(TYPES.ConfigurationPort)),
546
+ __metadata("design:paramtypes", [Object, CodebaseAnalysisService,
547
+ SteeringDocumentService, Object, Object])
548
+ ], ProjectContextService);
549
+ export { ProjectContextService };
550
+ //# sourceMappingURL=ProjectContextService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectContextService.js","sourceRoot":"","sources":["../../../src/application/services/ProjectContextService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { Project } from '../../domain/types.js';
2
+ import { FileSystemPort, ValidationPort, LoggerPort } from '../../domain/ports.js';
3
+ import { ProjectService } from './ProjectService.js';
4
+ import { TemplateService } from './TemplateService.js';
5
+ export interface ProjectInitializationOptions {
6
+ name: string;
7
+ path: string;
8
+ language?: 'en' | 'ja' | 'zh-TW';
9
+ description?: string;
10
+ technology?: string;
11
+ template?: 'basic' | 'api' | 'web' | 'library';
12
+ }
13
+ export interface ProjectDiscoveryResult {
14
+ exists: boolean;
15
+ project?: Project;
16
+ hasValidStructure: boolean;
17
+ missingDirectories?: string[];
18
+ missingFiles?: string[];
19
+ }
20
+ export interface ProjectValidationResult {
21
+ isValid: boolean;
22
+ issues: string[];
23
+ warnings: string[];
24
+ recommendations: string[];
25
+ }
26
+ export declare class ProjectInitializationService {
27
+ private readonly fileSystem;
28
+ private readonly projectService;
29
+ private readonly templateService;
30
+ private readonly validation;
31
+ private readonly logger;
32
+ constructor(fileSystem: FileSystemPort, projectService: ProjectService, templateService: TemplateService, validation: ValidationPort, logger: LoggerPort);
33
+ initializeProject(options: ProjectInitializationOptions): Promise<{
34
+ success: boolean;
35
+ project?: Project;
36
+ message: string;
37
+ createdFiles: string[];
38
+ }>;
39
+ discoverExistingProject(projectPath: string): Promise<ProjectDiscoveryResult>;
40
+ validateProjectSetup(project: Project): Promise<ProjectValidationResult>;
41
+ repairProjectStructure(project: Project, issues: string[]): Promise<{
42
+ success: boolean;
43
+ repairedItems: string[];
44
+ remainingIssues: string[];
45
+ }>;
46
+ getProjectStatus(projectPath: string): Promise<{
47
+ discovery: ProjectDiscoveryResult;
48
+ validation?: ProjectValidationResult;
49
+ recommendations: string[];
50
+ }>;
51
+ private validateInitializationOptions;
52
+ private createDirectoryStructure;
53
+ private generateInitialFiles;
54
+ private generateReadmeTemplate;
55
+ private generateBasicSteeringDocuments;
56
+ private checkDirectoryStructure;
57
+ }