@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.
@@ -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":"AAAA;;;GAGG;AAYH,sCAAsC;AACtC,MAAM,qBAAqB,GAAkC;IAC3D,UAAU,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC;IAC5F,YAAY,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC;IAC3F,aAAa,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,CAAC;IAC9E,UAAU,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC;IAClE,aAAa,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC;IACpE,aAAa,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC;IACjF,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC;IAC3E,aAAa,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC;IAC/E,OAAO,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC;IACtF,KAAK,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC;IACpE,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC;IAC3F,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC;IACxE,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,oCAAoC;AACpC,MAAM,aAAa,GAA6B;IAC9C,YAAY,EAAE,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC;IACzC,YAAY,EAAE,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC;IAC1C,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC;IAC3E,IAAI,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC;IACtB,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC;IAC9C,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC;IAC9C,SAAS,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;IAC/B,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;IAC3B,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC;IAC/C,KAAK,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,UAAU,CAAC;IAC1C,QAAQ,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC;IACjC,YAAY,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC;CAC5C,CAAC;AAEF,mBAAmB;AACnB,MAAM,gBAAgB,GAA6B;IACjD,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC;IACzE,UAAU,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC;IACxE,WAAW,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC;IAC5E,aAAa,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC;IACpE,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,CAAC;IAC7D,WAAW,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC;IAC9D,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC;IACrD,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC;IAC9C,eAAe,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC;IAC1D,cAAc,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,CAAC;CACjE,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IAMpD,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG;QACb,WAAW,EAAE,OAAsB;QACnC,YAAY,EAAE,EAAc;QAC5B,QAAQ,EAAE,EAAc;QACxB,UAAU,EAAE,CAAC;KACd,CAAC;IAEF,sBAAsB;IACtB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAChE,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YACrB,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,WAAW,GAAG,IAAmB,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhD,sBAAsB;IACtB,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7D,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACnE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAyB;IAC3D,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,oCAAoC;IACpC,MAAM,cAAc,GAA2B;QAC7C,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,CAAC;QACf,KAAK,EAAE,CAAC;QACR,YAAY,EAAE,CAAC;QACf,aAAa,EAAE,CAAC;QAChB,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,CAAC;QAChB,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;KACX,CAAC;IACF,KAAK,IAAI,cAAc,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D,8BAA8B;IAC9B,IAAI,OAAO,CAAC,OAAO;QAAE,KAAK,IAAI,CAAC,CAAC;IAChC,IAAI,OAAO,CAAC,WAAW;QAAE,KAAK,IAAI,CAAC,CAAC;IACpC,IAAI,OAAO,CAAC,eAAe;QAAE,KAAK,IAAI,CAAC,CAAC;IACxC,IAAI,OAAO,CAAC,WAAW;QAAE,KAAK,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;QAAE,KAAK,IAAI,CAAC,CAAC;IAErD,mBAAmB;IACnB,MAAM,cAAc,GAA2B;QAC7C,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,CAAC;QAChB,eAAe,EAAE,CAAC;QAClB,eAAe,EAAE,CAAC;QAClB,kBAAkB,EAAE,CAAC;KACtB,CAAC;IACF,KAAK,IAAI,cAAc,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;IAErD,6BAA6B;IAC7B,IAAI,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,KAAK,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC;IAC1C,CAAC;IAED,0BAA0B;IAC1B,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC;IAClC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAyB,EAAE,UAAsB;IAC5E,gCAAgC;IAChC,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC;IAExC,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAChE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6BAA6B;IAC7B,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACtC,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;IACtD,CAAC;IAED,mBAAmB;IACnB,IAAI,UAAU,KAAK,YAAY;QAAE,OAAO,eAAe,CAAC;IACxD,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,eAAe,CAAC;IACrD,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE1C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAyB;IACvD,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;IAE9C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAClE,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,CAAC,eAAe;QAAE,OAAO,YAAY,CAAC;IACjD,IAAI,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC;IAEvF,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAyB;IACrD,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,mCAAmC;IACnC,MAAM,mBAAmB,GAAG,OAAO,CAAC,kBAAkB;QACpD,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,kBAAkB,CAAC;QAChD,CAAC,CAAC,IAAI,CAAC;IAET,yBAAyB;IACzB,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,mBAAmB,EAAE,WAAW,IAAI,OAAO,CAAC;IACrF,IAAI,mBAAmB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAChD,SAAS,CAAC,IAAI,CAAC,0BAA0B,WAAW,oBAAoB,CAAC,CAAC;IAC5E,CAAC;IAED,qBAAqB;IACrB,MAAM,oBAAoB,GAAG;QAC3B,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QAC5B,GAAG,CAAC,mBAAmB,EAAE,YAAY,IAAI,EAAE,CAAC;KAC7C,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAE1C,uBAAuB;IACvB,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAChD,SAAS,CAAC,IAAI,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;IAEvD,6BAA6B;IAC7B,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACzD,MAAM,iBAAiB,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAEnD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,SAAS,CAAC,IAAI,CAAC,oBAAoB,cAAc,qCAAqC,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,SAAS,CAAC,IAAI,CAAC,uBAAuB,iBAAiB,wCAAwC,CAAC,CAAC;IACnG,CAAC;IAED,uBAAuB;IACvB,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,kBAAkB,CAAC,MAAM,GAAG,GAAG;QAAE,UAAU,IAAI,EAAE,CAAC;IAC5F,IAAI,OAAO,CAAC,WAAW;QAAE,UAAU,IAAI,EAAE,CAAC;IAC1C,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,UAAU,IAAI,EAAE,CAAC;IACxE,IAAI,OAAO,CAAC,QAAQ;QAAE,UAAU,IAAI,CAAC,CAAC;IACtC,IAAI,OAAO,CAAC,KAAK;QAAE,UAAU,IAAI,CAAC,CAAC;IACnC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAEtC,OAAO;QACL,WAAW,EAAE,WAA0B;QACvC,UAAU;QACV,cAAc;QACd,iBAAiB;QACjB,oBAAoB;QACpB,gBAAgB,EAAE,mBAAmB,EAAE,QAAQ,IAAI,EAAE;QACrD,UAAU;QACV,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAyB;IACnD,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,MAAM,kBAAkB,GAAa,EAAE,CAAC;IACxC,MAAM,WAAW,GAAqE,EAAE,CAAC;IACzF,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,wBAAwB;IACxB,IAAI,CAAC,OAAO,CAAC,WAAW;QAAE,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC/D,IAAI,CAAC,OAAO,CAAC,kBAAkB;QAAE,eAAe,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC7E,IAAI,CAAC,OAAO,CAAC,WAAW;QAAE,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC/D,IAAI,CAAC,OAAO,CAAC,QAAQ;QAAE,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/D,IAAI,CAAC,OAAO,CAAC,KAAK;QAAE,eAAe,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAEhE,2BAA2B;IAC3B,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzD,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAED,oCAAoC;IACpC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,KAAK,aAAa,EAAE,CAAC;QACjE,WAAW,CAAC,IAAI,CAAC;YACf,KAAK,EAAE,YAAY;YACnB,UAAU,EAAE,mCAAmC;YAC/C,UAAU,EAAE,EAAE;SACf,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QACzD,WAAW,CAAC,IAAI,CAAC;YACf,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE,8CAA8C;YAC1D,UAAU,EAAE,EAAE;SACf,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;QACnH,WAAW,CAAC,IAAI,CAAC;YACf,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,sCAAsC;YAClD,UAAU,EAAE,EAAE;SACf,CAAC,CAAC;IACL,CAAC;IAED,uBAAuB;IACvB,IAAI,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,kBAAkB,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAC1E,WAAW,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IACtG,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAClE,WAAW,CAAC,IAAI,CAAC,+FAA+F,CAAC,CAAC;IACpH,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzE,WAAW,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACjE,WAAW,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IACxF,CAAC;IAED,yBAAyB;IACzB,MAAM,aAAa,GAAG,CAAC,CAAC;IACxB,MAAM,gBAAgB,GAAG,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC;IAChE,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,gBAAgB,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;IAE/E,OAAO;QACL,eAAe;QACf,kBAAkB;QAClB,WAAW;QACX,WAAW;QACX,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAyB,EAAE,QAAyB;IAClF,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,WAAW,IAAI,UAAU,EAAE,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,eAAe,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,qBAAqB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAChF,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,cAAc,KAAK,gBAAgB,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACjJ,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,2BAA2B,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC;IAE9D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAY;IACpC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAClE,CAAC"}
@@ -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