@intentsolutions/blueprint 2.1.0 → 2.2.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/dist/cli.js +116 -74
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/interview/analyzer.d.ts +39 -0
- package/dist/interview/analyzer.d.ts.map +1 -0
- package/dist/interview/analyzer.js +353 -0
- package/dist/interview/analyzer.js.map +1 -0
- package/dist/interview/engine.d.ts +71 -0
- package/dist/interview/engine.d.ts.map +1 -0
- package/dist/interview/engine.js +194 -0
- package/dist/interview/engine.js.map +1 -0
- package/dist/interview/index.d.ts +9 -0
- package/dist/interview/index.d.ts.map +1 -0
- package/dist/interview/index.js +8 -0
- package/dist/interview/index.js.map +1 -0
- package/dist/interview/questions.d.ts +22 -0
- package/dist/interview/questions.d.ts.map +1 -0
- package/dist/interview/questions.js +353 -0
- package/dist/interview/questions.js.map +1 -0
- package/dist/interview/types.d.ts +84 -0
- package/dist/interview/types.d.ts.map +1 -0
- package/dist/interview/types.js +5 -0
- package/dist/interview/types.js.map +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +43 -18
- package/dist/mcp/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interview Answer Analyzer
|
|
3
|
+
* Detects project type, complexity, and provides gap analysis
|
|
4
|
+
*/
|
|
5
|
+
// Keywords for project type detection
|
|
6
|
+
const PROJECT_TYPE_KEYWORDS = {
|
|
7
|
+
'saas-web': ['saas', 'subscription', 'dashboard', 'portal', 'web app', 'webapp', 'platform'],
|
|
8
|
+
'mobile-app': ['mobile', 'ios', 'android', 'app store', 'react native', 'flutter', 'swift'],
|
|
9
|
+
'api-backend': ['api', 'backend', 'rest', 'graphql', 'microservice', 'server'],
|
|
10
|
+
'cli-tool': ['cli', 'command line', 'terminal', 'shell', 'script'],
|
|
11
|
+
'library-sdk': ['library', 'sdk', 'package', 'npm', 'pip', 'module'],
|
|
12
|
+
'desktop-app': ['desktop', 'electron', 'native', 'windows', 'macos', 'linux app'],
|
|
13
|
+
'ecommerce': ['ecommerce', 'shop', 'store', 'cart', 'checkout', 'products'],
|
|
14
|
+
'marketplace': ['marketplace', 'multi-vendor', 'buyers', 'sellers', 'listings'],
|
|
15
|
+
'ai-ml': ['ai', 'machine learning', 'ml', 'model', 'neural', 'llm', 'gpt', 'training'],
|
|
16
|
+
'iot': ['iot', 'sensors', 'devices', 'embedded', 'hardware', 'mqtt'],
|
|
17
|
+
'blockchain': ['blockchain', 'web3', 'smart contract', 'crypto', 'nft', 'defi', 'solidity'],
|
|
18
|
+
'gaming': ['game', 'gaming', 'unity', 'unreal', 'multiplayer', 'player'],
|
|
19
|
+
'other': [],
|
|
20
|
+
};
|
|
21
|
+
// Technology keywords for detection
|
|
22
|
+
const TECH_KEYWORDS = {
|
|
23
|
+
'TypeScript': ['typescript', 'ts', '.ts'],
|
|
24
|
+
'JavaScript': ['javascript', 'js', 'node'],
|
|
25
|
+
'Python': ['python', 'django', 'flask', 'fastapi', 'pytorch', 'tensorflow'],
|
|
26
|
+
'Go': ['golang', 'go'],
|
|
27
|
+
'Rust': ['rust', 'cargo'],
|
|
28
|
+
'React': ['react', 'jsx', 'next.js', 'nextjs'],
|
|
29
|
+
'Vue': ['vue', 'nuxt'],
|
|
30
|
+
'PostgreSQL': ['postgres', 'postgresql', 'pg'],
|
|
31
|
+
'MongoDB': ['mongodb', 'mongo'],
|
|
32
|
+
'Redis': ['redis', 'cache'],
|
|
33
|
+
'AWS': ['aws', 'amazon', 's3', 'lambda', 'ec2'],
|
|
34
|
+
'GCP': ['gcp', 'google cloud', 'firebase'],
|
|
35
|
+
'Docker': ['docker', 'container'],
|
|
36
|
+
'Kubernetes': ['kubernetes', 'k8s', 'helm'],
|
|
37
|
+
};
|
|
38
|
+
// Feature keywords
|
|
39
|
+
const FEATURE_KEYWORDS = {
|
|
40
|
+
'authentication': ['auth', 'login', 'signup', 'oauth', 'sso', 'password'],
|
|
41
|
+
'payments': ['payment', 'stripe', 'billing', 'subscription', 'checkout'],
|
|
42
|
+
'real-time': ['real-time', 'realtime', 'websocket', 'live', 'notifications'],
|
|
43
|
+
'file-upload': ['upload', 'files', 'images', 'documents', 'storage'],
|
|
44
|
+
'search': ['search', 'elasticsearch', 'algolia', 'full-text'],
|
|
45
|
+
'analytics': ['analytics', 'tracking', 'metrics', 'dashboard'],
|
|
46
|
+
'admin': ['admin', 'backoffice', 'management', 'cms'],
|
|
47
|
+
'api': ['api', 'rest', 'graphql', 'endpoints'],
|
|
48
|
+
'notifications': ['email', 'sms', 'push', 'notifications'],
|
|
49
|
+
'integrations': ['integration', 'webhook', 'third-party', 'api'],
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Detect project characteristics from description
|
|
53
|
+
*/
|
|
54
|
+
export function analyzeDescription(description) {
|
|
55
|
+
const text = description.toLowerCase();
|
|
56
|
+
const result = {
|
|
57
|
+
projectType: 'other',
|
|
58
|
+
technologies: [],
|
|
59
|
+
features: [],
|
|
60
|
+
confidence: 0,
|
|
61
|
+
};
|
|
62
|
+
// Detect project type
|
|
63
|
+
let maxScore = 0;
|
|
64
|
+
for (const [type, keywords] of Object.entries(PROJECT_TYPE_KEYWORDS)) {
|
|
65
|
+
const score = keywords.filter((kw) => text.includes(kw)).length;
|
|
66
|
+
if (score > maxScore) {
|
|
67
|
+
maxScore = score;
|
|
68
|
+
result.projectType = type;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
result.confidence = Math.min(maxScore * 20, 90);
|
|
72
|
+
// Detect technologies
|
|
73
|
+
for (const [tech, keywords] of Object.entries(TECH_KEYWORDS)) {
|
|
74
|
+
if (keywords.some((kw) => text.includes(kw))) {
|
|
75
|
+
result.technologies.push(tech);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Detect features
|
|
79
|
+
for (const [feature, keywords] of Object.entries(FEATURE_KEYWORDS)) {
|
|
80
|
+
if (keywords.some((kw) => text.includes(kw))) {
|
|
81
|
+
result.features.push(feature);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Calculate project complexity
|
|
88
|
+
*/
|
|
89
|
+
export function calculateComplexity(answers) {
|
|
90
|
+
let score = 0;
|
|
91
|
+
// Base complexity from project type
|
|
92
|
+
const typeComplexity = {
|
|
93
|
+
'saas-web': 3,
|
|
94
|
+
'marketplace': 4,
|
|
95
|
+
'ecommerce': 3,
|
|
96
|
+
'ai-ml': 4,
|
|
97
|
+
'blockchain': 4,
|
|
98
|
+
'iot': 4,
|
|
99
|
+
'mobile-app': 3,
|
|
100
|
+
'api-backend': 2,
|
|
101
|
+
'desktop-app': 3,
|
|
102
|
+
'cli-tool': 1,
|
|
103
|
+
'library-sdk': 2,
|
|
104
|
+
'gaming': 3,
|
|
105
|
+
'other': 2,
|
|
106
|
+
};
|
|
107
|
+
score += typeComplexity[answers.projectType || 'other'] || 2;
|
|
108
|
+
// Add complexity for features
|
|
109
|
+
if (answers.hasAuth)
|
|
110
|
+
score += 1;
|
|
111
|
+
if (answers.hasPayments)
|
|
112
|
+
score += 2;
|
|
113
|
+
if (answers.needsCompliance)
|
|
114
|
+
score += 2;
|
|
115
|
+
if (answers.hasDatabase)
|
|
116
|
+
score += 1;
|
|
117
|
+
if ((answers.techStack?.length || 0) > 5)
|
|
118
|
+
score += 1;
|
|
119
|
+
// Team size factor
|
|
120
|
+
const teamComplexity = {
|
|
121
|
+
'Solo (1)': 0,
|
|
122
|
+
'Small (2-5)': 0,
|
|
123
|
+
'Medium (6-15)': 1,
|
|
124
|
+
'Large (16-50)': 2,
|
|
125
|
+
'Enterprise (50+)': 3,
|
|
126
|
+
};
|
|
127
|
+
score += teamComplexity[answers.teamSize || ''] || 0;
|
|
128
|
+
// Compliance adds complexity
|
|
129
|
+
if (answers.complianceTypes && answers.complianceTypes.length > 0) {
|
|
130
|
+
score += answers.complianceTypes.length;
|
|
131
|
+
}
|
|
132
|
+
// Map score to complexity
|
|
133
|
+
if (score <= 3)
|
|
134
|
+
return 'simple';
|
|
135
|
+
if (score <= 6)
|
|
136
|
+
return 'moderate';
|
|
137
|
+
if (score <= 10)
|
|
138
|
+
return 'complex';
|
|
139
|
+
return 'enterprise';
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Suggest scope based on answers
|
|
143
|
+
*/
|
|
144
|
+
export function suggestScope(answers, complexity) {
|
|
145
|
+
// If explicitly set, respect it
|
|
146
|
+
if (answers.scope)
|
|
147
|
+
return answers.scope;
|
|
148
|
+
// Timeline-based suggestions
|
|
149
|
+
const timeline = answers.timeline || '';
|
|
150
|
+
if (timeline.includes('ASAP') || timeline.includes('1-2 weeks')) {
|
|
151
|
+
return 'mvp';
|
|
152
|
+
}
|
|
153
|
+
// Audience-based suggestions
|
|
154
|
+
if (answers.audience === 'enterprise') {
|
|
155
|
+
return 'comprehensive';
|
|
156
|
+
}
|
|
157
|
+
if (answers.audience === 'startup') {
|
|
158
|
+
return complexity === 'simple' ? 'mvp' : 'standard';
|
|
159
|
+
}
|
|
160
|
+
// Complexity-based
|
|
161
|
+
if (complexity === 'enterprise')
|
|
162
|
+
return 'comprehensive';
|
|
163
|
+
if (complexity === 'complex')
|
|
164
|
+
return 'comprehensive';
|
|
165
|
+
if (complexity === 'simple')
|
|
166
|
+
return 'mvp';
|
|
167
|
+
return 'standard';
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Suggest audience based on answers
|
|
171
|
+
*/
|
|
172
|
+
export function suggestAudience(answers) {
|
|
173
|
+
if (answers.audience)
|
|
174
|
+
return answers.audience;
|
|
175
|
+
const teamSize = answers.teamSize || '';
|
|
176
|
+
if (teamSize.includes('Enterprise') || teamSize.includes('Large')) {
|
|
177
|
+
return 'enterprise';
|
|
178
|
+
}
|
|
179
|
+
if (teamSize.includes('Solo') || teamSize.includes('Small')) {
|
|
180
|
+
return 'startup';
|
|
181
|
+
}
|
|
182
|
+
if (answers.needsCompliance)
|
|
183
|
+
return 'enterprise';
|
|
184
|
+
if (answers.complianceTypes && answers.complianceTypes.length > 0)
|
|
185
|
+
return 'enterprise';
|
|
186
|
+
return 'business';
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Analyze answers and detect context
|
|
190
|
+
*/
|
|
191
|
+
export function detectContext(answers) {
|
|
192
|
+
const reasoning = [];
|
|
193
|
+
// Analyze description if available
|
|
194
|
+
const descriptionAnalysis = answers.projectDescription
|
|
195
|
+
? analyzeDescription(answers.projectDescription)
|
|
196
|
+
: null;
|
|
197
|
+
// Determine project type
|
|
198
|
+
let projectType = answers.projectType || descriptionAnalysis?.projectType || 'other';
|
|
199
|
+
if (descriptionAnalysis && !answers.projectType) {
|
|
200
|
+
reasoning.push(`Detected project type "${projectType}" from description`);
|
|
201
|
+
}
|
|
202
|
+
// Merge technologies
|
|
203
|
+
const detectedTechnologies = [
|
|
204
|
+
...(answers.techStack || []),
|
|
205
|
+
...(descriptionAnalysis?.technologies || []),
|
|
206
|
+
].filter((v, i, a) => a.indexOf(v) === i);
|
|
207
|
+
// Calculate complexity
|
|
208
|
+
const complexity = calculateComplexity(answers);
|
|
209
|
+
reasoning.push(`Calculated complexity: ${complexity}`);
|
|
210
|
+
// Suggest scope and audience
|
|
211
|
+
const suggestedScope = suggestScope(answers, complexity);
|
|
212
|
+
const suggestedAudience = suggestAudience(answers);
|
|
213
|
+
if (!answers.scope) {
|
|
214
|
+
reasoning.push(`Suggested scope: ${suggestedScope} (based on complexity and timeline)`);
|
|
215
|
+
}
|
|
216
|
+
if (!answers.audience) {
|
|
217
|
+
reasoning.push(`Suggested audience: ${suggestedAudience} (based on team size and requirements)`);
|
|
218
|
+
}
|
|
219
|
+
// Calculate confidence
|
|
220
|
+
let confidence = 50;
|
|
221
|
+
if (answers.projectDescription && answers.projectDescription.length > 100)
|
|
222
|
+
confidence += 15;
|
|
223
|
+
if (answers.projectType)
|
|
224
|
+
confidence += 10;
|
|
225
|
+
if (answers.techStack && answers.techStack.length > 0)
|
|
226
|
+
confidence += 10;
|
|
227
|
+
if (answers.audience)
|
|
228
|
+
confidence += 5;
|
|
229
|
+
if (answers.scope)
|
|
230
|
+
confidence += 5;
|
|
231
|
+
confidence = Math.min(confidence, 95);
|
|
232
|
+
return {
|
|
233
|
+
projectType: projectType,
|
|
234
|
+
complexity,
|
|
235
|
+
suggestedScope,
|
|
236
|
+
suggestedAudience,
|
|
237
|
+
detectedTechnologies,
|
|
238
|
+
detectedFeatures: descriptionAnalysis?.features || [],
|
|
239
|
+
confidence,
|
|
240
|
+
reasoning,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Perform gap analysis on answers
|
|
245
|
+
*/
|
|
246
|
+
export function analyzeGaps(answers) {
|
|
247
|
+
const missingRequired = [];
|
|
248
|
+
const missingRecommended = [];
|
|
249
|
+
const assumptions = [];
|
|
250
|
+
const suggestions = [];
|
|
251
|
+
// Check required fields
|
|
252
|
+
if (!answers.projectName)
|
|
253
|
+
missingRequired.push('Project name');
|
|
254
|
+
if (!answers.projectDescription)
|
|
255
|
+
missingRequired.push('Project description');
|
|
256
|
+
if (!answers.projectType)
|
|
257
|
+
missingRequired.push('Project type');
|
|
258
|
+
if (!answers.audience)
|
|
259
|
+
missingRequired.push('Target audience');
|
|
260
|
+
if (!answers.scope)
|
|
261
|
+
missingRequired.push('Documentation scope');
|
|
262
|
+
// Check recommended fields
|
|
263
|
+
if (!answers.techStack || answers.techStack.length === 0) {
|
|
264
|
+
missingRecommended.push('Technology stack');
|
|
265
|
+
}
|
|
266
|
+
if (!answers.timeline) {
|
|
267
|
+
missingRecommended.push('Project timeline');
|
|
268
|
+
}
|
|
269
|
+
if (!answers.teamSize) {
|
|
270
|
+
missingRecommended.push('Team size');
|
|
271
|
+
}
|
|
272
|
+
// Make assumptions for missing data
|
|
273
|
+
if (!answers.hasBackend && answers.projectType !== 'library-sdk') {
|
|
274
|
+
assumptions.push({
|
|
275
|
+
field: 'hasBackend',
|
|
276
|
+
assumption: 'Project requires a backend server',
|
|
277
|
+
confidence: 70,
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
if (!answers.hasDatabase && answers.hasBackend !== false) {
|
|
281
|
+
assumptions.push({
|
|
282
|
+
field: 'hasDatabase',
|
|
283
|
+
assumption: 'Project uses a database for data persistence',
|
|
284
|
+
confidence: 80,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
if (!answers.hasAuth && ['saas-web', 'mobile-app', 'ecommerce', 'marketplace'].includes(answers.projectType || '')) {
|
|
288
|
+
assumptions.push({
|
|
289
|
+
field: 'hasAuth',
|
|
290
|
+
assumption: 'Project requires user authentication',
|
|
291
|
+
confidence: 85,
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
// Generate suggestions
|
|
295
|
+
if (answers.projectDescription && answers.projectDescription.length < 100) {
|
|
296
|
+
suggestions.push('Consider providing a more detailed project description for better documentation');
|
|
297
|
+
}
|
|
298
|
+
if (answers.audience === 'enterprise' && !answers.needsCompliance) {
|
|
299
|
+
suggestions.push('Enterprise projects often have compliance requirements - consider reviewing SOC 2, GDPR, etc.');
|
|
300
|
+
}
|
|
301
|
+
if (answers.hasPayments && !answers.complianceTypes?.includes('PCI-DSS')) {
|
|
302
|
+
suggestions.push('Projects handling payments typically require PCI-DSS compliance');
|
|
303
|
+
}
|
|
304
|
+
if (answers.scope === 'mvp' && answers.audience === 'enterprise') {
|
|
305
|
+
suggestions.push('Enterprise audiences typically expect comprehensive documentation');
|
|
306
|
+
}
|
|
307
|
+
// Calculate completeness
|
|
308
|
+
const requiredCount = 5;
|
|
309
|
+
const answeredRequired = requiredCount - missingRequired.length;
|
|
310
|
+
const completenessScore = Math.round((answeredRequired / requiredCount) * 100);
|
|
311
|
+
return {
|
|
312
|
+
missingRequired,
|
|
313
|
+
missingRecommended,
|
|
314
|
+
assumptions,
|
|
315
|
+
suggestions,
|
|
316
|
+
completenessScore,
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Generate a summary of the interview
|
|
321
|
+
*/
|
|
322
|
+
export function generateSummary(answers, detected) {
|
|
323
|
+
const lines = [];
|
|
324
|
+
lines.push(`# Project Summary: ${answers.projectName || 'Untitled'}`);
|
|
325
|
+
lines.push('');
|
|
326
|
+
if (answers.projectDescription) {
|
|
327
|
+
lines.push(`## Overview`);
|
|
328
|
+
lines.push(answers.projectDescription);
|
|
329
|
+
lines.push('');
|
|
330
|
+
}
|
|
331
|
+
lines.push(`## Classification`);
|
|
332
|
+
lines.push(`- **Type:** ${detected.projectType}`);
|
|
333
|
+
lines.push(`- **Complexity:** ${detected.complexity}`);
|
|
334
|
+
lines.push(`- **Audience:** ${answers.audience || detected.suggestedAudience}`);
|
|
335
|
+
lines.push(`- **Scope:** ${answers.scope || detected.suggestedScope} (${getScopeDocCount(answers.scope || detected.suggestedScope)} documents)`);
|
|
336
|
+
lines.push('');
|
|
337
|
+
if (detected.detectedTechnologies.length > 0) {
|
|
338
|
+
lines.push(`## Technologies`);
|
|
339
|
+
lines.push(detected.detectedTechnologies.map((t) => `- ${t}`).join('\n'));
|
|
340
|
+
lines.push('');
|
|
341
|
+
}
|
|
342
|
+
if (detected.detectedFeatures.length > 0) {
|
|
343
|
+
lines.push(`## Key Features`);
|
|
344
|
+
lines.push(detected.detectedFeatures.map((f) => `- ${f}`).join('\n'));
|
|
345
|
+
lines.push('');
|
|
346
|
+
}
|
|
347
|
+
lines.push(`## Analysis Confidence: ${detected.confidence}%`);
|
|
348
|
+
return lines.join('\n');
|
|
349
|
+
}
|
|
350
|
+
function getScopeDocCount(scope) {
|
|
351
|
+
return { mvp: 4, standard: 12, comprehensive: 22 }[scope] || 12;
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/interview/analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interview Engine
|
|
3
|
+
* Orchestrates the adaptive interview process
|
|
4
|
+
*/
|
|
5
|
+
import type { InterviewAnswers, InterviewResult, Question, DetectedContext, GapAnalysis } from './types.js';
|
|
6
|
+
import type { TemplateContext } from '../core/index.js';
|
|
7
|
+
export interface InterviewState {
|
|
8
|
+
answers: InterviewAnswers;
|
|
9
|
+
currentQuestion: Question | null;
|
|
10
|
+
progress: {
|
|
11
|
+
answered: number;
|
|
12
|
+
total: number;
|
|
13
|
+
percentage: number;
|
|
14
|
+
};
|
|
15
|
+
isComplete: boolean;
|
|
16
|
+
detected: DetectedContext | null;
|
|
17
|
+
}
|
|
18
|
+
export declare class InterviewEngine {
|
|
19
|
+
private answers;
|
|
20
|
+
private onProgress?;
|
|
21
|
+
constructor(options?: {
|
|
22
|
+
onProgress?: (state: InterviewState) => void;
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* Get current interview state
|
|
26
|
+
*/
|
|
27
|
+
getState(): InterviewState;
|
|
28
|
+
/**
|
|
29
|
+
* Answer a question
|
|
30
|
+
*/
|
|
31
|
+
answer(questionId: string, value: unknown): InterviewState;
|
|
32
|
+
/**
|
|
33
|
+
* Set multiple answers at once
|
|
34
|
+
*/
|
|
35
|
+
setAnswers(answers: Partial<InterviewAnswers>): InterviewState;
|
|
36
|
+
/**
|
|
37
|
+
* Reset the interview
|
|
38
|
+
*/
|
|
39
|
+
reset(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Get all question groups with their active questions
|
|
42
|
+
*/
|
|
43
|
+
getQuestionGroups(): Array<{
|
|
44
|
+
id: string;
|
|
45
|
+
name: string;
|
|
46
|
+
description: string;
|
|
47
|
+
questions: Question[];
|
|
48
|
+
isActive: boolean;
|
|
49
|
+
}>;
|
|
50
|
+
/**
|
|
51
|
+
* Complete the interview and get results
|
|
52
|
+
*/
|
|
53
|
+
complete(): InterviewResult;
|
|
54
|
+
/**
|
|
55
|
+
* Build template context from answers and detected info
|
|
56
|
+
*/
|
|
57
|
+
private buildTemplateContext;
|
|
58
|
+
/**
|
|
59
|
+
* Convert to TemplateContext for document generation
|
|
60
|
+
*/
|
|
61
|
+
toTemplateContext(): TemplateContext;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Quick interview - just the essentials
|
|
65
|
+
*/
|
|
66
|
+
export declare function quickInterview(projectName: string, projectDescription: string, options?: {
|
|
67
|
+
scope?: 'mvp' | 'standard' | 'comprehensive';
|
|
68
|
+
audience?: 'startup' | 'business' | 'enterprise';
|
|
69
|
+
}): InterviewResult;
|
|
70
|
+
export type { InterviewAnswers, InterviewResult, Question, DetectedContext, GapAnalysis };
|
|
71
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/interview/engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,eAAe,EACf,WAAW,EACZ,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,eAAe,EAAE,QAAQ,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;CAClC;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,UAAU,CAAC,CAAkC;gBAEzC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAA;KAAE;IAItE;;OAEG;IACH,QAAQ,IAAI,cAAc;IAe1B;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,cAAc;IA4B1D;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,cAAc;IAa9D;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,iBAAiB,IAAI,KAAK,CAAC;QACzB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,QAAQ,EAAE,CAAC;QACtB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;IAiBF;;OAEG;IACH,QAAQ,IAAI,eAAe;IAiB3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkE5B;;OAEG;IACH,iBAAiB,IAAI,eAAe;CAcrC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,EAC1B,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,eAAe,CAAC;IAC7C,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;CAClD,GACA,eAAe,CAWjB;AAGD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interview Engine
|
|
3
|
+
* Orchestrates the adaptive interview process
|
|
4
|
+
*/
|
|
5
|
+
import { QUESTION_GROUPS, getActiveQuestions, getNextQuestion, getProgress } from './questions.js';
|
|
6
|
+
import { detectContext, analyzeGaps, generateSummary } from './analyzer.js';
|
|
7
|
+
export class InterviewEngine {
|
|
8
|
+
answers = {};
|
|
9
|
+
onProgress;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.onProgress = options?.onProgress;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get current interview state
|
|
15
|
+
*/
|
|
16
|
+
getState() {
|
|
17
|
+
const currentQuestion = getNextQuestion(this.answers);
|
|
18
|
+
const progress = getProgress(this.answers);
|
|
19
|
+
const isComplete = currentQuestion === null;
|
|
20
|
+
const detected = isComplete ? detectContext(this.answers) : null;
|
|
21
|
+
return {
|
|
22
|
+
answers: { ...this.answers },
|
|
23
|
+
currentQuestion,
|
|
24
|
+
progress,
|
|
25
|
+
isComplete,
|
|
26
|
+
detected,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Answer a question
|
|
31
|
+
*/
|
|
32
|
+
answer(questionId, value) {
|
|
33
|
+
const questions = getActiveQuestions(this.answers);
|
|
34
|
+
const question = questions.find((q) => q.id === questionId);
|
|
35
|
+
if (!question) {
|
|
36
|
+
throw new Error(`Question not found: ${questionId}`);
|
|
37
|
+
}
|
|
38
|
+
// Validate
|
|
39
|
+
if (question.validate) {
|
|
40
|
+
const validationResult = question.validate(value, this.answers);
|
|
41
|
+
if (validationResult !== true) {
|
|
42
|
+
throw new Error(typeof validationResult === 'string' ? validationResult : 'Invalid answer');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Transform
|
|
46
|
+
const transformedValue = question.transform ? question.transform(value) : value;
|
|
47
|
+
// Store
|
|
48
|
+
this.answers[questionId] = transformedValue;
|
|
49
|
+
const state = this.getState();
|
|
50
|
+
this.onProgress?.(state);
|
|
51
|
+
return state;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Set multiple answers at once
|
|
55
|
+
*/
|
|
56
|
+
setAnswers(answers) {
|
|
57
|
+
for (const [key, value] of Object.entries(answers)) {
|
|
58
|
+
if (value !== undefined) {
|
|
59
|
+
this.answers[key] = value;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const state = this.getState();
|
|
63
|
+
this.onProgress?.(state);
|
|
64
|
+
return state;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Reset the interview
|
|
68
|
+
*/
|
|
69
|
+
reset() {
|
|
70
|
+
this.answers = {};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get all question groups with their active questions
|
|
74
|
+
*/
|
|
75
|
+
getQuestionGroups() {
|
|
76
|
+
return QUESTION_GROUPS.map((group) => {
|
|
77
|
+
const isActive = !group.condition || group.condition(this.answers);
|
|
78
|
+
const questions = isActive
|
|
79
|
+
? group.questions.filter((q) => !q.condition || q.condition(this.answers))
|
|
80
|
+
: [];
|
|
81
|
+
return {
|
|
82
|
+
id: group.id,
|
|
83
|
+
name: group.name,
|
|
84
|
+
description: group.description,
|
|
85
|
+
questions,
|
|
86
|
+
isActive,
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Complete the interview and get results
|
|
92
|
+
*/
|
|
93
|
+
complete() {
|
|
94
|
+
const detected = detectContext(this.answers);
|
|
95
|
+
const gaps = analyzeGaps(this.answers);
|
|
96
|
+
const summary = generateSummary(this.answers, detected);
|
|
97
|
+
// Build template context
|
|
98
|
+
const templateContext = this.buildTemplateContext(detected, gaps);
|
|
99
|
+
return {
|
|
100
|
+
answers: { ...this.answers },
|
|
101
|
+
detected,
|
|
102
|
+
gaps,
|
|
103
|
+
templateContext,
|
|
104
|
+
summary,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Build template context from answers and detected info
|
|
109
|
+
*/
|
|
110
|
+
buildTemplateContext(detected, gaps) {
|
|
111
|
+
const answers = this.answers;
|
|
112
|
+
// Apply assumptions for missing fields
|
|
113
|
+
const effectiveAnswers = { ...answers };
|
|
114
|
+
for (const assumption of gaps.assumptions) {
|
|
115
|
+
if (effectiveAnswers[assumption.field] === undefined) {
|
|
116
|
+
// Only apply high-confidence assumptions
|
|
117
|
+
if (assumption.confidence >= 70) {
|
|
118
|
+
effectiveAnswers[assumption.field] = true;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
// Core
|
|
124
|
+
projectName: answers.projectName || 'Untitled Project',
|
|
125
|
+
projectDescription: answers.projectDescription || '',
|
|
126
|
+
projectType: answers.projectType || detected.projectType,
|
|
127
|
+
// Scope and audience
|
|
128
|
+
scope: answers.scope || detected.suggestedScope,
|
|
129
|
+
audience: answers.audience || detected.suggestedAudience,
|
|
130
|
+
// Technical
|
|
131
|
+
techStack: detected.detectedTechnologies,
|
|
132
|
+
hasFrontend: effectiveAnswers.hasFrontend ?? true,
|
|
133
|
+
hasBackend: effectiveAnswers.hasBackend ?? true,
|
|
134
|
+
hasDatabase: effectiveAnswers.hasDatabase ?? true,
|
|
135
|
+
hasAuth: effectiveAnswers.hasAuth ?? false,
|
|
136
|
+
hasPayments: effectiveAnswers.hasPayments ?? false,
|
|
137
|
+
deploymentTarget: answers.deploymentTarget || 'Cloud (AWS/GCP/Azure)',
|
|
138
|
+
// Business
|
|
139
|
+
teamSize: answers.teamSize || 'Small (2-5)',
|
|
140
|
+
timeline: answers.timeline || 'TBD',
|
|
141
|
+
monetization: answers.monetization || 'Not specified',
|
|
142
|
+
competitors: answers.competitorNames || [],
|
|
143
|
+
// Features
|
|
144
|
+
features: detected.detectedFeatures,
|
|
145
|
+
priorityFeatures: answers.priorityFeatures || [],
|
|
146
|
+
mvpFeatures: answers.mvpFeatures || [],
|
|
147
|
+
// Compliance
|
|
148
|
+
needsCompliance: answers.needsCompliance ?? false,
|
|
149
|
+
complianceTypes: answers.complianceTypes || [],
|
|
150
|
+
// Metadata
|
|
151
|
+
complexity: detected.complexity,
|
|
152
|
+
generatedAt: new Date().toISOString(),
|
|
153
|
+
confidence: detected.confidence,
|
|
154
|
+
// For template conditionals
|
|
155
|
+
isEnterprise: answers.audience === 'enterprise',
|
|
156
|
+
isStartup: answers.audience === 'startup',
|
|
157
|
+
isSaaS: answers.projectType === 'saas-web',
|
|
158
|
+
isMobile: answers.projectType === 'mobile-app',
|
|
159
|
+
isAPI: answers.projectType === 'api-backend',
|
|
160
|
+
hasCompetitors: (answers.competitorNames?.length || 0) > 0,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Convert to TemplateContext for document generation
|
|
165
|
+
*/
|
|
166
|
+
toTemplateContext() {
|
|
167
|
+
const result = this.complete();
|
|
168
|
+
return {
|
|
169
|
+
projectName: result.templateContext.projectName,
|
|
170
|
+
projectDescription: result.templateContext.projectDescription,
|
|
171
|
+
scope: result.templateContext.scope,
|
|
172
|
+
audience: result.templateContext.audience,
|
|
173
|
+
projectType: result.templateContext.projectType,
|
|
174
|
+
techStack: result.templateContext.techStack,
|
|
175
|
+
features: result.templateContext.features,
|
|
176
|
+
timeline: result.templateContext.timeline,
|
|
177
|
+
team: result.templateContext.teamSize,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Quick interview - just the essentials
|
|
183
|
+
*/
|
|
184
|
+
export function quickInterview(projectName, projectDescription, options) {
|
|
185
|
+
const engine = new InterviewEngine();
|
|
186
|
+
engine.setAnswers({
|
|
187
|
+
projectName,
|
|
188
|
+
projectDescription,
|
|
189
|
+
scope: options?.scope,
|
|
190
|
+
audience: options?.audience,
|
|
191
|
+
});
|
|
192
|
+
return engine.complete();
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/interview/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interview Engine Module
|
|
3
|
+
* Adaptive questioning system for documentation generation
|
|
4
|
+
*/
|
|
5
|
+
export { InterviewEngine, quickInterview, type InterviewState, type InterviewAnswers, type InterviewResult, type Question, type DetectedContext, type GapAnalysis, } from './engine.js';
|
|
6
|
+
export { QUESTION_GROUPS, getActiveQuestions, getNextQuestion, getProgress, } from './questions.js';
|
|
7
|
+
export { detectContext, analyzeGaps, analyzeDescription, calculateComplexity, generateSummary, } from './analyzer.js';
|
|
8
|
+
export type { ProjectType, Complexity, Audience, Scope, QuestionGroup, } from './types.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|