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,373 @@
|
|
|
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 '../di/types.js';
|
|
16
|
+
import { ProjectService } from '../../application/services/ProjectService.js';
|
|
17
|
+
let PromptManager = class PromptManager {
|
|
18
|
+
projectService;
|
|
19
|
+
logger;
|
|
20
|
+
constructor(projectService, logger) {
|
|
21
|
+
this.projectService = projectService;
|
|
22
|
+
this.logger = logger;
|
|
23
|
+
}
|
|
24
|
+
async listPrompts() {
|
|
25
|
+
const correlationId = uuidv4();
|
|
26
|
+
this.logger.info('Listing available prompts', { correlationId });
|
|
27
|
+
const prompts = [
|
|
28
|
+
{
|
|
29
|
+
name: 'sdd-requirements-review',
|
|
30
|
+
description: 'Generate comprehensive requirements review using EARS format',
|
|
31
|
+
arguments: [
|
|
32
|
+
{
|
|
33
|
+
name: 'projectId',
|
|
34
|
+
description: 'Project ID to review',
|
|
35
|
+
required: true
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'focus',
|
|
39
|
+
description: 'Specific focus area (optional)',
|
|
40
|
+
required: false
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'sdd-design-review',
|
|
46
|
+
description: 'Perform technical design review with architecture analysis',
|
|
47
|
+
arguments: [
|
|
48
|
+
{
|
|
49
|
+
name: 'projectId',
|
|
50
|
+
description: 'Project ID to review',
|
|
51
|
+
required: true
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'component',
|
|
55
|
+
description: 'Specific component to focus on (optional)',
|
|
56
|
+
required: false
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'sdd-linus-review',
|
|
62
|
+
description: 'Apply Linus-style code review criteria with taste scoring',
|
|
63
|
+
arguments: [
|
|
64
|
+
{
|
|
65
|
+
name: 'code',
|
|
66
|
+
description: 'Code to review',
|
|
67
|
+
required: true
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'language',
|
|
71
|
+
description: 'Programming language',
|
|
72
|
+
required: false
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'sdd-task-breakdown',
|
|
78
|
+
description: 'Generate detailed task breakdown from design specifications',
|
|
79
|
+
arguments: [
|
|
80
|
+
{
|
|
81
|
+
name: 'projectId',
|
|
82
|
+
description: 'Project ID for task breakdown',
|
|
83
|
+
required: true
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: 'complexity',
|
|
87
|
+
description: 'Task complexity level (simple|standard|complex)',
|
|
88
|
+
required: false
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: 'sdd-quality-gates',
|
|
94
|
+
description: 'Evaluate project readiness for phase progression',
|
|
95
|
+
arguments: [
|
|
96
|
+
{
|
|
97
|
+
name: 'projectId',
|
|
98
|
+
description: 'Project ID to evaluate',
|
|
99
|
+
required: true
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: 'targetPhase',
|
|
103
|
+
description: 'Target phase for progression',
|
|
104
|
+
required: true
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
}
|
|
108
|
+
];
|
|
109
|
+
this.logger.info('Prompt listing completed', {
|
|
110
|
+
correlationId,
|
|
111
|
+
promptCount: prompts.length
|
|
112
|
+
});
|
|
113
|
+
return prompts;
|
|
114
|
+
}
|
|
115
|
+
async getPrompt(name, arguments_) {
|
|
116
|
+
const correlationId = uuidv4();
|
|
117
|
+
this.logger.info('Getting prompt', { correlationId, name, arguments_ });
|
|
118
|
+
switch (name) {
|
|
119
|
+
case 'sdd-requirements-review':
|
|
120
|
+
return await this.getRequirementsReviewPrompt(arguments_);
|
|
121
|
+
case 'sdd-design-review':
|
|
122
|
+
return await this.getDesignReviewPrompt(arguments_);
|
|
123
|
+
case 'sdd-linus-review':
|
|
124
|
+
return await this.getLinusReviewPrompt(arguments_);
|
|
125
|
+
case 'sdd-task-breakdown':
|
|
126
|
+
return await this.getTaskBreakdownPrompt(arguments_);
|
|
127
|
+
case 'sdd-quality-gates':
|
|
128
|
+
return await this.getQualityGatesPrompt(arguments_);
|
|
129
|
+
default:
|
|
130
|
+
throw new Error(`Unknown prompt: ${name}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async getRequirementsReviewPrompt(args) {
|
|
134
|
+
const { projectId, focus } = args;
|
|
135
|
+
if (!projectId) {
|
|
136
|
+
throw new Error('projectId is required for requirements review');
|
|
137
|
+
}
|
|
138
|
+
const project = await this.projectService.getProject(projectId);
|
|
139
|
+
if (!project) {
|
|
140
|
+
throw new Error(`Project not found: ${projectId}`);
|
|
141
|
+
}
|
|
142
|
+
const focusContext = focus ? `with specific focus on: ${focus}` : '';
|
|
143
|
+
return {
|
|
144
|
+
description: `Requirements review for project ${project.name}`,
|
|
145
|
+
messages: [
|
|
146
|
+
{
|
|
147
|
+
role: 'user',
|
|
148
|
+
content: {
|
|
149
|
+
type: 'text',
|
|
150
|
+
text: `Please review the requirements for project "${project.name}" ${focusContext}.
|
|
151
|
+
|
|
152
|
+
Use EARS format validation:
|
|
153
|
+
- Each requirement should follow "WHEN/WHERE/IF [condition] THEN [system behavior]"
|
|
154
|
+
- Verify acceptance criteria are testable and measurable
|
|
155
|
+
- Check for completeness and consistency
|
|
156
|
+
- Identify missing edge cases or error conditions
|
|
157
|
+
- Ensure requirements are implementation-agnostic
|
|
158
|
+
|
|
159
|
+
Project Context:
|
|
160
|
+
- Name: ${project.name}
|
|
161
|
+
- Phase: ${project.phase}
|
|
162
|
+
- Language: ${project.metadata.language}
|
|
163
|
+
|
|
164
|
+
Please provide:
|
|
165
|
+
1. Requirements completeness assessment
|
|
166
|
+
2. EARS format compliance check
|
|
167
|
+
3. Missing requirements identification
|
|
168
|
+
4. Acceptance criteria quality review
|
|
169
|
+
5. Recommendations for improvement`
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
]
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
async getDesignReviewPrompt(args) {
|
|
176
|
+
const { projectId, component } = args;
|
|
177
|
+
if (!projectId) {
|
|
178
|
+
throw new Error('projectId is required for design review');
|
|
179
|
+
}
|
|
180
|
+
const project = await this.projectService.getProject(projectId);
|
|
181
|
+
if (!project) {
|
|
182
|
+
throw new Error(`Project not found: ${projectId}`);
|
|
183
|
+
}
|
|
184
|
+
const componentContext = component ? `focusing on component: ${component}` : 'covering all components';
|
|
185
|
+
return {
|
|
186
|
+
description: `Technical design review for project ${project.name}`,
|
|
187
|
+
messages: [
|
|
188
|
+
{
|
|
189
|
+
role: 'user',
|
|
190
|
+
content: {
|
|
191
|
+
type: 'text',
|
|
192
|
+
text: `Please review the technical design for project "${project.name}" ${componentContext}.
|
|
193
|
+
|
|
194
|
+
Evaluate:
|
|
195
|
+
1. Architecture pattern appropriateness
|
|
196
|
+
2. Component responsibility clarity
|
|
197
|
+
3. Interface design quality
|
|
198
|
+
4. Data model consistency
|
|
199
|
+
5. Scalability considerations
|
|
200
|
+
6. Maintainability factors
|
|
201
|
+
7. Technology stack alignment
|
|
202
|
+
|
|
203
|
+
Project Context:
|
|
204
|
+
- Name: ${project.name}
|
|
205
|
+
- Phase: ${project.phase}
|
|
206
|
+
- Language: ${project.metadata.language}
|
|
207
|
+
|
|
208
|
+
Please provide:
|
|
209
|
+
1. Architecture assessment
|
|
210
|
+
2. Component design evaluation
|
|
211
|
+
3. Interface quality review
|
|
212
|
+
4. Data model validation
|
|
213
|
+
5. Technology stack analysis
|
|
214
|
+
6. Scalability and maintainability review
|
|
215
|
+
7. Improvement recommendations`
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
]
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
async getLinusReviewPrompt(args) {
|
|
222
|
+
const { code, language = 'typescript' } = args;
|
|
223
|
+
if (!code) {
|
|
224
|
+
throw new Error('code is required for Linus review');
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
description: 'Linus-style code review with taste scoring',
|
|
228
|
+
messages: [
|
|
229
|
+
{
|
|
230
|
+
role: 'user',
|
|
231
|
+
content: {
|
|
232
|
+
type: 'text',
|
|
233
|
+
text: `Apply Linus Torvalds code review criteria to analyze this ${language} code:
|
|
234
|
+
|
|
235
|
+
\`\`\`${language}
|
|
236
|
+
${code}
|
|
237
|
+
\`\`\`
|
|
238
|
+
|
|
239
|
+
Use the five-layer analysis framework:
|
|
240
|
+
|
|
241
|
+
1. **Data Structure Analysis**: "Bad programmers worry about code. Good programmers worry about data structures."
|
|
242
|
+
2. **Special Case Identification**: Find and eliminate special cases through better design
|
|
243
|
+
3. **Complexity Review**: Check indentation depth (max 3 levels), function length, cyclomatic complexity
|
|
244
|
+
4. **Breaking Change Analysis**: Ensure backward compatibility
|
|
245
|
+
5. **Practicality Validation**: Verify this solves real problems
|
|
246
|
+
|
|
247
|
+
Provide output in this format:
|
|
248
|
+
|
|
249
|
+
【Taste Score】
|
|
250
|
+
🟢 Good taste / 🟡 Passable / 🔴 Garbage
|
|
251
|
+
|
|
252
|
+
【Fatal Issues】
|
|
253
|
+
- [List critical problems]
|
|
254
|
+
|
|
255
|
+
【Improvement Direction】
|
|
256
|
+
"Eliminate this special case"
|
|
257
|
+
"These 10 lines can become 3 lines"
|
|
258
|
+
"Data structure is wrong, should be..."
|
|
259
|
+
|
|
260
|
+
Apply Linus's core principles:
|
|
261
|
+
- Simplicity over complexity
|
|
262
|
+
- No special cases
|
|
263
|
+
- Data structures over algorithms
|
|
264
|
+
- Practical solutions over theoretical perfection`
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
]
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
async getTaskBreakdownPrompt(args) {
|
|
271
|
+
const { projectId, complexity = 'standard' } = args;
|
|
272
|
+
if (!projectId) {
|
|
273
|
+
throw new Error('projectId is required for task breakdown');
|
|
274
|
+
}
|
|
275
|
+
const project = await this.projectService.getProject(projectId);
|
|
276
|
+
if (!project) {
|
|
277
|
+
throw new Error(`Project not found: ${projectId}`);
|
|
278
|
+
}
|
|
279
|
+
return {
|
|
280
|
+
description: `Task breakdown for project ${project.name}`,
|
|
281
|
+
messages: [
|
|
282
|
+
{
|
|
283
|
+
role: 'user',
|
|
284
|
+
content: {
|
|
285
|
+
type: 'text',
|
|
286
|
+
text: `Generate detailed implementation tasks for project "${project.name}" with ${complexity} complexity level.
|
|
287
|
+
|
|
288
|
+
Project Context:
|
|
289
|
+
- Name: ${project.name}
|
|
290
|
+
- Phase: ${project.phase}
|
|
291
|
+
- Language: ${project.metadata.language}
|
|
292
|
+
|
|
293
|
+
Task breakdown guidelines:
|
|
294
|
+
1. Create logical task sequence
|
|
295
|
+
2. Ensure each task is testable and measurable
|
|
296
|
+
3. Include requirement references for traceability
|
|
297
|
+
4. Break complex tasks into manageable subtasks
|
|
298
|
+
5. Consider dependencies between tasks
|
|
299
|
+
6. Include testing and validation steps
|
|
300
|
+
|
|
301
|
+
Output format:
|
|
302
|
+
- [ ] 1. [Main Task Title]
|
|
303
|
+
- [Subtask description]
|
|
304
|
+
- [Subtask description]
|
|
305
|
+
- _Requirements: [requirement references]_
|
|
306
|
+
|
|
307
|
+
Please provide:
|
|
308
|
+
1. Complete task breakdown
|
|
309
|
+
2. Dependency analysis
|
|
310
|
+
3. Implementation sequence
|
|
311
|
+
4. Testing strategy
|
|
312
|
+
5. Quality gates integration`
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
]
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
async getQualityGatesPrompt(args) {
|
|
319
|
+
const { projectId, targetPhase } = args;
|
|
320
|
+
if (!projectId || !targetPhase) {
|
|
321
|
+
throw new Error('projectId and targetPhase are required for quality gates evaluation');
|
|
322
|
+
}
|
|
323
|
+
const project = await this.projectService.getProject(projectId);
|
|
324
|
+
if (!project) {
|
|
325
|
+
throw new Error(`Project not found: ${projectId}`);
|
|
326
|
+
}
|
|
327
|
+
return {
|
|
328
|
+
description: `Quality gates evaluation for project ${project.name}`,
|
|
329
|
+
messages: [
|
|
330
|
+
{
|
|
331
|
+
role: 'user',
|
|
332
|
+
content: {
|
|
333
|
+
type: 'text',
|
|
334
|
+
text: `Evaluate quality gates for project "${project.name}" progression to ${targetPhase} phase.
|
|
335
|
+
|
|
336
|
+
Current Project Status:
|
|
337
|
+
- Name: ${project.name}
|
|
338
|
+
- Current Phase: ${project.phase}
|
|
339
|
+
- Target Phase: ${targetPhase}
|
|
340
|
+
- Requirements Generated: ${project.metadata.approvals.requirements.generated}
|
|
341
|
+
- Requirements Approved: ${project.metadata.approvals.requirements.approved}
|
|
342
|
+
- Design Generated: ${project.metadata.approvals.design.generated}
|
|
343
|
+
- Design Approved: ${project.metadata.approvals.design.approved}
|
|
344
|
+
- Tasks Generated: ${project.metadata.approvals.tasks.generated}
|
|
345
|
+
- Tasks Approved: ${project.metadata.approvals.tasks.approved}
|
|
346
|
+
|
|
347
|
+
Quality gate evaluation criteria:
|
|
348
|
+
1. Phase transition requirements
|
|
349
|
+
2. Approval status validation
|
|
350
|
+
3. Deliverable quality assessment
|
|
351
|
+
4. Completeness verification
|
|
352
|
+
5. Consistency checks
|
|
353
|
+
|
|
354
|
+
Please provide:
|
|
355
|
+
1. Phase transition readiness assessment
|
|
356
|
+
2. Missing approvals or deliverables
|
|
357
|
+
3. Quality issues that block progression
|
|
358
|
+
4. Recommendations for proceeding
|
|
359
|
+
5. Risk assessment for target phase`
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
]
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
PromptManager = __decorate([
|
|
367
|
+
injectable(),
|
|
368
|
+
__param(0, inject(TYPES.ProjectService)),
|
|
369
|
+
__param(1, inject(TYPES.LoggerPort)),
|
|
370
|
+
__metadata("design:paramtypes", [ProjectService, Object])
|
|
371
|
+
], PromptManager);
|
|
372
|
+
export { PromptManager };
|
|
373
|
+
//# sourceMappingURL=PromptManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptManager.js","sourceRoot":"","sources":["../../../src/infrastructure/mcp/PromptManager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAO/C,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAGvE,IAAM,aAAa,GAAnB,MAAM,aAAa;IAEyB;IACJ;IAF7C,YACiD,cAA8B,EAClC,MAAkB;QADd,mBAAc,GAAd,cAAc,CAAgB;QAClC,WAAM,GAAN,MAAM,CAAY;IAC5D,CAAC;IAEJ,KAAK,CAAC,WAAW;QACf,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;QAE/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QAEjE,MAAM,OAAO,GAAa;YACxB;gBACE,IAAI,EAAE,yBAAyB;gBAC/B,WAAW,EAAE,8DAA8D;gBAC3E,SAAS,EAAE;oBACT;wBACE,IAAI,EAAE,WAAW;wBACjB,WAAW,EAAE,sBAAsB;wBACnC,QAAQ,EAAE,IAAI;qBACf;oBACD;wBACE,IAAI,EAAE,OAAO;wBACb,WAAW,EAAE,gCAAgC;wBAC7C,QAAQ,EAAE,KAAK;qBAChB;iBACF;aACF;YACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,4DAA4D;gBACzE,SAAS,EAAE;oBACT;wBACE,IAAI,EAAE,WAAW;wBACjB,WAAW,EAAE,sBAAsB;wBACnC,QAAQ,EAAE,IAAI;qBACf;oBACD;wBACE,IAAI,EAAE,WAAW;wBACjB,WAAW,EAAE,2CAA2C;wBACxD,QAAQ,EAAE,KAAK;qBAChB;iBACF;aACF;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,2DAA2D;gBACxE,SAAS,EAAE;oBACT;wBACE,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,gBAAgB;wBAC7B,QAAQ,EAAE,IAAI;qBACf;oBACD;wBACE,IAAI,EAAE,UAAU;wBAChB,WAAW,EAAE,sBAAsB;wBACnC,QAAQ,EAAE,KAAK;qBAChB;iBACF;aACF;YACD;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,WAAW,EAAE,6DAA6D;gBAC1E,SAAS,EAAE;oBACT;wBACE,IAAI,EAAE,WAAW;wBACjB,WAAW,EAAE,+BAA+B;wBAC5C,QAAQ,EAAE,IAAI;qBACf;oBACD;wBACE,IAAI,EAAE,YAAY;wBAClB,WAAW,EAAE,iDAAiD;wBAC9D,QAAQ,EAAE,KAAK;qBAChB;iBACF;aACF;YACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,kDAAkD;gBAC/D,SAAS,EAAE;oBACT;wBACE,IAAI,EAAE,WAAW;wBACjB,WAAW,EAAE,wBAAwB;wBACrC,QAAQ,EAAE,IAAI;qBACf;oBACD;wBACE,IAAI,EAAE,aAAa;wBACnB,WAAW,EAAE,8BAA8B;wBAC3C,QAAQ,EAAE,IAAI;qBACf;iBACF;aACF;SACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;YAC3C,aAAa;YACb,WAAW,EAAE,OAAO,CAAC,MAAM;SAC5B,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,UAAkC;QAI9D,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;QAE/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAExE,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,yBAAyB;gBAC5B,OAAO,MAAM,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC;YAE5D,KAAK,mBAAmB;gBACtB,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;YAEtD,KAAK,kBAAkB;gBACrB,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAErD,KAAK,oBAAoB;gBACvB,OAAO,MAAM,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;YAEvD,KAAK,mBAAmB;gBACtB,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;YAEtD;gBACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,2BAA2B,CAAC,IAA4B;QAIpE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAElC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAErE,OAAO;YACL,WAAW,EAAE,mCAAmC,OAAO,CAAC,IAAI,EAAE;YAC9D,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,+CAA+C,OAAO,CAAC,IAAI,KAAK,YAAY;;;;;;;;;;UAUpF,OAAO,CAAC,IAAI;WACX,OAAO,CAAC,KAAK;cACV,OAAO,CAAC,QAAQ,CAAC,QAAQ;;;;;;;mCAOJ;qBACT;iBACjB;aACF;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,IAA4B;QAI9D,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAEtC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,gBAAgB,GAAG,SAAS,CAAC,CAAC,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC;QAEvG,OAAO;YACL,WAAW,EAAE,uCAAuC,OAAO,CAAC,IAAI,EAAE;YAClE,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,mDAAmD,OAAO,CAAC,IAAI,KAAK,gBAAgB;;;;;;;;;;;;UAY5F,OAAO,CAAC,IAAI;WACX,OAAO,CAAC,KAAK;cACV,OAAO,CAAC,QAAQ,CAAC,QAAQ;;;;;;;;;+BASR;qBACL;iBACjB;aACF;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,IAA4B;QAI7D,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,EAAE,GAAG,IAAI,CAAC;QAE/C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,OAAO;YACL,WAAW,EAAE,4CAA4C;YACzD,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,6DAA6D,QAAQ;;QAE/E,QAAQ;EACd,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDA4B4C;qBACxB;iBACjB;aACF;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,IAA4B;QAI/D,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC;QAEpD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,OAAO;YACL,WAAW,EAAE,8BAA8B,OAAO,CAAC,IAAI,EAAE;YACzD,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uDAAuD,OAAO,CAAC,IAAI,UAAU,UAAU;;;UAG/F,OAAO,CAAC,IAAI;WACX,OAAO,CAAC,KAAK;cACV,OAAO,CAAC,QAAQ,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;6BAqBV;qBACH;iBACjB;aACF;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,IAA4B;QAI9D,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAExC,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,OAAO;YACL,WAAW,EAAE,wCAAwC,OAAO,CAAC,IAAI,EAAE;YACnE,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uCAAuC,OAAO,CAAC,IAAI,oBAAoB,WAAW;;;UAG1F,OAAO,CAAC,IAAI;mBACH,OAAO,CAAC,KAAK;kBACd,WAAW;4BACD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS;2BAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ;sBACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS;qBAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ;qBAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS;oBAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ;;;;;;;;;;;;;;oCAczB;qBACV;iBACjB;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AA9YY,aAAa;IADzB,UAAU,EAAE;IAGR,WAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IAC5B,WAAA,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;qCADsC,cAAc;GAFpE,aAAa,CA8YzB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Resource, ResourceContents } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { FileSystemPort, LoggerPort } from '../../domain/ports.js';
|
|
3
|
+
import { ProjectService } from '../../application/services/ProjectService.js';
|
|
4
|
+
export declare class ResourceManager {
|
|
5
|
+
private readonly fileSystem;
|
|
6
|
+
private readonly projectService;
|
|
7
|
+
private readonly logger;
|
|
8
|
+
constructor(fileSystem: FileSystemPort, projectService: ProjectService, logger: LoggerPort);
|
|
9
|
+
listResources(): Promise<Resource[]>;
|
|
10
|
+
readResource(uri: string): Promise<ResourceContents>;
|
|
11
|
+
private readProjectResource;
|
|
12
|
+
private readTemplateResource;
|
|
13
|
+
private readSteeringResource;
|
|
14
|
+
private generateProjectResourceTemplate;
|
|
15
|
+
}
|
|
@@ -0,0 +1,229 @@
|
|
|
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 '../di/types.js';
|
|
16
|
+
import { ProjectService } from '../../application/services/ProjectService.js';
|
|
17
|
+
let ResourceManager = class ResourceManager {
|
|
18
|
+
fileSystem;
|
|
19
|
+
projectService;
|
|
20
|
+
logger;
|
|
21
|
+
constructor(fileSystem, projectService, logger) {
|
|
22
|
+
this.fileSystem = fileSystem;
|
|
23
|
+
this.projectService = projectService;
|
|
24
|
+
this.logger = logger;
|
|
25
|
+
}
|
|
26
|
+
async listResources() {
|
|
27
|
+
const correlationId = uuidv4();
|
|
28
|
+
this.logger.info('Listing available resources', { correlationId });
|
|
29
|
+
const projects = await this.projectService.listProjects();
|
|
30
|
+
const resources = [];
|
|
31
|
+
// Add project-specific resources
|
|
32
|
+
for (const project of projects) {
|
|
33
|
+
const baseUri = `sdd://project/${project.id}`;
|
|
34
|
+
resources.push({
|
|
35
|
+
uri: `${baseUri}/spec.json`,
|
|
36
|
+
name: `${project.name} - Project Specification`,
|
|
37
|
+
description: 'Project metadata and workflow status',
|
|
38
|
+
mimeType: 'application/json'
|
|
39
|
+
}, {
|
|
40
|
+
uri: `${baseUri}/requirements.md`,
|
|
41
|
+
name: `${project.name} - Requirements`,
|
|
42
|
+
description: 'Project requirements document',
|
|
43
|
+
mimeType: 'text/markdown'
|
|
44
|
+
}, {
|
|
45
|
+
uri: `${baseUri}/design.md`,
|
|
46
|
+
name: `${project.name} - Design`,
|
|
47
|
+
description: 'Technical design document',
|
|
48
|
+
mimeType: 'text/markdown'
|
|
49
|
+
}, {
|
|
50
|
+
uri: `${baseUri}/tasks.md`,
|
|
51
|
+
name: `${project.name} - Tasks`,
|
|
52
|
+
description: 'Implementation task list',
|
|
53
|
+
mimeType: 'text/markdown'
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
// Add global resources
|
|
57
|
+
resources.push({
|
|
58
|
+
uri: 'sdd://templates/spec.json',
|
|
59
|
+
name: 'SDD Project Specification Template',
|
|
60
|
+
description: 'Template for project spec.json files',
|
|
61
|
+
mimeType: 'application/json'
|
|
62
|
+
}, {
|
|
63
|
+
uri: 'sdd://templates/requirements.md',
|
|
64
|
+
name: 'SDD Requirements Template',
|
|
65
|
+
description: 'Template for requirements documents',
|
|
66
|
+
mimeType: 'text/markdown'
|
|
67
|
+
}, {
|
|
68
|
+
uri: 'sdd://steering/linus-review.md',
|
|
69
|
+
name: 'Linus-style Code Review Guidelines',
|
|
70
|
+
description: 'Code quality and review guidelines',
|
|
71
|
+
mimeType: 'text/markdown'
|
|
72
|
+
});
|
|
73
|
+
this.logger.info('Resource listing completed', {
|
|
74
|
+
correlationId,
|
|
75
|
+
resourceCount: resources.length
|
|
76
|
+
});
|
|
77
|
+
return resources;
|
|
78
|
+
}
|
|
79
|
+
async readResource(uri) {
|
|
80
|
+
const correlationId = uuidv4();
|
|
81
|
+
this.logger.info('Reading resource', { correlationId, uri });
|
|
82
|
+
try {
|
|
83
|
+
if (uri.startsWith('sdd://project/')) {
|
|
84
|
+
return await this.readProjectResource(uri);
|
|
85
|
+
}
|
|
86
|
+
else if (uri.startsWith('sdd://templates/')) {
|
|
87
|
+
return await this.readTemplateResource(uri);
|
|
88
|
+
}
|
|
89
|
+
else if (uri.startsWith('sdd://steering/')) {
|
|
90
|
+
return await this.readSteeringResource(uri);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
throw new Error(`Unsupported resource URI: ${uri}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
this.logger.error('Failed to read resource', error, {
|
|
98
|
+
correlationId,
|
|
99
|
+
uri
|
|
100
|
+
});
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async readProjectResource(uri) {
|
|
105
|
+
const match = uri.match(/^sdd:\/\/project\/([^/]+)\/(.+)$/);
|
|
106
|
+
if (!match) {
|
|
107
|
+
throw new Error('Invalid project resource URI format');
|
|
108
|
+
}
|
|
109
|
+
const [, projectId, fileName] = match;
|
|
110
|
+
const project = await this.projectService.getProject(projectId);
|
|
111
|
+
if (!project) {
|
|
112
|
+
throw new Error(`Project not found: ${projectId}`);
|
|
113
|
+
}
|
|
114
|
+
const filePath = `${project.path}/.kiro/specs/${project.name}/${fileName}`;
|
|
115
|
+
try {
|
|
116
|
+
if (await this.fileSystem.exists(filePath)) {
|
|
117
|
+
const content = await this.fileSystem.readFile(filePath);
|
|
118
|
+
return {
|
|
119
|
+
uri,
|
|
120
|
+
mimeType: fileName.endsWith('.json') ? 'application/json' : 'text/markdown',
|
|
121
|
+
text: content
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// Return template if file doesn't exist yet
|
|
126
|
+
return await this.generateProjectResourceTemplate(project, fileName, uri);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
throw new Error(`Failed to read project resource: ${error.message}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async readTemplateResource(uri) {
|
|
134
|
+
const templates = {
|
|
135
|
+
'sdd://templates/spec.json': JSON.stringify({
|
|
136
|
+
feature_name: "{{project.name}}",
|
|
137
|
+
created_at: "{{timestamp}}",
|
|
138
|
+
updated_at: "{{timestamp}}",
|
|
139
|
+
language: "{{project.metadata.language}}",
|
|
140
|
+
phase: "{{project.phase}}",
|
|
141
|
+
approvals: {
|
|
142
|
+
requirements: { generated: false, approved: false },
|
|
143
|
+
design: { generated: false, approved: false },
|
|
144
|
+
tasks: { generated: false, approved: false }
|
|
145
|
+
},
|
|
146
|
+
ready_for_implementation: false
|
|
147
|
+
}, null, 2),
|
|
148
|
+
'sdd://templates/requirements.md': `# Requirements Document
|
|
149
|
+
|
|
150
|
+
## Introduction
|
|
151
|
+
{{project.name}} - Requirements specification
|
|
152
|
+
|
|
153
|
+
## Requirements
|
|
154
|
+
|
|
155
|
+
### Requirement 1: [Title]
|
|
156
|
+
**Objective:** [Objective statement]
|
|
157
|
+
|
|
158
|
+
#### Acceptance Criteria
|
|
159
|
+
1. WHEN [condition] THEN [expected behavior]
|
|
160
|
+
2. WHERE [context] THE system SHALL [requirement]
|
|
161
|
+
3. IF [condition] THEN [expected result]
|
|
162
|
+
`
|
|
163
|
+
};
|
|
164
|
+
const content = templates[uri];
|
|
165
|
+
if (!content) {
|
|
166
|
+
throw new Error(`Template not found: ${uri}`);
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
uri,
|
|
170
|
+
mimeType: uri.endsWith('.json') ? 'application/json' : 'text/markdown',
|
|
171
|
+
text: content
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
async readSteeringResource(uri) {
|
|
175
|
+
if (uri === 'sdd://steering/linus-review.md') {
|
|
176
|
+
const steeringPath = '.kiro/steering/linus-review.md';
|
|
177
|
+
if (await this.fileSystem.exists(steeringPath)) {
|
|
178
|
+
const content = await this.fileSystem.readFile(steeringPath);
|
|
179
|
+
return {
|
|
180
|
+
uri,
|
|
181
|
+
mimeType: 'text/markdown',
|
|
182
|
+
text: content
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
throw new Error(`Steering resource not found: ${uri}`);
|
|
187
|
+
}
|
|
188
|
+
async generateProjectResourceTemplate(project, fileName, uri) {
|
|
189
|
+
let content;
|
|
190
|
+
switch (fileName) {
|
|
191
|
+
case 'spec.json':
|
|
192
|
+
content = JSON.stringify({
|
|
193
|
+
feature_name: project.name,
|
|
194
|
+
created_at: project.metadata.createdAt,
|
|
195
|
+
updated_at: project.metadata.updatedAt,
|
|
196
|
+
language: project.metadata.language,
|
|
197
|
+
phase: project.phase,
|
|
198
|
+
approvals: project.metadata.approvals,
|
|
199
|
+
ready_for_implementation: project.phase === 'implementation-ready'
|
|
200
|
+
}, null, 2);
|
|
201
|
+
break;
|
|
202
|
+
case 'requirements.md':
|
|
203
|
+
content = `# Requirements Document\n\n## Introduction\n${project.name} - Requirements specification\n\n## Requirements\n\n[Requirements to be defined...]`;
|
|
204
|
+
break;
|
|
205
|
+
case 'design.md':
|
|
206
|
+
content = `# Technical Design Document\n\n## Project: ${project.name}\n\n[Design to be defined...]`;
|
|
207
|
+
break;
|
|
208
|
+
case 'tasks.md':
|
|
209
|
+
content = `# Implementation Plan\n\n[Tasks to be defined...]`;
|
|
210
|
+
break;
|
|
211
|
+
default:
|
|
212
|
+
throw new Error(`Unknown resource file: ${fileName}`);
|
|
213
|
+
}
|
|
214
|
+
return {
|
|
215
|
+
uri,
|
|
216
|
+
mimeType: fileName.endsWith('.json') ? 'application/json' : 'text/markdown',
|
|
217
|
+
text: content
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
ResourceManager = __decorate([
|
|
222
|
+
injectable(),
|
|
223
|
+
__param(0, inject(TYPES.FileSystemPort)),
|
|
224
|
+
__param(1, inject(TYPES.ProjectService)),
|
|
225
|
+
__param(2, inject(TYPES.LoggerPort)),
|
|
226
|
+
__metadata("design:paramtypes", [Object, ProjectService, Object])
|
|
227
|
+
], ResourceManager);
|
|
228
|
+
export { ResourceManager };
|
|
229
|
+
//# sourceMappingURL=ResourceManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResourceManager.js","sourceRoot":"","sources":["../../../src/infrastructure/mcp/ResourceManager.ts"],"names":[],"mappings":"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"}
|