mycontext-cli 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Progress Tracking System
3
+ *
4
+ * Manages granular progress tracking for build-app workflow.
5
+ * Generates JSON files that can be consumed by VS Code extension,
6
+ * web dashboard, or other external tools.
7
+ */
8
+ export type PhaseStatus = 'pending' | 'in_progress' | 'completed' | 'failed' | 'validation_required';
9
+ export type StepStatus = 'pending' | 'in_progress' | 'completed' | 'failed' | 'skipped';
10
+ export interface StepProgress {
11
+ status: StepStatus;
12
+ timestamp?: string;
13
+ duration?: number;
14
+ error?: string;
15
+ metadata?: Record<string, any>;
16
+ }
17
+ export interface PhaseProgress {
18
+ status: PhaseStatus;
19
+ steps: number;
20
+ completedSteps: number;
21
+ duration: number;
22
+ startTime?: string;
23
+ endTime?: string;
24
+ userValidations?: Record<string, boolean>;
25
+ errors?: Array<{
26
+ step: string;
27
+ error: string;
28
+ timestamp: string;
29
+ }>;
30
+ }
31
+ export interface MasterProgress {
32
+ version: string;
33
+ startTime: string;
34
+ endTime: string | null;
35
+ status: PhaseStatus;
36
+ currentPhase: string;
37
+ currentStep: number;
38
+ totalSteps: number;
39
+ percentComplete: number;
40
+ phases: Record<string, PhaseProgress>;
41
+ errors: Array<{
42
+ phase: string;
43
+ step: number;
44
+ error: string;
45
+ timestamp: string;
46
+ }>;
47
+ retries: {
48
+ total: number;
49
+ byPhase: Record<string, number>;
50
+ };
51
+ userInteractions: number;
52
+ buildChecks: {
53
+ typescript: {
54
+ passed: number;
55
+ failed: number;
56
+ };
57
+ eslint: {
58
+ passed: number;
59
+ failed: number;
60
+ };
61
+ build: {
62
+ passed: number;
63
+ failed: number;
64
+ };
65
+ tests: {
66
+ passed: number;
67
+ failed: number;
68
+ };
69
+ };
70
+ }
71
+ export interface ComponentProgress {
72
+ component: string;
73
+ group: string;
74
+ status: StepStatus;
75
+ steps: Record<string, StepProgress>;
76
+ retries: number;
77
+ duration: number;
78
+ metadata?: {
79
+ linesOfCode?: number;
80
+ dependencies?: string[];
81
+ props?: string[];
82
+ exports?: string[];
83
+ };
84
+ }
85
+ export declare class ProgressTracker {
86
+ private projectPath;
87
+ private progressDir;
88
+ private masterProgress;
89
+ private phaseStartTimes;
90
+ private stepStartTimes;
91
+ constructor(projectPath: string);
92
+ private initializeMasterProgress;
93
+ private createPhaseProgress;
94
+ initialize(): Promise<void>;
95
+ startPhase(phaseName: string): Promise<void>;
96
+ completePhase(phaseName: string): Promise<void>;
97
+ failPhase(phaseName: string, error: string): Promise<void>;
98
+ requestValidation(phaseName: string, validationType: string): Promise<void>;
99
+ approveValidation(phaseName: string, validationType: string): Promise<void>;
100
+ incrementStep(phaseName: string): Promise<void>;
101
+ recordBuildCheck(type: 'typescript' | 'eslint' | 'build' | 'tests', passed: boolean): Promise<void>;
102
+ recordRetry(phaseName: string): Promise<void>;
103
+ setComponentCount(count: number): Promise<void>;
104
+ private calculateTotalSteps;
105
+ startComponentGeneration(componentName: string, group: string): Promise<void>;
106
+ updateComponentStep(componentName: string, stepName: string, status: StepStatus, metadata?: Record<string, any>): Promise<void>;
107
+ completeComponentGeneration(componentName: string, metadata?: ComponentProgress['metadata']): Promise<void>;
108
+ failComponentGeneration(componentName: string, error: string, retries: number): Promise<void>;
109
+ complete(): Promise<void>;
110
+ displaySummary(): void;
111
+ private saveMasterProgress;
112
+ private savePhaseProgress;
113
+ private saveComponentProgress;
114
+ private loadComponentProgress;
115
+ private getPhaseNumber;
116
+ private formatPhaseName;
117
+ private formatStepName;
118
+ getMasterProgress(): MasterProgress;
119
+ loadProgress(): Promise<MasterProgress | null>;
120
+ }
121
+ //# sourceMappingURL=progressTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progressTracker.d.ts","sourceRoot":"","sources":["../../src/utils/progressTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,334 @@
1
+ "use strict";
2
+ /**
3
+ * Progress Tracking System
4
+ *
5
+ * Manages granular progress tracking for build-app workflow.
6
+ * Generates JSON files that can be consumed by VS Code extension,
7
+ * web dashboard, or other external tools.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ var __importDefault = (this && this.__importDefault) || function (mod) {
43
+ return (mod && mod.__esModule) ? mod : { "default": mod };
44
+ };
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.ProgressTracker = void 0;
47
+ const fs = __importStar(require("fs-extra"));
48
+ const path_1 = __importDefault(require("path"));
49
+ const chalk_1 = __importDefault(require("chalk"));
50
+ class ProgressTracker {
51
+ constructor(projectPath) {
52
+ this.phaseStartTimes = new Map();
53
+ this.stepStartTimes = new Map();
54
+ this.projectPath = projectPath;
55
+ this.progressDir = path_1.default.join(projectPath, '.mycontext', 'progress');
56
+ this.masterProgress = this.initializeMasterProgress();
57
+ }
58
+ initializeMasterProgress() {
59
+ return {
60
+ version: '2.0.0',
61
+ startTime: new Date().toISOString(),
62
+ endTime: null,
63
+ status: 'pending',
64
+ currentPhase: 'preflight',
65
+ currentStep: 0,
66
+ totalSteps: 230,
67
+ percentComplete: 0,
68
+ phases: {
69
+ preflight: this.createPhaseProgress(10),
70
+ initialization: this.createPhaseProgress(15),
71
+ context_generation: this.createPhaseProgress(25),
72
+ types: this.createPhaseProgress(10),
73
+ branding: this.createPhaseProgress(10),
74
+ build_strategy: this.createPhaseProgress(10),
75
+ component_list: this.createPhaseProgress(10),
76
+ component_generation: this.createPhaseProgress(0), // Dynamic based on component count
77
+ server_actions: this.createPhaseProgress(30),
78
+ routes: this.createPhaseProgress(20),
79
+ integration: this.createPhaseProgress(20),
80
+ post_generation: this.createPhaseProgress(10),
81
+ },
82
+ errors: [],
83
+ retries: {
84
+ total: 0,
85
+ byPhase: {},
86
+ },
87
+ userInteractions: 0,
88
+ buildChecks: {
89
+ typescript: { passed: 0, failed: 0 },
90
+ eslint: { passed: 0, failed: 0 },
91
+ build: { passed: 0, failed: 0 },
92
+ tests: { passed: 0, failed: 0 },
93
+ },
94
+ };
95
+ }
96
+ createPhaseProgress(steps) {
97
+ return {
98
+ status: 'pending',
99
+ steps,
100
+ completedSteps: 0,
101
+ duration: 0,
102
+ };
103
+ }
104
+ async initialize() {
105
+ await fs.ensureDir(this.progressDir);
106
+ await fs.ensureDir(path_1.default.join(this.progressDir, '07-components'));
107
+ await this.saveMasterProgress();
108
+ }
109
+ async startPhase(phaseName) {
110
+ this.masterProgress.currentPhase = phaseName;
111
+ this.masterProgress.phases[phaseName].status = 'in_progress';
112
+ this.masterProgress.phases[phaseName].startTime = new Date().toISOString();
113
+ this.phaseStartTimes.set(phaseName, Date.now());
114
+ console.log(chalk_1.default.blue(`\n📋 Phase Started: ${this.formatPhaseName(phaseName)}`));
115
+ await this.saveMasterProgress();
116
+ }
117
+ async completePhase(phaseName) {
118
+ const startTime = this.phaseStartTimes.get(phaseName);
119
+ const duration = startTime ? Date.now() - startTime : 0;
120
+ this.masterProgress.phases[phaseName].status = 'completed';
121
+ this.masterProgress.phases[phaseName].endTime = new Date().toISOString();
122
+ this.masterProgress.phases[phaseName].duration = duration;
123
+ this.masterProgress.phases[phaseName].completedSteps = this.masterProgress.phases[phaseName].steps;
124
+ console.log(chalk_1.default.green(`✅ Phase Completed: ${this.formatPhaseName(phaseName)} (${Math.round(duration / 1000)}s)`));
125
+ await this.saveMasterProgress();
126
+ }
127
+ async failPhase(phaseName, error) {
128
+ this.masterProgress.phases[phaseName].status = 'failed';
129
+ this.masterProgress.errors.push({
130
+ phase: phaseName,
131
+ step: this.masterProgress.currentStep,
132
+ error,
133
+ timestamp: new Date().toISOString(),
134
+ });
135
+ console.log(chalk_1.default.red(`❌ Phase Failed: ${this.formatPhaseName(phaseName)}`));
136
+ await this.saveMasterProgress();
137
+ }
138
+ async requestValidation(phaseName, validationType) {
139
+ this.masterProgress.phases[phaseName].status = 'validation_required';
140
+ this.masterProgress.status = 'validation_required';
141
+ this.masterProgress.userInteractions++;
142
+ console.log(chalk_1.default.yellow(`\n⏸️ Validation Required: ${validationType}`));
143
+ await this.saveMasterProgress();
144
+ }
145
+ async approveValidation(phaseName, validationType) {
146
+ if (!this.masterProgress.phases[phaseName].userValidations) {
147
+ this.masterProgress.phases[phaseName].userValidations = {};
148
+ }
149
+ this.masterProgress.phases[phaseName].userValidations[validationType] = true;
150
+ this.masterProgress.phases[phaseName].status = 'in_progress';
151
+ this.masterProgress.status = 'in_progress';
152
+ console.log(chalk_1.default.green(`✅ Validation Approved: ${validationType}`));
153
+ await this.saveMasterProgress();
154
+ }
155
+ async incrementStep(phaseName) {
156
+ this.masterProgress.currentStep++;
157
+ this.masterProgress.phases[phaseName].completedSteps++;
158
+ this.masterProgress.percentComplete = (this.masterProgress.currentStep / this.masterProgress.totalSteps) * 100;
159
+ await this.saveMasterProgress();
160
+ }
161
+ async recordBuildCheck(type, passed) {
162
+ if (passed) {
163
+ this.masterProgress.buildChecks[type].passed++;
164
+ }
165
+ else {
166
+ this.masterProgress.buildChecks[type].failed++;
167
+ }
168
+ await this.saveMasterProgress();
169
+ }
170
+ async recordRetry(phaseName) {
171
+ this.masterProgress.retries.total++;
172
+ if (!this.masterProgress.retries.byPhase[phaseName]) {
173
+ this.masterProgress.retries.byPhase[phaseName] = 0;
174
+ }
175
+ this.masterProgress.retries.byPhase[phaseName]++;
176
+ await this.saveMasterProgress();
177
+ }
178
+ async setComponentCount(count) {
179
+ // Each component has 12 steps (see BUILD_APP_PROCESS.md)
180
+ const componentSteps = count * 12;
181
+ this.masterProgress.phases.component_generation.steps = componentSteps;
182
+ this.masterProgress.totalSteps = this.calculateTotalSteps();
183
+ await this.saveMasterProgress();
184
+ }
185
+ calculateTotalSteps() {
186
+ return Object.values(this.masterProgress.phases).reduce((sum, phase) => sum + phase.steps, 0);
187
+ }
188
+ async startComponentGeneration(componentName, group) {
189
+ const componentProgress = {
190
+ component: componentName,
191
+ group,
192
+ status: 'in_progress',
193
+ steps: {
194
+ spec_loaded: { status: 'pending' },
195
+ code_generated: { status: 'pending' },
196
+ file_written: { status: 'pending' },
197
+ lint_passed: { status: 'pending' },
198
+ type_check_passed: { status: 'pending' },
199
+ build_passed: { status: 'pending' },
200
+ tests_generated: { status: 'pending' },
201
+ tests_passed: { status: 'pending' },
202
+ docs_generated: { status: 'pending' },
203
+ registered: { status: 'pending' },
204
+ preview_updated: { status: 'pending' },
205
+ },
206
+ retries: 0,
207
+ duration: 0,
208
+ };
209
+ await this.saveComponentProgress(componentName, componentProgress);
210
+ console.log(chalk_1.default.blue(`\n🔨 Generating: ${componentName}`));
211
+ }
212
+ async updateComponentStep(componentName, stepName, status, metadata) {
213
+ const componentProgress = await this.loadComponentProgress(componentName);
214
+ if (!componentProgress)
215
+ return;
216
+ componentProgress.steps[stepName] = {
217
+ status,
218
+ timestamp: new Date().toISOString(),
219
+ metadata,
220
+ };
221
+ await this.saveComponentProgress(componentName, componentProgress);
222
+ const icon = status === 'completed' ? '✅' : status === 'failed' ? '❌' : '⏳';
223
+ console.log(chalk_1.default.gray(` ${icon} ${this.formatStepName(stepName)}`));
224
+ }
225
+ async completeComponentGeneration(componentName, metadata) {
226
+ const componentProgress = await this.loadComponentProgress(componentName);
227
+ if (!componentProgress)
228
+ return;
229
+ componentProgress.status = 'completed';
230
+ componentProgress.metadata = metadata;
231
+ await this.saveComponentProgress(componentName, componentProgress);
232
+ console.log(chalk_1.default.green(`✅ Completed: ${componentName}`));
233
+ }
234
+ async failComponentGeneration(componentName, error, retries) {
235
+ const componentProgress = await this.loadComponentProgress(componentName);
236
+ if (!componentProgress)
237
+ return;
238
+ componentProgress.status = 'failed';
239
+ componentProgress.retries = retries;
240
+ await this.saveComponentProgress(componentName, componentProgress);
241
+ console.log(chalk_1.default.red(`❌ Failed: ${componentName} (${retries} retries)`));
242
+ }
243
+ async complete() {
244
+ this.masterProgress.status = 'completed';
245
+ this.masterProgress.endTime = new Date().toISOString();
246
+ this.masterProgress.percentComplete = 100;
247
+ await this.saveMasterProgress();
248
+ console.log(chalk_1.default.green.bold('\n🎉 Workflow Complete!\n'));
249
+ this.displaySummary();
250
+ }
251
+ displaySummary() {
252
+ const duration = Date.now() - new Date(this.masterProgress.startTime).getTime();
253
+ const minutes = Math.floor(duration / 60000);
254
+ const seconds = Math.floor((duration % 60000) / 1000);
255
+ console.log(chalk_1.default.blue('📊 Workflow Summary:'));
256
+ console.log(chalk_1.default.gray(` Duration: ${minutes}m ${seconds}s`));
257
+ console.log(chalk_1.default.gray(` Total Steps: ${this.masterProgress.currentStep}/${this.masterProgress.totalSteps}`));
258
+ console.log(chalk_1.default.gray(` User Interactions: ${this.masterProgress.userInteractions}`));
259
+ console.log(chalk_1.default.gray(` Total Retries: ${this.masterProgress.retries.total}`));
260
+ console.log();
261
+ console.log(chalk_1.default.blue('✅ Build Checks:'));
262
+ console.log(chalk_1.default.gray(` TypeScript: ${this.masterProgress.buildChecks.typescript.passed} passed, ${this.masterProgress.buildChecks.typescript.failed} failed`));
263
+ console.log(chalk_1.default.gray(` ESLint: ${this.masterProgress.buildChecks.eslint.passed} passed, ${this.masterProgress.buildChecks.eslint.failed} failed`));
264
+ console.log(chalk_1.default.gray(` Build: ${this.masterProgress.buildChecks.build.passed} passed, ${this.masterProgress.buildChecks.build.failed} failed`));
265
+ console.log(chalk_1.default.gray(` Tests: ${this.masterProgress.buildChecks.tests.passed} passed, ${this.masterProgress.buildChecks.tests.failed} failed`));
266
+ console.log();
267
+ }
268
+ async saveMasterProgress() {
269
+ const masterFile = path_1.default.join(this.progressDir, 'master.json');
270
+ await fs.writeJson(masterFile, this.masterProgress, { spaces: 2 });
271
+ }
272
+ async savePhaseProgress(phaseName) {
273
+ const phaseFile = path_1.default.join(this.progressDir, `${this.getPhaseNumber(phaseName)}-${phaseName}.json`);
274
+ await fs.writeJson(phaseFile, this.masterProgress.phases[phaseName], { spaces: 2 });
275
+ }
276
+ async saveComponentProgress(componentName, progress) {
277
+ const fileName = componentName.toLowerCase().replace(/[^a-z0-9]/g, '-');
278
+ const componentFile = path_1.default.join(this.progressDir, '07-components', `${fileName}.json`);
279
+ await fs.writeJson(componentFile, progress, { spaces: 2 });
280
+ }
281
+ async loadComponentProgress(componentName) {
282
+ const fileName = componentName.toLowerCase().replace(/[^a-z0-9]/g, '-');
283
+ const componentFile = path_1.default.join(this.progressDir, '07-components', `${fileName}.json`);
284
+ try {
285
+ return await fs.readJson(componentFile);
286
+ }
287
+ catch {
288
+ return null;
289
+ }
290
+ }
291
+ getPhaseNumber(phaseName) {
292
+ const phaseNumbers = {
293
+ preflight: '00',
294
+ initialization: '01',
295
+ context_generation: '02',
296
+ types: '03',
297
+ branding: '04',
298
+ build_strategy: '05',
299
+ component_list: '06',
300
+ component_generation: '07',
301
+ server_actions: '08',
302
+ routes: '09',
303
+ integration: '10',
304
+ post_generation: '11',
305
+ };
306
+ return phaseNumbers[phaseName] || '99';
307
+ }
308
+ formatPhaseName(phaseName) {
309
+ return phaseName
310
+ .split('_')
311
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
312
+ .join(' ');
313
+ }
314
+ formatStepName(stepName) {
315
+ return stepName
316
+ .split('_')
317
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
318
+ .join(' ');
319
+ }
320
+ getMasterProgress() {
321
+ return this.masterProgress;
322
+ }
323
+ async loadProgress() {
324
+ const masterFile = path_1.default.join(this.progressDir, 'master.json');
325
+ try {
326
+ return await fs.readJson(masterFile);
327
+ }
328
+ catch {
329
+ return null;
330
+ }
331
+ }
332
+ }
333
+ exports.ProgressTracker = ProgressTracker;
334
+ //# sourceMappingURL=progressTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progressTracker.js","sourceRoot":"","sources":["../../src/utils/progressTracker.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAC/B,gDAAwB;AACxB,kDAA0B;AAwE1B,MAAa,eAAe;IAO1B,YAAY,WAAmB;QAHvB,oBAAe,GAAwB,IAAI,GAAG,EAAE,CAAC;QACjD,mBAAc,GAAwB,IAAI,GAAG,EAAE,CAAC;QAGtD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;QACpE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACxD,CAAC;IAEO,wBAAwB;QAC9B,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,WAAW;YACzB,WAAW,EAAE,CAAC;YACd,UAAU,EAAE,GAAG;YACf,eAAe,EAAE,CAAC;YAClB,MAAM,EAAE;gBACN,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBACvC,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC5C,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAChD,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBACnC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBACtC,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC5C,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC5C,oBAAoB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,mCAAmC;gBACtF,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC5C,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBACpC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBACzC,eAAe,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;aAC9C;YACD,MAAM,EAAE,EAAE;YACV,OAAO,EAAE;gBACP,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,EAAE;aACZ;YACD,gBAAgB,EAAE,CAAC;YACnB,WAAW,EAAE;gBACX,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBACpC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBAChC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBAC/B,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;aAChC;SACF,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,KAAa;QACvC,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,KAAK;YACL,cAAc,EAAE,CAAC;YACjB,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,MAAM,EAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,SAAS,CAAC;QAC7C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC;QAC7D,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3E,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAEhD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAClF,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAExD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC;QAC3D,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACzE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC1D,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;QAEnG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpH,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,KAAa;QAC9C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC;QACxD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC;YAC9B,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,WAAW;YACrC,KAAK;YACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7E,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,cAAsB;QAC/D,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,qBAAqB,CAAC;QACrE,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,qBAAqB,CAAC;QACnD,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;QAEvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,8BAA8B,cAAc,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,cAAsB;QAC/D,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAC;YAC3D,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,GAAG,EAAE,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAgB,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;QAC9E,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC;QAC7D,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,aAAa,CAAC;QAE3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,0BAA0B,cAAc,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC;QACvD,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;QAE/G,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAAiD,EAAE,MAAe;QACvF,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACjD,CAAC;QACD,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,KAAa;QACnC,yDAAyD;QACzD,MAAM,cAAc,GAAG,KAAK,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,oBAAoB,CAAC,KAAK,GAAG,cAAc,CAAC;QACvE,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC5D,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAEO,mBAAmB;QACzB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAChG,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,aAAqB,EAAE,KAAa;QACjE,MAAM,iBAAiB,GAAsB;YAC3C,SAAS,EAAE,aAAa;YACxB,KAAK;YACL,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE;gBACL,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;gBAClC,cAAc,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;gBACrC,YAAY,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;gBACnC,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;gBAClC,iBAAiB,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;gBACxC,YAAY,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;gBACnC,eAAe,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;gBACtC,YAAY,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;gBACnC,cAAc,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;gBACrC,UAAU,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;gBACjC,eAAe,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;aACvC;YACD,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,CAAC;SACZ,CAAC;QAEF,MAAM,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oBAAoB,aAAa,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,aAAqB,EACrB,QAAgB,EAChB,MAAkB,EAClB,QAA8B;QAE9B,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAC1E,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAE/B,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG;YAClC,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,QAAQ;SACT,CAAC;QAEF,MAAM,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QAEnE,MAAM,IAAI,GAAG,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,2BAA2B,CAAC,aAAqB,EAAE,QAAwC;QAC/F,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAC1E,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAE/B,iBAAiB,CAAC,MAAM,GAAG,WAAW,CAAC;QACvC,iBAAiB,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEtC,MAAM,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,gBAAgB,aAAa,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,aAAqB,EAAE,KAAa,EAAE,OAAe;QACjF,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAC1E,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAE/B,iBAAiB,CAAC,MAAM,GAAG,QAAQ,CAAC;QACpC,iBAAiB,CAAC,OAAO,GAAG,OAAO,CAAC;QAEpC,MAAM,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,aAAa,KAAK,OAAO,WAAW,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,WAAW,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,GAAG,CAAC;QAE1C,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED,cAAc;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QAChF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAEtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,cAAc,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAChH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,YAAY,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;QACnK,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,YAAY,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;QACvJ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,YAAY,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;QACpJ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,YAAY,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;QACpJ,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC9D,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QAC/C,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,SAAS,OAAO,CAAC,CAAC;QACrG,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,aAAqB,EAAE,QAA2B;QACpF,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACxE,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC;QACvF,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,aAAqB;QACvD,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACxE,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC;QAEvF,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,SAAiB;QACtC,MAAM,YAAY,GAA2B;YAC3C,SAAS,EAAE,IAAI;YACf,cAAc,EAAE,IAAI;YACpB,kBAAkB,EAAE,IAAI;YACxB,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,IAAI;YACd,cAAc,EAAE,IAAI;YACpB,cAAc,EAAE,IAAI;YACpB,oBAAoB,EAAE,IAAI;YAC1B,cAAc,EAAE,IAAI;YACpB,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,IAAI;SACtB,CAAC;QACF,OAAO,YAAY,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IAEO,eAAe,CAAC,SAAiB;QACvC,OAAO,SAAS;aACb,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACzD,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAEO,cAAc,CAAC,QAAgB;QACrC,OAAO,QAAQ;aACZ,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACzD,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF;AA3UD,0CA2UC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Validation Gates System
3
+ *
4
+ * Implements user approval checkpoints for PRD, context files, and other critical artifacts.
5
+ * Follows "LLM as Compiler" philosophy - user approves the "compiled output".
6
+ */
7
+ export interface ValidationResult {
8
+ approved: boolean;
9
+ feedback?: string;
10
+ edited?: boolean;
11
+ }
12
+ export declare class ValidationGates {
13
+ /**
14
+ * Validate PRD - CRITICAL GATE
15
+ * User must read and approve the entire PRD before component generation.
16
+ */
17
+ static validatePRD(prdPath: string, prdContent: string): Promise<ValidationResult>;
18
+ /**
19
+ * Validate Context File (Features, User Flows, Edge Cases, Tech Specs)
20
+ */
21
+ static validateContextFile(fileName: string, content: string, filePath: string): Promise<ValidationResult>;
22
+ /**
23
+ * Validate Component List
24
+ */
25
+ static validateComponentList(componentList: any[], filePath: string): Promise<ValidationResult>;
26
+ /**
27
+ * Validate Types
28
+ */
29
+ static validateTypes(typesPath: string, typesContent: string): Promise<ValidationResult>;
30
+ /**
31
+ * Display PRD in sections
32
+ */
33
+ private static displayPRDSections;
34
+ /**
35
+ * Open content in system pager (less/more)
36
+ */
37
+ private static openInPager;
38
+ /**
39
+ * Open file in user's default editor
40
+ */
41
+ private static openInEditor;
42
+ /**
43
+ * Group components by category
44
+ */
45
+ private static groupComponents;
46
+ /**
47
+ * Validate Build Strategy Selection
48
+ */
49
+ static validateBuildStrategy(strategies: any[], recommended: any): Promise<{
50
+ approved: boolean;
51
+ selectedStrategy?: string;
52
+ }>;
53
+ /**
54
+ * Final build validation - user tests the app
55
+ */
56
+ static validateFinalBuild(): Promise<ValidationResult>;
57
+ }
58
+ //# sourceMappingURL=validationGates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationGates.d.ts","sourceRoot":"","sources":["../../src/utils/validationGates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,eAAe;IAC1B;;;OAGG;WACU,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyExF;;OAEG;WACU,mBAAmB,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC;IA0D5B;;OAEG;WACU,qBAAqB,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqDrG;;OAEG;WACU,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA+C9F;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAYjC;;OAEG;mBACkB,WAAW;IAoBhC;;OAEG;mBACkB,YAAY;IAoBjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAc9B;;OAEG;WACU,qBAAqB,CAChC,UAAU,EAAE,GAAG,EAAE,EACjB,WAAW,EAAE,GAAG,GACf,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA4B5D;;OAEG;WACU,kBAAkB,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAiC7D"}