faf-cli 3.4.5 → 3.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -13
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +52 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/conductor.d.ts +15 -0
- package/dist/commands/conductor.d.ts.map +1 -0
- package/dist/commands/conductor.js +339 -0
- package/dist/commands/conductor.js.map +1 -0
- package/dist/commands/gemini.d.ts +15 -0
- package/dist/commands/gemini.d.ts.map +1 -0
- package/dist/commands/gemini.js +357 -0
- package/dist/commands/gemini.js.map +1 -0
- package/dist/utils/conductor-parser.d.ts +86 -0
- package/dist/utils/conductor-parser.d.ts.map +1 -0
- package/dist/utils/conductor-parser.js +292 -0
- package/dist/utils/conductor-parser.js.map +1 -0
- package/dist/utils/gemini-parser.d.ts +58 -0
- package/dist/utils/gemini-parser.d.ts.map +1 -0
- package/dist/utils/gemini-parser.js +263 -0
- package/dist/utils/gemini-parser.js.map +1 -0
- package/package.json +1 -1
- package/project.faf +1 -1
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* faf gemini - Gemini CLI / Antigravity Interop Commands
|
|
4
|
+
*
|
|
5
|
+
* Bidirectional interoperability between FAF and GEMINI.md files.
|
|
6
|
+
* Works with both Gemini CLI and Google Antigravity IDE.
|
|
7
|
+
*
|
|
8
|
+
* Commands:
|
|
9
|
+
* - faf gemini import Import GEMINI.md → project.faf
|
|
10
|
+
* - faf gemini export Export project.faf → GEMINI.md
|
|
11
|
+
* - faf gemini sync Bidirectional sync
|
|
12
|
+
*
|
|
13
|
+
* @see https://google-gemini.github.io/gemini-cli/docs/cli/gemini-md.html
|
|
14
|
+
*/
|
|
15
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
16
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.geminiCommand = geminiCommand;
|
|
20
|
+
const colors_1 = require("../fix-once/colors");
|
|
21
|
+
const fs_1 = require("fs");
|
|
22
|
+
const path_1 = __importDefault(require("path"));
|
|
23
|
+
const championship_style_1 = require("../utils/championship-style");
|
|
24
|
+
const file_utils_1 = require("../utils/file-utils");
|
|
25
|
+
const yaml_1 = require("../fix-once/yaml");
|
|
26
|
+
const gemini_parser_1 = require("../utils/gemini-parser");
|
|
27
|
+
// ============================================================================
|
|
28
|
+
// Main Command Router
|
|
29
|
+
// ============================================================================
|
|
30
|
+
async function geminiCommand(args) {
|
|
31
|
+
const subcommand = args[0];
|
|
32
|
+
const subcommandArgs = args.slice(1);
|
|
33
|
+
switch (subcommand) {
|
|
34
|
+
case 'import':
|
|
35
|
+
await runGeminiImport(subcommandArgs);
|
|
36
|
+
break;
|
|
37
|
+
case 'export':
|
|
38
|
+
await runGeminiExport(subcommandArgs);
|
|
39
|
+
break;
|
|
40
|
+
case 'sync':
|
|
41
|
+
await runGeminiSync(subcommandArgs);
|
|
42
|
+
break;
|
|
43
|
+
case undefined:
|
|
44
|
+
case 'help':
|
|
45
|
+
case '--help':
|
|
46
|
+
case '-h':
|
|
47
|
+
showGeminiHelp();
|
|
48
|
+
break;
|
|
49
|
+
default:
|
|
50
|
+
console.error(colors_1.chalk.red(`\n❌ Unknown gemini command: ${subcommand}`));
|
|
51
|
+
console.log('\nAvailable commands:');
|
|
52
|
+
showGeminiHelp();
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function parseImportArgs(args) {
|
|
57
|
+
const options = {};
|
|
58
|
+
for (let i = 0; i < args.length; i++) {
|
|
59
|
+
const arg = args[i];
|
|
60
|
+
if (arg === '--path' && args[i + 1]) {
|
|
61
|
+
options.path = args[++i];
|
|
62
|
+
}
|
|
63
|
+
else if (arg === '--global' || arg === '-g') {
|
|
64
|
+
options.global = true;
|
|
65
|
+
}
|
|
66
|
+
else if (arg === '--merge' || arg === '-m') {
|
|
67
|
+
options.merge = true;
|
|
68
|
+
}
|
|
69
|
+
else if (arg === '--output' && args[i + 1]) {
|
|
70
|
+
options.output = args[++i];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return options;
|
|
74
|
+
}
|
|
75
|
+
async function runGeminiImport(args) {
|
|
76
|
+
const options = parseImportArgs(args);
|
|
77
|
+
const outputPath = options.output || path_1.default.join(process.cwd(), 'project.faf');
|
|
78
|
+
console.log();
|
|
79
|
+
console.log(championship_style_1.FAF_COLORS.fafCyan(`${championship_style_1.FAF_ICONS.rocket} Importing GEMINI.md...`));
|
|
80
|
+
// Determine source path
|
|
81
|
+
let geminiPath = null;
|
|
82
|
+
if (options.path) {
|
|
83
|
+
geminiPath = options.path;
|
|
84
|
+
}
|
|
85
|
+
else if (options.global) {
|
|
86
|
+
geminiPath = await (0, gemini_parser_1.detectGlobalGeminiMd)();
|
|
87
|
+
if (!geminiPath) {
|
|
88
|
+
console.log(colors_1.chalk.red(`❌ Global GEMINI.md not found at ~/.gemini/GEMINI.md`));
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
geminiPath = await (0, gemini_parser_1.detectGeminiMd)(process.cwd());
|
|
94
|
+
if (!geminiPath) {
|
|
95
|
+
console.log(colors_1.chalk.red(`❌ GEMINI.md not found in current directory`));
|
|
96
|
+
console.log(colors_1.chalk.gray(' Use --path to specify location, or --global for ~/.gemini/GEMINI.md'));
|
|
97
|
+
console.log();
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
console.log(colors_1.chalk.gray(` Source: ${geminiPath}`));
|
|
102
|
+
console.log();
|
|
103
|
+
// Import
|
|
104
|
+
const result = await (0, gemini_parser_1.geminiImport)(geminiPath);
|
|
105
|
+
if (!result.success) {
|
|
106
|
+
console.log(colors_1.chalk.red(`❌ Import failed`));
|
|
107
|
+
result.warnings.forEach(w => console.log(colors_1.chalk.yellow(` - ${w}`)));
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// Show warnings
|
|
111
|
+
if (result.warnings.length > 0) {
|
|
112
|
+
console.log(colors_1.chalk.yellow(`⚠️ Warnings:`));
|
|
113
|
+
result.warnings.forEach(w => console.log(colors_1.chalk.yellow(` - ${w}`)));
|
|
114
|
+
console.log();
|
|
115
|
+
}
|
|
116
|
+
// Show sections found
|
|
117
|
+
if (result.sectionsFound.length > 0) {
|
|
118
|
+
console.log(colors_1.chalk.green(`☑️ Sections imported:`));
|
|
119
|
+
result.sectionsFound.forEach(s => console.log(colors_1.chalk.gray(` - ${s}`)));
|
|
120
|
+
console.log();
|
|
121
|
+
}
|
|
122
|
+
// Handle merge option
|
|
123
|
+
if (options.merge && await (0, file_utils_1.fileExists)(outputPath)) {
|
|
124
|
+
try {
|
|
125
|
+
const existingContent = await fs_1.promises.readFile(outputPath, 'utf-8');
|
|
126
|
+
const existingFaf = (0, yaml_1.parse)(existingContent);
|
|
127
|
+
// Merge - gemini values override where they exist
|
|
128
|
+
const merged = {
|
|
129
|
+
...existingFaf,
|
|
130
|
+
project: {
|
|
131
|
+
...existingFaf.project,
|
|
132
|
+
rules: [...(existingFaf.project?.rules || []), ...result.faf.project.rules],
|
|
133
|
+
guidelines: [...(existingFaf.project?.guidelines || []), ...result.faf.project.guidelines],
|
|
134
|
+
codingStyle: [...(existingFaf.project?.codingStyle || []), ...result.faf.project.codingStyle],
|
|
135
|
+
},
|
|
136
|
+
metadata: {
|
|
137
|
+
...existingFaf.metadata,
|
|
138
|
+
gemini_import: result.faf.metadata.imported,
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
await fs_1.promises.writeFile(outputPath, (0, yaml_1.stringify)(merged));
|
|
142
|
+
console.log(colors_1.chalk.green(`☑️ Merged into: ${outputPath}`));
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
console.log(colors_1.chalk.red(`❌ Merge failed: ${err}`));
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// Convert to FAF YAML format
|
|
151
|
+
const fafContent = {
|
|
152
|
+
version: '1.0',
|
|
153
|
+
type: 'gemini-import',
|
|
154
|
+
project: result.faf.project,
|
|
155
|
+
metadata: result.faf.metadata,
|
|
156
|
+
};
|
|
157
|
+
await fs_1.promises.writeFile(outputPath, (0, yaml_1.stringify)(fafContent));
|
|
158
|
+
console.log(colors_1.chalk.green(`☑️ Created: ${outputPath}`));
|
|
159
|
+
}
|
|
160
|
+
console.log();
|
|
161
|
+
console.log(championship_style_1.FAF_COLORS.fafOrange(`${championship_style_1.FAF_ICONS.trophy} GEMINI.md import complete!`));
|
|
162
|
+
console.log(colors_1.chalk.gray(' FAF is now your universal AI-context format.'));
|
|
163
|
+
console.log();
|
|
164
|
+
}
|
|
165
|
+
function parseExportArgs(args) {
|
|
166
|
+
const options = {};
|
|
167
|
+
for (let i = 0; i < args.length; i++) {
|
|
168
|
+
const arg = args[i];
|
|
169
|
+
if (arg === '--path' && args[i + 1]) {
|
|
170
|
+
options.path = args[++i];
|
|
171
|
+
}
|
|
172
|
+
else if (arg === '--global' || arg === '-g') {
|
|
173
|
+
options.global = true;
|
|
174
|
+
}
|
|
175
|
+
else if (arg === '--force' || arg === '-f') {
|
|
176
|
+
options.force = true;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return options;
|
|
180
|
+
}
|
|
181
|
+
async function runGeminiExport(args) {
|
|
182
|
+
const options = parseExportArgs(args);
|
|
183
|
+
console.log();
|
|
184
|
+
console.log(championship_style_1.FAF_COLORS.fafCyan(`${championship_style_1.FAF_ICONS.rocket} Exporting to GEMINI.md...`));
|
|
185
|
+
console.log();
|
|
186
|
+
// Find FAF file
|
|
187
|
+
const fafPath = await (0, file_utils_1.findFafFile)(process.cwd());
|
|
188
|
+
if (!fafPath) {
|
|
189
|
+
console.log(colors_1.chalk.red(`❌ No .faf file found in current directory`));
|
|
190
|
+
console.log(colors_1.chalk.gray(' Run "faf init" first to create one.'));
|
|
191
|
+
console.log();
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
// Determine output path
|
|
195
|
+
let outputPath;
|
|
196
|
+
if (options.path) {
|
|
197
|
+
outputPath = options.path;
|
|
198
|
+
}
|
|
199
|
+
else if (options.global) {
|
|
200
|
+
const home = process.env.HOME || process.env.USERPROFILE || '';
|
|
201
|
+
const geminiDir = path_1.default.join(home, '.gemini');
|
|
202
|
+
// Ensure .gemini directory exists
|
|
203
|
+
try {
|
|
204
|
+
await fs_1.promises.mkdir(geminiDir, { recursive: true });
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
// Already exists
|
|
208
|
+
}
|
|
209
|
+
outputPath = path_1.default.join(geminiDir, 'GEMINI.md');
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
outputPath = path_1.default.join(process.cwd(), 'GEMINI.md');
|
|
213
|
+
}
|
|
214
|
+
console.log(colors_1.chalk.gray(` Source: ${fafPath}`));
|
|
215
|
+
console.log(colors_1.chalk.gray(` Output: ${outputPath}`));
|
|
216
|
+
console.log();
|
|
217
|
+
// Check if file exists
|
|
218
|
+
if (await (0, file_utils_1.fileExists)(outputPath) && !options.force) {
|
|
219
|
+
console.log(colors_1.chalk.yellow(`⚠️ GEMINI.md already exists`));
|
|
220
|
+
console.log(colors_1.chalk.gray(' Use --force to overwrite'));
|
|
221
|
+
console.log();
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
// Read FAF file
|
|
225
|
+
let fafContent;
|
|
226
|
+
try {
|
|
227
|
+
const content = await fs_1.promises.readFile(fafPath, 'utf-8');
|
|
228
|
+
fafContent = (0, yaml_1.parse)(content);
|
|
229
|
+
}
|
|
230
|
+
catch (err) {
|
|
231
|
+
console.log(colors_1.chalk.red(`❌ Failed to read FAF file: ${err}`));
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
// Export
|
|
235
|
+
const result = await (0, gemini_parser_1.geminiExport)(fafContent, outputPath);
|
|
236
|
+
if (!result.success) {
|
|
237
|
+
console.log(colors_1.chalk.red(`❌ Export failed`));
|
|
238
|
+
result.warnings.forEach(w => console.log(colors_1.chalk.yellow(` - ${w}`)));
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
console.log(colors_1.chalk.green(`☑️ Created: ${result.filePath}`));
|
|
242
|
+
console.log();
|
|
243
|
+
console.log(championship_style_1.FAF_COLORS.fafOrange(`${championship_style_1.FAF_ICONS.trophy} GEMINI.md export complete!`));
|
|
244
|
+
if (options.global) {
|
|
245
|
+
console.log(colors_1.chalk.gray(' Your global Gemini CLI / Antigravity rules are now set.'));
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
console.log(colors_1.chalk.gray(' Your project now works with Gemini CLI and Antigravity.'));
|
|
249
|
+
}
|
|
250
|
+
console.log();
|
|
251
|
+
}
|
|
252
|
+
function parseSyncArgs(args) {
|
|
253
|
+
const options = { source: 'faf' };
|
|
254
|
+
for (let i = 0; i < args.length; i++) {
|
|
255
|
+
const arg = args[i];
|
|
256
|
+
if (arg === '--source' && args[i + 1]) {
|
|
257
|
+
const src = args[++i];
|
|
258
|
+
if (src === 'faf' || src === 'gemini') {
|
|
259
|
+
options.source = src;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
else if (arg === '--global' || arg === '-g') {
|
|
263
|
+
options.global = true;
|
|
264
|
+
}
|
|
265
|
+
else if (arg === '--path' && args[i + 1]) {
|
|
266
|
+
options.path = args[++i];
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return options;
|
|
270
|
+
}
|
|
271
|
+
async function runGeminiSync(args) {
|
|
272
|
+
const options = parseSyncArgs(args);
|
|
273
|
+
console.log();
|
|
274
|
+
console.log(championship_style_1.FAF_COLORS.fafCyan(`${championship_style_1.FAF_ICONS.rocket} Syncing FAF <-> GEMINI.md...`));
|
|
275
|
+
console.log(colors_1.chalk.gray(` Source of truth: ${options.source}`));
|
|
276
|
+
if (options.global) {
|
|
277
|
+
console.log(colors_1.chalk.gray(` Target: ~/.gemini/GEMINI.md (global)`));
|
|
278
|
+
}
|
|
279
|
+
console.log();
|
|
280
|
+
if (options.source === 'gemini') {
|
|
281
|
+
// GEMINI.md is source of truth
|
|
282
|
+
const importArgs = options.global ? ['--global', '--merge'] : ['--merge'];
|
|
283
|
+
if (options.path) {
|
|
284
|
+
importArgs.push('--path', options.path);
|
|
285
|
+
}
|
|
286
|
+
await runGeminiImport(importArgs);
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
// FAF is source of truth (default)
|
|
290
|
+
const fafPath = await (0, file_utils_1.findFafFile)(process.cwd());
|
|
291
|
+
if (!fafPath) {
|
|
292
|
+
console.log(colors_1.chalk.red(`❌ No .faf file found`));
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
const exportArgs = options.global ? ['--global', '--force'] : ['--force'];
|
|
296
|
+
if (options.path) {
|
|
297
|
+
exportArgs.push('--path', options.path);
|
|
298
|
+
}
|
|
299
|
+
await runGeminiExport(exportArgs);
|
|
300
|
+
}
|
|
301
|
+
console.log(colors_1.chalk.green(`☑️ Sync complete!`));
|
|
302
|
+
console.log();
|
|
303
|
+
}
|
|
304
|
+
// ============================================================================
|
|
305
|
+
// Help
|
|
306
|
+
// ============================================================================
|
|
307
|
+
function showGeminiHelp() {
|
|
308
|
+
console.log();
|
|
309
|
+
console.log(championship_style_1.FAF_COLORS.fafOrange('faf gemini') + ' - Gemini CLI / Antigravity Interop');
|
|
310
|
+
console.log();
|
|
311
|
+
console.log(colors_1.chalk.cyan('Commands:'));
|
|
312
|
+
console.log(' faf gemini import Import GEMINI.md to project.faf');
|
|
313
|
+
console.log(' faf gemini export Export project.faf to GEMINI.md');
|
|
314
|
+
console.log(' faf gemini sync Bidirectional sync between formats');
|
|
315
|
+
console.log();
|
|
316
|
+
console.log(colors_1.chalk.cyan('Import Options:'));
|
|
317
|
+
console.log(' --path <file> GEMINI.md file path');
|
|
318
|
+
console.log(' --global, -g Import from ~/.gemini/GEMINI.md');
|
|
319
|
+
console.log(' --merge, -m Merge with existing .faf instead of overwrite');
|
|
320
|
+
console.log(' --output <file> Output file path (default: ./project.faf)');
|
|
321
|
+
console.log();
|
|
322
|
+
console.log(colors_1.chalk.cyan('Export Options:'));
|
|
323
|
+
console.log(' --path <file> Output file path');
|
|
324
|
+
console.log(' --global, -g Export to ~/.gemini/GEMINI.md');
|
|
325
|
+
console.log(' --force, -f Overwrite existing GEMINI.md');
|
|
326
|
+
console.log();
|
|
327
|
+
console.log(colors_1.chalk.cyan('Sync Options:'));
|
|
328
|
+
console.log(' --source <faf|gemini> Source of truth (default: faf)');
|
|
329
|
+
console.log(' --global, -g Sync with ~/.gemini/GEMINI.md');
|
|
330
|
+
console.log(' --path <file> GEMINI.md file path');
|
|
331
|
+
console.log();
|
|
332
|
+
console.log(colors_1.chalk.cyan('Examples:'));
|
|
333
|
+
console.log(' faf gemini import # Import ./GEMINI.md to project.faf');
|
|
334
|
+
console.log(' faf gemini import --global # Import ~/.gemini/GEMINI.md');
|
|
335
|
+
console.log(' faf gemini import --merge # Merge with existing .faf');
|
|
336
|
+
console.log();
|
|
337
|
+
console.log(' faf gemini export # Export to ./GEMINI.md');
|
|
338
|
+
console.log(' faf gemini export --global # Export to ~/.gemini/GEMINI.md');
|
|
339
|
+
console.log(' faf gemini export --force # Overwrite existing');
|
|
340
|
+
console.log();
|
|
341
|
+
console.log(' faf gemini sync # Sync (FAF is source of truth)');
|
|
342
|
+
console.log(' faf gemini sync --source gemini # Sync (GEMINI.md is source)');
|
|
343
|
+
console.log(' faf gemini sync --global # Sync with global GEMINI.md');
|
|
344
|
+
console.log();
|
|
345
|
+
console.log(colors_1.chalk.gray('About:'));
|
|
346
|
+
console.log(colors_1.chalk.gray(' FAF supports Gemini CLI and Google Antigravity GEMINI.md files.'));
|
|
347
|
+
console.log(colors_1.chalk.gray(' This enables bidirectional interoperability - use FAF as'));
|
|
348
|
+
console.log(colors_1.chalk.gray(' your universal AI-context interchange format.'));
|
|
349
|
+
console.log();
|
|
350
|
+
console.log(colors_1.chalk.gray(' Locations:'));
|
|
351
|
+
console.log(colors_1.chalk.gray(' Project: ./GEMINI.md'));
|
|
352
|
+
console.log(colors_1.chalk.gray(' Global: ~/.gemini/GEMINI.md'));
|
|
353
|
+
console.log();
|
|
354
|
+
console.log(colors_1.chalk.gray(' Learn more: https://faf.one/docs/gemini'));
|
|
355
|
+
console.log();
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/commands/gemini.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;;;AAmBH,sCA8BC;AA/CD,+CAA2C;AAC3C,2BAAoC;AACpC,gDAAwB;AACxB,oEAAoE;AACpE,oDAA8D;AAC9D,2CAAkF;AAClF,0DAKgC;AAEhC,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAExE,KAAK,UAAU,aAAa,CAAC,IAAc;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAErC,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,QAAQ;YACX,MAAM,eAAe,CAAC,cAAc,CAAC,CAAC;YACtC,MAAM;QAER,KAAK,QAAQ;YACX,MAAM,eAAe,CAAC,cAAc,CAAC,CAAC;YACtC,MAAM;QAER,KAAK,MAAM;YACT,MAAM,aAAa,CAAC,cAAc,CAAC,CAAC;YACpC,MAAM;QAER,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,cAAc,EAAE,CAAC;YACjB,MAAM;QAER;YACE,OAAO,CAAC,KAAK,CAAC,cAAK,CAAC,GAAG,CAAC,+BAA+B,UAAU,EAAE,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACrC,cAAc,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAaD,SAAS,eAAe,CAAC,IAAc;IACrC,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;QACxB,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC7C,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAc;IAC3C,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;IAE7E,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,OAAO,CAAC,GAAG,8BAAS,CAAC,MAAM,yBAAyB,CAAC,CAAC,CAAC;IAE9E,wBAAwB;IACxB,IAAI,UAAU,GAAkB,IAAI,CAAC;IAErC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5B,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,UAAU,GAAG,MAAM,IAAA,oCAAoB,GAAE,CAAC;QAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;YAC9E,OAAO;QACT,CAAC;IACH,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,MAAM,IAAA,8BAAc,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC,CAAC;YAClG,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO;QACT,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,SAAS;IACT,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAY,EAAC,UAAU,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,gBAAgB;IAChB,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,sBAAsB;IACtB,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,sBAAsB;IACtB,IAAI,OAAO,CAAC,KAAK,IAAI,MAAM,IAAA,uBAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,WAAW,GAAG,IAAA,YAAS,EAAC,eAAe,CAAQ,CAAC;YAEtD,kDAAkD;YAClD,MAAM,MAAM,GAAG;gBACb,GAAG,WAAW;gBACd,OAAO,EAAE;oBACP,GAAG,WAAW,CAAC,OAAO;oBACtB,KAAK,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;oBAC3E,UAAU,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;oBAC1F,WAAW,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;iBAC9F;gBACD,QAAQ,EAAE;oBACR,GAAG,WAAW,CAAC,QAAQ;oBACvB,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ;iBAC5C;aACF,CAAC;YAEF,MAAM,aAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAA,gBAAa,EAAC,MAAM,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,GAAG,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;IACH,CAAC;SAAM,CAAC;QACN,6BAA6B;QAC7B,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO;YAC3B,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ;SAC9B,CAAC;QAEF,MAAM,aAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAA,gBAAa,EAAC,UAAU,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,KAAK,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,SAAS,CAAC,GAAG,8BAAS,CAAC,MAAM,6BAA6B,CAAC,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAYD,SAAS,eAAe,CAAC,IAAc;IACrC,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;QACxB,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC7C,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAc;IAC3C,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAEtC,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,OAAO,CAAC,GAAG,8BAAS,CAAC,MAAM,4BAA4B,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,gBAAgB;IAChB,MAAM,OAAO,GAAG,MAAM,IAAA,wBAAW,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,IAAI,UAAkB,CAAC;IACvB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5B,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;QAC/D,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC7C,kCAAkC;QAClC,IAAI,CAAC;YACH,MAAM,aAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QACD,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,uBAAuB;IACvB,IAAI,MAAM,IAAA,uBAAU,EAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,gBAAgB;IAChB,IAAI,UAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpD,UAAU,GAAG,IAAA,YAAS,EAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,GAAG,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,SAAS;IACT,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAY,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAE1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,SAAS,CAAC,GAAG,8BAAS,CAAC,MAAM,6BAA6B,CAAC,CAAC,CAAC;IACpF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC,CAAC;IACxF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAYD,SAAS,aAAa,CAAC,IAAc;IACnC,MAAM,OAAO,GAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACtC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC;YACvB,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;QACxB,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAc;IACzC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAEpC,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,OAAO,CAAC,GAAG,8BAAS,CAAC,MAAM,+BAA+B,CAAC,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,+BAA+B;QAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,mCAAmC;QACnC,MAAM,OAAO,GAAG,MAAM,IAAA,wBAAW,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,+EAA+E;AAC/E,OAAO;AACP,+EAA+E;AAE/E,SAAS,cAAc;IACrB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,qCAAqC,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conductor Format Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses Google's Conductor extension format (conductor/ directory)
|
|
5
|
+
* for bidirectional interoperability with FAF.
|
|
6
|
+
*
|
|
7
|
+
* @see /specs/FAF-CONDUCTOR-INTEROP.md
|
|
8
|
+
*/
|
|
9
|
+
export interface ConductorProduct {
|
|
10
|
+
title: string;
|
|
11
|
+
description: string;
|
|
12
|
+
goals: string[];
|
|
13
|
+
users: string[];
|
|
14
|
+
features: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface ConductorTechStack {
|
|
17
|
+
languages: string[];
|
|
18
|
+
frameworks: string[];
|
|
19
|
+
databases: string[];
|
|
20
|
+
infrastructure: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface ConductorWorkflow {
|
|
23
|
+
developmentProcess: string[];
|
|
24
|
+
commitStrategy: string[];
|
|
25
|
+
reviewProcess: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface ConductorGuidelines {
|
|
28
|
+
proseStyle: string[];
|
|
29
|
+
brandingRules: string[];
|
|
30
|
+
visualIdentity: string[];
|
|
31
|
+
}
|
|
32
|
+
export interface ConductorDirectory {
|
|
33
|
+
product?: ConductorProduct;
|
|
34
|
+
techStack?: ConductorTechStack;
|
|
35
|
+
workflow?: ConductorWorkflow;
|
|
36
|
+
guidelines?: ConductorGuidelines;
|
|
37
|
+
styleguides?: Record<string, string[]>;
|
|
38
|
+
}
|
|
39
|
+
export interface FafFromConductor {
|
|
40
|
+
project: {
|
|
41
|
+
name: string;
|
|
42
|
+
description: string;
|
|
43
|
+
type: string;
|
|
44
|
+
goals: string[];
|
|
45
|
+
stack: {
|
|
46
|
+
languages: string[];
|
|
47
|
+
frameworks: string[];
|
|
48
|
+
databases: string[];
|
|
49
|
+
infrastructure: string[];
|
|
50
|
+
};
|
|
51
|
+
rules: string[];
|
|
52
|
+
guidelines: string[];
|
|
53
|
+
};
|
|
54
|
+
metadata: {
|
|
55
|
+
source: string;
|
|
56
|
+
imported: string;
|
|
57
|
+
conductor_version?: string;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export interface ImportResult {
|
|
61
|
+
success: boolean;
|
|
62
|
+
faf: FafFromConductor;
|
|
63
|
+
warnings: string[];
|
|
64
|
+
filesProcessed: string[];
|
|
65
|
+
}
|
|
66
|
+
export interface ExportResult {
|
|
67
|
+
success: boolean;
|
|
68
|
+
filesGenerated: string[];
|
|
69
|
+
warnings: string[];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Parse markdown content and extract sections by heading
|
|
73
|
+
*/
|
|
74
|
+
export declare function parseMarkdownSections(content: string): Record<string, string>;
|
|
75
|
+
/**
|
|
76
|
+
* Extract bullet points from markdown content
|
|
77
|
+
*/
|
|
78
|
+
export declare function extractBulletPoints(content: string): string[];
|
|
79
|
+
export declare function parseProductMd(content: string): ConductorProduct;
|
|
80
|
+
export declare function parseTechStackMd(content: string): ConductorTechStack;
|
|
81
|
+
export declare function parseWorkflowMd(content: string): ConductorWorkflow;
|
|
82
|
+
export declare function parseGuidelinesMd(content: string): ConductorGuidelines;
|
|
83
|
+
export declare function conductorImport(conductorPath: string): Promise<ImportResult>;
|
|
84
|
+
export declare function conductorExport(faf: FafFromConductor, outputPath: string): Promise<ExportResult>;
|
|
85
|
+
export declare function detectConductor(basePath: string): Promise<boolean>;
|
|
86
|
+
//# sourceMappingURL=conductor-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conductor-parser.d.ts","sourceRoot":"","sources":["../../src/utils/conductor-parser.ts"],"names":[],"mappings":"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"}
|