Kraft102's picture
Initial deployment - WidgeTDC Cortex Backend v2.1.0
529090e
import { EventEmitter } from 'events';
// 1. Definition af lovlige nervesignaler
// Vi har tilføjet 'KNOWLEDGE_INGEST_REQ' så Ingestoren kan lytte
export type EventType =
| 'SECURITY_THREAT'
| 'KNOWLEDGE_GAP'
| 'SYSTEM_ERROR'
| 'SYSTEM_HEALED'
| 'KNOWLEDGE_INGEST_REQ'; // <--- NY: Signal til Cortex Ingestor
export type EventSeverity = 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
export interface NeuralEvent {
type: EventType;
severity: EventSeverity;
payload: any;
timestamp: Date;
source: string;
}
class NeuralStream extends EventEmitter {
private static instance: NeuralStream;
private constructor() {
super();
// Vi tillader mange lyttere, da både OmniHarvester, Ingestor, og Frontend lytter med
this.setMaxListeners(50);
}
public static getInstance(): NeuralStream {
if (!NeuralStream.instance) {
NeuralStream.instance = new NeuralStream();
}
return NeuralStream.instance;
}
/**
* Publish a neural event to the entire organism
*/
public emitEvent(type: EventType, severity: EventSeverity, payload: any, source: string = 'System') {
const event: NeuralEvent = {
type,
severity,
payload,
timestamp: new Date(),
source
};
// 1. Emit internt til Node.js listeners (ReflexLoader, KnowledgeService)
this.emit(type, event);
this.emit('*', event); // Catch-all for logging/debugging
// 2. Log til konsollen (så vi kan se nervesystemet arbejde)
// Kun CRITICAL og HIGH vises med store ikoner for at mindske støj
if (severity === 'CRITICAL' || severity === 'HIGH') {
const icon = severity === 'CRITICAL' ? '🔥' : '🔴';
console.log(`${icon} [NeuralStream] ${type} from ${source}:`, this.truncate(JSON.stringify(payload), 100));
} else if (process.env.NODE_ENV === 'development') {
// I dev mode ser vi alt
console.log(`⚡ [NeuralStream] ${type} from ${source}`);
}
}
private truncate(str: string, n: number) {
return (str.length > n) ? str.substr(0, n-1) + '...' : str;
}
}
export const neuralStream = NeuralStream.getInstance();