Reload gemini memory on extension load/unload + memory refresh refactor (#12651)

This commit is contained in:
Jacob MacDonald
2025-11-07 09:07:25 -08:00
committed by GitHub
parent ef4030331a
commit 47603ef8e1
15 changed files with 276 additions and 259 deletions
+15 -58
View File
@@ -5,6 +5,7 @@
*/
import { EventEmitter } from 'node:events';
import type { LoadServerHierarchicalMemoryResponse } from './memoryDiscovery.js';
/**
* Defines the severity level for user-facing feedback.
@@ -53,13 +54,26 @@ export interface ModelChangedPayload {
model: string;
}
/**
* Payload for the 'memory-changed' event.
*/
export type MemoryChangedPayload = LoadServerHierarchicalMemoryResponse;
export enum CoreEvent {
UserFeedback = 'user-feedback',
FallbackModeChanged = 'fallback-mode-changed',
ModelChanged = 'model-changed',
MemoryChanged = 'memory-changed',
}
export class CoreEventEmitter extends EventEmitter {
export interface CoreEvents {
[CoreEvent.UserFeedback]: [UserFeedbackPayload];
[CoreEvent.FallbackModeChanged]: [FallbackModeChangedPayload];
[CoreEvent.ModelChanged]: [ModelChangedPayload];
[CoreEvent.MemoryChanged]: [MemoryChangedPayload];
}
export class CoreEventEmitter extends EventEmitter<CoreEvents> {
private _feedbackBacklog: UserFeedbackPayload[] = [];
private static readonly MAX_BACKLOG_SIZE = 10000;
@@ -116,63 +130,6 @@ export class CoreEventEmitter extends EventEmitter {
this.emit(CoreEvent.UserFeedback, payload);
}
}
override on(
event: CoreEvent.UserFeedback,
listener: (payload: UserFeedbackPayload) => void,
): this;
override on(
event: CoreEvent.FallbackModeChanged,
listener: (payload: FallbackModeChangedPayload) => void,
): this;
override on(
event: CoreEvent.ModelChanged,
listener: (payload: ModelChangedPayload) => void,
): this;
override on(
event: string | symbol,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
listener: (...args: any[]) => void,
): this {
return super.on(event, listener);
}
override off(
event: CoreEvent.UserFeedback,
listener: (payload: UserFeedbackPayload) => void,
): this;
override off(
event: CoreEvent.FallbackModeChanged,
listener: (payload: FallbackModeChangedPayload) => void,
): this;
override off(
event: CoreEvent.ModelChanged,
listener: (payload: ModelChangedPayload) => void,
): this;
override off(
event: string | symbol,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
listener: (...args: any[]) => void,
): this {
return super.off(event, listener);
}
override emit(
event: CoreEvent.UserFeedback,
payload: UserFeedbackPayload,
): boolean;
override emit(
event: CoreEvent.FallbackModeChanged,
payload: FallbackModeChangedPayload,
): boolean;
override emit(
event: CoreEvent.ModelChanged,
payload: ModelChangedPayload,
): boolean;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
override emit(event: string | symbol, ...args: any[]): boolean {
return super.emit(event, ...args);
}
}
export const coreEvents = new CoreEventEmitter();