sdd-mcp-server 2.0.3 → 2.1.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/README.md +23 -4
- package/dist/adapters/cli/SDDToolAdapter.js +3 -3
- package/dist/application/services/ProjectContextService.js +4 -4
- package/dist/application/services/ProjectInitializationService.js +23 -23
- package/dist/application/services/ProjectService.js +2 -2
- package/dist/application/services/QualityGateService.js +4 -4
- package/dist/application/services/SteeringContextLoader.js +2 -2
- package/dist/application/services/SteeringDocumentService.js +4 -4
- package/dist/application/services/TemplateService.js +2 -2
- package/dist/application/services/WorkflowValidationService.js +4 -4
- package/dist/application/services/staticSteering.js +10 -10
- package/dist/cli/install-skills.js +0 -0
- package/dist/cli/migrate-kiro.d.ts +2 -0
- package/dist/cli/migrate-kiro.js +91 -0
- package/dist/cli/migrate-kiro.js.map +1 -0
- package/dist/cli/sdd-mcp-cli.d.ts +1 -0
- package/dist/cli/sdd-mcp-cli.js +10 -0
- package/dist/cli/sdd-mcp-cli.js.map +1 -1
- package/dist/index.js +26 -17
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/mcp/ResourceManager.js +2 -2
- package/dist/utils/documentGenerator.js +1 -1
- package/dist/utils/sddPaths.d.ts +69 -0
- package/dist/utils/sddPaths.js +138 -0
- package/dist/utils/sddPaths.js.map +1 -0
- package/dist/utils/specGenerator.js +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
|
|
7
7
|
A Model Context Protocol (MCP) server implementing Spec-Driven Development (SDD) workflows for AI-agent CLIs and IDEs like Claude Code, Cursor, and others.
|
|
8
8
|
|
|
9
|
+
> 🔄 **v2.1.0 - Directory Migration**: The SDD specification directory has been renamed from `.kiro` to `.spec`. Use `npx sdd-mcp migrate-kiro` to migrate existing projects. Legacy `.kiro` directories are still supported for backwards compatibility.
|
|
10
|
+
|
|
9
11
|
> 🔧 **v2.0.3 - CLI Subcommand Support**: `npx sdd-mcp install-skills` now works correctly! Created proper CLI entry point with subcommand support.
|
|
10
12
|
|
|
11
13
|
> 🚀 **v2.0.0 - Hybrid MCP + Agent Skills Architecture**: Restructured for token efficiency! Template/guidance tools (requirements, design, tasks, steering, implement) are now **Claude Code Agent Skills** loaded on-demand. Action-oriented tools remain as MCP tools. ~55% token savings in typical operations. Install skills with `npx sdd-mcp install-skills`.
|
|
@@ -172,6 +174,23 @@ npx sdd-mcp install-skills --path ./my-skills
|
|
|
172
174
|
npx sdd-mcp install-skills --list
|
|
173
175
|
```
|
|
174
176
|
|
|
177
|
+
### Migrating from .kiro to .spec (v2.1.0+)
|
|
178
|
+
|
|
179
|
+
If you have existing projects using the legacy `.kiro` directory, migrate to the new `.spec` standard:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
# Preview migration (dry run)
|
|
183
|
+
npx sdd-mcp migrate-kiro --dry-run
|
|
184
|
+
|
|
185
|
+
# Perform migration
|
|
186
|
+
npx sdd-mcp migrate-kiro
|
|
187
|
+
|
|
188
|
+
# Migrate a specific project
|
|
189
|
+
npx sdd-mcp migrate-kiro --path ./my-project
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Note**: Legacy `.kiro` directories are still supported for backwards compatibility, but new projects will use `.spec`.
|
|
193
|
+
|
|
175
194
|
### Available Skills
|
|
176
195
|
|
|
177
196
|
After installation, use these skills in Claude Code:
|
|
@@ -528,10 +547,10 @@ For detailed documentation on:
|
|
|
528
547
|
- **🏗️ Architecture Overview**: See [ARCHITECTURE.md](ARCHITECTURE.md) for complete system design, layered architecture, module loading, and Mermaid diagrams
|
|
529
548
|
- **Plugin Development**: See [DEPLOYMENT.md](DEPLOYMENT.md)
|
|
530
549
|
- **Docker Deployment**: See [Dockerfile](Dockerfile) and [docker-compose.yml](docker-compose.yml)
|
|
531
|
-
- **Code Quality Standards**: Review `.
|
|
532
|
-
- **TDD Guidelines**: See `.
|
|
533
|
-
- **Coding Principles**: Review `.
|
|
534
|
-
- **Security Checklist**: Check `.
|
|
550
|
+
- **Code Quality Standards**: Review `.spec/steering/linus-review.md`
|
|
551
|
+
- **TDD Guidelines**: See `.spec/steering/tdd-guideline.md` for complete Test-Driven Development workflow
|
|
552
|
+
- **Coding Principles**: Review `.spec/steering/principles.md` for SOLID, DRY, KISS, YAGNI, SoC, and Modularity guidance
|
|
553
|
+
- **Security Checklist**: Check `.spec/steering/security-check.md` for OWASP Top 10 aligned security practices
|
|
535
554
|
|
|
536
555
|
## 🐛 Support & Issues
|
|
537
556
|
|
|
@@ -428,9 +428,9 @@ let SDDToolAdapter = class SDDToolAdapter {
|
|
|
428
428
|
**Mode**: ${updateMode}
|
|
429
429
|
|
|
430
430
|
**Updated Files**:
|
|
431
|
-
- \`.
|
|
432
|
-
- \`.
|
|
433
|
-
- \`.
|
|
431
|
+
- \`.spec/steering/product.md\` - Product overview and business context
|
|
432
|
+
- \`.spec/steering/tech.md\` - Technology stack and development environment
|
|
433
|
+
- \`.spec/steering/structure.md\` - Project organization and architectural decisions
|
|
434
434
|
|
|
435
435
|
**Analysis**:
|
|
436
436
|
- Technology stack: ${Object.keys({ ...packageJson.dependencies, ...packageJson.devDependencies }).length} dependencies detected
|
|
@@ -247,7 +247,7 @@ let ProjectContextService = class ProjectContextService {
|
|
|
247
247
|
if (changedFiles.some(f => f.includes('package.json'))) {
|
|
248
248
|
recommendations.push('Dependencies may have changed - refresh dependency analysis');
|
|
249
249
|
}
|
|
250
|
-
if (changedFiles.some(f => f.includes('.
|
|
250
|
+
if (changedFiles.some(f => f.includes('.spec/steering'))) {
|
|
251
251
|
recommendations.push('Steering documents changed - refresh steering context');
|
|
252
252
|
}
|
|
253
253
|
}
|
|
@@ -274,7 +274,7 @@ let ProjectContextService = class ProjectContextService {
|
|
|
274
274
|
options
|
|
275
275
|
});
|
|
276
276
|
try {
|
|
277
|
-
const contextDir = `${context.basePath}/.
|
|
277
|
+
const contextDir = `${context.basePath}/.spec/context`;
|
|
278
278
|
if (!(await this.fileSystem.exists(contextDir))) {
|
|
279
279
|
await this.fileSystem.mkdir(contextDir);
|
|
280
280
|
}
|
|
@@ -320,7 +320,7 @@ let ProjectContextService = class ProjectContextService {
|
|
|
320
320
|
}
|
|
321
321
|
async loadPersistedContext(projectId, projectPath) {
|
|
322
322
|
try {
|
|
323
|
-
const contextFile = `${projectPath}/.
|
|
323
|
+
const contextFile = `${projectPath}/.spec/context/${projectId}.json`;
|
|
324
324
|
if (await this.fileSystem.exists(contextFile)) {
|
|
325
325
|
const content = await this.fileSystem.readFile(contextFile);
|
|
326
326
|
const persistedData = JSON.parse(content);
|
|
@@ -391,7 +391,7 @@ let ProjectContextService = class ProjectContextService {
|
|
|
391
391
|
}
|
|
392
392
|
async loadProjectMetadata(projectPath) {
|
|
393
393
|
// Try to load from spec.json first
|
|
394
|
-
const specJsonPath = `${projectPath}/.
|
|
394
|
+
const specJsonPath = `${projectPath}/.spec/specs`;
|
|
395
395
|
let name = 'Unknown Project';
|
|
396
396
|
let description;
|
|
397
397
|
try {
|
|
@@ -103,15 +103,15 @@ let ProjectInitializationService = class ProjectInitializationService {
|
|
|
103
103
|
const existingProject = await this.projectService.getProjectByPath(projectPath);
|
|
104
104
|
// Check directory structure
|
|
105
105
|
const requiredDirectories = [
|
|
106
|
-
`${projectPath}/.
|
|
107
|
-
`${projectPath}/.
|
|
108
|
-
`${projectPath}/.
|
|
106
|
+
`${projectPath}/.spec`,
|
|
107
|
+
`${projectPath}/.spec/specs`,
|
|
108
|
+
`${projectPath}/.spec/steering`
|
|
109
109
|
];
|
|
110
110
|
const missingDirectories = [];
|
|
111
111
|
const hasValidStructure = await this.checkDirectoryStructure(requiredDirectories, missingDirectories);
|
|
112
112
|
// Check for required files
|
|
113
113
|
const requiredFiles = [
|
|
114
|
-
`${projectPath}/.
|
|
114
|
+
`${projectPath}/.spec/specs/spec.json`
|
|
115
115
|
];
|
|
116
116
|
const missingFiles = [];
|
|
117
117
|
for (const file of requiredFiles) {
|
|
@@ -165,10 +165,10 @@ let ProjectInitializationService = class ProjectInitializationService {
|
|
|
165
165
|
try {
|
|
166
166
|
// Check directory structure
|
|
167
167
|
const requiredDirectories = [
|
|
168
|
-
`${project.path}/.
|
|
169
|
-
`${project.path}/.
|
|
170
|
-
`${project.path}/.
|
|
171
|
-
`${project.path}/.
|
|
168
|
+
`${project.path}/.spec`,
|
|
169
|
+
`${project.path}/.spec/specs`,
|
|
170
|
+
`${project.path}/.spec/specs/${project.name}`,
|
|
171
|
+
`${project.path}/.spec/steering`
|
|
172
172
|
];
|
|
173
173
|
for (const dir of requiredDirectories) {
|
|
174
174
|
if (!(await this.fileSystem.exists(dir))) {
|
|
@@ -176,7 +176,7 @@ let ProjectInitializationService = class ProjectInitializationService {
|
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
// Check required files
|
|
179
|
-
const specJsonPath = `${project.path}/.
|
|
179
|
+
const specJsonPath = `${project.path}/.spec/specs/${project.name}/spec.json`;
|
|
180
180
|
if (!(await this.fileSystem.exists(specJsonPath))) {
|
|
181
181
|
issues.push(`Missing spec.json file: ${specJsonPath}`);
|
|
182
182
|
}
|
|
@@ -191,9 +191,9 @@ let ProjectInitializationService = class ProjectInitializationService {
|
|
|
191
191
|
}
|
|
192
192
|
// Check for steering files
|
|
193
193
|
const steeringFiles = [
|
|
194
|
-
`${project.path}/.
|
|
195
|
-
`${project.path}/.
|
|
196
|
-
`${project.path}/.
|
|
194
|
+
`${project.path}/.spec/steering/product.md`,
|
|
195
|
+
`${project.path}/.spec/steering/tech.md`,
|
|
196
|
+
`${project.path}/.spec/steering/structure.md`
|
|
197
197
|
];
|
|
198
198
|
let steeringCount = 0;
|
|
199
199
|
for (const file of steeringFiles) {
|
|
@@ -342,9 +342,9 @@ let ProjectInitializationService = class ProjectInitializationService {
|
|
|
342
342
|
}
|
|
343
343
|
async createDirectoryStructure(projectPath) {
|
|
344
344
|
const directories = [
|
|
345
|
-
`${projectPath}/.
|
|
346
|
-
`${projectPath}/.
|
|
347
|
-
`${projectPath}/.
|
|
345
|
+
`${projectPath}/.spec`,
|
|
346
|
+
`${projectPath}/.spec/specs`,
|
|
347
|
+
`${projectPath}/.spec/steering`,
|
|
348
348
|
`${projectPath}/.claude`,
|
|
349
349
|
`${projectPath}/.claude/commands`
|
|
350
350
|
];
|
|
@@ -362,7 +362,7 @@ let ProjectInitializationService = class ProjectInitializationService {
|
|
|
362
362
|
// Generate spec.json
|
|
363
363
|
const specContent = await this.templateService.generateSpecJson(project);
|
|
364
364
|
await this.templateService.writeProjectFile(project, 'spec.json', specContent);
|
|
365
|
-
generatedFiles.push(`${project.path}/.
|
|
365
|
+
generatedFiles.push(`${project.path}/.spec/specs/${project.name}/spec.json`);
|
|
366
366
|
// Generate README template if requested
|
|
367
367
|
if (options.template && options.template !== 'basic') {
|
|
368
368
|
const readmeContent = this.generateReadmeTemplate(project, options);
|
|
@@ -396,9 +396,9 @@ This project follows Spec-Driven Development (SDD) methodology:
|
|
|
396
396
|
|
|
397
397
|
## Getting Started
|
|
398
398
|
|
|
399
|
-
1. Review requirements: \`.
|
|
400
|
-
2. Check design: \`.
|
|
401
|
-
3. Follow tasks: \`.
|
|
399
|
+
1. Review requirements: \`.spec/specs/${project.name}/requirements.md\`
|
|
400
|
+
2. Check design: \`.spec/specs/${project.name}/design.md\`
|
|
401
|
+
3. Follow tasks: \`.spec/specs/${project.name}/tasks.md\`
|
|
402
402
|
|
|
403
403
|
## SDD Commands
|
|
404
404
|
|
|
@@ -432,8 +432,8 @@ ${options.description || 'Product description and objectives to be defined.'}
|
|
|
432
432
|
|
|
433
433
|
Generated on: ${new Date().toISOString()}
|
|
434
434
|
`;
|
|
435
|
-
await this.fileSystem.writeFile(`${project.path}/.
|
|
436
|
-
generatedFiles.push(`${project.path}/.
|
|
435
|
+
await this.fileSystem.writeFile(`${project.path}/.spec/steering/product.md`, productContent);
|
|
436
|
+
generatedFiles.push(`${project.path}/.spec/steering/product.md`);
|
|
437
437
|
// Basic tech steering
|
|
438
438
|
const techContent = `# Technology Steering Document
|
|
439
439
|
|
|
@@ -456,8 +456,8 @@ ${options.technology || 'Technology decisions to be defined.'}
|
|
|
456
456
|
|
|
457
457
|
Generated on: ${new Date().toISOString()}
|
|
458
458
|
`;
|
|
459
|
-
await this.fileSystem.writeFile(`${project.path}/.
|
|
460
|
-
generatedFiles.push(`${project.path}/.
|
|
459
|
+
await this.fileSystem.writeFile(`${project.path}/.spec/steering/tech.md`, techContent);
|
|
460
|
+
generatedFiles.push(`${project.path}/.spec/steering/tech.md`);
|
|
461
461
|
return generatedFiles;
|
|
462
462
|
}
|
|
463
463
|
async checkDirectoryStructure(requiredDirectories, missingDirectories) {
|
|
@@ -136,8 +136,8 @@ let ProjectService = class ProjectService {
|
|
|
136
136
|
}
|
|
137
137
|
async createProjectStructure(basePath) {
|
|
138
138
|
const directories = [
|
|
139
|
-
`${basePath}/.
|
|
140
|
-
`${basePath}/.
|
|
139
|
+
`${basePath}/.spec/specs`,
|
|
140
|
+
`${basePath}/.spec/steering`,
|
|
141
141
|
`${basePath}/.claude/commands`
|
|
142
142
|
];
|
|
143
143
|
for (const dir of directories) {
|
|
@@ -165,9 +165,9 @@ let QualityGateService = class QualityGateService {
|
|
|
165
165
|
}
|
|
166
166
|
// Also check documentation files for requirements/design phases
|
|
167
167
|
const docsFiles = [
|
|
168
|
-
`${project.path}/.
|
|
169
|
-
`${project.path}/.
|
|
170
|
-
`${project.path}/.
|
|
168
|
+
`${project.path}/.spec/specs/${project.name}/requirements.md`,
|
|
169
|
+
`${project.path}/.spec/specs/${project.name}/design.md`,
|
|
170
|
+
`${project.path}/.spec/specs/${project.name}/tasks.md`
|
|
171
171
|
];
|
|
172
172
|
for (const filePath of docsFiles) {
|
|
173
173
|
if (await this.fileSystem.exists(filePath)) {
|
|
@@ -366,7 +366,7 @@ let QualityGateService = class QualityGateService {
|
|
|
366
366
|
}
|
|
367
367
|
async generateQualityReport(project, phase, report) {
|
|
368
368
|
try {
|
|
369
|
-
const reportDir = `${project.path}/.
|
|
369
|
+
const reportDir = `${project.path}/.spec/quality`;
|
|
370
370
|
await this.fileSystem.mkdir(reportDir);
|
|
371
371
|
const reportPath = `${reportDir}/quality-report-${phase.toLowerCase()}-${Date.now()}.json`;
|
|
372
372
|
const reportContent = JSON.stringify(report, null, 2);
|
|
@@ -37,7 +37,7 @@ let SteeringContextLoader = class SteeringContextLoader {
|
|
|
37
37
|
let hasTargetUsers = false;
|
|
38
38
|
let hasTechContext = false;
|
|
39
39
|
// Load product.md with individual error handling
|
|
40
|
-
const productPath = `${projectPath}/.
|
|
40
|
+
const productPath = `${projectPath}/.spec/steering/product.md`;
|
|
41
41
|
if (await this.fileSystem.exists(productPath)) {
|
|
42
42
|
try {
|
|
43
43
|
const content = await this.fileSystem.readFile(productPath);
|
|
@@ -52,7 +52,7 @@ let SteeringContextLoader = class SteeringContextLoader {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
// Load tech.md with individual error handling
|
|
55
|
-
const techPath = `${projectPath}/.
|
|
55
|
+
const techPath = `${projectPath}/.spec/steering/tech.md`;
|
|
56
56
|
if (await this.fileSystem.exists(techPath)) {
|
|
57
57
|
try {
|
|
58
58
|
const content = await this.fileSystem.readFile(techPath);
|
|
@@ -39,7 +39,7 @@ let SteeringDocumentService = class SteeringDocumentService {
|
|
|
39
39
|
projectPath,
|
|
40
40
|
preferences
|
|
41
41
|
});
|
|
42
|
-
const steeringPath = path.join(projectPath, '.
|
|
42
|
+
const steeringPath = path.join(projectPath, '.spec', 'steering');
|
|
43
43
|
const documents = [];
|
|
44
44
|
try {
|
|
45
45
|
if (await this.fileSystem.exists(steeringPath)) {
|
|
@@ -315,7 +315,7 @@ let SteeringDocumentService = class SteeringDocumentService {
|
|
|
315
315
|
}
|
|
316
316
|
// Apply plugin steering documents
|
|
317
317
|
const pluginSteeringContext = {
|
|
318
|
-
projectPath: steeringContext.documents[0]?.path.split('/.
|
|
318
|
+
projectPath: steeringContext.documents[0]?.path.split('/.spec/')[0] || process.cwd(),
|
|
319
319
|
workingDirectory: process.cwd(),
|
|
320
320
|
variables: {},
|
|
321
321
|
metadata: {
|
|
@@ -441,7 +441,7 @@ let SteeringDocumentService = class SteeringDocumentService {
|
|
|
441
441
|
}
|
|
442
442
|
}
|
|
443
443
|
// Check for new documents
|
|
444
|
-
const steeringPath = path.join(projectPath, '.
|
|
444
|
+
const steeringPath = path.join(projectPath, '.spec', 'steering');
|
|
445
445
|
if (await this.fileSystem.exists(steeringPath)) {
|
|
446
446
|
const files = await this.fileSystem.readdir(steeringPath);
|
|
447
447
|
const existingPaths = new Set(currentContext.documents.map(d => d.path));
|
|
@@ -490,7 +490,7 @@ let SteeringDocumentService = class SteeringDocumentService {
|
|
|
490
490
|
name: config.name,
|
|
491
491
|
type: config.type
|
|
492
492
|
});
|
|
493
|
-
const steeringPath = path.join(projectPath, '.
|
|
493
|
+
const steeringPath = path.join(projectPath, '.spec', 'steering');
|
|
494
494
|
// Ensure steering directory exists
|
|
495
495
|
if (!(await this.fileSystem.exists(steeringPath))) {
|
|
496
496
|
await this.fileSystem.mkdir(steeringPath);
|
|
@@ -223,7 +223,7 @@ ${tasks.deployment.map((task, index) => `- [ ] ${index + 1}. ${task.title}
|
|
|
223
223
|
}
|
|
224
224
|
async writeProjectFile(project, fileName, content) {
|
|
225
225
|
const correlationId = uuidv4();
|
|
226
|
-
const filePath = `${project.path}/.
|
|
226
|
+
const filePath = `${project.path}/.spec/specs/${project.name}/${fileName}`;
|
|
227
227
|
this.logger.info('Writing project file', {
|
|
228
228
|
correlationId,
|
|
229
229
|
projectId: project.id,
|
|
@@ -319,7 +319,7 @@ ${tasks.deployment.map((task, index) => `- [ ] ${index + 1}. ${task.title}
|
|
|
319
319
|
}
|
|
320
320
|
],
|
|
321
321
|
subdirectories: {
|
|
322
|
-
'.
|
|
322
|
+
'.spec': {
|
|
323
323
|
files: [],
|
|
324
324
|
subdirectories: {
|
|
325
325
|
'steering': {
|
|
@@ -50,7 +50,7 @@ let WorkflowValidationService = class WorkflowValidationService {
|
|
|
50
50
|
let readinessScore = 0;
|
|
51
51
|
try {
|
|
52
52
|
// Check if requirements document exists
|
|
53
|
-
const requirementsPath = `${project.path}/.
|
|
53
|
+
const requirementsPath = `${project.path}/.spec/specs/${project.name}/requirements.md`;
|
|
54
54
|
if (!(await this.fileSystem.exists(requirementsPath))) {
|
|
55
55
|
missingItems.push('requirements.md file not found');
|
|
56
56
|
}
|
|
@@ -168,7 +168,7 @@ let WorkflowValidationService = class WorkflowValidationService {
|
|
|
168
168
|
let readinessScore = 0;
|
|
169
169
|
try {
|
|
170
170
|
// Check if design document exists
|
|
171
|
-
const designPath = `${project.path}/.
|
|
171
|
+
const designPath = `${project.path}/.spec/specs/${project.name}/design.md`;
|
|
172
172
|
if (!(await this.fileSystem.exists(designPath))) {
|
|
173
173
|
missingItems.push('design.md file not found');
|
|
174
174
|
}
|
|
@@ -292,7 +292,7 @@ let WorkflowValidationService = class WorkflowValidationService {
|
|
|
292
292
|
let readinessScore = 0;
|
|
293
293
|
try {
|
|
294
294
|
// Check if tasks document exists
|
|
295
|
-
const tasksPath = `${project.path}/.
|
|
295
|
+
const tasksPath = `${project.path}/.spec/specs/${project.name}/tasks.md`;
|
|
296
296
|
if (!(await this.fileSystem.exists(tasksPath))) {
|
|
297
297
|
missingItems.push('tasks.md file not found');
|
|
298
298
|
}
|
|
@@ -414,7 +414,7 @@ let WorkflowValidationService = class WorkflowValidationService {
|
|
|
414
414
|
const traceabilityIssues = [];
|
|
415
415
|
const coverageGaps = [];
|
|
416
416
|
try {
|
|
417
|
-
const basePath = `${project.path}/.
|
|
417
|
+
const basePath = `${project.path}/.spec/specs/${project.name}`;
|
|
418
418
|
// Read all phase documents
|
|
419
419
|
const documents = {};
|
|
420
420
|
const files = ['requirements.md', 'design.md', 'tasks.md'];
|
|
@@ -6,7 +6,7 @@ export async function ensureStaticSteeringDocuments(projectPath, steeringService
|
|
|
6
6
|
const fs = await import('fs');
|
|
7
7
|
const path = await import('path');
|
|
8
8
|
// Linus review (always-on quality guardrail)
|
|
9
|
-
const linusReviewPath = path.join(projectPath, '.
|
|
9
|
+
const linusReviewPath = path.join(projectPath, '.spec', 'steering', 'linus-review.md');
|
|
10
10
|
if (!fs.existsSync(linusReviewPath)) {
|
|
11
11
|
const linusReviewContent = `# Linus Torvalds Code Review Steering Document
|
|
12
12
|
|
|
@@ -170,7 +170,7 @@ Remember: "Good taste" comes from experience. Question everything. Simplify ruth
|
|
|
170
170
|
});
|
|
171
171
|
}
|
|
172
172
|
// Commit guidelines
|
|
173
|
-
const commitPath = path.join(projectPath, '.
|
|
173
|
+
const commitPath = path.join(projectPath, '.spec', 'steering', 'commit.md');
|
|
174
174
|
if (!fs.existsSync(commitPath)) {
|
|
175
175
|
const commitContent = `# Commit Message Guidelines
|
|
176
176
|
|
|
@@ -240,7 +240,7 @@ These guidelines help maintain a clean and useful git history that makes it easi
|
|
|
240
240
|
});
|
|
241
241
|
}
|
|
242
242
|
// Security checklist (OWASP baseline)
|
|
243
|
-
const securityPath = path.join(projectPath, '.
|
|
243
|
+
const securityPath = path.join(projectPath, '.spec', 'steering', 'security-check.md');
|
|
244
244
|
if (!fs.existsSync(securityPath)) {
|
|
245
245
|
const securityContent = `# Security Check (OWASP Top 10 Aligned)
|
|
246
246
|
|
|
@@ -300,7 +300,7 @@ Use this checklist during code generation and review. Avoid OWASP Top 10 issues
|
|
|
300
300
|
});
|
|
301
301
|
}
|
|
302
302
|
// TDD guideline reinforcement
|
|
303
|
-
const tddPath = path.join(projectPath, '.
|
|
303
|
+
const tddPath = path.join(projectPath, '.spec', 'steering', 'tdd-guideline.md');
|
|
304
304
|
if (!fs.existsSync(tddPath)) {
|
|
305
305
|
const tddContent = `# Test-Driven Development (TDD) Guideline
|
|
306
306
|
|
|
@@ -422,7 +422,7 @@ This document is **always** active and applies to all development phases. Every
|
|
|
422
422
|
});
|
|
423
423
|
}
|
|
424
424
|
// Core coding principles (SOLID, DRY, etc.)
|
|
425
|
-
const principlesPath = path.join(projectPath, '.
|
|
425
|
+
const principlesPath = path.join(projectPath, '.spec', 'steering', 'principles.md');
|
|
426
426
|
if (!fs.existsSync(principlesPath)) {
|
|
427
427
|
const principlesContent = `# Core Coding Principles and Patterns
|
|
428
428
|
|
|
@@ -491,17 +491,17 @@ Kiro-style Spec Driven Development implementation using MCP tools.
|
|
|
491
491
|
## Project Context
|
|
492
492
|
|
|
493
493
|
### Paths
|
|
494
|
-
- Steering: \`.
|
|
495
|
-
- Specs: \`.
|
|
494
|
+
- Steering: \`.spec/steering/\`
|
|
495
|
+
- Specs: \`.spec/specs/\`
|
|
496
496
|
- Commands: \`.ai agent/commands/\`
|
|
497
497
|
|
|
498
498
|
### Steering vs Specification
|
|
499
499
|
|
|
500
|
-
**Steering** (\`.
|
|
501
|
-
**Specs** (\`.
|
|
500
|
+
**Steering** (\`.spec/steering/\`) - Guide AI with project-wide rules and context
|
|
501
|
+
**Specs** (\`.spec/specs/\`) - Formalize development process for individual features
|
|
502
502
|
|
|
503
503
|
### Active Specifications
|
|
504
|
-
- Check \`.
|
|
504
|
+
- Check \`.spec/specs/\` for active specifications
|
|
505
505
|
- Use \`sdd-status\` to check progress
|
|
506
506
|
|
|
507
507
|
**Current Specifications:**
|
|
File without changes
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
const HELP = `
|
|
5
|
+
SDD Directory Migration Tool
|
|
6
|
+
|
|
7
|
+
Migrates .kiro directory to .spec for updated SDD workflow.
|
|
8
|
+
|
|
9
|
+
Usage: npx sdd-mcp migrate-kiro [options]
|
|
10
|
+
|
|
11
|
+
Options:
|
|
12
|
+
--path <dir> Project directory (default: current directory)
|
|
13
|
+
--dry-run, -n Preview without making changes
|
|
14
|
+
--force, -f Overwrite existing .spec directory
|
|
15
|
+
--help, -h Show this help
|
|
16
|
+
|
|
17
|
+
Examples:
|
|
18
|
+
npx sdd-mcp migrate-kiro
|
|
19
|
+
npx sdd-mcp migrate-kiro --dry-run
|
|
20
|
+
npx sdd-mcp migrate-kiro --path ./my-project
|
|
21
|
+
`;
|
|
22
|
+
function getAllFiles(dir) {
|
|
23
|
+
const files = [];
|
|
24
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
25
|
+
const fullPath = path.join(dir, entry.name);
|
|
26
|
+
if (entry.isDirectory()) {
|
|
27
|
+
files.push(...getAllFiles(fullPath));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
files.push(fullPath);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return files;
|
|
34
|
+
}
|
|
35
|
+
export async function main() {
|
|
36
|
+
const args = process.argv.slice(2);
|
|
37
|
+
// Parse args
|
|
38
|
+
let projectPath = process.cwd();
|
|
39
|
+
let dryRun = false;
|
|
40
|
+
let force = false;
|
|
41
|
+
for (let i = 0; i < args.length; i++) {
|
|
42
|
+
switch (args[i]) {
|
|
43
|
+
case '--path':
|
|
44
|
+
projectPath = path.resolve(args[++i] || '.');
|
|
45
|
+
break;
|
|
46
|
+
case '--dry-run':
|
|
47
|
+
case '-n':
|
|
48
|
+
dryRun = true;
|
|
49
|
+
break;
|
|
50
|
+
case '--force':
|
|
51
|
+
case '-f':
|
|
52
|
+
force = true;
|
|
53
|
+
break;
|
|
54
|
+
case '--help':
|
|
55
|
+
case '-h':
|
|
56
|
+
console.log(HELP);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const kiroPath = path.join(projectPath, '.kiro');
|
|
61
|
+
const specPath = path.join(projectPath, '.spec');
|
|
62
|
+
console.log('\n🔄 SDD Directory Migration: .kiro → .spec\n');
|
|
63
|
+
if (!fs.existsSync(kiroPath)) {
|
|
64
|
+
console.log('✅ No .kiro directory found. Nothing to migrate.\n');
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (fs.existsSync(specPath) && !force) {
|
|
68
|
+
console.log('⚠️ .spec already exists. Use --force to overwrite.\n');
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const files = getAllFiles(kiroPath);
|
|
72
|
+
console.log(dryRun ? '📋 Would migrate:\n' : '📦 Migrating:\n');
|
|
73
|
+
for (const file of files) {
|
|
74
|
+
const rel = path.relative(kiroPath, file);
|
|
75
|
+
const newPath = path.join(specPath, rel);
|
|
76
|
+
if (dryRun) {
|
|
77
|
+
console.log(` .kiro/${rel} → .spec/${rel}`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
fs.mkdirSync(path.dirname(newPath), { recursive: true });
|
|
81
|
+
fs.copyFileSync(file, newPath);
|
|
82
|
+
console.log(` ✓ .kiro/${rel} → .spec/${rel}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (!dryRun && files.length > 0) {
|
|
86
|
+
fs.rmSync(kiroPath, { recursive: true });
|
|
87
|
+
console.log('\n ✓ Removed .kiro directory');
|
|
88
|
+
}
|
|
89
|
+
console.log(`\n✅ ${dryRun ? 'Preview' : 'Migration'} complete! (${files.length} files)\n`);
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=migrate-kiro.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-kiro.js","sourceRoot":"","sources":["../../src/cli/migrate-kiro.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/sdd-mcp-cli.js
CHANGED
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Usage:
|
|
6
6
|
* npx sdd-mcp install-skills [options]
|
|
7
|
+
* npx sdd-mcp migrate-kiro [options]
|
|
7
8
|
* npx sdd-mcp --help
|
|
8
9
|
*/
|
|
9
10
|
import { main as installSkillsMain } from './install-skills.js';
|
|
11
|
+
import { main as migrateKiroMain } from './migrate-kiro.js';
|
|
10
12
|
const HELP = `
|
|
11
13
|
SDD MCP CLI
|
|
12
14
|
|
|
@@ -14,6 +16,7 @@ Usage: npx sdd-mcp <command> [options]
|
|
|
14
16
|
|
|
15
17
|
Commands:
|
|
16
18
|
install-skills Install SDD skills to your project
|
|
19
|
+
migrate-kiro Migrate .kiro directory to .spec (v2.1.0+)
|
|
17
20
|
|
|
18
21
|
Options:
|
|
19
22
|
--help, -h Show this help message
|
|
@@ -22,6 +25,8 @@ Examples:
|
|
|
22
25
|
npx sdd-mcp install-skills # Install to .claude/skills
|
|
23
26
|
npx sdd-mcp install-skills --list # List available skills
|
|
24
27
|
npx sdd-mcp install-skills --path ./ # Install to custom path
|
|
28
|
+
npx sdd-mcp migrate-kiro # Migrate .kiro to .spec
|
|
29
|
+
npx sdd-mcp migrate-kiro --dry-run # Preview migration
|
|
25
30
|
|
|
26
31
|
For MCP server usage, use: npx sdd-mcp-server
|
|
27
32
|
`;
|
|
@@ -38,6 +43,11 @@ async function main() {
|
|
|
38
43
|
process.argv = [process.argv[0], process.argv[1], ...args.slice(1)];
|
|
39
44
|
await installSkillsMain();
|
|
40
45
|
break;
|
|
46
|
+
case 'migrate-kiro':
|
|
47
|
+
// Remove the command from args and pass the rest to migrate-kiro
|
|
48
|
+
process.argv = [process.argv[0], process.argv[1], ...args.slice(1)];
|
|
49
|
+
await migrateKiroMain();
|
|
50
|
+
break;
|
|
41
51
|
default:
|
|
42
52
|
console.error(`Unknown command: ${command}`);
|
|
43
53
|
console.log(HELP);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdd-mcp-cli.js","sourceRoot":"","sources":["../../src/cli/sdd-mcp-cli.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"sdd-mcp-cli.js","sourceRoot":"","sources":["../../src/cli/sdd-mcp-cli.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;CAoBZ,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,gBAAgB;YACnB,mEAAmE;YACnE,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,MAAM,iBAAiB,EAAE,CAAC;YAC1B,MAAM;QAER,KAAK,cAAc;YACjB,iEAAiE;YACjE,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,MAAM,eAAe,EAAE,CAAC;YACxB,MAAM;QAER;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -387,9 +387,12 @@ async function handleStatusSimplified(args) {
|
|
|
387
387
|
const path = await import("path");
|
|
388
388
|
const { featureName } = args || {};
|
|
389
389
|
const currentPath = process.cwd();
|
|
390
|
+
// Support both .spec (new) and .kiro (legacy)
|
|
391
|
+
const specPath = path.join(currentPath, ".spec");
|
|
390
392
|
const kiroPath = path.join(currentPath, ".kiro");
|
|
393
|
+
const sddPath = await fs.promises.access(specPath).then(() => specPath).catch(() => kiroPath);
|
|
391
394
|
const exists = await fs.promises
|
|
392
|
-
.access(
|
|
395
|
+
.access(sddPath)
|
|
393
396
|
.then(() => true)
|
|
394
397
|
.catch(() => false);
|
|
395
398
|
if (!exists) {
|
|
@@ -402,7 +405,7 @@ async function handleStatusSimplified(args) {
|
|
|
402
405
|
],
|
|
403
406
|
};
|
|
404
407
|
}
|
|
405
|
-
const specsPath = path.join(
|
|
408
|
+
const specsPath = path.join(sddPath, "specs");
|
|
406
409
|
if (featureName) {
|
|
407
410
|
const featurePath = path.join(specsPath, featureName);
|
|
408
411
|
const specPath = path.join(featurePath, "spec.json");
|
|
@@ -485,7 +488,9 @@ async function handleApproveSimplified(args) {
|
|
|
485
488
|
};
|
|
486
489
|
}
|
|
487
490
|
try {
|
|
488
|
-
|
|
491
|
+
// Support both .spec (new) and .kiro (legacy)
|
|
492
|
+
const sddDir = fs.existsSync(path.join(process.cwd(), ".spec")) ? ".spec" : ".kiro";
|
|
493
|
+
const featurePath = path.join(process.cwd(), sddDir, "specs", featureName);
|
|
489
494
|
const specPath = path.join(featurePath, "spec.json");
|
|
490
495
|
const spec = JSON.parse(fs.readFileSync(specPath, "utf8"));
|
|
491
496
|
if (!spec.approvals?.[phase]?.generated) {
|
|
@@ -573,7 +578,9 @@ function generateFeatureName(description) {
|
|
|
573
578
|
async function ensureUniqueFeatureName(baseName) {
|
|
574
579
|
const fs = await import("fs");
|
|
575
580
|
const path = await import("path");
|
|
576
|
-
|
|
581
|
+
// Support both .spec (new) and .kiro (legacy)
|
|
582
|
+
const sddDir = fs.existsSync(path.join(process.cwd(), ".spec")) ? ".spec" : ".kiro";
|
|
583
|
+
const specsDir = path.join(process.cwd(), sddDir, "specs");
|
|
577
584
|
if (!fs.existsSync(specsDir)) {
|
|
578
585
|
return baseName;
|
|
579
586
|
}
|
|
@@ -588,7 +595,9 @@ async function ensureUniqueFeatureName(baseName) {
|
|
|
588
595
|
async function loadSpecContext(featureName) {
|
|
589
596
|
const fs = await import("fs");
|
|
590
597
|
const path = await import("path");
|
|
591
|
-
|
|
598
|
+
// Support both .spec (new) and .kiro (legacy)
|
|
599
|
+
const sddDir = fs.existsSync(path.join(process.cwd(), ".spec")) ? ".spec" : ".kiro";
|
|
600
|
+
const specDir = path.join(process.cwd(), sddDir, "specs", featureName);
|
|
592
601
|
const specJsonPath = path.join(specDir, "spec.json");
|
|
593
602
|
const requirementsPath = path.join(specDir, "requirements.md");
|
|
594
603
|
let spec = null;
|
|
@@ -624,8 +633,8 @@ async function handleInitSimplified(args) {
|
|
|
624
633
|
// Generate feature name from description
|
|
625
634
|
const baseFeatureName = generateFeatureName(description);
|
|
626
635
|
const featureName = await ensureUniqueFeatureName(baseFeatureName);
|
|
627
|
-
// Create .
|
|
628
|
-
const specDir = path.join(projectPath, ".
|
|
636
|
+
// Create .spec/specs/[feature-name] directory (use .spec for new projects)
|
|
637
|
+
const specDir = path.join(projectPath, ".spec", "specs", featureName);
|
|
629
638
|
if (!fs.existsSync(specDir)) {
|
|
630
639
|
fs.mkdirSync(specDir, { recursive: true });
|
|
631
640
|
}
|
|
@@ -680,22 +689,22 @@ ${description}
|
|
|
680
689
|
else {
|
|
681
690
|
agentsContent = `# AI Agent Spec-Driven Development
|
|
682
691
|
|
|
683
|
-
|
|
692
|
+
Spec Driven Development implementation using MCP tools.
|
|
684
693
|
|
|
685
694
|
## Project Context
|
|
686
695
|
|
|
687
696
|
### Paths
|
|
688
|
-
- Steering: \`.
|
|
689
|
-
- Specs: \`.
|
|
690
|
-
- Commands: \`.
|
|
697
|
+
- Steering: \`.spec/steering/\`
|
|
698
|
+
- Specs: \`.spec/specs/\`
|
|
699
|
+
- Commands: \`.claude/commands/\`
|
|
691
700
|
|
|
692
701
|
### Steering vs Specification
|
|
693
702
|
|
|
694
|
-
**Steering** (\`.
|
|
695
|
-
**Specs** (\`.
|
|
703
|
+
**Steering** (\`.spec/steering/\`) - Guide AI with project-wide rules and context
|
|
704
|
+
**Specs** (\`.spec/specs/\`) - Formalize development process for individual features
|
|
696
705
|
|
|
697
706
|
### Active Specifications
|
|
698
|
-
- Check \`.
|
|
707
|
+
- Check \`.spec/specs/\` for active specifications
|
|
699
708
|
- Use \`sdd-status\` to check progress
|
|
700
709
|
|
|
701
710
|
**Current Specifications:**
|
|
@@ -771,8 +780,8 @@ Managed by \`sdd-steering\` tool. Updates here reflect tool changes.
|
|
|
771
780
|
**Description**: ${description}
|
|
772
781
|
|
|
773
782
|
**Created Files**:
|
|
774
|
-
- \`.
|
|
775
|
-
- \`.
|
|
783
|
+
- \`.spec/specs/${featureName}/spec.json\` - Project metadata and phase tracking
|
|
784
|
+
- \`.spec/specs/${featureName}/requirements.md\` - Initial requirements template
|
|
776
785
|
|
|
777
786
|
**Next Steps**:
|
|
778
787
|
1. Run \`sdd-requirements ${featureName}\` to generate detailed requirements
|
|
@@ -821,7 +830,7 @@ async function main() {
|
|
|
821
830
|
capabilities: {
|
|
822
831
|
workflow: "5-phase SDD workflow state machine (INIT→REQUIREMENTS→DESIGN→TASKS→IMPLEMENTATION)",
|
|
823
832
|
validation: "Cross-phase validation with approval gates and rollback support",
|
|
824
|
-
initialization: "Project setup with .
|
|
833
|
+
initialization: "Project setup with .spec directory structure and spec.json",
|
|
825
834
|
context: "Project memory with codebase analysis and context persistence",
|
|
826
835
|
steering: "Dynamic steering document management with Always/Conditional/Manual modes",
|
|
827
836
|
quality: "Linus-style code review with 5-layer analysis framework",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -111,7 +111,7 @@ let ResourceManager = class ResourceManager {
|
|
|
111
111
|
if (!project) {
|
|
112
112
|
throw new Error(`Project not found: ${projectId}`);
|
|
113
113
|
}
|
|
114
|
-
const filePath = `${project.path}/.
|
|
114
|
+
const filePath = `${project.path}/.spec/specs/${project.name}/${fileName}`;
|
|
115
115
|
try {
|
|
116
116
|
if (await this.fileSystem.exists(filePath)) {
|
|
117
117
|
const content = await this.fileSystem.readFile(filePath);
|
|
@@ -173,7 +173,7 @@ let ResourceManager = class ResourceManager {
|
|
|
173
173
|
}
|
|
174
174
|
async readSteeringResource(uri) {
|
|
175
175
|
if (uri === 'sdd://steering/linus-review.md') {
|
|
176
|
-
const steeringPath = '.
|
|
176
|
+
const steeringPath = '.spec/steering/linus-review.md';
|
|
177
177
|
if (await this.fileSystem.exists(steeringPath)) {
|
|
178
178
|
const content = await this.fileSystem.readFile(steeringPath);
|
|
179
179
|
return {
|
|
@@ -921,7 +921,7 @@ function generateDeploymentConfig(analysis) {
|
|
|
921
921
|
return config.length > 0 ? config.join('\n') : '- Deployment configuration to be defined';
|
|
922
922
|
}
|
|
923
923
|
function buildDirectoryTree(analysis) {
|
|
924
|
-
let tree = `├── .
|
|
924
|
+
let tree = `├── .spec/ # SDD workflow files
|
|
925
925
|
│ ├── steering/ # Project steering documents
|
|
926
926
|
│ └── specs/ # Feature specifications\n`;
|
|
927
927
|
for (const dir of analysis.directories.sort()) {
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDD directory names
|
|
3
|
+
* .spec is the new standard (v2.1.0+)
|
|
4
|
+
* .kiro is legacy (for backwards compatibility)
|
|
5
|
+
*/
|
|
6
|
+
export declare const SDD_DIR = ".spec";
|
|
7
|
+
export declare const SDD_DIR_LEGACY = ".kiro";
|
|
8
|
+
/**
|
|
9
|
+
* Get the SDD root directory for a project
|
|
10
|
+
* Prefers .spec, falls back to .kiro for legacy projects
|
|
11
|
+
*
|
|
12
|
+
* @param projectPath - Project root path
|
|
13
|
+
* @returns SDD root directory path (.spec or .kiro)
|
|
14
|
+
*/
|
|
15
|
+
export declare function getSddRoot(projectPath: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Get the SDD directory name for a project
|
|
18
|
+
* Returns the actual directory name used (.spec or .kiro)
|
|
19
|
+
*
|
|
20
|
+
* @param projectPath - Project root path
|
|
21
|
+
* @returns Directory name (.spec or .kiro)
|
|
22
|
+
*/
|
|
23
|
+
export declare function getSddDirName(projectPath: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Get the specs directory path
|
|
26
|
+
* @param projectPath - Project root path
|
|
27
|
+
* @returns Specs directory path
|
|
28
|
+
*/
|
|
29
|
+
export declare function getSpecsPath(projectPath: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Get the steering directory path
|
|
32
|
+
* @param projectPath - Project root path
|
|
33
|
+
* @returns Steering directory path
|
|
34
|
+
*/
|
|
35
|
+
export declare function getSteeringPath(projectPath: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Get a feature's spec directory path
|
|
38
|
+
* @param projectPath - Project root path
|
|
39
|
+
* @param featureName - Feature name
|
|
40
|
+
* @returns Feature spec directory path
|
|
41
|
+
*/
|
|
42
|
+
export declare function getFeatureSpecPath(projectPath: string, featureName: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Get the spec.json file path for a feature
|
|
45
|
+
* @param projectPath - Project root path
|
|
46
|
+
* @param featureName - Feature name
|
|
47
|
+
* @returns spec.json file path
|
|
48
|
+
*/
|
|
49
|
+
export declare function getSpecJsonPath(projectPath: string, featureName: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Check if this is a legacy project (using .kiro instead of .spec)
|
|
52
|
+
* @param projectPath - Project root path
|
|
53
|
+
* @returns true if project uses .kiro
|
|
54
|
+
*/
|
|
55
|
+
export declare function isLegacyProject(projectPath: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Get the appropriate SDD directory for new projects
|
|
58
|
+
* Always returns .spec for new projects
|
|
59
|
+
*
|
|
60
|
+
* @param projectPath - Project root path
|
|
61
|
+
* @returns Path to create SDD directory (.spec)
|
|
62
|
+
*/
|
|
63
|
+
export declare function getNewSddRoot(projectPath: string): string;
|
|
64
|
+
/**
|
|
65
|
+
* Create all required SDD directories for a new project
|
|
66
|
+
* @param projectPath - Project root path
|
|
67
|
+
* @returns Created paths
|
|
68
|
+
*/
|
|
69
|
+
export declare function createSddDirectories(projectPath: string): string[];
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* SDD directory names
|
|
5
|
+
* .spec is the new standard (v2.1.0+)
|
|
6
|
+
* .kiro is legacy (for backwards compatibility)
|
|
7
|
+
*/
|
|
8
|
+
export const SDD_DIR = '.spec';
|
|
9
|
+
export const SDD_DIR_LEGACY = '.kiro';
|
|
10
|
+
/**
|
|
11
|
+
* Check if a directory exists
|
|
12
|
+
* @param dirPath - Directory path to check
|
|
13
|
+
* @returns true if directory exists
|
|
14
|
+
*/
|
|
15
|
+
function dirExists(dirPath) {
|
|
16
|
+
try {
|
|
17
|
+
return fs.statSync(dirPath).isDirectory();
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get the SDD root directory for a project
|
|
25
|
+
* Prefers .spec, falls back to .kiro for legacy projects
|
|
26
|
+
*
|
|
27
|
+
* @param projectPath - Project root path
|
|
28
|
+
* @returns SDD root directory path (.spec or .kiro)
|
|
29
|
+
*/
|
|
30
|
+
export function getSddRoot(projectPath) {
|
|
31
|
+
const specPath = path.join(projectPath, SDD_DIR);
|
|
32
|
+
const kiroPath = path.join(projectPath, SDD_DIR_LEGACY);
|
|
33
|
+
// Prefer .spec if it exists
|
|
34
|
+
if (dirExists(specPath)) {
|
|
35
|
+
return specPath;
|
|
36
|
+
}
|
|
37
|
+
// Fall back to .kiro for legacy projects
|
|
38
|
+
if (dirExists(kiroPath)) {
|
|
39
|
+
return kiroPath;
|
|
40
|
+
}
|
|
41
|
+
// Default to .spec for new projects
|
|
42
|
+
return specPath;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get the SDD directory name for a project
|
|
46
|
+
* Returns the actual directory name used (.spec or .kiro)
|
|
47
|
+
*
|
|
48
|
+
* @param projectPath - Project root path
|
|
49
|
+
* @returns Directory name (.spec or .kiro)
|
|
50
|
+
*/
|
|
51
|
+
export function getSddDirName(projectPath) {
|
|
52
|
+
const specPath = path.join(projectPath, SDD_DIR);
|
|
53
|
+
const kiroPath = path.join(projectPath, SDD_DIR_LEGACY);
|
|
54
|
+
if (dirExists(specPath)) {
|
|
55
|
+
return SDD_DIR;
|
|
56
|
+
}
|
|
57
|
+
if (dirExists(kiroPath)) {
|
|
58
|
+
return SDD_DIR_LEGACY;
|
|
59
|
+
}
|
|
60
|
+
return SDD_DIR;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get the specs directory path
|
|
64
|
+
* @param projectPath - Project root path
|
|
65
|
+
* @returns Specs directory path
|
|
66
|
+
*/
|
|
67
|
+
export function getSpecsPath(projectPath) {
|
|
68
|
+
return path.join(getSddRoot(projectPath), 'specs');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get the steering directory path
|
|
72
|
+
* @param projectPath - Project root path
|
|
73
|
+
* @returns Steering directory path
|
|
74
|
+
*/
|
|
75
|
+
export function getSteeringPath(projectPath) {
|
|
76
|
+
return path.join(getSddRoot(projectPath), 'steering');
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get a feature's spec directory path
|
|
80
|
+
* @param projectPath - Project root path
|
|
81
|
+
* @param featureName - Feature name
|
|
82
|
+
* @returns Feature spec directory path
|
|
83
|
+
*/
|
|
84
|
+
export function getFeatureSpecPath(projectPath, featureName) {
|
|
85
|
+
return path.join(getSpecsPath(projectPath), featureName);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get the spec.json file path for a feature
|
|
89
|
+
* @param projectPath - Project root path
|
|
90
|
+
* @param featureName - Feature name
|
|
91
|
+
* @returns spec.json file path
|
|
92
|
+
*/
|
|
93
|
+
export function getSpecJsonPath(projectPath, featureName) {
|
|
94
|
+
return path.join(getFeatureSpecPath(projectPath, featureName), 'spec.json');
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Check if this is a legacy project (using .kiro instead of .spec)
|
|
98
|
+
* @param projectPath - Project root path
|
|
99
|
+
* @returns true if project uses .kiro
|
|
100
|
+
*/
|
|
101
|
+
export function isLegacyProject(projectPath) {
|
|
102
|
+
const specPath = path.join(projectPath, SDD_DIR);
|
|
103
|
+
const kiroPath = path.join(projectPath, SDD_DIR_LEGACY);
|
|
104
|
+
// If .spec exists, not legacy
|
|
105
|
+
if (dirExists(specPath)) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
// If only .kiro exists, it's legacy
|
|
109
|
+
return dirExists(kiroPath);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get the appropriate SDD directory for new projects
|
|
113
|
+
* Always returns .spec for new projects
|
|
114
|
+
*
|
|
115
|
+
* @param projectPath - Project root path
|
|
116
|
+
* @returns Path to create SDD directory (.spec)
|
|
117
|
+
*/
|
|
118
|
+
export function getNewSddRoot(projectPath) {
|
|
119
|
+
return path.join(projectPath, SDD_DIR);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Create all required SDD directories for a new project
|
|
123
|
+
* @param projectPath - Project root path
|
|
124
|
+
* @returns Created paths
|
|
125
|
+
*/
|
|
126
|
+
export function createSddDirectories(projectPath) {
|
|
127
|
+
const sddRoot = getNewSddRoot(projectPath);
|
|
128
|
+
const paths = [
|
|
129
|
+
sddRoot,
|
|
130
|
+
path.join(sddRoot, 'specs'),
|
|
131
|
+
path.join(sddRoot, 'steering'),
|
|
132
|
+
];
|
|
133
|
+
for (const p of paths) {
|
|
134
|
+
fs.mkdirSync(p, { recursive: true });
|
|
135
|
+
}
|
|
136
|
+
return paths;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=sddPaths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sddPaths.js","sourceRoot":"","sources":["../../src/utils/sddPaths.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ import { analyzeProject } from "./documentGenerator.js";
|
|
|
3
3
|
* Governance subtasks that must be included in every task group
|
|
4
4
|
* References steering documents for TDD and coding principles
|
|
5
5
|
*/
|
|
6
|
-
const TDD_SUBTASK = "Follow `.
|
|
7
|
-
const PRINCIPLES_SUBTASK = "Review `.
|
|
6
|
+
const TDD_SUBTASK = "Follow `.spec/steering/tdd-guideline.md` (Red→Green→Refactor)";
|
|
7
|
+
const PRINCIPLES_SUBTASK = "Review `.spec/steering/principles.md`; capture any deviations";
|
|
8
8
|
/**
|
|
9
9
|
* Enforce governance by adding TDD and principles subtasks to every task
|
|
10
10
|
* Also updates requirements field to include TDD and Principles tags
|
|
@@ -178,7 +178,7 @@ ${section("Integration", tasks.integration)}
|
|
|
178
178
|
---
|
|
179
179
|
|
|
180
180
|
**Note**: Follow TDD principles strictly. Never write production code without a failing test first.
|
|
181
|
-
Refer to \`.
|
|
181
|
+
Refer to \`.spec/steering/tdd-guideline.md\` for detailed TDD guidance.
|
|
182
182
|
`;
|
|
183
183
|
}
|
|
184
184
|
// Helpers derived from TemplateService, reduced and dependency-free
|