@visualprd/mcp-server 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +396 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +27 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +243 -0
- package/dist/index.js.map +1 -0
- package/dist/intelligence/context-optimizer.d.ts +93 -0
- package/dist/intelligence/context-optimizer.d.ts.map +1 -0
- package/dist/intelligence/context-optimizer.js +481 -0
- package/dist/intelligence/context-optimizer.js.map +1 -0
- package/dist/intelligence/error-analyzer.d.ts +49 -0
- package/dist/intelligence/error-analyzer.d.ts.map +1 -0
- package/dist/intelligence/error-analyzer.js +765 -0
- package/dist/intelligence/error-analyzer.js.map +1 -0
- package/dist/intelligence/gap-filler.d.ts +56 -0
- package/dist/intelligence/gap-filler.d.ts.map +1 -0
- package/dist/intelligence/gap-filler.js +410 -0
- package/dist/intelligence/gap-filler.js.map +1 -0
- package/dist/intelligence/guidance-generator.d.ts +43 -0
- package/dist/intelligence/guidance-generator.d.ts.map +1 -0
- package/dist/intelligence/guidance-generator.js +314 -0
- package/dist/intelligence/guidance-generator.js.map +1 -0
- package/dist/intelligence/index.d.ts +132 -0
- package/dist/intelligence/index.d.ts.map +1 -0
- package/dist/intelligence/index.js +683 -0
- package/dist/intelligence/index.js.map +1 -0
- package/dist/server-http.d.ts +9 -0
- package/dist/server-http.d.ts.map +1 -0
- package/dist/server-http.js +141 -0
- package/dist/server-http.js.map +1 -0
- package/dist/services/api-key-service.d.ts +68 -0
- package/dist/services/api-key-service.d.ts.map +1 -0
- package/dist/services/api-key-service.js +298 -0
- package/dist/services/api-key-service.js.map +1 -0
- package/dist/services/llm-client.d.ts +66 -0
- package/dist/services/llm-client.d.ts.map +1 -0
- package/dist/services/llm-client.js +141 -0
- package/dist/services/llm-client.js.map +1 -0
- package/dist/services/model-registry.d.ts +135 -0
- package/dist/services/model-registry.d.ts.map +1 -0
- package/dist/services/model-registry.js +276 -0
- package/dist/services/model-registry.js.map +1 -0
- package/dist/services/visualprd-client.d.ts +191 -0
- package/dist/services/visualprd-client.d.ts.map +1 -0
- package/dist/services/visualprd-client.js +805 -0
- package/dist/services/visualprd-client.js.map +1 -0
- package/dist/tools/index.d.ts +803 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +570 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types/index.d.ts +497 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Guidance Generator
|
|
4
|
+
*
|
|
5
|
+
* Generates contextual guidance, technical considerations,
|
|
6
|
+
* and potential issues for each build step.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.GuidanceGenerator = void 0;
|
|
10
|
+
class GuidanceGenerator {
|
|
11
|
+
/**
|
|
12
|
+
* Generate contextual guidance for a build prompt
|
|
13
|
+
*/
|
|
14
|
+
generateGuidance(context) {
|
|
15
|
+
const { prompt, projectData } = context;
|
|
16
|
+
return {
|
|
17
|
+
technicalConsiderations: this.getTechnicalConsiderations(context),
|
|
18
|
+
potentialIssues: this.getPotentialIssues(context),
|
|
19
|
+
testingCriteria: this.getTestingCriteria(context),
|
|
20
|
+
relatedPatterns: this.getRelatedPatterns(context),
|
|
21
|
+
suggestedApproach: this.getSuggestedApproach(context),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get technical considerations based on the prompt and tech stack
|
|
26
|
+
*/
|
|
27
|
+
getTechnicalConsiderations(context) {
|
|
28
|
+
const considerations = [];
|
|
29
|
+
const { prompt, projectData, relatedSchemas, relatedEndpoints, relatedTechStack } = context;
|
|
30
|
+
const title = prompt.title.toLowerCase();
|
|
31
|
+
const instruction = (prompt.instruction || '').toLowerCase();
|
|
32
|
+
const fullText = `${title} ${instruction}`;
|
|
33
|
+
// Tech stack specific considerations
|
|
34
|
+
for (const tech of relatedTechStack) {
|
|
35
|
+
const techName = tech.name.toLowerCase();
|
|
36
|
+
if (techName.includes('firebase') || techName.includes('firestore')) {
|
|
37
|
+
if (fullText.includes('auth')) {
|
|
38
|
+
considerations.push('Use Firebase Auth SDK for authentication (signInWithEmailAndPassword, createUserWithEmailAndPassword)');
|
|
39
|
+
considerations.push('Store auth state in context/provider for app-wide access');
|
|
40
|
+
}
|
|
41
|
+
if (fullText.includes('database') || fullText.includes('data')) {
|
|
42
|
+
considerations.push('Use Firestore collection references with proper document paths');
|
|
43
|
+
considerations.push('Consider using onSnapshot for real-time updates where appropriate');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (techName.includes('react') || techName.includes('next')) {
|
|
47
|
+
considerations.push('Use React hooks (useState, useEffect) for state and lifecycle');
|
|
48
|
+
if (fullText.includes('form')) {
|
|
49
|
+
considerations.push('Consider using react-hook-form or Zod for form validation');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (techName.includes('tailwind')) {
|
|
53
|
+
considerations.push('Use Tailwind utility classes following design system colors and spacing');
|
|
54
|
+
}
|
|
55
|
+
if (techName.includes('typescript')) {
|
|
56
|
+
considerations.push('Define TypeScript interfaces for all data structures');
|
|
57
|
+
considerations.push('Use proper typing for function parameters and return values');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Schema-specific considerations
|
|
61
|
+
for (const schema of relatedSchemas) {
|
|
62
|
+
if (schema.relationships?.length) {
|
|
63
|
+
considerations.push(`${schema.collectionName} has relationships - ensure proper data fetching for related collections`);
|
|
64
|
+
}
|
|
65
|
+
if (schema.securityRules) {
|
|
66
|
+
considerations.push(`Review Firestore security rules for ${schema.collectionName} before testing`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Endpoint-specific considerations
|
|
70
|
+
for (const endpoint of relatedEndpoints) {
|
|
71
|
+
if (endpoint.authentication) {
|
|
72
|
+
considerations.push(`${endpoint.name} requires authentication - ensure auth token is passed`);
|
|
73
|
+
}
|
|
74
|
+
if (endpoint.rateLimiting) {
|
|
75
|
+
considerations.push(`${endpoint.name} has rate limiting - implement proper error handling`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Category-specific considerations
|
|
79
|
+
if (prompt.category === 'pages') {
|
|
80
|
+
considerations.push('Ensure page follows design system for consistent UI');
|
|
81
|
+
considerations.push('Handle loading, error, and empty states for data-driven pages');
|
|
82
|
+
}
|
|
83
|
+
if (prompt.category === 'database') {
|
|
84
|
+
considerations.push('Create indexes for fields used in queries');
|
|
85
|
+
considerations.push('Consider field validation at the schema level');
|
|
86
|
+
}
|
|
87
|
+
if (prompt.category === 'integration') {
|
|
88
|
+
considerations.push('Implement proper error handling for API calls');
|
|
89
|
+
considerations.push('Add loading states while fetching data');
|
|
90
|
+
}
|
|
91
|
+
// Deduplicate and limit
|
|
92
|
+
return [...new Set(considerations)].slice(0, 8);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Identify potential issues the developer might encounter
|
|
96
|
+
*/
|
|
97
|
+
getPotentialIssues(context) {
|
|
98
|
+
const issues = [];
|
|
99
|
+
const { prompt, projectData, relatedSchemas, relatedEndpoints } = context;
|
|
100
|
+
const title = prompt.title.toLowerCase();
|
|
101
|
+
const instruction = (prompt.instruction || '').toLowerCase();
|
|
102
|
+
const fullText = `${title} ${instruction}`;
|
|
103
|
+
// Auth-related issues
|
|
104
|
+
if (fullText.includes('auth') || fullText.includes('login')) {
|
|
105
|
+
issues.push('Remember to handle auth state persistence across page refreshes');
|
|
106
|
+
issues.push('Test with both valid and invalid credentials');
|
|
107
|
+
if (!projectData.pages.some(p => p.pageName.toLowerCase().includes('reset') ||
|
|
108
|
+
p.pageName.toLowerCase().includes('forgot'))) {
|
|
109
|
+
issues.push('Password reset flow may not be defined - consider adding');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Form-related issues
|
|
113
|
+
if (fullText.includes('form') || fullText.includes('input')) {
|
|
114
|
+
issues.push('Ensure form validation on both client and server side');
|
|
115
|
+
issues.push('Handle form submission loading and error states');
|
|
116
|
+
}
|
|
117
|
+
// Data fetching issues
|
|
118
|
+
if (fullText.includes('fetch') || fullText.includes('load') || fullText.includes('get')) {
|
|
119
|
+
issues.push('Handle network errors and timeout scenarios');
|
|
120
|
+
issues.push('Add proper loading indicators during data fetch');
|
|
121
|
+
}
|
|
122
|
+
// Schema-related issues
|
|
123
|
+
for (const schema of relatedSchemas) {
|
|
124
|
+
// Check for fields that might cause issues
|
|
125
|
+
const sensitiveFields = schema.fields?.filter(f => f.fieldName.toLowerCase().includes('password') ||
|
|
126
|
+
f.fieldName.toLowerCase().includes('secret') ||
|
|
127
|
+
f.fieldName.toLowerCase().includes('token'));
|
|
128
|
+
if (sensitiveFields?.length) {
|
|
129
|
+
issues.push(`${schema.collectionName} contains sensitive fields - never expose in client responses`);
|
|
130
|
+
}
|
|
131
|
+
// Check for timestamp fields
|
|
132
|
+
const hasTimestamps = schema.fields?.some(f => f.fieldName.toLowerCase().includes('createdat') ||
|
|
133
|
+
f.fieldName.toLowerCase().includes('updatedat'));
|
|
134
|
+
if (!hasTimestamps) {
|
|
135
|
+
issues.push(`${schema.collectionName} may need createdAt/updatedAt timestamps for tracking`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Endpoint-related issues
|
|
139
|
+
for (const endpoint of relatedEndpoints) {
|
|
140
|
+
if (endpoint.method === 'DELETE') {
|
|
141
|
+
issues.push(`${endpoint.name} is a DELETE operation - add confirmation dialog before calling`);
|
|
142
|
+
}
|
|
143
|
+
if (endpoint.method === 'POST' || endpoint.method === 'PUT') {
|
|
144
|
+
issues.push(`Validate request body for ${endpoint.name} before submission`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Mobile/responsive issues for UI
|
|
148
|
+
if (prompt.category === 'pages') {
|
|
149
|
+
issues.push('Test on mobile viewport sizes for responsive design');
|
|
150
|
+
}
|
|
151
|
+
// Deduplicate and limit
|
|
152
|
+
return [...new Set(issues)].slice(0, 6);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Get testing criteria for the prompt
|
|
156
|
+
*/
|
|
157
|
+
getTestingCriteria(context) {
|
|
158
|
+
const { prompt, relatedSchemas, relatedEndpoints, relatedPages } = context;
|
|
159
|
+
const criteria = [];
|
|
160
|
+
// Start with prompt's own test criteria (handle both string[] and TestCriterionV2[])
|
|
161
|
+
if (prompt.testCriteria?.length) {
|
|
162
|
+
for (const tc of prompt.testCriteria) {
|
|
163
|
+
if (typeof tc === 'string') {
|
|
164
|
+
criteria.push(tc);
|
|
165
|
+
}
|
|
166
|
+
else if (typeof tc === 'object' && 'criterion' in tc) {
|
|
167
|
+
// V2 format - extract the criterion string
|
|
168
|
+
criteria.push(tc.criterion);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const title = prompt.title.toLowerCase();
|
|
173
|
+
const instruction = (prompt.instruction || '').toLowerCase();
|
|
174
|
+
const fullText = `${title} ${instruction}`;
|
|
175
|
+
// Auth testing
|
|
176
|
+
if (fullText.includes('auth') || fullText.includes('login')) {
|
|
177
|
+
criteria.push('User can successfully log in with valid credentials');
|
|
178
|
+
criteria.push('Invalid credentials show appropriate error message');
|
|
179
|
+
criteria.push('Protected routes redirect unauthenticated users to login');
|
|
180
|
+
}
|
|
181
|
+
// Form testing
|
|
182
|
+
if (fullText.includes('form')) {
|
|
183
|
+
criteria.push('Form validates required fields before submission');
|
|
184
|
+
criteria.push('Success message displayed after successful submission');
|
|
185
|
+
criteria.push('Error state handled and displayed properly');
|
|
186
|
+
}
|
|
187
|
+
// Page testing
|
|
188
|
+
for (const page of relatedPages) {
|
|
189
|
+
criteria.push(`${page.pageName} renders without errors`);
|
|
190
|
+
if (page.stateManagement?.length) {
|
|
191
|
+
criteria.push(`${page.pageName} state updates correctly on user interaction`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Endpoint testing
|
|
195
|
+
for (const endpoint of relatedEndpoints) {
|
|
196
|
+
criteria.push(`${endpoint.name} returns expected response structure`);
|
|
197
|
+
if (endpoint.authentication) {
|
|
198
|
+
criteria.push(`${endpoint.name} requires authentication to access`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// Schema testing
|
|
202
|
+
for (const schema of relatedSchemas) {
|
|
203
|
+
const requiredFields = schema.fields?.filter(f => f.required) || [];
|
|
204
|
+
if (requiredFields.length) {
|
|
205
|
+
criteria.push(`${schema.collectionName} documents have all required fields: ${requiredFields.map(f => f.fieldName).join(', ')}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// General testing based on category
|
|
209
|
+
if (prompt.category === 'pages') {
|
|
210
|
+
criteria.push('Page is responsive on mobile and desktop');
|
|
211
|
+
criteria.push('Page follows design system styling');
|
|
212
|
+
}
|
|
213
|
+
if (prompt.category === 'integration') {
|
|
214
|
+
criteria.push('API calls handle loading and error states');
|
|
215
|
+
criteria.push('Data persists correctly in database');
|
|
216
|
+
}
|
|
217
|
+
// Deduplicate and limit
|
|
218
|
+
return [...new Set(criteria)].slice(0, 8);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get related patterns from the codebase
|
|
222
|
+
*/
|
|
223
|
+
getRelatedPatterns(context) {
|
|
224
|
+
const patterns = [];
|
|
225
|
+
const { prompt, projectData } = context;
|
|
226
|
+
const title = prompt.title.toLowerCase();
|
|
227
|
+
const instruction = (prompt.instruction || '').toLowerCase();
|
|
228
|
+
// Find similar completed prompts
|
|
229
|
+
const similarPrompts = projectData.buildPrompts.filter(p => {
|
|
230
|
+
if (p.promptId === prompt.promptId)
|
|
231
|
+
return false;
|
|
232
|
+
if (!p.completed)
|
|
233
|
+
return false;
|
|
234
|
+
const pTitle = p.title.toLowerCase();
|
|
235
|
+
const pInstruction = (p.instruction || '').toLowerCase();
|
|
236
|
+
// Same category
|
|
237
|
+
if (p.category === prompt.category)
|
|
238
|
+
return true;
|
|
239
|
+
// Similar keywords
|
|
240
|
+
const keywords = ['form', 'list', 'detail', 'auth', 'crud', 'api', 'fetch'];
|
|
241
|
+
return keywords.some(kw => (title.includes(kw) && pTitle.includes(kw)) ||
|
|
242
|
+
(instruction.includes(kw) && pInstruction.includes(kw)));
|
|
243
|
+
});
|
|
244
|
+
for (const similar of similarPrompts.slice(0, 3)) {
|
|
245
|
+
patterns.push(`See "${similar.title}" (completed) for similar implementation pattern`);
|
|
246
|
+
}
|
|
247
|
+
// Common patterns based on type
|
|
248
|
+
if (title.includes('list') || title.includes('table')) {
|
|
249
|
+
patterns.push('Use pagination or infinite scroll for large data sets');
|
|
250
|
+
patterns.push('Implement loading skeletons while fetching data');
|
|
251
|
+
}
|
|
252
|
+
if (title.includes('form')) {
|
|
253
|
+
patterns.push('Use controlled components with proper validation');
|
|
254
|
+
patterns.push('Disable submit button during form submission');
|
|
255
|
+
}
|
|
256
|
+
if (title.includes('modal') || title.includes('dialog')) {
|
|
257
|
+
patterns.push('Use portal for proper z-index stacking');
|
|
258
|
+
patterns.push('Trap focus within modal for accessibility');
|
|
259
|
+
}
|
|
260
|
+
return patterns.slice(0, 5);
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Get suggested approach for the prompt
|
|
264
|
+
*/
|
|
265
|
+
getSuggestedApproach(context) {
|
|
266
|
+
const { prompt, relatedPages, relatedSchemas, relatedEndpoints, relatedTechStack } = context;
|
|
267
|
+
const title = prompt.title.toLowerCase();
|
|
268
|
+
const category = prompt.category;
|
|
269
|
+
// Build approach based on what we're implementing
|
|
270
|
+
const steps = [];
|
|
271
|
+
// Initial setup
|
|
272
|
+
if (category === 'pages' && relatedPages.length) {
|
|
273
|
+
const page = relatedPages[0];
|
|
274
|
+
steps.push(`1. Create ${page.pageName} component with basic structure`);
|
|
275
|
+
if (page.components?.length) {
|
|
276
|
+
steps.push(`2. Build child components: ${page.components.map(c => c.componentName).join(', ')}`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
if (category === 'database' && relatedSchemas.length) {
|
|
280
|
+
const schema = relatedSchemas[0];
|
|
281
|
+
steps.push(`1. Define TypeScript interface for ${schema.collectionName}`);
|
|
282
|
+
steps.push(`2. Create Firestore collection reference and helper functions`);
|
|
283
|
+
}
|
|
284
|
+
if (category === 'integration' && relatedEndpoints.length) {
|
|
285
|
+
steps.push('1. Create API service module with typed functions');
|
|
286
|
+
steps.push('2. Implement each endpoint with proper error handling');
|
|
287
|
+
steps.push('3. Add loading states to consuming components');
|
|
288
|
+
}
|
|
289
|
+
// Common steps
|
|
290
|
+
if (title.includes('auth')) {
|
|
291
|
+
steps.push('Setup Firebase Auth integration with context provider');
|
|
292
|
+
steps.push('Create auth hooks (useAuth) for easy state access');
|
|
293
|
+
steps.push('Implement protected route wrapper component');
|
|
294
|
+
}
|
|
295
|
+
if (title.includes('form')) {
|
|
296
|
+
steps.push('Define form schema with validation rules');
|
|
297
|
+
steps.push('Create form component with controlled inputs');
|
|
298
|
+
steps.push('Handle submission with loading and error states');
|
|
299
|
+
}
|
|
300
|
+
// Tech stack specific
|
|
301
|
+
const hasFirebase = relatedTechStack.some(t => t.name.toLowerCase().includes('firebase'));
|
|
302
|
+
if (hasFirebase) {
|
|
303
|
+
steps.push('Initialize Firebase services in lib/firebase.ts if not already');
|
|
304
|
+
}
|
|
305
|
+
// Final steps
|
|
306
|
+
steps.push('Write tests for main functionality');
|
|
307
|
+
steps.push('Test edge cases and error scenarios');
|
|
308
|
+
return steps.length > 0
|
|
309
|
+
? `Suggested approach:\n${steps.map((s, i) => `${i + 1}. ${s.replace(/^\d+\.\s*/, '')}`).join('\n')}`
|
|
310
|
+
: prompt.instruction || 'Follow the build prompt instructions to complete this step.';
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
exports.GuidanceGenerator = GuidanceGenerator;
|
|
314
|
+
//# sourceMappingURL=guidance-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guidance-generator.js","sourceRoot":"","sources":["../../src/intelligence/guidance-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Intelligence Layer
|
|
3
|
+
*
|
|
4
|
+
* The brain of the MCP server - orchestrates context optimization,
|
|
5
|
+
* error analysis, gap filling, and guidance generation.
|
|
6
|
+
*/
|
|
7
|
+
import { ErrorAnalysisResult } from './error-analyzer.js';
|
|
8
|
+
import { BuildPrompt, ReportErrorRequest, GetNextStepResponse, ValidationIssue, ProjectConfig } from '../types/index.js';
|
|
9
|
+
import { VisualPRDClient } from '../services/visualprd-client.js';
|
|
10
|
+
export declare class IntelligenceLayer {
|
|
11
|
+
private contextOptimizer;
|
|
12
|
+
private errorAnalyzer;
|
|
13
|
+
private gapFiller;
|
|
14
|
+
private guidanceGenerator;
|
|
15
|
+
private client;
|
|
16
|
+
private llmClient;
|
|
17
|
+
private config;
|
|
18
|
+
private cache;
|
|
19
|
+
private readonly CACHE_TTL_MS;
|
|
20
|
+
constructor(client: VisualPRDClient, config?: ProjectConfig);
|
|
21
|
+
/**
|
|
22
|
+
* Update the thinking model dynamically
|
|
23
|
+
*/
|
|
24
|
+
setThinkingModel(model: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Set intelligence mode (fast = rule-based, deep = AI)
|
|
27
|
+
*/
|
|
28
|
+
setIntelligenceMode(mode: 'fast' | 'deep'): void;
|
|
29
|
+
/**
|
|
30
|
+
* Get the underlying VisualPRD client for direct V2 method access
|
|
31
|
+
*/
|
|
32
|
+
getClient(): VisualPRDClient;
|
|
33
|
+
/**
|
|
34
|
+
* Check if AI mode is available and enabled
|
|
35
|
+
*/
|
|
36
|
+
private isAIModeEnabled;
|
|
37
|
+
/**
|
|
38
|
+
* Get the next build step with full intelligent context
|
|
39
|
+
*/
|
|
40
|
+
getNextBuildStep(): Promise<GetNextStepResponse>;
|
|
41
|
+
/**
|
|
42
|
+
* Validate and mark a step as complete
|
|
43
|
+
*/
|
|
44
|
+
markStepComplete(promptId: string, completionData: {
|
|
45
|
+
completionNotes?: string;
|
|
46
|
+
filesCreated?: string[];
|
|
47
|
+
testResults?: {
|
|
48
|
+
passed: number;
|
|
49
|
+
failed: number;
|
|
50
|
+
};
|
|
51
|
+
}): Promise<{
|
|
52
|
+
success: boolean;
|
|
53
|
+
validationIssues: ValidationIssue[];
|
|
54
|
+
nextStep?: GetNextStepResponse;
|
|
55
|
+
message: string;
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* Analyze an error and provide fixes
|
|
59
|
+
*/
|
|
60
|
+
analyzeError(error: ReportErrorRequest): Promise<ErrorAnalysisResult & {
|
|
61
|
+
message: string;
|
|
62
|
+
}>;
|
|
63
|
+
/**
|
|
64
|
+
* Get detailed information about an entity
|
|
65
|
+
*/
|
|
66
|
+
getEntityDetails(entityType: 'page' | 'schema' | 'endpoint' | 'tech', entityId: string, options?: {
|
|
67
|
+
includeRelationships?: boolean;
|
|
68
|
+
includeUsageExamples?: boolean;
|
|
69
|
+
}): Promise<{
|
|
70
|
+
entity: any;
|
|
71
|
+
entityType: string;
|
|
72
|
+
relationships?: any[];
|
|
73
|
+
usedBy?: {
|
|
74
|
+
pages?: string[];
|
|
75
|
+
endpoints?: string[];
|
|
76
|
+
prompts?: string[];
|
|
77
|
+
};
|
|
78
|
+
usageExamples?: {
|
|
79
|
+
context: string;
|
|
80
|
+
code: string;
|
|
81
|
+
}[];
|
|
82
|
+
}>;
|
|
83
|
+
/**
|
|
84
|
+
* Get debugging suggestions when stuck
|
|
85
|
+
*/
|
|
86
|
+
getDebugSuggestions(currentTask: string, issue: string, context?: string): Promise<{
|
|
87
|
+
suggestions: Array<{
|
|
88
|
+
approach: string;
|
|
89
|
+
reasoning: string;
|
|
90
|
+
steps: string[];
|
|
91
|
+
confidence: number;
|
|
92
|
+
}>;
|
|
93
|
+
additionalContext: any;
|
|
94
|
+
missingInformation: string[];
|
|
95
|
+
}>;
|
|
96
|
+
/**
|
|
97
|
+
* Inject a new build step dynamically
|
|
98
|
+
*/
|
|
99
|
+
injectDynamicStep(insertAfterPromptId: string, stepData: {
|
|
100
|
+
title: string;
|
|
101
|
+
category: string;
|
|
102
|
+
reason: string;
|
|
103
|
+
instruction: string;
|
|
104
|
+
relatedEntities?: string[];
|
|
105
|
+
estimatedMinutes?: number;
|
|
106
|
+
}): Promise<{
|
|
107
|
+
success: boolean;
|
|
108
|
+
newStep?: BuildPrompt;
|
|
109
|
+
message: string;
|
|
110
|
+
}>;
|
|
111
|
+
/**
|
|
112
|
+
* Select appropriate intelligence tier based on task
|
|
113
|
+
*/
|
|
114
|
+
private selectIntelligenceTier;
|
|
115
|
+
private normalize;
|
|
116
|
+
private formatErrorMessage;
|
|
117
|
+
private generateUsageExamples;
|
|
118
|
+
/**
|
|
119
|
+
* Generate AI-powered guidance for a build step
|
|
120
|
+
* Uses completely generic prompts that adapt to any project type
|
|
121
|
+
*/
|
|
122
|
+
private generateAIGuidance;
|
|
123
|
+
/**
|
|
124
|
+
* Clear intelligence cache
|
|
125
|
+
*/
|
|
126
|
+
clearCache(): void;
|
|
127
|
+
}
|
|
128
|
+
export { ContextOptimizer } from './context-optimizer.js';
|
|
129
|
+
export { ErrorAnalyzer } from './error-analyzer.js';
|
|
130
|
+
export { GapFiller } from './gap-filler.js';
|
|
131
|
+
export { GuidanceGenerator } from './guidance-generator.js';
|
|
132
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/intelligence/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAiB,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,OAAO,EACL,WAAW,EAEX,kBAAkB,EAElB,mBAAmB,EAInB,eAAe,EACf,aAAa,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,MAAM,CAAgB;IAG9B,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;gBAEnC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,aAAa;IAqB3D;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASrC;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKhD;;OAEG;IACH,SAAS,IAAI,eAAe;IAI5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAsFtD;;OAEG;IACG,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE;QACd,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,WAAW,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;KAClD,GACA,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,gBAAgB,EAAE,eAAe,EAAE,CAAC;QACpC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;QAC/B,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IA8DF;;OAEG;IACG,YAAY,CAChB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,mBAAmB,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAmErD;;OAEG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,EACnD,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;QAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;KAAO,GAC/E,OAAO,CAAC;QACT,MAAM,EAAE,GAAG,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC;QACtB,MAAM,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;QACxE,aAAa,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACrD,CAAC;IAkFF;;OAEG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC;QACT,WAAW,EAAE,KAAK,CAAC;YACjB,QAAQ,EAAE,MAAM,CAAC;YACjB,SAAS,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,MAAM,EAAE,CAAC;YAChB,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC,CAAC;QACH,iBAAiB,EAAE,GAAG,CAAC;QACvB,kBAAkB,EAAE,MAAM,EAAE,CAAC;KAC9B,CAAC;IAiHF;;OAEG;IACG,iBAAiB,CACrB,mBAAmB,EAAE,MAAM,EAC3B,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,GACA,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA2BxE;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkD9B,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,qBAAqB;IAsC7B;;;OAGG;YACW,kBAAkB;IAuHhC;;OAEG;IACH,UAAU,IAAI,IAAI;CAInB;AAGD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
|