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,348 @@
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 { WorkflowPhase } from '../../domain/types.js';
17
+ import { WorkflowStateMachine } from '../../domain/workflow/WorkflowStateMachine.js';
18
+ import { ProjectService } from './ProjectService.js';
19
+ import { TemplateService } from './TemplateService.js';
20
+ let WorkflowEngineService = class WorkflowEngineService {
21
+ projectRepository;
22
+ projectService;
23
+ templateService;
24
+ logger;
25
+ validation;
26
+ stateMachine;
27
+ constructor(projectRepository, projectService, templateService, logger, validation) {
28
+ this.projectRepository = projectRepository;
29
+ this.projectService = projectService;
30
+ this.templateService = templateService;
31
+ this.logger = logger;
32
+ this.validation = validation;
33
+ this.stateMachine = new WorkflowStateMachine();
34
+ }
35
+ async progressToNextPhase(projectId, triggeredBy) {
36
+ const correlationId = uuidv4();
37
+ this.logger.info('Progressing project to next phase', {
38
+ correlationId,
39
+ projectId,
40
+ triggeredBy
41
+ });
42
+ const project = await this.projectRepository.findById(projectId);
43
+ if (!project) {
44
+ return {
45
+ success: false,
46
+ message: `Project not found: ${projectId}`
47
+ };
48
+ }
49
+ const nextPhase = this.stateMachine.getNextPhase(project.phase);
50
+ if (!nextPhase) {
51
+ return {
52
+ success: false,
53
+ message: `Project is already at final phase: ${project.phase}`
54
+ };
55
+ }
56
+ return await this.transitionToPhase(projectId, nextPhase, triggeredBy);
57
+ }
58
+ async transitionToPhase(projectId, targetPhase, triggeredBy) {
59
+ const correlationId = uuidv4();
60
+ this.logger.info('Transitioning project to phase', {
61
+ correlationId,
62
+ projectId,
63
+ targetPhase,
64
+ triggeredBy
65
+ });
66
+ const project = await this.projectRepository.findById(projectId);
67
+ if (!project) {
68
+ return {
69
+ success: false,
70
+ message: `Project not found: ${projectId}`
71
+ };
72
+ }
73
+ if (project.phase === targetPhase) {
74
+ return {
75
+ success: true,
76
+ updatedProject: project,
77
+ message: `Project is already in ${targetPhase} phase`
78
+ };
79
+ }
80
+ const result = await this.stateMachine.executeTransition(project, targetPhase, triggeredBy);
81
+ if (!result.success) {
82
+ this.logger.warn('Phase transition failed', {
83
+ correlationId,
84
+ projectId,
85
+ fromPhase: project.phase,
86
+ targetPhase,
87
+ error: result.error
88
+ });
89
+ return {
90
+ success: false,
91
+ message: result.error || 'Phase transition failed',
92
+ auditEntry: result.auditEntry
93
+ };
94
+ }
95
+ // Save updated project
96
+ if (result.updatedProject) {
97
+ await this.projectRepository.save(result.updatedProject);
98
+ // Generate phase-specific deliverables if needed
99
+ await this.generatePhaseDeliverables(result.updatedProject, targetPhase);
100
+ }
101
+ this.logger.info('Phase transition completed successfully', {
102
+ correlationId,
103
+ projectId,
104
+ fromPhase: project.phase,
105
+ targetPhase
106
+ });
107
+ const nextSteps = this.getNextSteps(result.updatedProject || project, targetPhase);
108
+ return {
109
+ success: true,
110
+ updatedProject: result.updatedProject,
111
+ message: `Project successfully transitioned to ${targetPhase} phase`,
112
+ auditEntry: result.auditEntry,
113
+ nextSteps
114
+ };
115
+ }
116
+ async rollbackToPreviousPhase(projectId, triggeredBy) {
117
+ const correlationId = uuidv4();
118
+ this.logger.info('Rolling back project to previous phase', {
119
+ correlationId,
120
+ projectId,
121
+ triggeredBy
122
+ });
123
+ const project = await this.projectRepository.findById(projectId);
124
+ if (!project) {
125
+ return {
126
+ success: false,
127
+ message: `Project not found: ${projectId}`
128
+ };
129
+ }
130
+ const previousPhase = this.stateMachine.getPreviousPhase(project.phase);
131
+ if (!previousPhase) {
132
+ return {
133
+ success: false,
134
+ message: `Project is already at initial phase: ${project.phase}`
135
+ };
136
+ }
137
+ const result = await this.stateMachine.executeTransition(project, previousPhase, triggeredBy);
138
+ if (!result.success) {
139
+ this.logger.warn('Phase rollback failed', {
140
+ correlationId,
141
+ projectId,
142
+ fromPhase: project.phase,
143
+ targetPhase: previousPhase,
144
+ error: result.error
145
+ });
146
+ return {
147
+ success: false,
148
+ message: result.error || 'Phase rollback failed',
149
+ auditEntry: result.auditEntry
150
+ };
151
+ }
152
+ // Save updated project
153
+ if (result.updatedProject) {
154
+ await this.projectRepository.save(result.updatedProject);
155
+ // Reset approvals for rolled back phase
156
+ await this.resetPhaseApprovals(result.updatedProject, project.phase);
157
+ }
158
+ this.logger.info('Phase rollback completed successfully', {
159
+ correlationId,
160
+ projectId,
161
+ fromPhase: project.phase,
162
+ targetPhase: previousPhase
163
+ });
164
+ return {
165
+ success: true,
166
+ updatedProject: result.updatedProject,
167
+ message: `Project rolled back to ${previousPhase} phase`,
168
+ auditEntry: result.auditEntry
169
+ };
170
+ }
171
+ async updateApprovalStatus(projectId, phase, approval, triggeredBy) {
172
+ const correlationId = uuidv4();
173
+ this.logger.info('Updating approval status', {
174
+ correlationId,
175
+ projectId,
176
+ phase,
177
+ approval,
178
+ triggeredBy
179
+ });
180
+ const updatedProject = await this.projectService.updateApprovalStatus(projectId, phase, approval);
181
+ // Update spec.json file
182
+ const specContent = await this.templateService.generateSpecJson(updatedProject);
183
+ await this.templateService.writeProjectFile(updatedProject, 'spec.json', specContent);
184
+ // Check if project can progress to next phase
185
+ const nextPhase = this.stateMachine.getNextPhase(updatedProject.phase);
186
+ let canProgressToNext = false;
187
+ if (nextPhase) {
188
+ const validation = this.stateMachine.canTransition(updatedProject, nextPhase);
189
+ canProgressToNext = validation.allowed;
190
+ }
191
+ const message = approval.approved
192
+ ? `${phase} phase approved and ready for progression`
193
+ : `${phase} phase approval status updated`;
194
+ this.logger.info('Approval status updated successfully', {
195
+ correlationId,
196
+ projectId,
197
+ phase,
198
+ canProgressToNext
199
+ });
200
+ return {
201
+ success: true,
202
+ updatedProject,
203
+ message,
204
+ canProgressToNext
205
+ };
206
+ }
207
+ async getWorkflowStatus(projectId) {
208
+ const project = await this.projectRepository.findById(projectId);
209
+ if (!project) {
210
+ return null;
211
+ }
212
+ return {
213
+ project,
214
+ progress: this.stateMachine.getPhaseProgress(project),
215
+ auditTrail: this.stateMachine.getAuditTrail(projectId),
216
+ integrity: this.stateMachine.validateWorkflowIntegrity(project),
217
+ validTransitions: this.stateMachine.getValidTransitions(project.phase)
218
+ };
219
+ }
220
+ async validateWorkflowState(projectId) {
221
+ const status = await this.getWorkflowStatus(projectId);
222
+ if (!status) {
223
+ return {
224
+ isValid: false,
225
+ violations: ['Project not found'],
226
+ recommendations: [],
227
+ canProgress: false
228
+ };
229
+ }
230
+ const integrity = status.integrity;
231
+ const progress = status.progress;
232
+ return {
233
+ isValid: integrity.isValid,
234
+ violations: integrity.violations,
235
+ recommendations: integrity.recommendations,
236
+ canProgress: progress.canProgress,
237
+ nextPhase: progress.nextPhase
238
+ };
239
+ }
240
+ async generatePhaseDeliverables(project, phase) {
241
+ try {
242
+ switch (phase) {
243
+ case WorkflowPhase.REQUIREMENTS:
244
+ if (!project.metadata.approvals.requirements.generated) {
245
+ const content = await this.templateService.generateRequirementsTemplate(project);
246
+ await this.templateService.writeProjectFile(project, 'requirements.md', content);
247
+ await this.projectService.updateApprovalStatus(project.id, 'requirements', { generated: true });
248
+ }
249
+ break;
250
+ case WorkflowPhase.DESIGN:
251
+ if (!project.metadata.approvals.design.generated) {
252
+ const content = await this.templateService.generateDesignTemplate(project);
253
+ await this.templateService.writeProjectFile(project, 'design.md', content);
254
+ await this.projectService.updateApprovalStatus(project.id, 'design', { generated: true });
255
+ }
256
+ break;
257
+ case WorkflowPhase.TASKS:
258
+ if (!project.metadata.approvals.tasks.generated) {
259
+ const content = await this.templateService.generateTasksTemplate(project);
260
+ await this.templateService.writeProjectFile(project, 'tasks.md', content);
261
+ await this.projectService.updateApprovalStatus(project.id, 'tasks', { generated: true });
262
+ }
263
+ break;
264
+ }
265
+ }
266
+ catch (error) {
267
+ this.logger.error('Failed to generate phase deliverables', error, {
268
+ projectId: project.id,
269
+ phase
270
+ });
271
+ }
272
+ }
273
+ async resetPhaseApprovals(project, rolledBackFromPhase) {
274
+ // Reset approvals for the phase we're rolling back from
275
+ const resetApprovals = {};
276
+ switch (rolledBackFromPhase) {
277
+ case WorkflowPhase.REQUIREMENTS:
278
+ resetApprovals.requirements = { approved: false };
279
+ break;
280
+ case WorkflowPhase.DESIGN:
281
+ resetApprovals.design = { approved: false };
282
+ break;
283
+ case WorkflowPhase.TASKS:
284
+ resetApprovals.tasks = { approved: false };
285
+ break;
286
+ case WorkflowPhase.IMPLEMENTATION:
287
+ // No approvals to reset for implementation phase
288
+ break;
289
+ }
290
+ for (const [phase, approval] of Object.entries(resetApprovals)) {
291
+ await this.projectService.updateApprovalStatus(project.id, phase, approval);
292
+ }
293
+ }
294
+ getNextSteps(project, currentPhase) {
295
+ const steps = [];
296
+ switch (currentPhase) {
297
+ case WorkflowPhase.INIT:
298
+ steps.push('Run sdd-requirements to generate requirements document');
299
+ break;
300
+ case WorkflowPhase.REQUIREMENTS:
301
+ if (!project.metadata.approvals.requirements.approved) {
302
+ steps.push('Review and approve requirements document');
303
+ steps.push('Run sdd-design after requirements approval');
304
+ }
305
+ else {
306
+ steps.push('Run sdd-design to generate technical design');
307
+ }
308
+ break;
309
+ case WorkflowPhase.DESIGN:
310
+ if (!project.metadata.approvals.design.approved) {
311
+ steps.push('Review and approve design document');
312
+ steps.push('Run sdd-tasks after design approval');
313
+ }
314
+ else {
315
+ steps.push('Run sdd-tasks to generate implementation tasks');
316
+ }
317
+ break;
318
+ case WorkflowPhase.TASKS:
319
+ if (!project.metadata.approvals.tasks.approved) {
320
+ steps.push('Review and approve task breakdown');
321
+ steps.push('Begin implementation after tasks approval');
322
+ }
323
+ else {
324
+ steps.push('Begin implementation following the task breakdown');
325
+ steps.push('Use sdd-quality-check for code reviews');
326
+ }
327
+ break;
328
+ case WorkflowPhase.IMPLEMENTATION:
329
+ steps.push('Continue implementation following approved tasks');
330
+ steps.push('Use sdd-quality-check for ongoing code quality');
331
+ steps.push('Update task completion status as you progress');
332
+ break;
333
+ }
334
+ return steps;
335
+ }
336
+ };
337
+ WorkflowEngineService = __decorate([
338
+ injectable(),
339
+ __param(0, inject(TYPES.ProjectRepository)),
340
+ __param(1, inject(TYPES.ProjectService)),
341
+ __param(2, inject(TYPES.TemplateService)),
342
+ __param(3, inject(TYPES.LoggerPort)),
343
+ __param(4, inject(TYPES.ValidationPort)),
344
+ __metadata("design:paramtypes", [Object, ProjectService,
345
+ TemplateService, Object, Object])
346
+ ], WorkflowEngineService);
347
+ export { WorkflowEngineService };
348
+ //# sourceMappingURL=WorkflowEngineService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowEngineService.js","sourceRoot":"","sources":["../../../src/application/services/WorkflowEngineService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { Project, WorkflowPhase } from '../../domain/types.js';
2
+ import { ProjectRepository, LoggerPort } from '../../domain/ports.js';
3
+ export interface WorkflowValidationResult {
4
+ canProgress: boolean;
5
+ reason?: string;
6
+ requiredApprovals?: string[];
7
+ }
8
+ export declare class WorkflowService {
9
+ private readonly projectRepository;
10
+ private readonly logger;
11
+ constructor(projectRepository: ProjectRepository, logger: LoggerPort);
12
+ validatePhaseTransition(projectId: string, targetPhase: WorkflowPhase): Promise<WorkflowValidationResult>;
13
+ private getPhaseValidation;
14
+ getWorkflowStatus(projectId: string): Promise<{
15
+ project: Project;
16
+ currentPhase: WorkflowPhase;
17
+ nextPhase?: WorkflowPhase;
18
+ canProgress: boolean;
19
+ blockers?: string[];
20
+ } | null>;
21
+ private getNextPhase;
22
+ }
@@ -0,0 +1,147 @@
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 { WorkflowPhase } from '../../domain/types.js';
17
+ let WorkflowService = class WorkflowService {
18
+ projectRepository;
19
+ logger;
20
+ constructor(projectRepository, logger) {
21
+ this.projectRepository = projectRepository;
22
+ this.logger = logger;
23
+ }
24
+ async validatePhaseTransition(projectId, targetPhase) {
25
+ const correlationId = uuidv4();
26
+ this.logger.info('Validating phase transition', {
27
+ correlationId,
28
+ projectId,
29
+ targetPhase
30
+ });
31
+ const project = await this.projectRepository.findById(projectId);
32
+ if (!project) {
33
+ return {
34
+ canProgress: false,
35
+ reason: `Project not found: ${projectId}`
36
+ };
37
+ }
38
+ const validation = this.getPhaseValidation(project, targetPhase);
39
+ this.logger.info('Phase transition validation result', {
40
+ correlationId,
41
+ projectId,
42
+ currentPhase: project.phase,
43
+ targetPhase,
44
+ canProgress: validation.canProgress,
45
+ reason: validation.reason
46
+ });
47
+ return validation;
48
+ }
49
+ getPhaseValidation(project, targetPhase) {
50
+ const { phase, metadata } = project;
51
+ const { approvals } = metadata;
52
+ switch (targetPhase) {
53
+ case WorkflowPhase.REQUIREMENTS:
54
+ if (phase !== WorkflowPhase.INIT) {
55
+ return {
56
+ canProgress: false,
57
+ reason: 'Requirements phase can only be entered from INIT phase'
58
+ };
59
+ }
60
+ return { canProgress: true };
61
+ case WorkflowPhase.DESIGN:
62
+ if (!approvals.requirements.generated || !approvals.requirements.approved) {
63
+ return {
64
+ canProgress: false,
65
+ reason: 'Requirements must be generated and approved before design phase',
66
+ requiredApprovals: ['requirements']
67
+ };
68
+ }
69
+ return { canProgress: true };
70
+ case WorkflowPhase.TASKS:
71
+ if (!approvals.design.generated || !approvals.design.approved) {
72
+ return {
73
+ canProgress: false,
74
+ reason: 'Design must be generated and approved before tasks phase',
75
+ requiredApprovals: ['design']
76
+ };
77
+ }
78
+ return { canProgress: true };
79
+ case WorkflowPhase.IMPLEMENTATION:
80
+ if (!approvals.tasks.generated || !approvals.tasks.approved) {
81
+ return {
82
+ canProgress: false,
83
+ reason: 'Tasks must be generated and approved before implementation phase',
84
+ requiredApprovals: ['tasks']
85
+ };
86
+ }
87
+ return { canProgress: true };
88
+ default:
89
+ return {
90
+ canProgress: false,
91
+ reason: `Unknown target phase: ${targetPhase}`
92
+ };
93
+ }
94
+ }
95
+ async getWorkflowStatus(projectId) {
96
+ const correlationId = uuidv4();
97
+ this.logger.info('Getting workflow status', {
98
+ correlationId,
99
+ projectId
100
+ });
101
+ const project = await this.projectRepository.findById(projectId);
102
+ if (!project) {
103
+ return null;
104
+ }
105
+ const nextPhase = this.getNextPhase(project.phase);
106
+ let canProgress = false;
107
+ let blockers = [];
108
+ if (nextPhase) {
109
+ const validation = await this.validatePhaseTransition(projectId, nextPhase);
110
+ canProgress = validation.canProgress;
111
+ if (!canProgress && validation.reason) {
112
+ blockers.push(validation.reason);
113
+ }
114
+ }
115
+ return {
116
+ project,
117
+ currentPhase: project.phase,
118
+ nextPhase,
119
+ canProgress,
120
+ blockers: blockers.length > 0 ? blockers : undefined
121
+ };
122
+ }
123
+ getNextPhase(currentPhase) {
124
+ switch (currentPhase) {
125
+ case WorkflowPhase.INIT:
126
+ return WorkflowPhase.REQUIREMENTS;
127
+ case WorkflowPhase.REQUIREMENTS:
128
+ return WorkflowPhase.DESIGN;
129
+ case WorkflowPhase.DESIGN:
130
+ return WorkflowPhase.TASKS;
131
+ case WorkflowPhase.TASKS:
132
+ return WorkflowPhase.IMPLEMENTATION;
133
+ case WorkflowPhase.IMPLEMENTATION:
134
+ return undefined; // Final phase
135
+ default:
136
+ return undefined;
137
+ }
138
+ }
139
+ };
140
+ WorkflowService = __decorate([
141
+ injectable(),
142
+ __param(0, inject(TYPES.ProjectRepository)),
143
+ __param(1, inject(TYPES.LoggerPort)),
144
+ __metadata("design:paramtypes", [Object, Object])
145
+ ], WorkflowService);
146
+ export { WorkflowService };
147
+ //# sourceMappingURL=WorkflowService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowService.js","sourceRoot":"","sources":["../../../src/application/services/WorkflowService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { Project, WorkflowPhase } from '../../domain/types.js';
2
+ import { ProjectRepository, FileSystemPort, ValidationPort, LoggerPort } from '../../domain/ports.js';
3
+ export interface PhaseCompletionValidation {
4
+ isComplete: boolean;
5
+ missingItems: string[];
6
+ qualityIssues: string[];
7
+ readinessScore: number;
8
+ recommendations: string[];
9
+ }
10
+ export interface CrossPhaseValidation {
11
+ isConsistent: boolean;
12
+ inconsistencies: string[];
13
+ traceabilityIssues: string[];
14
+ coverageGaps: string[];
15
+ }
16
+ export interface WorkflowRollbackValidation {
17
+ canRollback: boolean;
18
+ reason?: string;
19
+ impactedItems: string[];
20
+ rollbackActions: string[];
21
+ }
22
+ export declare class WorkflowValidationService {
23
+ private readonly projectRepository;
24
+ private readonly fileSystem;
25
+ private readonly validation;
26
+ private readonly logger;
27
+ private readonly stateMachine;
28
+ constructor(projectRepository: ProjectRepository, fileSystem: FileSystemPort, validation: ValidationPort, logger: LoggerPort);
29
+ validateRequirementsCompletion(projectId: string): Promise<PhaseCompletionValidation>;
30
+ validateDesignApproval(projectId: string): Promise<PhaseCompletionValidation>;
31
+ validateTaskApproval(projectId: string): Promise<PhaseCompletionValidation>;
32
+ validateCrossPhaseConsistency(projectId: string): Promise<CrossPhaseValidation>;
33
+ validateWorkflowRollback(projectId: string, targetPhase: WorkflowPhase): Promise<WorkflowRollbackValidation>;
34
+ generateComprehensiveValidationReport(projectId: string): Promise<{
35
+ project: Project;
36
+ overall: {
37
+ isValid: boolean;
38
+ readinessScore: number;
39
+ phase: WorkflowPhase;
40
+ canProgress: boolean;
41
+ };
42
+ phases: {
43
+ requirements: PhaseCompletionValidation;
44
+ design: PhaseCompletionValidation;
45
+ tasks: PhaseCompletionValidation;
46
+ };
47
+ crossPhase: CrossPhaseValidation;
48
+ recommendations: string[];
49
+ nextActions: string[];
50
+ } | null>;
51
+ }