faf-cli 2.4.21 → 2.5.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.
Files changed (65) hide show
  1. package/README.md +244 -129
  2. package/dist/cli.js +1 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/auto.d.ts.map +1 -1
  5. package/dist/commands/auto.js +63 -2
  6. package/dist/commands/auto.js.map +1 -1
  7. package/dist/commands/bi-sync.d.ts +9 -6
  8. package/dist/commands/bi-sync.d.ts.map +1 -1
  9. package/dist/commands/bi-sync.js +31 -16
  10. package/dist/commands/bi-sync.js.map +1 -1
  11. package/dist/commands/index.js +1 -6
  12. package/dist/commands/index.js.map +1 -1
  13. package/dist/commands/status.d.ts.map +1 -1
  14. package/dist/commands/status.js +17 -2
  15. package/dist/commands/status.js.map +1 -1
  16. package/dist/engines/c-mirror/broadcast/terminal-display.d.ts +23 -0
  17. package/dist/engines/c-mirror/broadcast/terminal-display.d.ts.map +1 -0
  18. package/dist/engines/c-mirror/broadcast/terminal-display.js +193 -0
  19. package/dist/engines/c-mirror/broadcast/terminal-display.js.map +1 -0
  20. package/dist/engines/c-mirror/core/claude-to-faf.d.ts +28 -0
  21. package/dist/engines/c-mirror/core/claude-to-faf.d.ts.map +1 -0
  22. package/dist/engines/c-mirror/core/claude-to-faf.js +222 -0
  23. package/dist/engines/c-mirror/core/claude-to-faf.js.map +1 -0
  24. package/dist/engines/c-mirror/core/events/event-emitter.d.ts +36 -0
  25. package/dist/engines/c-mirror/core/events/event-emitter.d.ts.map +1 -0
  26. package/dist/engines/c-mirror/core/events/event-emitter.js +71 -0
  27. package/dist/engines/c-mirror/core/events/event-emitter.js.map +1 -0
  28. package/dist/engines/c-mirror/core/events/mirror-events.d.ts +103 -0
  29. package/dist/engines/c-mirror/core/events/mirror-events.d.ts.map +1 -0
  30. package/dist/engines/c-mirror/core/events/mirror-events.js +65 -0
  31. package/dist/engines/c-mirror/core/events/mirror-events.js.map +1 -0
  32. package/dist/engines/c-mirror/core/faf-to-claude.d.ts +18 -0
  33. package/dist/engines/c-mirror/core/faf-to-claude.d.ts.map +1 -0
  34. package/dist/engines/c-mirror/core/faf-to-claude.js +193 -0
  35. package/dist/engines/c-mirror/core/faf-to-claude.js.map +1 -0
  36. package/dist/engines/c-mirror/core/interfaces.d.ts +153 -0
  37. package/dist/engines/c-mirror/core/interfaces.d.ts.map +1 -0
  38. package/dist/engines/c-mirror/core/interfaces.js +8 -0
  39. package/dist/engines/c-mirror/core/interfaces.js.map +1 -0
  40. package/dist/engines/c-mirror/core/mirror-engine.d.ts +48 -0
  41. package/dist/engines/c-mirror/core/mirror-engine.d.ts.map +1 -0
  42. package/dist/engines/c-mirror/core/mirror-engine.js +272 -0
  43. package/dist/engines/c-mirror/core/mirror-engine.js.map +1 -0
  44. package/dist/engines/c-mirror/faf-extensions/faf-mirror.d.ts +31 -0
  45. package/dist/engines/c-mirror/faf-extensions/faf-mirror.d.ts.map +1 -0
  46. package/dist/engines/c-mirror/faf-extensions/faf-mirror.js +101 -0
  47. package/dist/engines/c-mirror/faf-extensions/faf-mirror.js.map +1 -0
  48. package/dist/engines/c-mirror/strategies/atomic-write.d.ts +34 -0
  49. package/dist/engines/c-mirror/strategies/atomic-write.d.ts.map +1 -0
  50. package/dist/engines/c-mirror/strategies/atomic-write.js +132 -0
  51. package/dist/engines/c-mirror/strategies/atomic-write.js.map +1 -0
  52. package/dist/utils/championship-core.d.ts +127 -0
  53. package/dist/utils/championship-core.d.ts.map +1 -0
  54. package/dist/utils/championship-core.js +203 -0
  55. package/dist/utils/championship-core.js.map +1 -0
  56. package/dist/utils/championship-style.d.ts.map +1 -1
  57. package/dist/utils/championship-style.js +3 -1
  58. package/dist/utils/championship-style.js.map +1 -1
  59. package/dist/utils/color-utils.d.ts.map +1 -1
  60. package/dist/utils/color-utils.js +29 -11
  61. package/dist/utils/color-utils.js.map +1 -1
  62. package/dist/utils/yaml-generator.d.ts.map +1 -1
  63. package/dist/utils/yaml-generator.js +9 -4
  64. package/dist/utils/yaml-generator.js.map +1 -1
  65. package/package.json +18 -3
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ /**
3
+ * 🖥️ Terminal Display - Event Listener
4
+ * Listens to mirror events and displays championship output
5
+ *
6
+ * This is ONE listener - Terminal is not special, just first
7
+ * Other listeners: Slack, Dashboard, Analytics all get the same events
8
+ *
9
+ * Principles:
10
+ * - Championship communication (never "might", always "synchronized")
11
+ * - Build confidence ("It's always right, it's got it")
12
+ * - Show score first (top line)
13
+ * - Progress indicators
14
+ * - Success messages with next steps
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.startTerminalDisplay = startTerminalDisplay;
18
+ exports.stopTerminalDisplay = stopTerminalDisplay;
19
+ const event_emitter_1 = require("../core/events/event-emitter");
20
+ const mirror_events_1 = require("../core/events/mirror-events");
21
+ const championship_style_1 = require("../../../utils/championship-style");
22
+ /**
23
+ * Start listening to mirror events and display in terminal
24
+ */
25
+ function startTerminalDisplay() {
26
+ // Listen to all events
27
+ event_emitter_1.mirrorEvents.onMirrorEvent('mirror:event', handleMirrorEvent);
28
+ }
29
+ /**
30
+ * Stop listening (cleanup)
31
+ */
32
+ function stopTerminalDisplay() {
33
+ event_emitter_1.mirrorEvents.removeAllListeners('mirror:event');
34
+ }
35
+ /**
36
+ * Handle a mirror event and display appropriately
37
+ */
38
+ function handleMirrorEvent(event) {
39
+ switch (event.type) {
40
+ case mirror_events_1.MirrorEventType.SYNC_START:
41
+ handleSyncStart(event);
42
+ break;
43
+ case mirror_events_1.MirrorEventType.SYNC_PROGRESS:
44
+ handleSyncProgress(event);
45
+ break;
46
+ case mirror_events_1.MirrorEventType.SYNC_COMPLETE:
47
+ handleSyncComplete(event);
48
+ break;
49
+ case mirror_events_1.MirrorEventType.SYNC_ERROR:
50
+ handleSyncError(event);
51
+ break;
52
+ case mirror_events_1.MirrorEventType.INTEGRITY_PERFECT:
53
+ handleIntegrityPerfect(event);
54
+ break;
55
+ case mirror_events_1.MirrorEventType.INTEGRITY_FAILED:
56
+ handleIntegrityFailed(event);
57
+ break;
58
+ case mirror_events_1.MirrorEventType.SCORE_UPDATE:
59
+ handleScoreUpdate(event);
60
+ break;
61
+ case mirror_events_1.MirrorEventType.ERROR:
62
+ handleError(event);
63
+ break;
64
+ case mirror_events_1.MirrorEventType.WARNING:
65
+ handleWarning(event);
66
+ break;
67
+ // Add more handlers as needed
68
+ }
69
+ }
70
+ /**
71
+ * Sync start
72
+ */
73
+ function handleSyncStart(event) {
74
+ const direction = event.data.direction || 'unknown';
75
+ const arrow = direction === 'faf-to-claude' ? '→' : direction === 'claude-to-faf' ? '←' : '↔';
76
+ console.log('');
77
+ console.log(championship_style_1.FAF_COLORS.fafCyan('🔗 C-MIRROR LIVE'));
78
+ console.log(championship_style_1.FAF_COLORS.fafCyan('━━━━━━━━━━━━━━━━━━━━━━━━━━'));
79
+ // Show score first if available
80
+ if (event.metadata.score) {
81
+ const { ai, human, total } = event.metadata.score;
82
+ console.log(championship_style_1.FAF_COLORS.fafOrange(`🏎️ Score: ${total}% | AI:${ai} HUMAN:${human}`));
83
+ }
84
+ console.log(`${championship_style_1.FAF_COLORS.fafCyan('├─')} Syncing ${arrow} ${direction}...`);
85
+ }
86
+ /**
87
+ * Sync progress
88
+ */
89
+ function handleSyncProgress(event) {
90
+ const { step, progress, message } = event.data;
91
+ // Progress bar
92
+ const barWidth = 24;
93
+ const filled = Math.floor((progress / 100) * barWidth);
94
+ const empty = barWidth - filled;
95
+ const bar = '█'.repeat(filled) + '░'.repeat(empty);
96
+ console.log(`${championship_style_1.FAF_COLORS.fafCyan('├─')} ${bar} ${progress}% - ${message || step}`);
97
+ }
98
+ /**
99
+ * Sync complete
100
+ */
101
+ function handleSyncComplete(event) {
102
+ const { success, filesChanged } = event.data;
103
+ const duration = event.metadata.duration || 0;
104
+ const speedIcon = duration < 40 ? '🏎️' : duration < 100 ? '🚗' : '🐌';
105
+ console.log(`${championship_style_1.FAF_COLORS.fafGreen('└─')} ${championship_style_1.FAF_ICONS.party} Synchronized in ${duration}ms ${speedIcon}`);
106
+ if (filesChanged && filesChanged.length > 0) {
107
+ console.log(` Files: ${filesChanged.join(', ')}`);
108
+ }
109
+ // Show score if available
110
+ if (event.metadata.score) {
111
+ const { ai, human, total } = event.metadata.score;
112
+ console.log('');
113
+ console.log(championship_style_1.FAF_COLORS.fafOrange(`⚖️ Balance: AI:${ai}% | HUMAN:${human}%`));
114
+ // Championship status
115
+ if (total >= 100) {
116
+ console.log(championship_style_1.FAF_COLORS.fafGreen('🏆 CHAMPIONSHIP! Perfect 100% + 50|50 balance'));
117
+ }
118
+ else if (total >= 99) {
119
+ console.log(championship_style_1.FAF_COLORS.fafGreen('🥇 GOLD! 99% achieved'));
120
+ }
121
+ else if (ai === 50 && human === 50) {
122
+ console.log(championship_style_1.FAF_COLORS.fafGreen('⚖️ Perfect 50|50 balance!'));
123
+ }
124
+ else {
125
+ const diff = Math.abs(ai - human);
126
+ if (diff > 10) {
127
+ const higher = ai > human ? 'AI' : 'HUMAN';
128
+ const lower = ai > human ? 'HUMAN' : 'AI';
129
+ console.log(championship_style_1.FAF_COLORS.fafCyan(`💡 Tip: Add ${lower} context to balance with ${higher}`));
130
+ }
131
+ }
132
+ }
133
+ console.log('');
134
+ }
135
+ /**
136
+ * Sync error
137
+ */
138
+ function handleSyncError(event) {
139
+ const { error, direction } = event.data;
140
+ console.log(championship_style_1.FAF_COLORS.fafOrange(`${championship_style_1.FAF_ICONS.shield} Sync failed: ${error}`));
141
+ console.log(` Direction: ${direction}`);
142
+ if (event.data.recoverable) {
143
+ console.log(championship_style_1.FAF_COLORS.fafCyan(' Restored from backup - original files untouched'));
144
+ }
145
+ console.log('');
146
+ }
147
+ /**
148
+ * Integrity perfect
149
+ */
150
+ function handleIntegrityPerfect(event) {
151
+ console.log(championship_style_1.FAF_COLORS.fafGreen('✅ Integrity: PERFECT'));
152
+ console.log(championship_style_1.FAF_COLORS.fafCyan(' Mirror verified - zero slippage'));
153
+ }
154
+ /**
155
+ * Integrity failed
156
+ */
157
+ function handleIntegrityFailed(event) {
158
+ const { error } = event.data;
159
+ console.log(championship_style_1.FAF_COLORS.fafOrange('⚠️ Integrity: FAILED'));
160
+ console.log(` Error: ${error}`);
161
+ console.log(championship_style_1.FAF_COLORS.fafCyan(' Run `faf trust` to diagnose'));
162
+ }
163
+ /**
164
+ * Score update
165
+ */
166
+ function handleScoreUpdate(event) {
167
+ if (!event.metadata.score)
168
+ return;
169
+ const { ai, human, total } = event.metadata.score;
170
+ console.log('');
171
+ console.log(championship_style_1.FAF_COLORS.fafOrange('📊 SCORE UPDATE'));
172
+ console.log(championship_style_1.FAF_COLORS.fafCyan(` Total: ${total}%`));
173
+ console.log(championship_style_1.FAF_COLORS.fafCyan(` AI: ${ai} | HUMAN: ${human}`));
174
+ console.log('');
175
+ }
176
+ /**
177
+ * Error
178
+ */
179
+ function handleError(event) {
180
+ const { message, recoverable } = event.data;
181
+ console.log(championship_style_1.FAF_COLORS.fafOrange(`❌ Error: ${message}`));
182
+ if (recoverable) {
183
+ console.log(championship_style_1.FAF_COLORS.fafCyan(' Recoverable - no data lost'));
184
+ }
185
+ }
186
+ /**
187
+ * Warning
188
+ */
189
+ function handleWarning(event) {
190
+ const { message } = event.data;
191
+ console.log(championship_style_1.FAF_COLORS.fafCyan(`⚠️ Warning: ${message}`));
192
+ }
193
+ //# sourceMappingURL=terminal-display.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-display.js","sourceRoot":"","sources":["../../../../src/engines/c-mirror/broadcast/terminal-display.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * 🔗 CLAUDE.md to FAF Transformation
3
+ * Reverse conversion: Markdown (CLAUDE.md) → YAML (.faf)
4
+ *
5
+ * This is THE reverse transformation for true bidirectional mirroring
6
+ * Intelligently merges human edits back into .faf structure
7
+ *
8
+ * Key principle: CLAUDE.md edits to human context flow back into .faf
9
+ * .faf technical fields are preserved (never overwritten)
10
+ *
11
+ * Emits events at each step for broad broadcasting
12
+ */
13
+ /**
14
+ * Convert CLAUDE.md Markdown content back to .faf YAML format
15
+ *
16
+ * Strategy:
17
+ * - Parse CLAUDE.md for human-edited context
18
+ * - Merge into existing .faf structure
19
+ * - Preserve .faf technical fields (scoring, DNA, etc.)
20
+ * - Update human_context section with CLAUDE.md changes
21
+ *
22
+ * @param claudeContent - Raw CLAUDE.md content (Markdown)
23
+ * @param existingFafData - Existing .faf parsed data (to merge into)
24
+ * @param projectPath - Project root path for event metadata
25
+ * @returns Updated .faf YAML content
26
+ */
27
+ export declare function claudeMdToFaf(claudeContent: string, existingFafData: any, projectPath?: string): Promise<string>;
28
+ //# sourceMappingURL=claude-to-faf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-to-faf.d.ts","sourceRoot":"","sources":["../../../../src/engines/c-mirror/core/claude-to-faf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,GAAG,EACpB,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,MAAM,CAAC,CAuIjB"}
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ /**
3
+ * 🔗 CLAUDE.md to FAF Transformation
4
+ * Reverse conversion: Markdown (CLAUDE.md) → YAML (.faf)
5
+ *
6
+ * This is THE reverse transformation for true bidirectional mirroring
7
+ * Intelligently merges human edits back into .faf structure
8
+ *
9
+ * Key principle: CLAUDE.md edits to human context flow back into .faf
10
+ * .faf technical fields are preserved (never overwritten)
11
+ *
12
+ * Emits events at each step for broad broadcasting
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.claudeMdToFaf = claudeMdToFaf;
49
+ const YAML = __importStar(require("yaml"));
50
+ const event_emitter_1 = require("./events/event-emitter");
51
+ const mirror_events_1 = require("./events/mirror-events");
52
+ /**
53
+ * Convert CLAUDE.md Markdown content back to .faf YAML format
54
+ *
55
+ * Strategy:
56
+ * - Parse CLAUDE.md for human-edited context
57
+ * - Merge into existing .faf structure
58
+ * - Preserve .faf technical fields (scoring, DNA, etc.)
59
+ * - Update human_context section with CLAUDE.md changes
60
+ *
61
+ * @param claudeContent - Raw CLAUDE.md content (Markdown)
62
+ * @param existingFafData - Existing .faf parsed data (to merge into)
63
+ * @param projectPath - Project root path for event metadata
64
+ * @returns Updated .faf YAML content
65
+ */
66
+ async function claudeMdToFaf(claudeContent, existingFafData, projectPath = process.cwd()) {
67
+ const startTime = Date.now();
68
+ // EMIT: Starting conversion
69
+ event_emitter_1.mirrorEvents.emitMirrorEvent((0, mirror_events_1.createMirrorEvent)(mirror_events_1.MirrorEventType.SYNC_START, {
70
+ direction: 'claude-to-faf'
71
+ }, { projectPath }));
72
+ try {
73
+ // Step 1: Parse Markdown
74
+ event_emitter_1.mirrorEvents.emitMirrorEvent((0, mirror_events_1.createMirrorEvent)(mirror_events_1.MirrorEventType.SYNC_PROGRESS, {
75
+ step: 'parsing-markdown',
76
+ progress: 10,
77
+ message: 'Parsing CLAUDE.md content...'
78
+ }, { projectPath }));
79
+ const extracted = extractFromClaudeMd(claudeContent);
80
+ // Step 2: Merge into existing .faf
81
+ event_emitter_1.mirrorEvents.emitMirrorEvent((0, mirror_events_1.createMirrorEvent)(mirror_events_1.MirrorEventType.SYNC_PROGRESS, {
82
+ step: 'merging-data',
83
+ progress: 40,
84
+ message: 'Merging human context updates...'
85
+ }, { projectPath }));
86
+ // Create updated .faf data (preserve existing, merge new)
87
+ const updatedFaf = { ...existingFafData };
88
+ // Update project section (if changed in CLAUDE.md)
89
+ if (extracted.projectName && extracted.projectName !== existingFafData.project?.name) {
90
+ if (!updatedFaf.project)
91
+ updatedFaf.project = {};
92
+ updatedFaf.project.name = extracted.projectName;
93
+ }
94
+ if (extracted.projectGoal) {
95
+ if (!updatedFaf.project)
96
+ updatedFaf.project = {};
97
+ updatedFaf.project.goal = extracted.projectGoal;
98
+ }
99
+ if (extracted.projectDescription) {
100
+ if (!updatedFaf.project)
101
+ updatedFaf.project = {};
102
+ updatedFaf.project.description = extracted.projectDescription;
103
+ }
104
+ // Update instant_context (if changed)
105
+ if (extracted.techStack) {
106
+ if (!updatedFaf.instant_context)
107
+ updatedFaf.instant_context = {};
108
+ updatedFaf.instant_context.tech_stack = extracted.techStack;
109
+ }
110
+ if (extracted.mainLanguage) {
111
+ if (!updatedFaf.instant_context)
112
+ updatedFaf.instant_context = {};
113
+ updatedFaf.instant_context.main_language = extracted.mainLanguage;
114
+ }
115
+ if (extracted.whatBuilding) {
116
+ if (!updatedFaf.instant_context)
117
+ updatedFaf.instant_context = {};
118
+ updatedFaf.instant_context.what_building = extracted.whatBuilding;
119
+ }
120
+ // Update key_files (if present)
121
+ if (extracted.keyFiles && extracted.keyFiles.length > 0) {
122
+ updatedFaf.key_files = extracted.keyFiles;
123
+ }
124
+ // Step 3: Update metadata
125
+ event_emitter_1.mirrorEvents.emitMirrorEvent((0, mirror_events_1.createMirrorEvent)(mirror_events_1.MirrorEventType.SYNC_PROGRESS, {
126
+ step: 'updating-metadata',
127
+ progress: 70,
128
+ message: 'Updating sync metadata...'
129
+ }, { projectPath }));
130
+ // Add/update metadata section
131
+ if (!updatedFaf.metadata) {
132
+ updatedFaf.metadata = {};
133
+ }
134
+ updatedFaf.metadata.last_claude_sync = new Date().toISOString();
135
+ updatedFaf.metadata.bi_sync = 'active';
136
+ // Step 4: Generate YAML
137
+ event_emitter_1.mirrorEvents.emitMirrorEvent((0, mirror_events_1.createMirrorEvent)(mirror_events_1.MirrorEventType.SYNC_PROGRESS, {
138
+ step: 'generating-yaml',
139
+ progress: 90,
140
+ message: 'Generating .faf YAML...'
141
+ }, { projectPath }));
142
+ const yamlContent = YAML.stringify(updatedFaf, {
143
+ indent: 2,
144
+ lineWidth: 0, // No line wrapping
145
+ minContentWidth: 0
146
+ });
147
+ // Step 5: Complete
148
+ const duration = Date.now() - startTime;
149
+ event_emitter_1.mirrorEvents.emitMirrorEvent((0, mirror_events_1.createMirrorEvent)(mirror_events_1.MirrorEventType.SYNC_COMPLETE, {
150
+ direction: 'claude-to-faf',
151
+ success: true,
152
+ filesChanged: ['.faf']
153
+ }, {
154
+ projectPath,
155
+ duration,
156
+ score: updatedFaf.ai_score !== undefined && updatedFaf.human_score !== undefined ? {
157
+ ai: updatedFaf.ai_score,
158
+ human: updatedFaf.human_score,
159
+ total: updatedFaf.faf_score ? parseInt(updatedFaf.faf_score) : updatedFaf.ai_score + updatedFaf.human_score
160
+ } : undefined
161
+ }));
162
+ return yamlContent;
163
+ }
164
+ catch (error) {
165
+ // EMIT: Error
166
+ event_emitter_1.mirrorEvents.emitMirrorEvent((0, mirror_events_1.createMirrorEvent)(mirror_events_1.MirrorEventType.SYNC_ERROR, {
167
+ direction: 'claude-to-faf',
168
+ error: error instanceof Error ? error.message : String(error)
169
+ }, { projectPath }));
170
+ throw error;
171
+ }
172
+ }
173
+ /**
174
+ * Extract structured data from CLAUDE.md markdown
175
+ *
176
+ * This is a simple parser - can be enhanced later for more sophisticated parsing
177
+ */
178
+ function extractFromClaudeMd(content) {
179
+ const extracted = {};
180
+ // Extract project name from title
181
+ const titleMatch = content.match(/# 🏎️ CLAUDE\.md - (.+?) Persistent Context/);
182
+ if (titleMatch) {
183
+ extracted.projectName = titleMatch[1].trim();
184
+ }
185
+ // Extract project goal
186
+ const goalMatch = content.match(/\*\*Current Position:\*\* (.+)/);
187
+ if (goalMatch) {
188
+ extracted.projectGoal = goalMatch[1].trim();
189
+ }
190
+ // Extract description
191
+ const descMatch = content.match(/- \*\*Description:\*\* (.+)/);
192
+ if (descMatch) {
193
+ extracted.projectDescription = descMatch[1].trim();
194
+ }
195
+ // Extract stack
196
+ const stackMatch = content.match(/- \*\*Stack:\*\* (.+)/);
197
+ if (stackMatch) {
198
+ extracted.techStack = stackMatch[1].trim();
199
+ }
200
+ // Extract main language
201
+ const langMatch = content.match(/- \*\*Main Language:\*\* (.+)/);
202
+ if (langMatch) {
203
+ extracted.mainLanguage = langMatch[1].trim();
204
+ }
205
+ // Extract what building
206
+ const buildingMatch = content.match(/- \*\*What Building:\*\* (.+)/);
207
+ if (buildingMatch) {
208
+ extracted.whatBuilding = buildingMatch[1].trim();
209
+ }
210
+ // Extract key files (simple pattern - can be enhanced)
211
+ const keyFilesMatch = content.match(/### 🔧 Key Files\n((?:.+\n?)+?)(?:\n###|\n\n|$)/);
212
+ if (keyFilesMatch) {
213
+ const filesText = keyFilesMatch[1];
214
+ const fileMatches = filesText.matchAll(/\d+\. \*\*(.+?)\*\* - (.+)/g);
215
+ extracted.keyFiles = Array.from(fileMatches).map(match => ({
216
+ path: match[1].trim(),
217
+ purpose: match[2].trim()
218
+ }));
219
+ }
220
+ return extracted;
221
+ }
222
+ //# sourceMappingURL=claude-to-faf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-to-faf.js","sourceRoot":"","sources":["../../../../src/engines/c-mirror/core/claude-to-faf.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBH,sCA2IC;AA7JD,2CAA6B;AAC7B,0DAAsD;AACtD,0DAA8F;AAE9F;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,aAAa,CACjC,aAAqB,EACrB,eAAoB,EACpB,cAAsB,OAAO,CAAC,GAAG,EAAE;IAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,4BAA4B;IAC5B,4BAAY,CAAC,eAAe,CAC1B,IAAA,iCAAiB,EAAC,+BAAe,CAAC,UAAU,EAAE;QAC5C,SAAS,EAAE,eAAe;KAC3B,EAAE,EAAE,WAAW,EAAE,CAAC,CACpB,CAAC;IAEF,IAAI,CAAC;QACH,yBAAyB;QACzB,4BAAY,CAAC,eAAe,CAC1B,IAAA,iCAAiB,EAAC,+BAAe,CAAC,aAAa,EAAE;YAC/C,IAAI,EAAE,kBAAkB;YACxB,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,8BAA8B;SACpB,EAAE,EAAE,WAAW,EAAE,CAAC,CACxC,CAAC;QAEF,MAAM,SAAS,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;QAErD,mCAAmC;QACnC,4BAAY,CAAC,eAAe,CAC1B,IAAA,iCAAiB,EAAC,+BAAe,CAAC,aAAa,EAAE;YAC/C,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,kCAAkC;SACxB,EAAE,EAAE,WAAW,EAAE,CAAC,CACxC,CAAC;QAEF,0DAA0D;QAC1D,MAAM,UAAU,GAAG,EAAE,GAAG,eAAe,EAAE,CAAC;QAE1C,mDAAmD;QACnD,IAAI,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,KAAK,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;YACrF,IAAI,CAAC,UAAU,CAAC,OAAO;gBAAE,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC;YACjD,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC;QAClD,CAAC;QAED,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,OAAO;gBAAE,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC;YACjD,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC;QAClD,CAAC;QAED,IAAI,SAAS,CAAC,kBAAkB,EAAE,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,OAAO;gBAAE,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC;YACjD,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,kBAAkB,CAAC;QAChE,CAAC;QAED,sCAAsC;QACtC,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,CAAC,eAAe;gBAAE,UAAU,CAAC,eAAe,GAAG,EAAE,CAAC;YACjE,UAAU,CAAC,eAAe,CAAC,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC;QAC9D,CAAC;QAED,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;YAC3B,IAAI,CAAC,UAAU,CAAC,eAAe;gBAAE,UAAU,CAAC,eAAe,GAAG,EAAE,CAAC;YACjE,UAAU,CAAC,eAAe,CAAC,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC;QACpE,CAAC;QAED,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;YAC3B,IAAI,CAAC,UAAU,CAAC,eAAe;gBAAE,UAAU,CAAC,eAAe,GAAG,EAAE,CAAC;YACjE,UAAU,CAAC,eAAe,CAAC,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC;QACpE,CAAC;QAED,gCAAgC;QAChC,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC;QAC5C,CAAC;QAED,0BAA0B;QAC1B,4BAAY,CAAC,eAAe,CAC1B,IAAA,iCAAiB,EAAC,+BAAe,CAAC,aAAa,EAAE;YAC/C,IAAI,EAAE,mBAAmB;YACzB,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,2BAA2B;SACjB,EAAE,EAAE,WAAW,EAAE,CAAC,CACxC,CAAC;QAEF,8BAA8B;QAC9B,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YACzB,UAAU,CAAC,QAAQ,GAAG,EAAE,CAAC;QAC3B,CAAC;QAED,UAAU,CAAC,QAAQ,CAAC,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAChE,UAAU,CAAC,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC;QAEvC,wBAAwB;QACxB,4BAAY,CAAC,eAAe,CAC1B,IAAA,iCAAiB,EAAC,+BAAe,CAAC,aAAa,EAAE;YAC/C,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,yBAAyB;SACf,EAAE,EAAE,WAAW,EAAE,CAAC,CACxC,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;YAC7C,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC,EAAE,mBAAmB;YACjC,eAAe,EAAE,CAAC;SACnB,CAAC,CAAC;QAEH,mBAAmB;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAExC,4BAAY,CAAC,eAAe,CAC1B,IAAA,iCAAiB,EAAC,+BAAe,CAAC,aAAa,EAAE;YAC/C,SAAS,EAAE,eAAe;YAC1B,OAAO,EAAE,IAAI;YACb,YAAY,EAAE,CAAC,MAAM,CAAC;SACvB,EAAE;YACD,WAAW;YACX,QAAQ;YACR,KAAK,EAAE,UAAU,CAAC,QAAQ,KAAK,SAAS,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC;gBACjF,EAAE,EAAE,UAAU,CAAC,QAAQ;gBACvB,KAAK,EAAE,UAAU,CAAC,WAAW;gBAC7B,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,WAAW;aAC5G,CAAC,CAAC,CAAC,SAAS;SACd,CAAC,CACH,CAAC;QAEF,OAAO,WAAW,CAAC;IAErB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,cAAc;QACd,4BAAY,CAAC,eAAe,CAC1B,IAAA,iCAAiB,EAAC,+BAAe,CAAC,UAAU,EAAE;YAC5C,SAAS,EAAE,eAAe;YAC1B,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,EAAE,EAAE,WAAW,EAAE,CAAC,CACpB,CAAC;QAEF,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,OAAe;IAS1C,MAAM,SAAS,GAAQ,EAAE,CAAC;IAE1B,kCAAkC;IAClC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChF,IAAI,UAAU,EAAE,CAAC;QACf,SAAS,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC;IAED,uBAAuB;IACvB,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAClE,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IAED,sBAAsB;IACtB,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC/D,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,CAAC;IAED,gBAAgB;IAChB,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC1D,IAAI,UAAU,EAAE,CAAC;QACf,SAAS,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,CAAC;IAED,wBAAwB;IACxB,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACjE,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC;IAED,wBAAwB;IACxB,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACrE,IAAI,aAAa,EAAE,CAAC;QAClB,SAAS,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,CAAC;IAED,uDAAuD;IACvD,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACvF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;QACtE,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzD,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YACrB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;SACzB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * 🎸 Event Emitter - The Power Chord Player
3
+ * Global singleton event emitter for all C-Mirror events
4
+ *
5
+ * Core emits events → Emitter broadcasts → Listeners react
6
+ * Terminal, Slack, Dashboard, Analytics all listen to the same chords
7
+ */
8
+ import { EventEmitter } from 'events';
9
+ import { MirrorEvent, MirrorEventType } from './mirror-events';
10
+ /**
11
+ * Mirror Event Emitter
12
+ * Extended EventEmitter with type-safe event handling
13
+ */
14
+ export declare class MirrorEventEmitter extends EventEmitter {
15
+ /**
16
+ * Emit a mirror event
17
+ * Broadcasts to both universal and specific listeners
18
+ */
19
+ emitMirrorEvent(event: MirrorEvent): void;
20
+ /**
21
+ * Get event category for grouped listening
22
+ */
23
+ private getEventCategory;
24
+ /**
25
+ * Type-safe event listeners
26
+ */
27
+ onMirrorEvent(type: MirrorEventType | 'mirror:event', listener: (event: MirrorEvent) => void): this;
28
+ onceMirrorEvent(type: MirrorEventType | 'mirror:event', listener: (event: MirrorEvent) => void): this;
29
+ offMirrorEvent(type: MirrorEventType | 'mirror:event', listener: (event: MirrorEvent) => void): this;
30
+ }
31
+ /**
32
+ * Global singleton - ONE source of truth
33
+ * All C-Mirror operations use this single emitter
34
+ */
35
+ export declare const mirrorEvents: MirrorEventEmitter;
36
+ //# sourceMappingURL=event-emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../../../../../src/engines/c-mirror/core/events/event-emitter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE/D;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAczC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAInG,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAIrG,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;CAGrG;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,oBAA2B,CAAC"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ /**
3
+ * 🎸 Event Emitter - The Power Chord Player
4
+ * Global singleton event emitter for all C-Mirror events
5
+ *
6
+ * Core emits events → Emitter broadcasts → Listeners react
7
+ * Terminal, Slack, Dashboard, Analytics all listen to the same chords
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.mirrorEvents = exports.MirrorEventEmitter = void 0;
11
+ const events_1 = require("events");
12
+ /**
13
+ * Mirror Event Emitter
14
+ * Extended EventEmitter with type-safe event handling
15
+ */
16
+ class MirrorEventEmitter extends events_1.EventEmitter {
17
+ /**
18
+ * Emit a mirror event
19
+ * Broadcasts to both universal and specific listeners
20
+ */
21
+ emitMirrorEvent(event) {
22
+ // Emit to universal listener (anyone who wants ALL events)
23
+ this.emit('mirror:event', event);
24
+ // Emit to specific type listeners
25
+ this.emit(event.type, event);
26
+ // Emit to category listeners
27
+ const category = this.getEventCategory(event.type);
28
+ if (category) {
29
+ this.emit(category, event);
30
+ }
31
+ }
32
+ /**
33
+ * Get event category for grouped listening
34
+ */
35
+ getEventCategory(type) {
36
+ if (type.startsWith('mirror:sync:'))
37
+ return 'mirror:sync';
38
+ if (type.startsWith('mirror:validation:'))
39
+ return 'mirror:validation';
40
+ if (type.startsWith('mirror:integrity:'))
41
+ return 'mirror:integrity';
42
+ if (type.startsWith('mirror:score:'))
43
+ return 'mirror:score';
44
+ if (type.startsWith('mirror:dna:'))
45
+ return 'mirror:dna';
46
+ if (type.startsWith('mirror:file:'))
47
+ return 'mirror:file';
48
+ return null;
49
+ }
50
+ /**
51
+ * Type-safe event listeners
52
+ */
53
+ onMirrorEvent(type, listener) {
54
+ return this.on(type, listener);
55
+ }
56
+ onceMirrorEvent(type, listener) {
57
+ return this.once(type, listener);
58
+ }
59
+ offMirrorEvent(type, listener) {
60
+ return this.off(type, listener);
61
+ }
62
+ }
63
+ exports.MirrorEventEmitter = MirrorEventEmitter;
64
+ /**
65
+ * Global singleton - ONE source of truth
66
+ * All C-Mirror operations use this single emitter
67
+ */
68
+ exports.mirrorEvents = new MirrorEventEmitter();
69
+ // Increase max listeners for integrations (Slack, Dashboard, Analytics, etc.)
70
+ exports.mirrorEvents.setMaxListeners(50);
71
+ //# sourceMappingURL=event-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-emitter.js","sourceRoot":"","sources":["../../../../../src/engines/c-mirror/core/events/event-emitter.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,mCAAsC;AAGtC;;;GAGG;AACH,MAAa,kBAAmB,SAAQ,qBAAY;IAClD;;;OAGG;IACH,eAAe,CAAC,KAAkB;QAChC,2DAA2D;QAC3D,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAEjC,kCAAkC;QAClC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAE7B,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,IAAqB;QAC5C,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;YAAE,OAAO,aAAa,CAAC;QAC1D,IAAI,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC;YAAE,OAAO,mBAAmB,CAAC;QACtE,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;YAAE,OAAO,kBAAkB,CAAC;QACpE,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;YAAE,OAAO,cAAc,CAAC;QAC5D,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,OAAO,YAAY,CAAC;QACxD,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;YAAE,OAAO,aAAa,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,IAAsC,EAAE,QAAsC;QAC1F,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,eAAe,CAAC,IAAsC,EAAE,QAAsC;QAC5F,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,cAAc,CAAC,IAAsC,EAAE,QAAsC;QAC3F,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;CACF;AA9CD,gDA8CC;AAED;;;GAGG;AACU,QAAA,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAErD,8EAA8E;AAC9E,oBAAY,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC"}