@codebakers/mcp 5.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/INSTALL.md +221 -0
- package/LICENSE +21 -0
- package/README.md +412 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +236 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +526 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/analyze-mockups.d.ts +18 -0
- package/dist/tools/analyze-mockups.d.ts.map +1 -0
- package/dist/tools/analyze-mockups.js +497 -0
- package/dist/tools/analyze-mockups.js.map +1 -0
- package/dist/tools/autonomous-build.d.ts +19 -0
- package/dist/tools/autonomous-build.d.ts.map +1 -0
- package/dist/tools/autonomous-build.js +287 -0
- package/dist/tools/autonomous-build.js.map +1 -0
- package/dist/tools/check-gate.d.ts +21 -0
- package/dist/tools/check-gate.d.ts.map +1 -0
- package/dist/tools/check-gate.js +446 -0
- package/dist/tools/check-gate.js.map +1 -0
- package/dist/tools/check-scope.d.ts +22 -0
- package/dist/tools/check-scope.d.ts.map +1 -0
- package/dist/tools/check-scope.js +251 -0
- package/dist/tools/check-scope.js.map +1 -0
- package/dist/tools/deploy-vercel.d.ts +18 -0
- package/dist/tools/deploy-vercel.d.ts.map +1 -0
- package/dist/tools/deploy-vercel.js +178 -0
- package/dist/tools/deploy-vercel.js.map +1 -0
- package/dist/tools/diagnose-error.d.ts +20 -0
- package/dist/tools/diagnose-error.d.ts.map +1 -0
- package/dist/tools/diagnose-error.js +351 -0
- package/dist/tools/diagnose-error.js.map +1 -0
- package/dist/tools/enforce-feature.d.ts +25 -0
- package/dist/tools/enforce-feature.d.ts.map +1 -0
- package/dist/tools/enforce-feature.js +387 -0
- package/dist/tools/enforce-feature.js.map +1 -0
- package/dist/tools/execute-atomic-unit.d.ts +23 -0
- package/dist/tools/execute-atomic-unit.d.ts.map +1 -0
- package/dist/tools/execute-atomic-unit.js +107 -0
- package/dist/tools/execute-atomic-unit.js.map +1 -0
- package/dist/tools/fix-commit.d.ts +23 -0
- package/dist/tools/fix-commit.d.ts.map +1 -0
- package/dist/tools/fix-commit.js +213 -0
- package/dist/tools/fix-commit.js.map +1 -0
- package/dist/tools/fix-mockups.d.ts +21 -0
- package/dist/tools/fix-mockups.d.ts.map +1 -0
- package/dist/tools/fix-mockups.js +595 -0
- package/dist/tools/fix-mockups.js.map +1 -0
- package/dist/tools/generate-api-route.d.ts +18 -0
- package/dist/tools/generate-api-route.d.ts.map +1 -0
- package/dist/tools/generate-api-route.js +212 -0
- package/dist/tools/generate-api-route.js.map +1 -0
- package/dist/tools/generate-chatbot.d.ts +20 -0
- package/dist/tools/generate-chatbot.d.ts.map +1 -0
- package/dist/tools/generate-chatbot.js +555 -0
- package/dist/tools/generate-chatbot.js.map +1 -0
- package/dist/tools/generate-component.d.ts +18 -0
- package/dist/tools/generate-component.d.ts.map +1 -0
- package/dist/tools/generate-component.js +159 -0
- package/dist/tools/generate-component.js.map +1 -0
- package/dist/tools/generate-docs.d.ts +21 -0
- package/dist/tools/generate-docs.d.ts.map +1 -0
- package/dist/tools/generate-docs.js +782 -0
- package/dist/tools/generate-docs.js.map +1 -0
- package/dist/tools/generate-e2e-tests.d.ts +12 -0
- package/dist/tools/generate-e2e-tests.d.ts.map +1 -0
- package/dist/tools/generate-e2e-tests.js +37 -0
- package/dist/tools/generate-e2e-tests.js.map +1 -0
- package/dist/tools/generate-migration.d.ts +21 -0
- package/dist/tools/generate-migration.d.ts.map +1 -0
- package/dist/tools/generate-migration.js +94 -0
- package/dist/tools/generate-migration.js.map +1 -0
- package/dist/tools/generate-schema.d.ts +18 -0
- package/dist/tools/generate-schema.d.ts.map +1 -0
- package/dist/tools/generate-schema.js +422 -0
- package/dist/tools/generate-schema.js.map +1 -0
- package/dist/tools/generate-spec.d.ts +18 -0
- package/dist/tools/generate-spec.d.ts.map +1 -0
- package/dist/tools/generate-spec.js +446 -0
- package/dist/tools/generate-spec.js.map +1 -0
- package/dist/tools/generate-store-contracts.d.ts +17 -0
- package/dist/tools/generate-store-contracts.d.ts.map +1 -0
- package/dist/tools/generate-store-contracts.js +356 -0
- package/dist/tools/generate-store-contracts.js.map +1 -0
- package/dist/tools/generate-store.d.ts +16 -0
- package/dist/tools/generate-store.d.ts.map +1 -0
- package/dist/tools/generate-store.js +166 -0
- package/dist/tools/generate-store.js.map +1 -0
- package/dist/tools/generate-unit-tests.d.ts +14 -0
- package/dist/tools/generate-unit-tests.d.ts.map +1 -0
- package/dist/tools/generate-unit-tests.js +85 -0
- package/dist/tools/generate-unit-tests.js.map +1 -0
- package/dist/tools/get-context.d.ts +35 -0
- package/dist/tools/get-context.d.ts.map +1 -0
- package/dist/tools/get-context.js +367 -0
- package/dist/tools/get-context.js.map +1 -0
- package/dist/tools/init-session.d.ts +22 -0
- package/dist/tools/init-session.d.ts.map +1 -0
- package/dist/tools/init-session.js +232 -0
- package/dist/tools/init-session.js.map +1 -0
- package/dist/tools/map-dependencies.d.ts +25 -0
- package/dist/tools/map-dependencies.d.ts.map +1 -0
- package/dist/tools/map-dependencies.js +480 -0
- package/dist/tools/map-dependencies.js.map +1 -0
- package/dist/tools/optimize-performance.d.ts +18 -0
- package/dist/tools/optimize-performance.d.ts.map +1 -0
- package/dist/tools/optimize-performance.js +285 -0
- package/dist/tools/optimize-performance.js.map +1 -0
- package/dist/tools/run-interview.d.ts +23 -0
- package/dist/tools/run-interview.d.ts.map +1 -0
- package/dist/tools/run-interview.js +371 -0
- package/dist/tools/run-interview.js.map +1 -0
- package/dist/tools/run-tests.d.ts +12 -0
- package/dist/tools/run-tests.d.ts.map +1 -0
- package/dist/tools/run-tests.js +30 -0
- package/dist/tools/run-tests.js.map +1 -0
- package/dist/tools/scan-security.d.ts +19 -0
- package/dist/tools/scan-security.d.ts.map +1 -0
- package/dist/tools/scan-security.js +358 -0
- package/dist/tools/scan-security.js.map +1 -0
- package/dist/tools/validate-accessibility.d.ts +18 -0
- package/dist/tools/validate-accessibility.d.ts.map +1 -0
- package/dist/tools/validate-accessibility.js +251 -0
- package/dist/tools/validate-accessibility.js.map +1 -0
- package/dist/tools/validate-mockups.d.ts +21 -0
- package/dist/tools/validate-mockups.d.ts.map +1 -0
- package/dist/tools/validate-mockups.js +433 -0
- package/dist/tools/validate-mockups.js.map +1 -0
- package/dist/tools/verify-completeness.d.ts +13 -0
- package/dist/tools/verify-completeness.d.ts.map +1 -0
- package/dist/tools/verify-completeness.js +68 -0
- package/dist/tools/verify-completeness.js.map +1 -0
- package/dist/tools/verify-mockups.d.ts +14 -0
- package/dist/tools/verify-mockups.d.ts.map +1 -0
- package/dist/tools/verify-mockups.js +85 -0
- package/dist/tools/verify-mockups.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_analyze_mockups_deep
|
|
3
|
+
*
|
|
4
|
+
* Phase 2A: Deep mockup analysis
|
|
5
|
+
* Extracts ALL data fields, relationships, and interactions from UI mockups
|
|
6
|
+
*
|
|
7
|
+
* Based on CodeBakers Method Phase 2 requirements:
|
|
8
|
+
* - All data fields displayed and their data types
|
|
9
|
+
* - All form inputs and the entity they mutate
|
|
10
|
+
* - All filters, sorts, and search parameters
|
|
11
|
+
* - All computed or aggregated values
|
|
12
|
+
* - All relationships between entities implied by the UI
|
|
13
|
+
* - All status values and state machines
|
|
14
|
+
*/
|
|
15
|
+
import * as fs from 'fs/promises';
|
|
16
|
+
import * as path from 'path';
|
|
17
|
+
export async function analyzeMockupsDeep(args) {
|
|
18
|
+
const cwd = process.cwd();
|
|
19
|
+
const mockupFolder = args.mockup_folder || 'refs/design/';
|
|
20
|
+
const mockupPath = path.join(cwd, mockupFolder);
|
|
21
|
+
console.error('🍞 CodeBakers: Phase 2A — Deep Mockup Analysis');
|
|
22
|
+
console.error(`Analyzing mockups in: ${mockupPath}`);
|
|
23
|
+
try {
|
|
24
|
+
// 1. CHECK IF MOCKUP FOLDER EXISTS
|
|
25
|
+
const exists = await fs.access(mockupPath).then(() => true).catch(() => false);
|
|
26
|
+
if (!exists) {
|
|
27
|
+
return `🍞 CodeBakers: Phase 2A - Deep Mockup Analysis
|
|
28
|
+
|
|
29
|
+
❌ BLOCKER: Mockup folder not found
|
|
30
|
+
|
|
31
|
+
Expected location: ${mockupPath}
|
|
32
|
+
|
|
33
|
+
Phase 2 cannot proceed without mockups. You must complete Phase 1 first.
|
|
34
|
+
|
|
35
|
+
Next step: Run Phase 1 to create UI mockups, then return to Phase 2.`;
|
|
36
|
+
}
|
|
37
|
+
// 2. READ ALL MOCKUP FILES
|
|
38
|
+
const files = await fs.readdir(mockupPath);
|
|
39
|
+
const mockupFiles = files.filter(f => f.endsWith('.html') ||
|
|
40
|
+
f.endsWith('.jsx') ||
|
|
41
|
+
f.endsWith('.tsx') ||
|
|
42
|
+
f.endsWith('.md'));
|
|
43
|
+
if (mockupFiles.length === 0) {
|
|
44
|
+
return `🍞 CodeBakers: Phase 2A - Deep Mockup Analysis
|
|
45
|
+
|
|
46
|
+
⚠️ WARNING: No mockup files found in ${mockupPath}
|
|
47
|
+
|
|
48
|
+
Supported formats: .html, .jsx, .tsx, .md
|
|
49
|
+
|
|
50
|
+
Phase 1 may be incomplete. Verify mockups exist before proceeding to Phase 2.`;
|
|
51
|
+
}
|
|
52
|
+
console.error(`Found ${mockupFiles.length} mockup files`);
|
|
53
|
+
// 3. ANALYZE EACH MOCKUP
|
|
54
|
+
const analyses = [];
|
|
55
|
+
for (const file of mockupFiles) {
|
|
56
|
+
const filePath = path.join(mockupPath, file);
|
|
57
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
58
|
+
console.error(`Analyzing: ${file}`);
|
|
59
|
+
const analysis = await analyzeSingleMockup(file, content);
|
|
60
|
+
analyses.push(analysis);
|
|
61
|
+
}
|
|
62
|
+
// 4. GENERATE MOCK-ANALYSIS.md
|
|
63
|
+
const analysisContent = generateMockAnalysisDocument(analyses);
|
|
64
|
+
const outputPath = path.join(cwd, '.codebakers', 'MOCK-ANALYSIS.md');
|
|
65
|
+
// Ensure .codebakers folder exists
|
|
66
|
+
await fs.mkdir(path.join(cwd, '.codebakers'), { recursive: true });
|
|
67
|
+
await fs.writeFile(outputPath, analysisContent, 'utf-8');
|
|
68
|
+
console.error(`✓ Analysis complete: ${outputPath}`);
|
|
69
|
+
// 5. GENERATE SUMMARY FOR USER
|
|
70
|
+
const summary = generateAnalysisSummary(analyses);
|
|
71
|
+
return `🍞 CodeBakers: Phase 2A - Deep Mockup Analysis Complete
|
|
72
|
+
|
|
73
|
+
${summary}
|
|
74
|
+
|
|
75
|
+
📄 Full analysis written to: .codebakers/MOCK-ANALYSIS.md
|
|
76
|
+
|
|
77
|
+
Next steps:
|
|
78
|
+
1. Review MOCK-ANALYSIS.md to verify all data captured
|
|
79
|
+
2. Proceed to Phase 2B: Schema Generation (use tool: codebakers_generate_schema)
|
|
80
|
+
3. Then Phase 2C: Dependency Mapping (use tool: codebakers_map_dependencies)
|
|
81
|
+
|
|
82
|
+
Verification gate requirement:
|
|
83
|
+
→ Every data field in every mockup must have a corresponding database column
|
|
84
|
+
→ All entity relationships must be captured
|
|
85
|
+
→ No unresolved dependencies`;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
console.error('Error during mockup analysis:', error);
|
|
89
|
+
return `🍞 CodeBakers: Phase 2A - Deep Mockup Analysis Failed
|
|
90
|
+
|
|
91
|
+
Error: ${error instanceof Error ? error.message : String(error)}
|
|
92
|
+
|
|
93
|
+
Please check:
|
|
94
|
+
- Mockup folder exists and is readable
|
|
95
|
+
- Mockup files are valid format (.html, .jsx, .tsx, .md)
|
|
96
|
+
- File permissions allow reading
|
|
97
|
+
|
|
98
|
+
If issue persists, log to ERROR-LOG.md and request human assistance.`;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Analyzes a single mockup file to extract data elements
|
|
103
|
+
*/
|
|
104
|
+
async function analyzeSingleMockup(filename, content) {
|
|
105
|
+
const analysis = {
|
|
106
|
+
screen_name: filename.replace(/\.(html|jsx|tsx|md)$/, ''),
|
|
107
|
+
screen_path: filename,
|
|
108
|
+
data_fields: [],
|
|
109
|
+
form_inputs: [],
|
|
110
|
+
filters: [],
|
|
111
|
+
relationships: [],
|
|
112
|
+
state_machines: [],
|
|
113
|
+
computed_values: [],
|
|
114
|
+
notes: [],
|
|
115
|
+
};
|
|
116
|
+
// PATTERN DETECTION RULES
|
|
117
|
+
// These patterns identify data elements in mockup code/markup
|
|
118
|
+
// 1. DETECT DATA FIELDS
|
|
119
|
+
// Look for: {user.name}, {email}, data-field="...", etc.
|
|
120
|
+
const dataFieldPatterns = [
|
|
121
|
+
/\{(\w+)\.(\w+)\}/g, // {user.name}
|
|
122
|
+
/\{(\w+)\}/g, // {email}
|
|
123
|
+
/data-field=["'](\w+)["']/g, // data-field="name"
|
|
124
|
+
/<td[^>]*>(\w+)<\/td>/g, // <td>name</td>
|
|
125
|
+
/<span[^>]*>(\w+):<\/span>/g, // <span>Name:</span>
|
|
126
|
+
];
|
|
127
|
+
for (const pattern of dataFieldPatterns) {
|
|
128
|
+
let match;
|
|
129
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
130
|
+
const fieldName = match[2] || match[1];
|
|
131
|
+
if (fieldName && !isIgnoredField(fieldName)) {
|
|
132
|
+
analysis.data_fields.push({
|
|
133
|
+
field_name: fieldName,
|
|
134
|
+
data_type: inferDataType(fieldName, content),
|
|
135
|
+
source_entity: inferEntity(fieldName, content),
|
|
136
|
+
is_required: content.includes(`required`) && content.includes(fieldName),
|
|
137
|
+
is_computed: isComputedField(fieldName),
|
|
138
|
+
computation_rule: isComputedField(fieldName) ? inferComputationRule(fieldName) : undefined,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// 2. DETECT FORM INPUTS
|
|
144
|
+
const inputPatterns = [
|
|
145
|
+
/<input[^>]*name=["'](\w+)["'][^>]*type=["'](\w+)["'][^>]*>/g,
|
|
146
|
+
/<input[^>]*type=["'](\w+)["'][^>]*name=["'](\w+)["'][^>]*>/g,
|
|
147
|
+
/<textarea[^>]*name=["'](\w+)["'][^>]*>/g,
|
|
148
|
+
/<select[^>]*name=["'](\w+)["'][^>]*>/g,
|
|
149
|
+
];
|
|
150
|
+
for (const pattern of inputPatterns) {
|
|
151
|
+
let match;
|
|
152
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
153
|
+
const inputName = match[1] || match[2];
|
|
154
|
+
const inputType = match[2] || match[1] || 'text';
|
|
155
|
+
if (inputName && !isIgnoredField(inputName)) {
|
|
156
|
+
analysis.form_inputs.push({
|
|
157
|
+
input_name: inputName,
|
|
158
|
+
input_type: inputType,
|
|
159
|
+
target_entity: inferEntity(inputName, content),
|
|
160
|
+
validation_rules: extractValidationRules(inputName, content),
|
|
161
|
+
is_required: content.includes(`required`) && content.includes(inputName),
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// 3. DETECT FILTERS, SORTS, SEARCH
|
|
167
|
+
const filterPatterns = [
|
|
168
|
+
/filter[^>]*by[^>]*(\w+)/gi,
|
|
169
|
+
/sort[^>]*by[^>]*(\w+)/gi,
|
|
170
|
+
/search[^>]*(\w+)/gi,
|
|
171
|
+
/placeholder=["']Search (\w+)["']/gi,
|
|
172
|
+
];
|
|
173
|
+
for (const pattern of filterPatterns) {
|
|
174
|
+
let match;
|
|
175
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
176
|
+
const filterName = match[1];
|
|
177
|
+
if (filterName && !isIgnoredField(filterName)) {
|
|
178
|
+
analysis.filters.push({
|
|
179
|
+
filter_name: filterName,
|
|
180
|
+
applies_to_entity: inferEntity(filterName, content),
|
|
181
|
+
filter_type: inferFilterType(match[0]),
|
|
182
|
+
values: extractFilterValues(filterName, content),
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// 4. DETECT RELATIONSHIPS
|
|
188
|
+
// Look for nested data structures: user.posts, order.items, etc.
|
|
189
|
+
const relationshipPattern = /\{(\w+)\.(\w+)\.(\w+)\}/g;
|
|
190
|
+
let match;
|
|
191
|
+
while ((match = relationshipPattern.exec(content)) !== null) {
|
|
192
|
+
const fromEntity = match[1];
|
|
193
|
+
const throughEntity = match[2];
|
|
194
|
+
if (!isIgnoredField(fromEntity) && !isIgnoredField(throughEntity)) {
|
|
195
|
+
analysis.relationships.push({
|
|
196
|
+
from_entity: fromEntity,
|
|
197
|
+
to_entity: throughEntity,
|
|
198
|
+
relationship_type: '1:many', // Default assumption
|
|
199
|
+
implied_by: `Data reference: ${match[0]}`,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// 5. DETECT STATE MACHINES
|
|
204
|
+
// Look for status indicators, badges, state values
|
|
205
|
+
const statePatterns = [
|
|
206
|
+
/status[^>]*:?\s*["']?(\w+)["']?/gi,
|
|
207
|
+
/state[^>]*:?\s*["']?(\w+)["']?/gi,
|
|
208
|
+
/badge[^>]*>(\w+)</gi,
|
|
209
|
+
];
|
|
210
|
+
for (const pattern of statePatterns) {
|
|
211
|
+
let match;
|
|
212
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
213
|
+
const stateValue = match[1];
|
|
214
|
+
if (stateValue && !isIgnoredField(stateValue)) {
|
|
215
|
+
// Try to find all possible values for this state
|
|
216
|
+
const possibleValues = extractStateValues(content);
|
|
217
|
+
analysis.state_machines.push({
|
|
218
|
+
entity: inferEntity(stateValue, content),
|
|
219
|
+
state_field: 'status', // Default field name
|
|
220
|
+
possible_values: possibleValues.length > 0 ? possibleValues : [stateValue],
|
|
221
|
+
transitions: [], // Would need more complex analysis
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// 6. DETECT COMPUTED VALUES
|
|
227
|
+
// Look for aggregations: total, count, sum, average, etc.
|
|
228
|
+
const computedPatterns = [
|
|
229
|
+
/total[^>]*:?\s*\{?(\w+)\}?/gi,
|
|
230
|
+
/count[^>]*:?\s*\{?(\w+)\}?/gi,
|
|
231
|
+
/sum[^>]*:?\s*\{?(\w+)\}?/gi,
|
|
232
|
+
/average[^>]*:?\s*\{?(\w+)\}?/gi,
|
|
233
|
+
/\{(\w+\.length)\}/g,
|
|
234
|
+
/\{(\w+\.count)\}/g,
|
|
235
|
+
];
|
|
236
|
+
for (const pattern of computedPatterns) {
|
|
237
|
+
let match;
|
|
238
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
239
|
+
const computedField = match[1];
|
|
240
|
+
if (computedField && !isIgnoredField(computedField)) {
|
|
241
|
+
analysis.computed_values.push({
|
|
242
|
+
field_name: computedField,
|
|
243
|
+
data_type: 'number',
|
|
244
|
+
source_entity: inferEntity(computedField, content),
|
|
245
|
+
is_required: false,
|
|
246
|
+
is_computed: true,
|
|
247
|
+
computation_rule: inferComputationRule(computedField),
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// 7. ADD ANALYSIS NOTES
|
|
253
|
+
if (analysis.data_fields.length === 0 && analysis.form_inputs.length === 0) {
|
|
254
|
+
analysis.notes.push('⚠️ No data fields or form inputs detected - verify mockup contains data');
|
|
255
|
+
}
|
|
256
|
+
return analysis;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Generate the complete MOCK-ANALYSIS.md document
|
|
260
|
+
*/
|
|
261
|
+
function generateMockAnalysisDocument(analyses) {
|
|
262
|
+
let doc = `# Mock Analysis\n`;
|
|
263
|
+
doc += `**Generated:** ${new Date().toISOString()}\n`;
|
|
264
|
+
doc += `**Phase:** 2A - Mock Analysis\n`;
|
|
265
|
+
doc += `**Purpose:** Extract all data fields, relationships, and interactions from UI mockups\n\n`;
|
|
266
|
+
doc += `---\n\n`;
|
|
267
|
+
// Summary statistics
|
|
268
|
+
const totalFields = analyses.reduce((sum, a) => sum + a.data_fields.length, 0);
|
|
269
|
+
const totalInputs = analyses.reduce((sum, a) => sum + a.form_inputs.length, 0);
|
|
270
|
+
const totalFilters = analyses.reduce((sum, a) => sum + a.filters.length, 0);
|
|
271
|
+
const totalRelationships = analyses.reduce((sum, a) => sum + a.relationships.length, 0);
|
|
272
|
+
doc += `## Summary\n\n`;
|
|
273
|
+
doc += `- **Mockups analyzed:** ${analyses.length}\n`;
|
|
274
|
+
doc += `- **Data fields extracted:** ${totalFields}\n`;
|
|
275
|
+
doc += `- **Form inputs extracted:** ${totalInputs}\n`;
|
|
276
|
+
doc += `- **Filters/sorts extracted:** ${totalFilters}\n`;
|
|
277
|
+
doc += `- **Relationships identified:** ${totalRelationships}\n\n`;
|
|
278
|
+
doc += `---\n\n`;
|
|
279
|
+
// Per-screen analysis
|
|
280
|
+
for (const analysis of analyses) {
|
|
281
|
+
doc += `## Screen: ${analysis.screen_name}\n\n`;
|
|
282
|
+
doc += `**File:** \`${analysis.screen_path}\`\n\n`;
|
|
283
|
+
// Data fields
|
|
284
|
+
if (analysis.data_fields.length > 0) {
|
|
285
|
+
doc += `### Data Fields Displayed\n\n`;
|
|
286
|
+
doc += `| Field Name | Data Type | Source Entity | Required | Computed |\n`;
|
|
287
|
+
doc += `|------------|-----------|---------------|----------|----------|\n`;
|
|
288
|
+
for (const field of analysis.data_fields) {
|
|
289
|
+
doc += `| ${field.field_name} | ${field.data_type} | ${field.source_entity} | ${field.is_required ? 'Yes' : 'No'} | ${field.is_computed ? 'Yes' : 'No'} |\n`;
|
|
290
|
+
}
|
|
291
|
+
doc += `\n`;
|
|
292
|
+
}
|
|
293
|
+
// Form inputs
|
|
294
|
+
if (analysis.form_inputs.length > 0) {
|
|
295
|
+
doc += `### Form Inputs\n\n`;
|
|
296
|
+
doc += `| Input Name | Type | Target Entity | Required | Validation Rules |\n`;
|
|
297
|
+
doc += `|------------|------|---------------|----------|------------------|\n`;
|
|
298
|
+
for (const input of analysis.form_inputs) {
|
|
299
|
+
doc += `| ${input.input_name} | ${input.input_type} | ${input.target_entity} | ${input.is_required ? 'Yes' : 'No'} | ${input.validation_rules.join(', ') || 'None'} |\n`;
|
|
300
|
+
}
|
|
301
|
+
doc += `\n`;
|
|
302
|
+
}
|
|
303
|
+
// Filters
|
|
304
|
+
if (analysis.filters.length > 0) {
|
|
305
|
+
doc += `### Filters & Sorts\n\n`;
|
|
306
|
+
doc += `| Filter Name | Type | Applies To | Values |\n`;
|
|
307
|
+
doc += `|-------------|------|------------|--------|\n`;
|
|
308
|
+
for (const filter of analysis.filters) {
|
|
309
|
+
doc += `| ${filter.filter_name} | ${filter.filter_type} | ${filter.applies_to_entity} | ${filter.values?.join(', ') || 'Dynamic'} |\n`;
|
|
310
|
+
}
|
|
311
|
+
doc += `\n`;
|
|
312
|
+
}
|
|
313
|
+
// Relationships
|
|
314
|
+
if (analysis.relationships.length > 0) {
|
|
315
|
+
doc += `### Entity Relationships\n\n`;
|
|
316
|
+
doc += `| From Entity | To Entity | Type | Implied By |\n`;
|
|
317
|
+
doc += `|-------------|-----------|------|------------|\n`;
|
|
318
|
+
for (const rel of analysis.relationships) {
|
|
319
|
+
doc += `| ${rel.from_entity} | ${rel.to_entity} | ${rel.relationship_type} | ${rel.implied_by} |\n`;
|
|
320
|
+
}
|
|
321
|
+
doc += `\n`;
|
|
322
|
+
}
|
|
323
|
+
// State machines
|
|
324
|
+
if (analysis.state_machines.length > 0) {
|
|
325
|
+
doc += `### State Values\n\n`;
|
|
326
|
+
doc += `| Entity | State Field | Possible Values |\n`;
|
|
327
|
+
doc += `|--------|-------------|----------------|\n`;
|
|
328
|
+
for (const state of analysis.state_machines) {
|
|
329
|
+
doc += `| ${state.entity} | ${state.state_field} | ${state.possible_values.join(', ')} |\n`;
|
|
330
|
+
}
|
|
331
|
+
doc += `\n`;
|
|
332
|
+
}
|
|
333
|
+
// Computed values
|
|
334
|
+
if (analysis.computed_values.length > 0) {
|
|
335
|
+
doc += `### Computed/Aggregated Values\n\n`;
|
|
336
|
+
doc += `| Field Name | Computation Rule | Source Entity |\n`;
|
|
337
|
+
doc += `|------------|------------------|---------------|\n`;
|
|
338
|
+
for (const computed of analysis.computed_values) {
|
|
339
|
+
doc += `| ${computed.field_name} | ${computed.computation_rule || 'Derived'} | ${computed.source_entity} |\n`;
|
|
340
|
+
}
|
|
341
|
+
doc += `\n`;
|
|
342
|
+
}
|
|
343
|
+
// Notes
|
|
344
|
+
if (analysis.notes.length > 0) {
|
|
345
|
+
doc += `### Analysis Notes\n\n`;
|
|
346
|
+
for (const note of analysis.notes) {
|
|
347
|
+
doc += `- ${note}\n`;
|
|
348
|
+
}
|
|
349
|
+
doc += `\n`;
|
|
350
|
+
}
|
|
351
|
+
doc += `---\n\n`;
|
|
352
|
+
}
|
|
353
|
+
// Entity extraction summary
|
|
354
|
+
doc += `## Extracted Entities\n\n`;
|
|
355
|
+
doc += `Based on mockup analysis, the following entities were identified:\n\n`;
|
|
356
|
+
const entities = new Set();
|
|
357
|
+
for (const analysis of analyses) {
|
|
358
|
+
for (const field of analysis.data_fields) {
|
|
359
|
+
entities.add(field.source_entity);
|
|
360
|
+
}
|
|
361
|
+
for (const input of analysis.form_inputs) {
|
|
362
|
+
entities.add(input.target_entity);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
for (const entity of Array.from(entities).sort()) {
|
|
366
|
+
doc += `- **${entity}**\n`;
|
|
367
|
+
}
|
|
368
|
+
doc += `\n`;
|
|
369
|
+
doc += `---\n\n`;
|
|
370
|
+
doc += `## Next Steps\n\n`;
|
|
371
|
+
doc += `1. **Review this analysis** - Verify all data elements captured\n`;
|
|
372
|
+
doc += `2. **Phase 2B** - Generate database schema from this analysis\n`;
|
|
373
|
+
doc += `3. **Phase 2C** - Map all dependencies\n`;
|
|
374
|
+
doc += `4. **Verification Gate** - Confirm every field has a corresponding schema column\n\n`;
|
|
375
|
+
return doc;
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Generate summary for tool response
|
|
379
|
+
*/
|
|
380
|
+
function generateAnalysisSummary(analyses) {
|
|
381
|
+
const totalFields = analyses.reduce((sum, a) => sum + a.data_fields.length, 0);
|
|
382
|
+
const totalInputs = analyses.reduce((sum, a) => sum + a.form_inputs.length, 0);
|
|
383
|
+
const totalRelationships = analyses.reduce((sum, a) => sum + a.relationships.length, 0);
|
|
384
|
+
const entities = new Set();
|
|
385
|
+
for (const analysis of analyses) {
|
|
386
|
+
for (const field of analysis.data_fields) {
|
|
387
|
+
entities.add(field.source_entity);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
let summary = `✓ Analyzed ${analyses.length} mockup screens\n`;
|
|
391
|
+
summary += `✓ Extracted ${totalFields} data fields\n`;
|
|
392
|
+
summary += `✓ Extracted ${totalInputs} form inputs\n`;
|
|
393
|
+
summary += `✓ Identified ${totalRelationships} entity relationships\n`;
|
|
394
|
+
summary += `✓ Identified ${entities.size} distinct entities\n`;
|
|
395
|
+
return summary;
|
|
396
|
+
}
|
|
397
|
+
// HELPER FUNCTIONS
|
|
398
|
+
function isIgnoredField(field) {
|
|
399
|
+
const ignored = ['div', 'span', 'button', 'true', 'false', 'null', 'undefined', 'className', 'onClick'];
|
|
400
|
+
return ignored.includes(field.toLowerCase());
|
|
401
|
+
}
|
|
402
|
+
function inferDataType(fieldName, context) {
|
|
403
|
+
const lowerField = fieldName.toLowerCase();
|
|
404
|
+
if (lowerField.includes('date') || lowerField.includes('created') || lowerField.includes('updated'))
|
|
405
|
+
return 'timestamp';
|
|
406
|
+
if (lowerField.includes('email'))
|
|
407
|
+
return 'email';
|
|
408
|
+
if (lowerField.includes('phone'))
|
|
409
|
+
return 'phone';
|
|
410
|
+
if (lowerField.includes('url') || lowerField.includes('link'))
|
|
411
|
+
return 'url';
|
|
412
|
+
if (lowerField.includes('id') || lowerField.endsWith('_id'))
|
|
413
|
+
return 'uuid';
|
|
414
|
+
if (lowerField.includes('count') || lowerField.includes('total') || lowerField.includes('amount'))
|
|
415
|
+
return 'number';
|
|
416
|
+
if (lowerField.includes('is_') || lowerField.includes('has_'))
|
|
417
|
+
return 'boolean';
|
|
418
|
+
if (lowerField.includes('price') || lowerField.includes('cost'))
|
|
419
|
+
return 'decimal';
|
|
420
|
+
return 'text';
|
|
421
|
+
}
|
|
422
|
+
function inferEntity(fieldName, context) {
|
|
423
|
+
// Try to extract entity from field name patterns
|
|
424
|
+
const parts = fieldName.split('_');
|
|
425
|
+
if (parts.length > 1) {
|
|
426
|
+
return parts[0]; // e.g., user_name → user
|
|
427
|
+
}
|
|
428
|
+
// Check context for entity clues
|
|
429
|
+
if (context.includes('user.'))
|
|
430
|
+
return 'user';
|
|
431
|
+
if (context.includes('post.'))
|
|
432
|
+
return 'post';
|
|
433
|
+
if (context.includes('order.'))
|
|
434
|
+
return 'order';
|
|
435
|
+
if (context.includes('product.'))
|
|
436
|
+
return 'product';
|
|
437
|
+
return 'unknown';
|
|
438
|
+
}
|
|
439
|
+
function isComputedField(fieldName) {
|
|
440
|
+
const computedKeywords = ['total', 'count', 'sum', 'average', 'length', 'size'];
|
|
441
|
+
return computedKeywords.some(kw => fieldName.toLowerCase().includes(kw));
|
|
442
|
+
}
|
|
443
|
+
function inferComputationRule(fieldName) {
|
|
444
|
+
const lower = fieldName.toLowerCase();
|
|
445
|
+
if (lower.includes('total'))
|
|
446
|
+
return 'SUM of related values';
|
|
447
|
+
if (lower.includes('count'))
|
|
448
|
+
return 'COUNT of related items';
|
|
449
|
+
if (lower.includes('average'))
|
|
450
|
+
return 'AVERAGE of related values';
|
|
451
|
+
if (lower.includes('length'))
|
|
452
|
+
return 'COUNT of array items';
|
|
453
|
+
return 'Derived value';
|
|
454
|
+
}
|
|
455
|
+
function extractValidationRules(inputName, context) {
|
|
456
|
+
const rules = [];
|
|
457
|
+
if (context.includes(`required`) && context.includes(inputName))
|
|
458
|
+
rules.push('required');
|
|
459
|
+
if (context.includes(`minLength`) && context.includes(inputName))
|
|
460
|
+
rules.push('minLength');
|
|
461
|
+
if (context.includes(`maxLength`) && context.includes(inputName))
|
|
462
|
+
rules.push('maxLength');
|
|
463
|
+
if (context.includes(`pattern`) && context.includes(inputName))
|
|
464
|
+
rules.push('pattern');
|
|
465
|
+
if (context.includes(`email`) && context.includes(inputName))
|
|
466
|
+
rules.push('email format');
|
|
467
|
+
return rules;
|
|
468
|
+
}
|
|
469
|
+
function inferFilterType(matchText) {
|
|
470
|
+
if (matchText.toLowerCase().includes('search'))
|
|
471
|
+
return 'search';
|
|
472
|
+
if (matchText.toLowerCase().includes('sort'))
|
|
473
|
+
return 'sort';
|
|
474
|
+
return 'filter';
|
|
475
|
+
}
|
|
476
|
+
function extractFilterValues(filterName, context) {
|
|
477
|
+
// This would require more sophisticated parsing
|
|
478
|
+
// For now, return undefined to indicate dynamic values
|
|
479
|
+
return undefined;
|
|
480
|
+
}
|
|
481
|
+
function extractStateValues(content) {
|
|
482
|
+
const stateValues = [];
|
|
483
|
+
const patterns = [
|
|
484
|
+
/["'](pending|active|completed|cancelled|draft|published)["']/gi,
|
|
485
|
+
/["'](open|closed|in_progress)["']/gi,
|
|
486
|
+
];
|
|
487
|
+
for (const pattern of patterns) {
|
|
488
|
+
let match;
|
|
489
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
490
|
+
if (!stateValues.includes(match[1])) {
|
|
491
|
+
stateValues.push(match[1]);
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
return stateValues;
|
|
496
|
+
}
|
|
497
|
+
//# sourceMappingURL=analyze-mockups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-mockups.js","sourceRoot":"","sources":["../../src/tools/analyze-mockups.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_autonomous_build
|
|
3
|
+
*
|
|
4
|
+
* Full Autonomous Build Orchestrator
|
|
5
|
+
*
|
|
6
|
+
* Builds entire application from FLOWS.md with zero human intervention.
|
|
7
|
+
* Executes all features sequentially with full atomic unit protocol.
|
|
8
|
+
*/
|
|
9
|
+
interface BuildArgs {
|
|
10
|
+
mode: 'full' | 'remaining';
|
|
11
|
+
stop_on_error?: boolean;
|
|
12
|
+
skip_quality_gates?: boolean;
|
|
13
|
+
skip_deploy?: boolean;
|
|
14
|
+
skip_docs?: boolean;
|
|
15
|
+
skip_chatbot?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function autonomousBuild(args: BuildArgs): Promise<string>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=autonomous-build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autonomous-build.d.ts","sourceRoot":"","sources":["../../src/tools/autonomous-build.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA8FtE"}
|