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.
- package/LICENSE +21 -0
- package/README.md +256 -0
- package/dist/__tests__/setup.d.ts +44 -0
- package/dist/__tests__/setup.js +178 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/__tests__/test-helpers/mock-factories.d.ts +26 -0
- package/dist/__tests__/test-helpers/mock-factories.js +466 -0
- package/dist/__tests__/test-helpers/mock-factories.js.map +1 -0
- package/dist/adapters/cli/SDDToolAdapter.d.ts +26 -0
- package/dist/adapters/cli/SDDToolAdapter.js +273 -0
- package/dist/adapters/cli/SDDToolAdapter.js.map +1 -0
- package/dist/application/services/CodebaseAnalysisService.d.ts +38 -0
- package/dist/application/services/CodebaseAnalysisService.js +737 -0
- package/dist/application/services/CodebaseAnalysisService.js.map +1 -0
- package/dist/application/services/LocalizationService.d.ts +184 -0
- package/dist/application/services/LocalizationService.js +536 -0
- package/dist/application/services/LocalizationService.js.map +1 -0
- package/dist/application/services/ProjectContextService.d.ts +61 -0
- package/dist/application/services/ProjectContextService.js +550 -0
- package/dist/application/services/ProjectContextService.js.map +1 -0
- package/dist/application/services/ProjectInitializationService.d.ts +57 -0
- package/dist/application/services/ProjectInitializationService.js +485 -0
- package/dist/application/services/ProjectInitializationService.js.map +1 -0
- package/dist/application/services/ProjectService.d.ts +19 -0
- package/dist/application/services/ProjectService.js +159 -0
- package/dist/application/services/ProjectService.js.map +1 -0
- package/dist/application/services/QualityGateService.d.ts +62 -0
- package/dist/application/services/QualityGateService.js +428 -0
- package/dist/application/services/QualityGateService.js.map +1 -0
- package/dist/application/services/QualityService.d.ts +43 -0
- package/dist/application/services/QualityService.js +245 -0
- package/dist/application/services/QualityService.js.map +1 -0
- package/dist/application/services/SteeringDocumentService.d.ts +62 -0
- package/dist/application/services/SteeringDocumentService.js +694 -0
- package/dist/application/services/SteeringDocumentService.js.map +1 -0
- package/dist/application/services/TemplateService.d.ts +47 -0
- package/dist/application/services/TemplateService.js +438 -0
- package/dist/application/services/TemplateService.js.map +1 -0
- package/dist/application/services/WorkflowEngineService.d.ts +56 -0
- package/dist/application/services/WorkflowEngineService.js +348 -0
- package/dist/application/services/WorkflowEngineService.js.map +1 -0
- package/dist/application/services/WorkflowService.d.ts +22 -0
- package/dist/application/services/WorkflowService.js +147 -0
- package/dist/application/services/WorkflowService.js.map +1 -0
- package/dist/application/services/WorkflowValidationService.d.ts +51 -0
- package/dist/application/services/WorkflowValidationService.js +665 -0
- package/dist/application/services/WorkflowValidationService.js.map +1 -0
- package/dist/domain/context/ProjectContext.d.ts +350 -0
- package/dist/domain/context/ProjectContext.js +138 -0
- package/dist/domain/context/ProjectContext.js.map +1 -0
- package/dist/domain/i18n/index.d.ts +286 -0
- package/dist/domain/i18n/index.js +97 -0
- package/dist/domain/i18n/index.js.map +1 -0
- package/dist/domain/plugins/index.d.ts +498 -0
- package/dist/domain/plugins/index.js +157 -0
- package/dist/domain/plugins/index.js.map +1 -0
- package/dist/domain/ports.d.ts +54 -0
- package/dist/domain/ports.js +3 -0
- package/dist/domain/ports.js.map +1 -0
- package/dist/domain/quality/index.d.ts +361 -0
- package/dist/domain/quality/index.js +113 -0
- package/dist/domain/quality/index.js.map +1 -0
- package/dist/domain/services/DomainService.d.ts +18 -0
- package/dist/domain/services/DomainService.js +71 -0
- package/dist/domain/services/DomainService.js.map +1 -0
- package/dist/domain/templates/index.d.ts +158 -0
- package/dist/domain/templates/index.js +22 -0
- package/dist/domain/templates/index.js.map +1 -0
- package/dist/domain/types.d.ts +115 -0
- package/dist/domain/types.js +37 -0
- package/dist/domain/types.js.map +1 -0
- package/dist/domain/workflow/WorkflowStateMachine.d.ts +62 -0
- package/dist/domain/workflow/WorkflowStateMachine.js +286 -0
- package/dist/domain/workflow/WorkflowStateMachine.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +97 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/adapters/AjvValidationAdapter.d.ts +7 -0
- package/dist/infrastructure/adapters/AjvValidationAdapter.js +37 -0
- package/dist/infrastructure/adapters/AjvValidationAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/ConsoleLoggerAdapter.d.ts +8 -0
- package/dist/infrastructure/adapters/ConsoleLoggerAdapter.js +41 -0
- package/dist/infrastructure/adapters/ConsoleLoggerAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/FileBasedTaskTracker.d.ts +9 -0
- package/dist/infrastructure/adapters/FileBasedTaskTracker.js +41 -0
- package/dist/infrastructure/adapters/FileBasedTaskTracker.js.map +1 -0
- package/dist/infrastructure/adapters/HandlebarsTemplateEngine.d.ts +8 -0
- package/dist/infrastructure/adapters/HandlebarsTemplateEngine.js +38 -0
- package/dist/infrastructure/adapters/HandlebarsTemplateEngine.js.map +1 -0
- package/dist/infrastructure/adapters/JsonConfigurationAdapter.d.ts +7 -0
- package/dist/infrastructure/adapters/JsonConfigurationAdapter.js +24 -0
- package/dist/infrastructure/adapters/JsonConfigurationAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/LinusQualityAnalyzer.d.ts +9 -0
- package/dist/infrastructure/adapters/LinusQualityAnalyzer.js +75 -0
- package/dist/infrastructure/adapters/LinusQualityAnalyzer.js.map +1 -0
- package/dist/infrastructure/adapters/NodeFileSystemAdapter.d.ts +12 -0
- package/dist/infrastructure/adapters/NodeFileSystemAdapter.js +39 -0
- package/dist/infrastructure/adapters/NodeFileSystemAdapter.js.map +1 -0
- package/dist/infrastructure/di/container.d.ts +3 -0
- package/dist/infrastructure/di/container.js +98 -0
- package/dist/infrastructure/di/container.js.map +1 -0
- package/dist/infrastructure/di/types.d.ts +39 -0
- package/dist/infrastructure/di/types.js +45 -0
- package/dist/infrastructure/di/types.js.map +1 -0
- package/dist/infrastructure/i18n/I18nextService.d.ts +27 -0
- package/dist/infrastructure/i18n/I18nextService.js +357 -0
- package/dist/infrastructure/i18n/I18nextService.js.map +1 -0
- package/dist/infrastructure/mcp/CapabilityNegotiator.d.ts +21 -0
- package/dist/infrastructure/mcp/CapabilityNegotiator.js +75 -0
- package/dist/infrastructure/mcp/CapabilityNegotiator.js.map +1 -0
- package/dist/infrastructure/mcp/ErrorHandler.d.ts +29 -0
- package/dist/infrastructure/mcp/ErrorHandler.js +101 -0
- package/dist/infrastructure/mcp/ErrorHandler.js.map +1 -0
- package/dist/infrastructure/mcp/MCPServer.d.ts +25 -0
- package/dist/infrastructure/mcp/MCPServer.js +246 -0
- package/dist/infrastructure/mcp/MCPServer.js.map +1 -0
- package/dist/infrastructure/mcp/PromptManager.d.ts +18 -0
- package/dist/infrastructure/mcp/PromptManager.js +373 -0
- package/dist/infrastructure/mcp/PromptManager.js.map +1 -0
- package/dist/infrastructure/mcp/ResourceManager.d.ts +15 -0
- package/dist/infrastructure/mcp/ResourceManager.js +229 -0
- package/dist/infrastructure/mcp/ResourceManager.js.map +1 -0
- package/dist/infrastructure/mcp/SessionManager.d.ts +64 -0
- package/dist/infrastructure/mcp/SessionManager.js +221 -0
- package/dist/infrastructure/mcp/SessionManager.js.map +1 -0
- package/dist/infrastructure/mcp/ToolRegistry.d.ts +48 -0
- package/dist/infrastructure/mcp/ToolRegistry.js +235 -0
- package/dist/infrastructure/mcp/ToolRegistry.js.map +1 -0
- package/dist/infrastructure/platform/PlatformAdapter.d.ts +46 -0
- package/dist/infrastructure/platform/PlatformAdapter.js +355 -0
- package/dist/infrastructure/platform/PlatformAdapter.js.map +1 -0
- package/dist/infrastructure/plugins/HookSystem.d.ts +40 -0
- package/dist/infrastructure/plugins/HookSystem.js +415 -0
- package/dist/infrastructure/plugins/HookSystem.js.map +1 -0
- package/dist/infrastructure/plugins/PluginManager.d.ts +51 -0
- package/dist/infrastructure/plugins/PluginManager.js +650 -0
- package/dist/infrastructure/plugins/PluginManager.js.map +1 -0
- package/dist/infrastructure/plugins/PluginSteeringRegistry.d.ts +63 -0
- package/dist/infrastructure/plugins/PluginSteeringRegistry.js +439 -0
- package/dist/infrastructure/plugins/PluginSteeringRegistry.js.map +1 -0
- package/dist/infrastructure/plugins/PluginToolRegistry.d.ts +54 -0
- package/dist/infrastructure/plugins/PluginToolRegistry.js +490 -0
- package/dist/infrastructure/plugins/PluginToolRegistry.js.map +1 -0
- package/dist/infrastructure/quality/ASTAnalyzer.d.ts +65 -0
- package/dist/infrastructure/quality/ASTAnalyzer.js +439 -0
- package/dist/infrastructure/quality/ASTAnalyzer.js.map +1 -0
- package/dist/infrastructure/quality/LinusCodeReviewer.d.ts +52 -0
- package/dist/infrastructure/quality/LinusCodeReviewer.js +551 -0
- package/dist/infrastructure/quality/LinusCodeReviewer.js.map +1 -0
- package/dist/infrastructure/repositories/InMemoryProjectRepository.d.ts +10 -0
- package/dist/infrastructure/repositories/InMemoryProjectRepository.js +35 -0
- package/dist/infrastructure/repositories/InMemoryProjectRepository.js.map +1 -0
- package/dist/infrastructure/schemas/project.schema.d.ts +192 -0
- package/dist/infrastructure/schemas/project.schema.js +114 -0
- package/dist/infrastructure/schemas/project.schema.js.map +1 -0
- package/dist/infrastructure/templates/FileGenerator.d.ts +15 -0
- package/dist/infrastructure/templates/FileGenerator.js +385 -0
- package/dist/infrastructure/templates/FileGenerator.js.map +1 -0
- package/dist/infrastructure/templates/HandlebarsRenderer.d.ts +16 -0
- package/dist/infrastructure/templates/HandlebarsRenderer.js +252 -0
- package/dist/infrastructure/templates/HandlebarsRenderer.js.map +1 -0
- package/dist/infrastructure/templates/TemplateManager.d.ts +36 -0
- package/dist/infrastructure/templates/TemplateManager.js +777 -0
- package/dist/infrastructure/templates/TemplateManager.js.map +1 -0
- 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":"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"}
|
|
@@ -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
|
+
}
|