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,485 @@
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 { ProjectService } from './ProjectService.js';
18
+ import { TemplateService } from './TemplateService.js';
19
+ let ProjectInitializationService = class ProjectInitializationService {
20
+ fileSystem;
21
+ projectService;
22
+ templateService;
23
+ validation;
24
+ logger;
25
+ constructor(fileSystem, projectService, templateService, validation, logger) {
26
+ this.fileSystem = fileSystem;
27
+ this.projectService = projectService;
28
+ this.templateService = templateService;
29
+ this.validation = validation;
30
+ this.logger = logger;
31
+ }
32
+ async initializeProject(options) {
33
+ const correlationId = uuidv4();
34
+ this.logger.info('Initializing new SDD project', {
35
+ correlationId,
36
+ name: options.name,
37
+ path: options.path,
38
+ language: options.language,
39
+ template: options.template
40
+ });
41
+ const createdFiles = [];
42
+ try {
43
+ // Validate options
44
+ await this.validateInitializationOptions(options);
45
+ // Check if project already exists
46
+ const discovery = await this.discoverExistingProject(options.path);
47
+ if (discovery.exists && discovery.project) {
48
+ return {
49
+ success: false,
50
+ message: `Project already exists at ${options.path}`,
51
+ createdFiles: []
52
+ };
53
+ }
54
+ // Create project directory structure
55
+ const directories = await this.createDirectoryStructure(options.path);
56
+ // Create new project
57
+ const project = await this.projectService.createProject(options.name, options.path, options.language || 'en');
58
+ // Generate initial project files
59
+ const generatedFiles = await this.generateInitialFiles(project, options);
60
+ createdFiles.push(...directories, ...generatedFiles);
61
+ // Validate project setup
62
+ const validation = await this.validateProjectSetup(project);
63
+ if (!validation.isValid) {
64
+ this.logger.warn('Project validation issues found', {
65
+ correlationId,
66
+ projectId: project.id,
67
+ issues: validation.issues
68
+ });
69
+ }
70
+ this.logger.info('Project initialization completed successfully', {
71
+ correlationId,
72
+ projectId: project.id,
73
+ filesCreated: createdFiles.length
74
+ });
75
+ return {
76
+ success: true,
77
+ project,
78
+ message: `Project "${options.name}" initialized successfully`,
79
+ createdFiles
80
+ };
81
+ }
82
+ catch (error) {
83
+ this.logger.error('Project initialization failed', error, {
84
+ correlationId,
85
+ name: options.name,
86
+ path: options.path
87
+ });
88
+ return {
89
+ success: false,
90
+ message: `Failed to initialize project: ${error.message}`,
91
+ createdFiles
92
+ };
93
+ }
94
+ }
95
+ async discoverExistingProject(projectPath) {
96
+ const correlationId = uuidv4();
97
+ this.logger.debug('Discovering existing project', {
98
+ correlationId,
99
+ projectPath
100
+ });
101
+ try {
102
+ // Check for existing project by path
103
+ const existingProject = await this.projectService.getProjectByPath(projectPath);
104
+ // Check directory structure
105
+ const requiredDirectories = [
106
+ `${projectPath}/.kiro`,
107
+ `${projectPath}/.kiro/specs`,
108
+ `${projectPath}/.kiro/steering`
109
+ ];
110
+ const missingDirectories = [];
111
+ const hasValidStructure = await this.checkDirectoryStructure(requiredDirectories, missingDirectories);
112
+ // Check for required files
113
+ const requiredFiles = [
114
+ `${projectPath}/.kiro/specs/spec.json`
115
+ ];
116
+ const missingFiles = [];
117
+ for (const file of requiredFiles) {
118
+ if (!(await this.fileSystem.exists(file))) {
119
+ missingFiles.push(file);
120
+ }
121
+ }
122
+ const result = {
123
+ exists: !!existingProject,
124
+ hasValidStructure
125
+ };
126
+ if (existingProject) {
127
+ result.project = existingProject;
128
+ }
129
+ if (missingDirectories.length > 0) {
130
+ result.missingDirectories = missingDirectories;
131
+ }
132
+ if (missingFiles.length > 0) {
133
+ result.missingFiles = missingFiles;
134
+ }
135
+ this.logger.debug('Project discovery completed', {
136
+ correlationId,
137
+ projectPath,
138
+ exists: result.exists,
139
+ hasValidStructure: result.hasValidStructure
140
+ });
141
+ return result;
142
+ }
143
+ catch (error) {
144
+ this.logger.error('Project discovery failed', error, {
145
+ correlationId,
146
+ projectPath
147
+ });
148
+ return {
149
+ exists: false,
150
+ hasValidStructure: false,
151
+ missingDirectories: ['Unable to check directories'],
152
+ missingFiles: ['Unable to check files']
153
+ };
154
+ }
155
+ }
156
+ async validateProjectSetup(project) {
157
+ const correlationId = uuidv4();
158
+ this.logger.debug('Validating project setup', {
159
+ correlationId,
160
+ projectId: project.id
161
+ });
162
+ const issues = [];
163
+ const warnings = [];
164
+ const recommendations = [];
165
+ try {
166
+ // Check directory structure
167
+ const requiredDirectories = [
168
+ `${project.path}/.kiro`,
169
+ `${project.path}/.kiro/specs`,
170
+ `${project.path}/.kiro/specs/${project.name}`,
171
+ `${project.path}/.kiro/steering`
172
+ ];
173
+ for (const dir of requiredDirectories) {
174
+ if (!(await this.fileSystem.exists(dir))) {
175
+ issues.push(`Missing required directory: ${dir}`);
176
+ }
177
+ }
178
+ // Check required files
179
+ const specJsonPath = `${project.path}/.kiro/specs/${project.name}/spec.json`;
180
+ if (!(await this.fileSystem.exists(specJsonPath))) {
181
+ issues.push(`Missing spec.json file: ${specJsonPath}`);
182
+ }
183
+ else {
184
+ try {
185
+ const specContent = await this.fileSystem.readFile(specJsonPath);
186
+ JSON.parse(specContent); // Validate JSON format
187
+ }
188
+ catch {
189
+ issues.push(`Invalid JSON format in spec.json: ${specJsonPath}`);
190
+ }
191
+ }
192
+ // Check for steering files
193
+ const steeringFiles = [
194
+ `${project.path}/.kiro/steering/product.md`,
195
+ `${project.path}/.kiro/steering/tech.md`,
196
+ `${project.path}/.kiro/steering/structure.md`
197
+ ];
198
+ let steeringCount = 0;
199
+ for (const file of steeringFiles) {
200
+ if (await this.fileSystem.exists(file)) {
201
+ steeringCount++;
202
+ }
203
+ }
204
+ if (steeringCount === 0) {
205
+ warnings.push('No steering documents found - consider creating them for better AI guidance');
206
+ recommendations.push('Run steering document generation tools to create project guidance');
207
+ }
208
+ // Check project metadata consistency
209
+ if (project.phase !== WorkflowPhase.INIT) {
210
+ warnings.push(`Project phase is ${project.phase} but should be INIT for new projects`);
211
+ }
212
+ const { approvals } = project.metadata;
213
+ if (approvals.requirements.generated || approvals.design.generated || approvals.tasks.generated) {
214
+ warnings.push('New project has pre-existing approval flags - this may indicate data inconsistency');
215
+ }
216
+ // Recommendations for new projects
217
+ if (issues.length === 0) {
218
+ recommendations.push('Project setup is valid - ready to begin requirements phase');
219
+ recommendations.push('Consider adding a README.md file to document project purpose');
220
+ recommendations.push('Set up version control (git) if not already configured');
221
+ }
222
+ this.logger.debug('Project validation completed', {
223
+ correlationId,
224
+ projectId: project.id,
225
+ issueCount: issues.length,
226
+ warningCount: warnings.length
227
+ });
228
+ return {
229
+ isValid: issues.length === 0,
230
+ issues,
231
+ warnings,
232
+ recommendations
233
+ };
234
+ }
235
+ catch (error) {
236
+ this.logger.error('Project validation failed', error, {
237
+ correlationId,
238
+ projectId: project.id
239
+ });
240
+ return {
241
+ isValid: false,
242
+ issues: [`Validation error: ${error.message}`],
243
+ warnings: [],
244
+ recommendations: []
245
+ };
246
+ }
247
+ }
248
+ async repairProjectStructure(project, issues) {
249
+ const correlationId = uuidv4();
250
+ this.logger.info('Repairing project structure', {
251
+ correlationId,
252
+ projectId: project.id,
253
+ issueCount: issues.length
254
+ });
255
+ const repairedItems = [];
256
+ const remainingIssues = [];
257
+ for (const issue of issues) {
258
+ try {
259
+ if (issue.includes('Missing required directory:')) {
260
+ const dirPath = issue.split(': ')[1];
261
+ if (dirPath) {
262
+ await this.fileSystem.mkdir(dirPath);
263
+ repairedItems.push(`Created directory: ${dirPath}`);
264
+ }
265
+ else {
266
+ remainingIssues.push(issue);
267
+ }
268
+ }
269
+ else if (issue.includes('Missing spec.json file:')) {
270
+ const specContent = await this.templateService.generateSpecJson(project);
271
+ await this.templateService.writeProjectFile(project, 'spec.json', specContent);
272
+ repairedItems.push('Created spec.json file');
273
+ }
274
+ else {
275
+ remainingIssues.push(issue);
276
+ }
277
+ }
278
+ catch (error) {
279
+ this.logger.error('Failed to repair issue', error, {
280
+ correlationId,
281
+ issue
282
+ });
283
+ remainingIssues.push(issue);
284
+ }
285
+ }
286
+ this.logger.info('Project structure repair completed', {
287
+ correlationId,
288
+ projectId: project.id,
289
+ repairedCount: repairedItems.length,
290
+ remainingCount: remainingIssues.length
291
+ });
292
+ return {
293
+ success: remainingIssues.length < issues.length,
294
+ repairedItems,
295
+ remainingIssues
296
+ };
297
+ }
298
+ async getProjectStatus(projectPath) {
299
+ const discovery = await this.discoverExistingProject(projectPath);
300
+ let validation;
301
+ const recommendations = [];
302
+ if (discovery.project) {
303
+ validation = await this.validateProjectSetup(discovery.project);
304
+ recommendations.push(...validation.recommendations);
305
+ }
306
+ else if (discovery.hasValidStructure) {
307
+ recommendations.push('Project structure exists but no project metadata found');
308
+ recommendations.push('Consider running project initialization to restore metadata');
309
+ }
310
+ else {
311
+ recommendations.push('No SDD project found at this path');
312
+ recommendations.push('Run sdd-init to initialize a new SDD project');
313
+ }
314
+ const result = {
315
+ discovery,
316
+ recommendations
317
+ };
318
+ if (validation) {
319
+ result.validation = validation;
320
+ }
321
+ return result;
322
+ }
323
+ async validateInitializationOptions(options) {
324
+ if (!options.name || options.name.trim() === '') {
325
+ throw new Error('Project name is required');
326
+ }
327
+ if (!options.path || options.path.trim() === '') {
328
+ throw new Error('Project path is required');
329
+ }
330
+ // Validate name format (basic validation)
331
+ if (!/^[a-zA-Z0-9_-]+$/.test(options.name)) {
332
+ throw new Error('Project name can only contain letters, numbers, underscores, and hyphens');
333
+ }
334
+ // Validate language
335
+ if (options.language && !['en', 'ja', 'zh-TW'].includes(options.language)) {
336
+ throw new Error('Language must be one of: en, ja, zh-TW');
337
+ }
338
+ // Validate template
339
+ if (options.template && !['basic', 'api', 'web', 'library'].includes(options.template)) {
340
+ throw new Error('Template must be one of: basic, api, web, library');
341
+ }
342
+ }
343
+ async createDirectoryStructure(projectPath) {
344
+ const directories = [
345
+ `${projectPath}/.kiro`,
346
+ `${projectPath}/.kiro/specs`,
347
+ `${projectPath}/.kiro/steering`,
348
+ `${projectPath}/.claude`,
349
+ `${projectPath}/.claude/commands`
350
+ ];
351
+ const createdDirectories = [];
352
+ for (const dir of directories) {
353
+ if (!(await this.fileSystem.exists(dir))) {
354
+ await this.fileSystem.mkdir(dir);
355
+ createdDirectories.push(dir);
356
+ }
357
+ }
358
+ return createdDirectories;
359
+ }
360
+ async generateInitialFiles(project, options) {
361
+ const generatedFiles = [];
362
+ // Generate spec.json
363
+ const specContent = await this.templateService.generateSpecJson(project);
364
+ await this.templateService.writeProjectFile(project, 'spec.json', specContent);
365
+ generatedFiles.push(`${project.path}/.kiro/specs/${project.name}/spec.json`);
366
+ // Generate README template if requested
367
+ if (options.template && options.template !== 'basic') {
368
+ const readmeContent = this.generateReadmeTemplate(project, options);
369
+ await this.fileSystem.writeFile(`${project.path}/README.md`, readmeContent);
370
+ generatedFiles.push(`${project.path}/README.md`);
371
+ }
372
+ // Generate basic steering documents if template specified
373
+ if (options.template && options.template !== 'basic') {
374
+ const steeringFiles = await this.generateBasicSteeringDocuments(project, options);
375
+ generatedFiles.push(...steeringFiles);
376
+ }
377
+ return generatedFiles;
378
+ }
379
+ generateReadmeTemplate(project, options) {
380
+ return `# ${project.name}
381
+
382
+ ${options.description || 'Project description goes here.'}
383
+
384
+ ## Technology Stack
385
+
386
+ ${options.technology || 'Technology stack to be defined.'}
387
+
388
+ ## Development Workflow
389
+
390
+ This project follows Spec-Driven Development (SDD) methodology:
391
+
392
+ 1. **Requirements** - Define project requirements using EARS format
393
+ 2. **Design** - Create technical design and architecture
394
+ 3. **Tasks** - Break down implementation into manageable tasks
395
+ 4. **Implementation** - Execute tasks with quality gates
396
+
397
+ ## Getting Started
398
+
399
+ 1. Review requirements: \`.kiro/specs/${project.name}/requirements.md\`
400
+ 2. Check design: \`.kiro/specs/${project.name}/design.md\`
401
+ 3. Follow tasks: \`.kiro/specs/${project.name}/tasks.md\`
402
+
403
+ ## SDD Commands
404
+
405
+ - \`sdd-status\` - Check current project phase
406
+ - \`sdd-requirements\` - Generate/update requirements
407
+ - \`sdd-design\` - Generate/update design
408
+ - \`sdd-tasks\` - Generate/update tasks
409
+ - \`sdd-quality-check\` - Perform code quality review
410
+
411
+ Generated on: ${new Date().toISOString()}
412
+ `;
413
+ }
414
+ async generateBasicSteeringDocuments(project, options) {
415
+ const generatedFiles = [];
416
+ // Basic product steering
417
+ const productContent = `# Product Steering Document
418
+
419
+ ## Project: ${project.name}
420
+
421
+ ${options.description || 'Product description and objectives to be defined.'}
422
+
423
+ ## Target Users
424
+
425
+ - User persona 1
426
+ - User persona 2
427
+
428
+ ## Success Metrics
429
+
430
+ - Metric 1
431
+ - Metric 2
432
+
433
+ Generated on: ${new Date().toISOString()}
434
+ `;
435
+ await this.fileSystem.writeFile(`${project.path}/.kiro/steering/product.md`, productContent);
436
+ generatedFiles.push(`${project.path}/.kiro/steering/product.md`);
437
+ // Basic tech steering
438
+ const techContent = `# Technology Steering Document
439
+
440
+ ## Project: ${project.name}
441
+
442
+ ## Technology Stack
443
+
444
+ ${options.technology || 'Technology decisions to be defined.'}
445
+
446
+ ## Architecture Principles
447
+
448
+ - Principle 1
449
+ - Principle 2
450
+
451
+ ## Quality Standards
452
+
453
+ - Code quality requirements
454
+ - Testing requirements
455
+ - Performance requirements
456
+
457
+ Generated on: ${new Date().toISOString()}
458
+ `;
459
+ await this.fileSystem.writeFile(`${project.path}/.kiro/steering/tech.md`, techContent);
460
+ generatedFiles.push(`${project.path}/.kiro/steering/tech.md`);
461
+ return generatedFiles;
462
+ }
463
+ async checkDirectoryStructure(requiredDirectories, missingDirectories) {
464
+ let allExist = true;
465
+ for (const dir of requiredDirectories) {
466
+ if (!(await this.fileSystem.exists(dir))) {
467
+ missingDirectories.push(dir);
468
+ allExist = false;
469
+ }
470
+ }
471
+ return allExist;
472
+ }
473
+ };
474
+ ProjectInitializationService = __decorate([
475
+ injectable(),
476
+ __param(0, inject(TYPES.FileSystemPort)),
477
+ __param(1, inject(TYPES.ProjectService)),
478
+ __param(2, inject(TYPES.TemplateService)),
479
+ __param(3, inject(TYPES.ValidationPort)),
480
+ __param(4, inject(TYPES.LoggerPort)),
481
+ __metadata("design:paramtypes", [Object, ProjectService,
482
+ TemplateService, Object, Object])
483
+ ], ProjectInitializationService);
484
+ export { ProjectInitializationService };
485
+ //# sourceMappingURL=ProjectInitializationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectInitializationService.js","sourceRoot":"","sources":["../../../src/application/services/ProjectInitializationService.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAEL,aAAa,EACd,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AA2BhD,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;IAEU;IACA;IACC;IACD;IACJ;IAL7C,YACiD,UAA0B,EAC1B,cAA8B,EAC7B,eAAgC,EACjC,UAA0B,EAC9B,MAAkB;QAJd,eAAU,GAAV,UAAU,CAAgB;QAC1B,mBAAc,GAAd,cAAc,CAAgB;QAC7B,oBAAe,GAAf,eAAe,CAAiB;QACjC,eAAU,GAAV,UAAU,CAAgB;QAC9B,WAAM,GAAN,MAAM,CAAY;IAC5D,CAAC;IAEJ,KAAK,CAAC,iBAAiB,CAAC,OAAqC;QAM3D,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;QAE/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE;YAC/C,aAAa;YACb,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;QAEH,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,IAAI,CAAC;YACH,mBAAmB;YACnB,MAAM,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;YAElD,kCAAkC;YAClC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnE,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBAC1C,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,6BAA6B,OAAO,CAAC,IAAI,EAAE;oBACpD,YAAY,EAAE,EAAE;iBACjB,CAAC;YACJ,CAAC;YAED,qCAAqC;YACrC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEtE,qBAAqB;YACrB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CACrD,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,QAAQ,IAAI,IAAI,CACzB,CAAC;YAEF,iCAAiC;YACjC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACzE,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,EAAE,GAAG,cAAc,CAAC,CAAC;YAErD,yBAAyB;YACzB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;oBAClD,aAAa;oBACb,SAAS,EAAE,OAAO,CAAC,EAAE;oBACrB,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+CAA+C,EAAE;gBAChE,aAAa;gBACb,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,YAAY,EAAE,YAAY,CAAC,MAAM;aAClC,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO;gBACP,OAAO,EAAE,YAAY,OAAO,CAAC,IAAI,4BAA4B;gBAC7D,YAAY;aACb,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAc,EAAE;gBACjE,aAAa;gBACb,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,iCAAkC,KAAe,CAAC,OAAO,EAAE;gBACpE,YAAY;aACb,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,WAAmB;QAC/C,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;QAE/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;YAChD,aAAa;YACb,WAAW;SACZ,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,qCAAqC;YACrC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAEhF,4BAA4B;YAC5B,MAAM,mBAAmB,GAAG;gBAC1B,GAAG,WAAW,QAAQ;gBACtB,GAAG,WAAW,cAAc;gBAC5B,GAAG,WAAW,iBAAiB;aAChC,CAAC;YAEF,MAAM,kBAAkB,GAAa,EAAE,CAAC;YACxC,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAC1D,mBAAmB,EACnB,kBAAkB,CACnB,CAAC;YAEF,2BAA2B;YAC3B,MAAM,aAAa,GAAG;gBACpB,GAAG,WAAW,wBAAwB;aACvC,CAAC;YAEF,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBAC1C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAA2B;gBACrC,MAAM,EAAE,CAAC,CAAC,eAAe;gBACzB,iBAAiB;aAClB,CAAC;YAEF,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,CAAC,OAAO,GAAG,eAAe,CAAC;YACnC,CAAC;YACD,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;YACjD,CAAC;YACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;YACrC,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;gBAC/C,aAAa;gBACb,WAAW;gBACX,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;aAC5C,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAEhB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAc,EAAE;gBAC5D,aAAa;gBACb,WAAW;aACZ,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,iBAAiB,EAAE,KAAK;gBACxB,kBAAkB,EAAE,CAAC,6BAA6B,CAAC;gBACnD,YAAY,EAAE,CAAC,uBAAuB,CAAC;aACxC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,OAAgB;QACzC,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;QAE/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE;YAC5C,aAAa;YACb,SAAS,EAAE,OAAO,CAAC,EAAE;SACtB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,eAAe,GAAa,EAAE,CAAC;QAErC,IAAI,CAAC;YACH,4BAA4B;YAC5B,MAAM,mBAAmB,GAAG;gBAC1B,GAAG,OAAO,CAAC,IAAI,QAAQ;gBACvB,GAAG,OAAO,CAAC,IAAI,cAAc;gBAC7B,GAAG,OAAO,CAAC,IAAI,gBAAgB,OAAO,CAAC,IAAI,EAAE;gBAC7C,GAAG,OAAO,CAAC,IAAI,iBAAiB;aACjC,CAAC;YAEF,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;gBACtC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBACzC,MAAM,CAAC,IAAI,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,uBAAuB;YACvB,MAAM,YAAY,GAAG,GAAG,OAAO,CAAC,IAAI,gBAAgB,OAAO,CAAC,IAAI,YAAY,CAAC;YAC7E,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;gBAClD,MAAM,CAAC,IAAI,CAAC,2BAA2B,YAAY,EAAE,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;oBACjE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,uBAAuB;gBAClD,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,CAAC,IAAI,CAAC,qCAAqC,YAAY,EAAE,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,MAAM,aAAa,GAAG;gBACpB,GAAG,OAAO,CAAC,IAAI,4BAA4B;gBAC3C,GAAG,OAAO,CAAC,IAAI,yBAAyB;gBACxC,GAAG,OAAO,CAAC,IAAI,8BAA8B;aAC9C,CAAC;YAEF,IAAI,aAAa,GAAG,CAAC,CAAC;YACtB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvC,aAAa,EAAE,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;gBAC7F,eAAe,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;YAC5F,CAAC;YAED,qCAAqC;YACrC,IAAI,OAAO,CAAC,KAAK,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,KAAK,sCAAsC,CAAC,CAAC;YACzF,CAAC;YAED,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;YACvC,IAAI,SAAS,CAAC,YAAY,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBAChG,QAAQ,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;YACtG,CAAC;YAED,mCAAmC;YACnC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,eAAe,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;gBACnF,eAAe,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;gBACrF,eAAe,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YACjF,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;gBAChD,aAAa;gBACb,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,UAAU,EAAE,MAAM,CAAC,MAAM;gBACzB,YAAY,EAAE,QAAQ,CAAC,MAAM;aAC9B,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;gBAC5B,MAAM;gBACN,QAAQ;gBACR,eAAe;aAChB,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAc,EAAE;gBAC7D,aAAa;gBACb,SAAS,EAAE,OAAO,CAAC,EAAE;aACtB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,qBAAsB,KAAe,CAAC,OAAO,EAAE,CAAC;gBACzD,QAAQ,EAAE,EAAE;gBACZ,eAAe,EAAE,EAAE;aACpB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,OAAgB,EAChB,MAAgB;QAMhB,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;QAE/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;YAC9C,aAAa;YACb,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,UAAU,EAAE,MAAM,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,MAAM,eAAe,GAAa,EAAE,CAAC;QAErC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,IAAI,KAAK,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;oBAClD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrC,IAAI,OAAO,EAAE,CAAC;wBACZ,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBACrC,aAAa,CAAC,IAAI,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;oBACtD,CAAC;yBAAM,CAAC;wBACN,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;oBACrD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBACzE,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;oBAC/E,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACN,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAc,EAAE;oBAC1D,aAAa;oBACb,KAAK;iBACN,CAAC,CAAC;gBACH,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;YACrD,aAAa;YACb,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,aAAa,EAAE,aAAa,CAAC,MAAM;YACnC,cAAc,EAAE,eAAe,CAAC,MAAM;SACvC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,eAAe,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;YAC/C,aAAa;YACb,eAAe;SAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,WAAmB;QAKxC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;QAClE,IAAI,UAA+C,CAAC;QACpD,MAAM,eAAe,GAAa,EAAE,CAAC;QAErC,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,UAAU,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAChE,eAAe,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,SAAS,CAAC,iBAAiB,EAAE,CAAC;YACvC,eAAe,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YAC/E,eAAe,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QACtF,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YAC1D,eAAe,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,MAAM,GAA2G;YACrH,SAAS;YACT,eAAe;SAChB,CAAC;QAEF,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QACjC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,6BAA6B,CAAC,OAAqC;QAC/E,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,0CAA0C;QAC1C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC9F,CAAC;QAED,oBAAoB;QACpB,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1E,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,oBAAoB;QACpB,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvF,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,wBAAwB,CAAC,WAAmB;QACxD,MAAM,WAAW,GAAG;YAClB,GAAG,WAAW,QAAQ;YACtB,GAAG,WAAW,cAAc;YAC5B,GAAG,WAAW,iBAAiB;YAC/B,GAAG,WAAW,UAAU;YACxB,GAAG,WAAW,mBAAmB;SAClC,CAAC;QAEF,MAAM,kBAAkB,GAAa,EAAE,CAAC;QAExC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,OAAgB,EAChB,OAAqC;QAErC,MAAM,cAAc,GAAa,EAAE,CAAC;QAEpC,qBAAqB;QACrB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACzE,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAC/E,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,gBAAgB,OAAO,CAAC,IAAI,YAAY,CAAC,CAAC;QAE7E,wCAAwC;QACxC,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACrD,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACpE,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,YAAY,EAAE,aAAa,CAAC,CAAC;YAC5E,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,YAAY,CAAC,CAAC;QACnD,CAAC;QAED,0DAA0D;QAC1D,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACrD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,8BAA8B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAClF,cAAc,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAEO,sBAAsB,CAC5B,OAAgB,EAChB,OAAqC;QAErC,OAAO,KAAK,OAAO,CAAC,IAAI;;EAE1B,OAAO,CAAC,WAAW,IAAI,gCAAgC;;;;EAIvD,OAAO,CAAC,UAAU,IAAI,iCAAiC;;;;;;;;;;;;;wCAajB,OAAO,CAAC,IAAI;iCACnB,OAAO,CAAC,IAAI;iCACZ,OAAO,CAAC,IAAI;;;;;;;;;;gBAU7B,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;CACvC,CAAC;IACA,CAAC;IAEO,KAAK,CAAC,8BAA8B,CAC1C,OAAgB,EAChB,OAAqC;QAErC,MAAM,cAAc,GAAa,EAAE,CAAC;QAEpC,yBAAyB;QACzB,MAAM,cAAc,GAAG;;cAEb,OAAO,CAAC,IAAI;;EAExB,OAAO,CAAC,WAAW,IAAI,mDAAmD;;;;;;;;;;;;gBAY5D,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;CACvC,CAAC;QAEE,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,4BAA4B,EAAE,cAAc,CAAC,CAAC;QAC7F,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,4BAA4B,CAAC,CAAC;QAEjE,sBAAsB;QACtB,MAAM,WAAW,GAAG;;cAEV,OAAO,CAAC,IAAI;;;;EAIxB,OAAO,CAAC,UAAU,IAAI,qCAAqC;;;;;;;;;;;;;gBAa7C,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;CACvC,CAAC;QAEE,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,yBAAyB,EAAE,WAAW,CAAC,CAAC;QACvF,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAE9D,OAAO,cAAc,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,uBAAuB,CACnC,mBAA6B,EAC7B,kBAA4B;QAE5B,IAAI,QAAQ,GAAG,IAAI,CAAC;QAEpB,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;YACtC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACzC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC7B,QAAQ,GAAG,KAAK,CAAC;YACnB,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAA;AAtiBY,4BAA4B;IADxC,UAAU,EAAE;IAGR,WAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IAC5B,WAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IAC5B,WAAA,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IAC7B,WAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IAC5B,WAAA,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;6CAHsC,cAAc;QACZ,eAAe;GAJvE,4BAA4B,CAsiBxC"}
@@ -0,0 +1,19 @@
1
+ import { Project, WorkflowPhase, PhaseApprovals } from '../../domain/types.js';
2
+ import { ProjectRepository, FileSystemPort, ValidationPort, LoggerPort } from '../../domain/ports.js';
3
+ export declare class ProjectService {
4
+ private readonly projectRepository;
5
+ private readonly fileSystem;
6
+ private readonly validation;
7
+ private readonly logger;
8
+ constructor(projectRepository: ProjectRepository, fileSystem: FileSystemPort, validation: ValidationPort, logger: LoggerPort);
9
+ createProject(name: string, path: string, language?: string): Promise<Project>;
10
+ getProject(id: string): Promise<Project | null>;
11
+ getProjectByPath(path: string): Promise<Project | null>;
12
+ listProjects(): Promise<Project[]>;
13
+ updateProjectPhase(projectId: string, phase: WorkflowPhase): Promise<Project>;
14
+ updateApprovalStatus(projectId: string, phaseType: keyof PhaseApprovals, status: Partial<{
15
+ generated: boolean;
16
+ approved: boolean;
17
+ }>): Promise<Project>;
18
+ private createProjectStructure;
19
+ }