faf-cli 2.4.19 → 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.
- package/README.md +244 -129
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto.d.ts.map +1 -1
- package/dist/commands/auto.js +63 -2
- package/dist/commands/auto.js.map +1 -1
- package/dist/commands/bi-sync.d.ts +9 -6
- package/dist/commands/bi-sync.d.ts.map +1 -1
- package/dist/commands/bi-sync.js +31 -16
- package/dist/commands/bi-sync.js.map +1 -1
- package/dist/commands/index.js +1 -6
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +17 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/engines/c-mirror/broadcast/terminal-display.d.ts +23 -0
- package/dist/engines/c-mirror/broadcast/terminal-display.d.ts.map +1 -0
- package/dist/engines/c-mirror/broadcast/terminal-display.js +193 -0
- package/dist/engines/c-mirror/broadcast/terminal-display.js.map +1 -0
- package/dist/engines/c-mirror/core/claude-to-faf.d.ts +28 -0
- package/dist/engines/c-mirror/core/claude-to-faf.d.ts.map +1 -0
- package/dist/engines/c-mirror/core/claude-to-faf.js +222 -0
- package/dist/engines/c-mirror/core/claude-to-faf.js.map +1 -0
- package/dist/engines/c-mirror/core/events/event-emitter.d.ts +36 -0
- package/dist/engines/c-mirror/core/events/event-emitter.d.ts.map +1 -0
- package/dist/engines/c-mirror/core/events/event-emitter.js +71 -0
- package/dist/engines/c-mirror/core/events/event-emitter.js.map +1 -0
- package/dist/engines/c-mirror/core/events/mirror-events.d.ts +103 -0
- package/dist/engines/c-mirror/core/events/mirror-events.d.ts.map +1 -0
- package/dist/engines/c-mirror/core/events/mirror-events.js +65 -0
- package/dist/engines/c-mirror/core/events/mirror-events.js.map +1 -0
- package/dist/engines/c-mirror/core/faf-to-claude.d.ts +18 -0
- package/dist/engines/c-mirror/core/faf-to-claude.d.ts.map +1 -0
- package/dist/engines/c-mirror/core/faf-to-claude.js +193 -0
- package/dist/engines/c-mirror/core/faf-to-claude.js.map +1 -0
- package/dist/engines/c-mirror/core/interfaces.d.ts +153 -0
- package/dist/engines/c-mirror/core/interfaces.d.ts.map +1 -0
- package/dist/engines/c-mirror/core/interfaces.js +8 -0
- package/dist/engines/c-mirror/core/interfaces.js.map +1 -0
- package/dist/engines/c-mirror/core/mirror-engine.d.ts +48 -0
- package/dist/engines/c-mirror/core/mirror-engine.d.ts.map +1 -0
- package/dist/engines/c-mirror/core/mirror-engine.js +272 -0
- package/dist/engines/c-mirror/core/mirror-engine.js.map +1 -0
- package/dist/engines/c-mirror/faf-extensions/faf-mirror.d.ts +31 -0
- package/dist/engines/c-mirror/faf-extensions/faf-mirror.d.ts.map +1 -0
- package/dist/engines/c-mirror/faf-extensions/faf-mirror.js +101 -0
- package/dist/engines/c-mirror/faf-extensions/faf-mirror.js.map +1 -0
- package/dist/engines/c-mirror/strategies/atomic-write.d.ts +34 -0
- package/dist/engines/c-mirror/strategies/atomic-write.d.ts.map +1 -0
- package/dist/engines/c-mirror/strategies/atomic-write.js +132 -0
- package/dist/engines/c-mirror/strategies/atomic-write.js.map +1 -0
- package/dist/utils/championship-core.d.ts +127 -0
- package/dist/utils/championship-core.d.ts.map +1 -0
- package/dist/utils/championship-core.js +203 -0
- package/dist/utils/championship-core.js.map +1 -0
- package/dist/utils/championship-style.d.ts.map +1 -1
- package/dist/utils/championship-style.js +3 -1
- package/dist/utils/championship-style.js.map +1 -1
- package/dist/utils/color-utils.d.ts.map +1 -1
- package/dist/utils/color-utils.js +29 -11
- package/dist/utils/color-utils.js.map +1 -1
- package/dist/utils/yaml-generator.d.ts.map +1 -1
- package/dist/utils/yaml-generator.js +9 -4
- package/dist/utils/yaml-generator.js.map +1 -1
- 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":";AAAA;;;;;;;;;;;;;GAaG;;AASH,oDAGC;AAKD,kDAEC;AAjBD,gEAA4D;AAC5D,gEAA4E;AAC5E,0EAA0E;AAE1E;;GAEG;AACH,SAAgB,oBAAoB;IAClC,uBAAuB;IACvB,4BAAY,CAAC,aAAa,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IACjC,4BAAY,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAkB;IAC3C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,+BAAe,CAAC,UAAU;YAC7B,eAAe,CAAC,KAAK,CAAC,CAAC;YACvB,MAAM;QAER,KAAK,+BAAe,CAAC,aAAa;YAChC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM;QAER,KAAK,+BAAe,CAAC,aAAa;YAChC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM;QAER,KAAK,+BAAe,CAAC,UAAU;YAC7B,eAAe,CAAC,KAAK,CAAC,CAAC;YACvB,MAAM;QAER,KAAK,+BAAe,CAAC,iBAAiB;YACpC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM;QAER,KAAK,+BAAe,CAAC,gBAAgB;YACnC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM;QAER,KAAK,+BAAe,CAAC,YAAY;YAC/B,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM;QAER,KAAK,+BAAe,CAAC,KAAK;YACxB,WAAW,CAAC,KAAK,CAAC,CAAC;YACnB,MAAM;QAER,KAAK,+BAAe,CAAC,OAAO;YAC1B,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,MAAM;QAER,8BAA8B;IAChC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAkB;IACzC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;IACpD,MAAM,KAAK,GAAG,SAAS,KAAK,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAE9F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAE9D,gCAAgC;IAChC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,SAAS,CAAC,cAAc,KAAK,UAAU,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,+BAAU,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,KAAK,IAAI,SAAS,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,KAAkB;IAC5C,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IAE/C,eAAe;IACf,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEnD,OAAO,CAAC,GAAG,CAAC,GAAG,+BAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,OAAO,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC;AACtF,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,KAAkB;IAC5C,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC;IAE9C,MAAM,SAAS,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAEvE,OAAO,CAAC,GAAG,CAAC,GAAG,+BAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,8BAAS,CAAC,KAAK,oBAAoB,QAAQ,MAAM,SAAS,EAAE,CAAC,CAAC;IAE1G,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,aAAa,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,0BAA0B;IAC1B,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,SAAS,CAAC,kBAAkB,EAAE,aAAa,KAAK,GAAG,CAAC,CAAC,CAAC;QAE7E,sBAAsB;QACtB,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,QAAQ,CAAC,+CAA+C,CAAC,CAAC,CAAC;QACpF,CAAC;aAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAC5D,CAAC;aAAM,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;YAClC,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC3C,MAAM,KAAK,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,OAAO,CAAC,eAAe,KAAK,4BAA4B,MAAM,EAAE,CAAC,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAkB;IACzC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IAExC,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,SAAS,CAAC,GAAG,8BAAS,CAAC,MAAM,iBAAiB,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;IAE1C,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,KAAkB;IAChD,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,KAAkB;IAC/C,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAkB;IAC3C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK;QAAE,OAAO;IAElC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,OAAO,CAAC,aAAa,KAAK,GAAG,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,OAAO,CAAC,UAAU,EAAE,aAAa,KAAK,EAAE,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,KAAkB;IACrC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,SAAS,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;IAEzD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAAkB;IACvC,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,+BAAU,CAAC,OAAO,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -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":"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"}
|
|
@@ -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"}
|