From 155d9aafe2f6ffc9ede98746e5bad8e6a38e1560 Mon Sep 17 00:00:00 2001 From: Vedant Mahajan Date: Tue, 20 Jan 2026 08:55:43 +0530 Subject: [PATCH] fix return type of fireSessionStartEvent to defaultHookOutput (#16833) --- packages/cli/src/gemini.tsx | 26 +++++++++++--------- packages/cli/src/ui/AppContainer.tsx | 8 +++--- packages/cli/src/ui/commands/clearCommand.ts | 16 +++++++----- packages/core/src/hooks/hookSystem.ts | 5 ++-- 4 files changed, 32 insertions(+), 23 deletions(-) diff --git a/packages/cli/src/gemini.tsx b/packages/cli/src/gemini.tsx index da6643349b..ee35edae63 100644 --- a/packages/cli/src/gemini.tsx +++ b/packages/cli/src/gemini.tsx @@ -648,18 +648,22 @@ export async function main() { const sessionStartSource = resumedSessionData ? SessionStartSource.Resume : SessionStartSource.Startup; - const result = await config - .getHookSystem() - ?.fireSessionStartEvent(sessionStartSource); - if (result?.finalOutput) { - if (result.finalOutput.systemMessage) { - writeToStderr(result.finalOutput.systemMessage + '\n'); - } - const additionalContext = result.finalOutput.getAdditionalContext(); - if (additionalContext) { - // Prepend context to input (System Context -> Stdin -> Question) - input = input ? `${additionalContext}\n\n${input}` : additionalContext; + const hookSystem = config?.getHookSystem(); + if (hookSystem) { + const result = await hookSystem.fireSessionStartEvent(sessionStartSource); + + if (result) { + if (result.systemMessage) { + writeToStderr(result.systemMessage + '\n'); + } + const additionalContext = result.getAdditionalContext(); + if (additionalContext) { + // Prepend context to input (System Context -> Stdin -> Question) + input = input + ? `${additionalContext}\n\n${input}` + : additionalContext; + } } } diff --git a/packages/cli/src/ui/AppContainer.tsx b/packages/cli/src/ui/AppContainer.tsx index 72f74a76f0..d84082859b 100644 --- a/packages/cli/src/ui/AppContainer.tsx +++ b/packages/cli/src/ui/AppContainer.tsx @@ -300,18 +300,18 @@ export const AppContainer = (props: AppContainerProps) => { .getHookSystem() ?.fireSessionStartEvent(sessionStartSource); - if (result?.finalOutput) { - if (result.finalOutput?.systemMessage) { + if (result) { + if (result.systemMessage) { historyManager.addItem( { type: MessageType.INFO, - text: result.finalOutput.systemMessage, + text: result.systemMessage, }, Date.now(), ); } - const additionalContext = result.finalOutput.getAdditionalContext(); + const additionalContext = result.getAdditionalContext(); const geminiClient = config.getGeminiClient(); if (additionalContext && geminiClient) { await geminiClient.addHistory({ diff --git a/packages/cli/src/ui/commands/clearCommand.ts b/packages/cli/src/ui/commands/clearCommand.ts index 196be503a0..7707876000 100644 --- a/packages/cli/src/ui/commands/clearCommand.ts +++ b/packages/cli/src/ui/commands/clearCommand.ts @@ -29,7 +29,10 @@ export const clearCommand: SlashCommand = { .getChatRecordingService(); // Fire SessionEnd hook before clearing - await config?.getHookSystem()?.fireSessionEndEvent(SessionEndReason.Clear); + const hookSystem = config?.getHookSystem(); + if (hookSystem) { + await hookSystem.fireSessionEndEvent(SessionEndReason.Clear); + } if (geminiClient) { context.ui.setDebugMessage('Clearing terminal and resetting chat.'); @@ -48,9 +51,10 @@ export const clearCommand: SlashCommand = { } // Fire SessionStart hook after clearing - const result = await config - ?.getHookSystem() - ?.fireSessionStartEvent(SessionStartSource.Clear); + let result; + if (hookSystem) { + result = await hookSystem.fireSessionStartEvent(SessionStartSource.Clear); + } // Give the event loop a chance to process any pending telemetry operations // This ensures logger.emit() calls have fully propagated to the BatchLogRecordProcessor @@ -65,11 +69,11 @@ export const clearCommand: SlashCommand = { uiTelemetryService.setLastPromptTokenCount(0); context.ui.clear(); - if (result?.finalOutput?.systemMessage) { + if (result?.systemMessage) { context.ui.addItem( { type: MessageType.INFO, - text: result.finalOutput.systemMessage, + text: result.systemMessage, }, Date.now(), ); diff --git a/packages/core/src/hooks/hookSystem.ts b/packages/core/src/hooks/hookSystem.ts index 7d5e7783f8..74176be464 100644 --- a/packages/core/src/hooks/hookSystem.ts +++ b/packages/core/src/hooks/hookSystem.ts @@ -94,11 +94,12 @@ export class HookSystem { */ async fireSessionStartEvent( source: SessionStartSource, - ): Promise { + ): Promise { if (!this.config.getEnableHooks()) { return undefined; } - return this.hookEventHandler.fireSessionStartEvent(source); + const result = await this.hookEventHandler.fireSessionStartEvent(source); + return result.finalOutput; } async fireSessionEndEvent(