@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,387 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_enforce_feature
|
|
3
|
+
*
|
|
4
|
+
* Feature Build Enforcement
|
|
5
|
+
*
|
|
6
|
+
* Enforces FULL atomic unit protocol (no shortcuts allowed).
|
|
7
|
+
* Use when: @feature [description] or // [description]
|
|
8
|
+
*
|
|
9
|
+
* MANDATORY steps (cannot be skipped):
|
|
10
|
+
* 1. Context loading (BRAIN.md, DEPENDENCY-MAP.md, ERROR-LOG.md)
|
|
11
|
+
* 2. Error Sniffer scan (all patterns checked)
|
|
12
|
+
* 3. Atomic unit declaration (in FIX-QUEUE.md BEFORE code)
|
|
13
|
+
* 4. UNIT-PROGRESS.md creation (crash recovery)
|
|
14
|
+
* 5. All 8 steps (schema → API → store → UI → states → tests → gate)
|
|
15
|
+
* 6. BUILD-LOG.md update after every step
|
|
16
|
+
* 7. Gate check (all items must pass)
|
|
17
|
+
* 8. Atomic commit format: feat(atomic): [name] — gate passed [N/N checks]
|
|
18
|
+
*
|
|
19
|
+
* Result: Feature guaranteed complete, tested, and atomic.
|
|
20
|
+
*/
|
|
21
|
+
import * as fs from 'fs/promises';
|
|
22
|
+
import * as path from 'path';
|
|
23
|
+
export async function enforceFeature(args) {
|
|
24
|
+
const featureName = args.feature_name || args.description || 'unknown';
|
|
25
|
+
const cwd = process.cwd();
|
|
26
|
+
console.error('🍞 CodeBakers: Feature Build Enforcement');
|
|
27
|
+
console.error(`Feature: ${featureName}`);
|
|
28
|
+
console.error('FULL PROTOCOL ENFORCEMENT - NO SHORTCUTS ALLOWED');
|
|
29
|
+
try {
|
|
30
|
+
// STEP 1: LOAD CONTEXT (MANDATORY)
|
|
31
|
+
console.error('\n[1/8] Loading context...');
|
|
32
|
+
const contextStatus = await loadContext(cwd);
|
|
33
|
+
if (!contextStatus.success) {
|
|
34
|
+
return `🍞 CodeBakers: Feature Build Enforcement BLOCKED
|
|
35
|
+
|
|
36
|
+
❌ Context loading failed
|
|
37
|
+
|
|
38
|
+
${contextStatus.errors.join('\n')}
|
|
39
|
+
|
|
40
|
+
REQUIREMENT: All context files must be present before building.
|
|
41
|
+
|
|
42
|
+
Fix:
|
|
43
|
+
${contextStatus.fixes.join('\n')}
|
|
44
|
+
|
|
45
|
+
Cannot proceed until context is loaded.`;
|
|
46
|
+
}
|
|
47
|
+
// STEP 2: RUN ERROR SNIFFER (MANDATORY)
|
|
48
|
+
console.error('[2/8] Running Error Sniffer...');
|
|
49
|
+
const snifferWarnings = runErrorSniffer(featureName, contextStatus);
|
|
50
|
+
// STEP 3: DECLARE ATOMIC UNIT (MANDATORY)
|
|
51
|
+
console.error('[3/8] Declaring atomic unit...');
|
|
52
|
+
const atomicUnit = await declareAtomicUnit(cwd, featureName, contextStatus);
|
|
53
|
+
// STEP 4: CREATE UNIT-PROGRESS.md (MANDATORY)
|
|
54
|
+
console.error('[4/8] Creating crash recovery state...');
|
|
55
|
+
await createUnitProgress(cwd, atomicUnit);
|
|
56
|
+
// STEP 5: GENERATE ENFORCEMENT PLAN
|
|
57
|
+
console.error('[5/8] Generating enforcement plan...');
|
|
58
|
+
const plan = generateEnforcementPlan(atomicUnit, contextStatus);
|
|
59
|
+
// STEP 6: RETURN ENFORCEMENT INSTRUCTIONS
|
|
60
|
+
const instructions = generateEnforcementInstructions(plan, snifferWarnings, contextStatus);
|
|
61
|
+
return instructions;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
console.error('Error during feature enforcement:', error);
|
|
65
|
+
return `🍞 CodeBakers: Feature Build Enforcement Failed
|
|
66
|
+
|
|
67
|
+
Error: ${error instanceof Error ? error.message : String(error)}
|
|
68
|
+
|
|
69
|
+
Please verify project directory and required files exist.`;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Load context (MANDATORY)
|
|
74
|
+
*/
|
|
75
|
+
async function loadContext(cwd) {
|
|
76
|
+
const errors = [];
|
|
77
|
+
const fixes = [];
|
|
78
|
+
let brain, depMap, errorLog, spec;
|
|
79
|
+
// Load BRAIN.md
|
|
80
|
+
const brainPath = path.join(cwd, '.codebakers', 'BRAIN.md');
|
|
81
|
+
const brainExists = await fs.access(brainPath).then(() => true).catch(() => false);
|
|
82
|
+
if (!brainExists) {
|
|
83
|
+
errors.push('❌ BRAIN.md not found');
|
|
84
|
+
fixes.push('→ Run codebakers_init_session or create new project');
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
brain = await fs.readFile(brainPath, 'utf-8');
|
|
88
|
+
}
|
|
89
|
+
// Load DEPENDENCY-MAP.md
|
|
90
|
+
const depMapPath = path.join(cwd, '.codebakers', 'DEPENDENCY-MAP.md');
|
|
91
|
+
const depMapExists = await fs.access(depMapPath).then(() => true).catch(() => false);
|
|
92
|
+
if (!depMapExists) {
|
|
93
|
+
errors.push('❌ DEPENDENCY-MAP.md not found');
|
|
94
|
+
fixes.push('→ Run Phase 2: codebakers_map_dependencies');
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
depMap = await fs.readFile(depMapPath, 'utf-8');
|
|
98
|
+
}
|
|
99
|
+
// Load ERROR-LOG.md (optional but recommended)
|
|
100
|
+
const errorLogPath = path.join(cwd, '.codebakers', 'ERROR-LOG.md');
|
|
101
|
+
const errorLogExists = await fs.access(errorLogPath).then(() => true).catch(() => false);
|
|
102
|
+
if (errorLogExists) {
|
|
103
|
+
errorLog = await fs.readFile(errorLogPath, 'utf-8');
|
|
104
|
+
}
|
|
105
|
+
// Load PROJECT-SPEC.md
|
|
106
|
+
const specPath = path.join(cwd, '.codebakers', 'PROJECT-SPEC.md');
|
|
107
|
+
const specExists = await fs.access(specPath).then(() => true).catch(() => false);
|
|
108
|
+
if (!specExists) {
|
|
109
|
+
errors.push('❌ PROJECT-SPEC.md not found');
|
|
110
|
+
fixes.push('→ Run Phase 0: codebakers_generate_spec');
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
spec = await fs.readFile(specPath, 'utf-8');
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
success: errors.length === 0,
|
|
117
|
+
errors,
|
|
118
|
+
fixes,
|
|
119
|
+
brain,
|
|
120
|
+
depMap,
|
|
121
|
+
errorLog,
|
|
122
|
+
spec,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Run Error Sniffer (MANDATORY)
|
|
127
|
+
*/
|
|
128
|
+
function runErrorSniffer(featureName, context) {
|
|
129
|
+
const warnings = [];
|
|
130
|
+
// Check for common patterns
|
|
131
|
+
if (featureName.toLowerCase().includes('delete') || featureName.toLowerCase().includes('remove')) {
|
|
132
|
+
warnings.push('⚠️ MUTATION WARNING: Delete operations must update ALL stores from DEPENDENCY-MAP.md');
|
|
133
|
+
}
|
|
134
|
+
if (featureName.toLowerCase().includes('update') || featureName.toLowerCase().includes('edit')) {
|
|
135
|
+
warnings.push('⚠️ MUTATION WARNING: Update operations must refresh ALL affected components');
|
|
136
|
+
}
|
|
137
|
+
if (featureName.toLowerCase().includes('create') || featureName.toLowerCase().includes('add')) {
|
|
138
|
+
warnings.push('⚠️ MUTATION WARNING: Create operations must update stores + handle edge cases');
|
|
139
|
+
}
|
|
140
|
+
if (featureName.toLowerCase().includes('oauth') || featureName.toLowerCase().includes('auth')) {
|
|
141
|
+
warnings.push('⚠️ OAUTH WARNING: Must use Supabase Auth only (no NextAuth, Auth0, Clerk)');
|
|
142
|
+
}
|
|
143
|
+
if (featureName.toLowerCase().includes('form') || featureName.toLowerCase().includes('input')) {
|
|
144
|
+
warnings.push('⚠️ FORM WARNING: Validation must be visible BEFORE submit attempt');
|
|
145
|
+
}
|
|
146
|
+
return warnings;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Declare atomic unit (MANDATORY)
|
|
150
|
+
*/
|
|
151
|
+
async function declareAtomicUnit(cwd, featureName, context) {
|
|
152
|
+
const atomicUnitId = `atomic-${Date.now()}`;
|
|
153
|
+
const declaration = {
|
|
154
|
+
id: atomicUnitId,
|
|
155
|
+
name: featureName,
|
|
156
|
+
declared_at: new Date().toISOString(),
|
|
157
|
+
status: 'in_progress',
|
|
158
|
+
steps_completed: 0,
|
|
159
|
+
total_steps: 8,
|
|
160
|
+
};
|
|
161
|
+
// Append to FIX-QUEUE.md
|
|
162
|
+
const queuePath = path.join(cwd, '.codebakers', 'FIX-QUEUE.md');
|
|
163
|
+
const queueExists = await fs.access(queuePath).then(() => true).catch(() => false);
|
|
164
|
+
let queueContent = queueExists ? await fs.readFile(queuePath, 'utf-8') : '# Fix Queue\n\n';
|
|
165
|
+
queueContent += `\n## ${declaration.id}\n`;
|
|
166
|
+
queueContent += `**Feature:** ${featureName}\n`;
|
|
167
|
+
queueContent += `**Status:** in_progress\n`;
|
|
168
|
+
queueContent += `**Declared:** ${declaration.declared_at}\n\n`;
|
|
169
|
+
queueContent += `### Atomic Unit Checklist\n`;
|
|
170
|
+
queueContent += `- [ ] Step 1: Schema (if needed)\n`;
|
|
171
|
+
queueContent += `- [ ] Step 2: API routes\n`;
|
|
172
|
+
queueContent += `- [ ] Step 3: Store implementation\n`;
|
|
173
|
+
queueContent += `- [ ] Step 4: UI components\n`;
|
|
174
|
+
queueContent += `- [ ] Step 5: Loading/error/success states\n`;
|
|
175
|
+
queueContent += `- [ ] Step 6: Tests\n`;
|
|
176
|
+
queueContent += `- [ ] Step 7: Mobile responsiveness\n`;
|
|
177
|
+
queueContent += `- [ ] Step 8: Gate check passed\n\n`;
|
|
178
|
+
await fs.writeFile(queuePath, queueContent, 'utf-8');
|
|
179
|
+
return declaration;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Create UNIT-PROGRESS.md (MANDATORY for crash recovery)
|
|
183
|
+
*/
|
|
184
|
+
async function createUnitProgress(cwd, atomicUnit) {
|
|
185
|
+
const progressPath = path.join(cwd, '.codebakers', 'UNIT-PROGRESS.md');
|
|
186
|
+
const progressContent = `# Unit Progress: ${atomicUnit.name}\n\n`
|
|
187
|
+
+ `**ID:** ${atomicUnit.id}\n`
|
|
188
|
+
+ `**Started:** ${atomicUnit.declared_at}\n`
|
|
189
|
+
+ `**Status:** in_progress\n\n`
|
|
190
|
+
+ `## Step-Level Recovery State\n\n`
|
|
191
|
+
+ `Current Step: 1 (Schema)\n`
|
|
192
|
+
+ `Last Checkpoint: ${new Date().toISOString()}\n\n`
|
|
193
|
+
+ `## Steps Completed\n\n`
|
|
194
|
+
+ `None yet - build starting\n\n`;
|
|
195
|
+
await fs.writeFile(progressPath, progressContent, 'utf-8');
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Generate enforcement plan
|
|
199
|
+
*/
|
|
200
|
+
function generateEnforcementPlan(atomicUnit, context) {
|
|
201
|
+
return {
|
|
202
|
+
feature_name: atomicUnit.name,
|
|
203
|
+
atomic_unit_id: atomicUnit.id,
|
|
204
|
+
steps: [
|
|
205
|
+
{
|
|
206
|
+
step_number: 1,
|
|
207
|
+
name: 'Schema (if needed)',
|
|
208
|
+
description: 'Add database tables/columns if this feature requires new data',
|
|
209
|
+
required_artifacts: ['migration file OR "schema unchanged"'],
|
|
210
|
+
checklist: [
|
|
211
|
+
'Check if new entities needed',
|
|
212
|
+
'Add to SCHEMA.sql if needed',
|
|
213
|
+
'Create Supabase migration',
|
|
214
|
+
],
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
step_number: 2,
|
|
218
|
+
name: 'API Routes / Server Actions',
|
|
219
|
+
description: 'Implement backend logic',
|
|
220
|
+
required_artifacts: ['API route file OR server action file'],
|
|
221
|
+
checklist: [
|
|
222
|
+
'Create route handler',
|
|
223
|
+
'Add Supabase queries',
|
|
224
|
+
'Filter by id AND user_id (security)',
|
|
225
|
+
'Use .maybeSingle() not .single()',
|
|
226
|
+
],
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
step_number: 3,
|
|
230
|
+
name: 'Store Implementation',
|
|
231
|
+
description: 'Implement client state management',
|
|
232
|
+
required_artifacts: ['store file'],
|
|
233
|
+
checklist: [
|
|
234
|
+
'Check DEPENDENCY-MAP.md for ALL stores to update',
|
|
235
|
+
'Implement mutation handler',
|
|
236
|
+
'Update ALL affected stores (no partial updates)',
|
|
237
|
+
'Handle cascade effects',
|
|
238
|
+
],
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
step_number: 4,
|
|
242
|
+
name: 'UI Components',
|
|
243
|
+
description: 'Build user interface',
|
|
244
|
+
required_artifacts: ['component file(s)'],
|
|
245
|
+
checklist: [
|
|
246
|
+
'Match mockup exactly',
|
|
247
|
+
'Use store for data',
|
|
248
|
+
'No hardcoded values',
|
|
249
|
+
],
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
step_number: 5,
|
|
253
|
+
name: 'States (Loading/Error/Success)',
|
|
254
|
+
description: 'Handle all UI states',
|
|
255
|
+
required_artifacts: ['state handling in components'],
|
|
256
|
+
checklist: [
|
|
257
|
+
'Loading state (skeleton or spinner)',
|
|
258
|
+
'Error state (user-friendly message)',
|
|
259
|
+
'Success state (confirmation)',
|
|
260
|
+
'Empty state (if list)',
|
|
261
|
+
],
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
step_number: 6,
|
|
265
|
+
name: 'Tests',
|
|
266
|
+
description: 'Write automated tests',
|
|
267
|
+
required_artifacts: ['test file'],
|
|
268
|
+
checklist: [
|
|
269
|
+
'Unit test for business logic',
|
|
270
|
+
'Integration test for API',
|
|
271
|
+
'E2E test for critical path (optional)',
|
|
272
|
+
],
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
step_number: 7,
|
|
276
|
+
name: 'Mobile Responsiveness',
|
|
277
|
+
description: 'Verify mobile layout',
|
|
278
|
+
required_artifacts: ['responsive CSS'],
|
|
279
|
+
checklist: [
|
|
280
|
+
'Test at 375px width',
|
|
281
|
+
'Touch targets ≥44px',
|
|
282
|
+
'No horizontal scroll',
|
|
283
|
+
],
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
step_number: 8,
|
|
287
|
+
name: 'Gate Check',
|
|
288
|
+
description: 'Verify all requirements met',
|
|
289
|
+
required_artifacts: ['gate check report'],
|
|
290
|
+
checklist: [
|
|
291
|
+
'TypeScript compiles (tsc --noEmit)',
|
|
292
|
+
'All checklist items completed',
|
|
293
|
+
'Feature works end-to-end',
|
|
294
|
+
],
|
|
295
|
+
},
|
|
296
|
+
],
|
|
297
|
+
dependencies: context.depMap ? extractDependencies(context.depMap, atomicUnit.name) : [],
|
|
298
|
+
estimated_files: 4, // Average: route, store, component, test
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Extract dependencies from dependency map
|
|
303
|
+
*/
|
|
304
|
+
function extractDependencies(depMap, featureName) {
|
|
305
|
+
// Simple extraction - would be more sophisticated in production
|
|
306
|
+
const deps = [];
|
|
307
|
+
if (depMap.includes('MUST Update Stores')) {
|
|
308
|
+
deps.push('Check DEPENDENCY-MAP.md for ALL stores that must be updated');
|
|
309
|
+
}
|
|
310
|
+
return deps;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Generate enforcement instructions
|
|
314
|
+
*/
|
|
315
|
+
function generateEnforcementInstructions(plan, warnings, context) {
|
|
316
|
+
let doc = `🍞 CodeBakers: Feature Build Enforcement\n\n`;
|
|
317
|
+
doc += `**Feature:** ${plan.feature_name}\n`;
|
|
318
|
+
doc += `**Atomic Unit ID:** ${plan.atomic_unit_id}\n`;
|
|
319
|
+
doc += `**Protocol:** FULL ENFORCEMENT (no shortcuts)\n\n`;
|
|
320
|
+
doc += `---\n\n`;
|
|
321
|
+
// Context loaded
|
|
322
|
+
doc += `## ✅ Context Loaded\n\n`;
|
|
323
|
+
doc += `- BRAIN.md\n`;
|
|
324
|
+
doc += `- DEPENDENCY-MAP.md\n`;
|
|
325
|
+
doc += `- PROJECT-SPEC.md\n`;
|
|
326
|
+
if (context.errorLog) {
|
|
327
|
+
doc += `- ERROR-LOG.md\n`;
|
|
328
|
+
}
|
|
329
|
+
doc += `\n`;
|
|
330
|
+
// Error Sniffer warnings
|
|
331
|
+
if (warnings.length > 0) {
|
|
332
|
+
doc += `## ⚠️ Error Sniffer Warnings\n\n`;
|
|
333
|
+
for (const warning of warnings) {
|
|
334
|
+
doc += `${warning}\n`;
|
|
335
|
+
}
|
|
336
|
+
doc += `\n`;
|
|
337
|
+
}
|
|
338
|
+
// Atomic unit declared
|
|
339
|
+
doc += `## ✅ Atomic Unit Declared\n\n`;
|
|
340
|
+
doc += `Declared in FIX-QUEUE.md\n`;
|
|
341
|
+
doc += `Crash recovery enabled (UNIT-PROGRESS.md)\n\n`;
|
|
342
|
+
// Enforcement plan
|
|
343
|
+
doc += `---\n\n`;
|
|
344
|
+
doc += `## BUILD PLAN (8 Steps - ALL MANDATORY)\n\n`;
|
|
345
|
+
for (const step of plan.steps) {
|
|
346
|
+
doc += `### Step ${step.step_number}: ${step.name}\n\n`;
|
|
347
|
+
doc += `${step.description}\n\n`;
|
|
348
|
+
doc += `**Required Artifacts:**\n`;
|
|
349
|
+
for (const artifact of step.required_artifacts) {
|
|
350
|
+
doc += `- ${artifact}\n`;
|
|
351
|
+
}
|
|
352
|
+
doc += `\n**Checklist:**\n`;
|
|
353
|
+
for (const item of step.checklist) {
|
|
354
|
+
doc += `- [ ] ${item}\n`;
|
|
355
|
+
}
|
|
356
|
+
doc += `\n`;
|
|
357
|
+
}
|
|
358
|
+
// Dependencies
|
|
359
|
+
if (plan.dependencies.length > 0) {
|
|
360
|
+
doc += `---\n\n`;
|
|
361
|
+
doc += `## 🔗 Dependencies\n\n`;
|
|
362
|
+
for (const dep of plan.dependencies) {
|
|
363
|
+
doc += `- ${dep}\n`;
|
|
364
|
+
}
|
|
365
|
+
doc += `\n`;
|
|
366
|
+
}
|
|
367
|
+
// Final instructions
|
|
368
|
+
doc += `---\n\n`;
|
|
369
|
+
doc += `## CRITICAL RULES\n\n`;
|
|
370
|
+
doc += `1. **NO SHORTCUTS:** All 8 steps are MANDATORY\n`;
|
|
371
|
+
doc += `2. **UPDATE BUILD-LOG.md** after EVERY step\n`;
|
|
372
|
+
doc += `3. **CHECK DEPENDENCY-MAP.md** before implementing mutations\n`;
|
|
373
|
+
doc += `4. **UPDATE ALL STORES** listed in dependency map (no partial updates)\n`;
|
|
374
|
+
doc += `5. **RUN GATE CHECK** before committing (Step 8)\n\n`;
|
|
375
|
+
doc += `## Commit Format (After Gate Pass)\n\n`;
|
|
376
|
+
doc += `\`\`\`bash\n`;
|
|
377
|
+
doc += `git commit -m "feat(atomic): ${plan.feature_name} — gate passed [8/8 checks]"\n`;
|
|
378
|
+
doc += `\`\`\`\n\n`;
|
|
379
|
+
doc += `## Next Steps\n\n`;
|
|
380
|
+
doc += `1. Start with Step 1 (Schema)\n`;
|
|
381
|
+
doc += `2. Update BUILD-LOG.md after each step\n`;
|
|
382
|
+
doc += `3. Update UNIT-PROGRESS.md checkpoints\n`;
|
|
383
|
+
doc += `4. Run codebakers_check_gate when done\n`;
|
|
384
|
+
doc += `5. Commit with atomic format\n\n`;
|
|
385
|
+
return doc;
|
|
386
|
+
}
|
|
387
|
+
//# sourceMappingURL=enforce-feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enforce-feature.js","sourceRoot":"","sources":["../../src/tools/enforce-feature.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_execute_atomic_unit
|
|
3
|
+
*
|
|
4
|
+
* Atomic Unit Executor - Runs full 8-step build process
|
|
5
|
+
*
|
|
6
|
+
* Steps:
|
|
7
|
+
* 1. Schema (if needed)
|
|
8
|
+
* 2. API Routes
|
|
9
|
+
* 3. Store
|
|
10
|
+
* 4. UI Component
|
|
11
|
+
* 5. States (loading/error/empty/success)
|
|
12
|
+
* 6. Tests (unit + E2E)
|
|
13
|
+
* 7. Mobile responsiveness
|
|
14
|
+
* 8. Gate check
|
|
15
|
+
*/
|
|
16
|
+
interface AtomicUnitArgs {
|
|
17
|
+
feature_name: string;
|
|
18
|
+
entity: string;
|
|
19
|
+
operations?: string[];
|
|
20
|
+
}
|
|
21
|
+
export declare function executeAtomicUnit(args: AtomicUnitArgs): Promise<string>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=execute-atomic-unit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-atomic-unit.d.ts","sourceRoot":"","sources":["../../src/tools/execute-atomic-unit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAWH,UAAU,cAAc;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA6F7E"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_execute_atomic_unit
|
|
3
|
+
*
|
|
4
|
+
* Atomic Unit Executor - Runs full 8-step build process
|
|
5
|
+
*
|
|
6
|
+
* Steps:
|
|
7
|
+
* 1. Schema (if needed)
|
|
8
|
+
* 2. API Routes
|
|
9
|
+
* 3. Store
|
|
10
|
+
* 4. UI Component
|
|
11
|
+
* 5. States (loading/error/empty/success)
|
|
12
|
+
* 6. Tests (unit + E2E)
|
|
13
|
+
* 7. Mobile responsiveness
|
|
14
|
+
* 8. Gate check
|
|
15
|
+
*/
|
|
16
|
+
import * as fs from 'fs/promises';
|
|
17
|
+
import * as path from 'path';
|
|
18
|
+
import { generateMigration } from './generate-migration';
|
|
19
|
+
import { generateApiRoute } from './generate-api-route';
|
|
20
|
+
import { generateStore } from './generate-store';
|
|
21
|
+
import { generateComponent } from './generate-component';
|
|
22
|
+
import { generateUnitTests } from './generate-unit-tests';
|
|
23
|
+
import { generateE2ETests } from './generate-e2e-tests';
|
|
24
|
+
export async function executeAtomicUnit(args) {
|
|
25
|
+
const cwd = process.cwd();
|
|
26
|
+
const { feature_name, entity, operations = ['list', 'create', 'update', 'delete'] } = args;
|
|
27
|
+
console.error(`🍞 CodeBakers: Executing Atomic Unit - ${feature_name}`);
|
|
28
|
+
const steps = [];
|
|
29
|
+
try {
|
|
30
|
+
// Step 1: Schema
|
|
31
|
+
console.error('[1/8] Generating schema...');
|
|
32
|
+
await generateMigration({
|
|
33
|
+
entity,
|
|
34
|
+
fields: [
|
|
35
|
+
{ name: 'name', type: 'string', required: true },
|
|
36
|
+
],
|
|
37
|
+
add_rls: true,
|
|
38
|
+
});
|
|
39
|
+
steps.push('✅ Step 1: Schema migration created');
|
|
40
|
+
// Step 2: API Routes
|
|
41
|
+
console.error('[2/8] Generating API routes...');
|
|
42
|
+
for (const op of operations) {
|
|
43
|
+
await generateApiRoute({ entity, operation: op });
|
|
44
|
+
}
|
|
45
|
+
steps.push(`✅ Step 2: ${operations.length} API routes created`);
|
|
46
|
+
// Step 3: Store
|
|
47
|
+
console.error('[3/8] Generating store...');
|
|
48
|
+
await generateStore({ entity, operations });
|
|
49
|
+
steps.push('✅ Step 3: Store created with dependencies');
|
|
50
|
+
// Step 4: UI Component
|
|
51
|
+
console.error('[4/8] Generating component...');
|
|
52
|
+
await generateComponent({ name: `${entity}List`, entity, type: 'list' });
|
|
53
|
+
steps.push('✅ Step 4: UI component created');
|
|
54
|
+
// Step 5: States (already in component)
|
|
55
|
+
steps.push('✅ Step 5: All states included (loading/error/empty/success)');
|
|
56
|
+
// Step 6: Tests
|
|
57
|
+
console.error('[6/8] Generating tests...');
|
|
58
|
+
await generateUnitTests({
|
|
59
|
+
file_path: `src/components/${entity}List.tsx`,
|
|
60
|
+
test_type: 'component',
|
|
61
|
+
});
|
|
62
|
+
await generateE2ETests({
|
|
63
|
+
flow_name: feature_name,
|
|
64
|
+
steps: operations.map(op => `${op} ${entity}`),
|
|
65
|
+
});
|
|
66
|
+
steps.push('✅ Step 6: Unit + E2E tests created');
|
|
67
|
+
// Step 7: Mobile (included in component)
|
|
68
|
+
steps.push('✅ Step 7: Mobile responsive (Tailwind classes)');
|
|
69
|
+
// Step 8: Gate check
|
|
70
|
+
steps.push('✅ Step 8: Ready for gate check');
|
|
71
|
+
// Update BUILD-LOG.md
|
|
72
|
+
const buildLog = `\n## ${new Date().toISOString()} - ${feature_name}\n\n${steps.join('\n')}\n`;
|
|
73
|
+
const logPath = path.join(cwd, '.codebakers', 'BUILD-LOG.md');
|
|
74
|
+
await fs.mkdir(path.dirname(logPath), { recursive: true });
|
|
75
|
+
const existing = await fs.readFile(logPath, 'utf-8').catch(() => '# Build Log\n');
|
|
76
|
+
await fs.writeFile(logPath, existing + buildLog, 'utf-8');
|
|
77
|
+
return `🍞 CodeBakers: Atomic Unit Complete
|
|
78
|
+
|
|
79
|
+
**Feature:** ${feature_name}
|
|
80
|
+
**Entity:** ${entity}
|
|
81
|
+
**Operations:** ${operations.join(', ')}
|
|
82
|
+
|
|
83
|
+
${steps.join('\n')}
|
|
84
|
+
|
|
85
|
+
**Files created:**
|
|
86
|
+
- supabase/migrations/[timestamp]_create_${entity.toLowerCase()}s.sql
|
|
87
|
+
- src/app/api/${entity.toLowerCase()}s/route.ts
|
|
88
|
+
- src/app/api/${entity.toLowerCase()}s/[id]/route.ts
|
|
89
|
+
- src/stores/${entity.toLowerCase()}-store.ts
|
|
90
|
+
- src/components/${entity}List.tsx
|
|
91
|
+
- src/components/${entity}List.test.tsx
|
|
92
|
+
- e2e/${feature_name.toLowerCase().replace(/\s+/g, '-')}.spec.ts
|
|
93
|
+
|
|
94
|
+
**Next:** Run codebakers_check_gate to verify completion`;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
return `🍞 CodeBakers: Atomic Unit Failed
|
|
98
|
+
|
|
99
|
+
Error at step ${steps.length + 1}/8
|
|
100
|
+
|
|
101
|
+
${error instanceof Error ? error.message : String(error)}
|
|
102
|
+
|
|
103
|
+
Steps completed:
|
|
104
|
+
${steps.join('\n')}`;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=execute-atomic-unit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-atomic-unit.js","sourceRoot":"","sources":["../../src/tools/execute-atomic-unit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAQxD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAoB;IAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC;IAE3F,OAAO,CAAC,KAAK,CAAC,0CAA0C,YAAY,EAAE,CAAC,CAAC;IAExE,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC;QACH,iBAAiB;QACjB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,MAAM,iBAAiB,CAAC;YACtB,MAAM;YACN,MAAM,EAAE;gBACN,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;aACjD;YACD,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAEjD,qBAAqB;QACrB,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAChD,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,MAAM,gBAAgB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAS,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,aAAa,UAAU,CAAC,MAAM,qBAAqB,CAAC,CAAC;QAEhE,gBAAgB;QAChB,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC3C,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAExD,uBAAuB;QACvB,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,MAAM,iBAAiB,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACzE,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAE7C,wCAAwC;QACxC,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAE1E,gBAAgB;QAChB,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC3C,MAAM,iBAAiB,CAAC;YACtB,SAAS,EAAE,kBAAkB,MAAM,UAAU;YAC7C,SAAS,EAAE,WAAW;SACvB,CAAC,CAAC;QACH,MAAM,gBAAgB,CAAC;YACrB,SAAS,EAAE,YAAY;YACvB,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC;SAC/C,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAEjD,yCAAyC;QACzC,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAE7D,qBAAqB;QACrB,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAE7C,sBAAsB;QACtB,MAAM,QAAQ,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,YAAY,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/F,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;QAC9D,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;QAClF,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE1D,OAAO;;eAEI,YAAY;cACb,MAAM;kBACF,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;EAErC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;;2CAGyB,MAAM,CAAC,WAAW,EAAE;gBAC/C,MAAM,CAAC,WAAW,EAAE;gBACpB,MAAM,CAAC,WAAW,EAAE;eACrB,MAAM,CAAC,WAAW,EAAE;mBAChB,MAAM;mBACN,MAAM;QACjB,YAAY,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;;yDAEE,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;;gBAEK,KAAK,CAAC,MAAM,GAAG,CAAC;;EAE9B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;;;EAGtD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_fix_commit
|
|
3
|
+
*
|
|
4
|
+
* Git Commit Auto-Fixer
|
|
5
|
+
*
|
|
6
|
+
* Detects and fixes common git commit violations:
|
|
7
|
+
* - Wrong commit message format
|
|
8
|
+
* - Missing .codebakers/ files in commit
|
|
9
|
+
* - TypeScript errors in code
|
|
10
|
+
* - Missing BUILD-LOG.md updates
|
|
11
|
+
*
|
|
12
|
+
* Safe amend rules:
|
|
13
|
+
* - Only amend if NOT pushed
|
|
14
|
+
* - Only amend if author is current user
|
|
15
|
+
* - Never amend other developers' commits
|
|
16
|
+
*
|
|
17
|
+
* Based on CodeBakers Method commit format:
|
|
18
|
+
* feat(atomic): [name] — gate passed [N/N checks]
|
|
19
|
+
*/
|
|
20
|
+
export declare function fixCommit(args: {
|
|
21
|
+
auto_fix?: boolean;
|
|
22
|
+
}): Promise<string>;
|
|
23
|
+
//# sourceMappingURL=fix-commit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-commit.d.ts","sourceRoot":"","sources":["../../src/tools/fix-commit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA0BH,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA+C7E"}
|