fix(agent): implement AgentProtocol disposal to prevent memory leaks

This commit is contained in:
Michael Bleigh
2026-05-11 14:56:10 -07:00
parent a7ae31d732
commit aa8eca7bfe
6 changed files with 26 additions and 11 deletions
@@ -193,6 +193,7 @@ export async function runNonInteractive({
let errorToHandle: unknown | undefined;
let scheduler: Scheduler | undefined;
let session: LegacyAgentSession | undefined;
let abortSession = () => {};
try {
consolePatcher.patch();
@@ -296,7 +297,7 @@ export async function runNonInteractive({
}
// Create LegacyAgentSession — owns the agentic loop
const session = new LegacyAgentSession({
session = new LegacyAgentSession({
client: geminiClient,
scheduler,
config,
@@ -305,7 +306,7 @@ export async function runNonInteractive({
// Wire Ctrl+C to session abort
abortSession = () => {
void session.abort();
void session?.abort();
};
abortController.signal.addEventListener('abort', abortSession);
if (abortController.signal.aborted) {
@@ -640,6 +641,7 @@ export async function runNonInteractive({
cleanupStdinCancellation();
abortController.signal.removeEventListener('abort', abortSession);
session?.dispose();
scheduler?.dispose();
consolePatcher.cleanup();
coreEvents.off(CoreEvent.UserFeedback, handleUserFeedback);
+4
View File
@@ -1180,6 +1180,10 @@ Logging in with Google... Restarting Gemini CLI to continue.
[config, getPreferredEditor],
);
useEffect(() => () => {
streamAgent?.dispose?.();
}, [streamAgent]);
const activeStream = streamAgent
? // eslint-disable-next-line react-hooks/rules-of-hooks
useAgentStream({