Files
gemini-cli/packages/core/src/context/eventBus.ts
T

67 lines
1.7 KiB
TypeScript
Raw Normal View History

/**
* @license
* Copyright 2026 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { EventEmitter } from 'node:events';
2026-04-08 02:34:06 +00:00
import type { ConcreteNode } from './ir/types.js';
2026-04-06 19:54:09 +00:00
export interface PristineHistoryUpdatedEvent {
2026-04-09 01:33:55 +00:00
nodes: readonly ConcreteNode[];
2026-04-07 20:59:26 +00:00
newNodes: Set<string>;
2026-04-06 19:54:09 +00:00
}
export interface ContextConsolidationEvent {
2026-04-09 01:33:55 +00:00
nodes: readonly ConcreteNode[];
targetDeficit: number;
2026-04-07 20:59:26 +00:00
targetNodeIds: Set<string>;
}
export interface IrChunkReceivedEvent {
2026-04-09 01:33:55 +00:00
nodes: readonly ConcreteNode[];
2026-04-07 20:59:26 +00:00
targetNodeIds: Set<string>;
}
export interface VariantReadyEvent {
targetId: string; // The Episode or Step ID this variant attaches to
variantId: string; // A unique ID for the variant itself
2026-04-08 02:34:06 +00:00
variant: ConcreteNode; // In V2, variants are synthetic concrete nodes
}
export class ContextEventBus extends EventEmitter {
2026-04-06 19:54:09 +00:00
emitPristineHistoryUpdated(event: PristineHistoryUpdatedEvent) {
this.emit('PRISTINE_HISTORY_UPDATED', event);
}
2026-04-07 04:46:04 +00:00
onPristineHistoryUpdated(
listener: (event: PristineHistoryUpdatedEvent) => void,
) {
2026-04-06 19:54:09 +00:00
this.on('PRISTINE_HISTORY_UPDATED', listener);
}
emitChunkReceived(event: IrChunkReceivedEvent) {
this.emit('IR_CHUNK_RECEIVED', event);
}
onChunkReceived(listener: (event: IrChunkReceivedEvent) => void) {
this.on('IR_CHUNK_RECEIVED', listener);
}
emitConsolidationNeeded(event: ContextConsolidationEvent) {
this.emit('BUDGET_RETAINED_CROSSED', event);
}
onConsolidationNeeded(listener: (event: ContextConsolidationEvent) => void) {
this.on('BUDGET_RETAINED_CROSSED', listener);
}
emitVariantReady(event: VariantReadyEvent) {
this.emit('VARIANT_READY', event);
}
onVariantReady(listener: (event: VariantReadyEvent) => void) {
this.on('VARIANT_READY', listener);
}
}