Support context injection via SessionStart hook. (#15746)

This commit is contained in:
Christian Gunderman
2026-01-05 13:27:53 -08:00
committed by GitHub
parent 2da911e4a0
commit 6d1e27633a
7 changed files with 261 additions and 19 deletions
@@ -61,7 +61,9 @@ describe('createContentGenerator', () => {
expect(FakeContentGenerator.fromFile).toHaveBeenCalledWith(
fakeResponsesFile,
);
expect(generator).toEqual(mockGenerator);
expect(generator).toEqual(
new LoggingContentGenerator(mockGenerator, mockConfigWithFake),
);
});
it('should create a RecordingContentGenerator', async () => {
+4 -1
View File
@@ -114,7 +114,10 @@ export async function createContentGenerator(
): Promise<ContentGenerator> {
const generator = await (async () => {
if (gcConfig.fakeResponses) {
return FakeContentGenerator.fromFile(gcConfig.fakeResponses);
return new LoggingContentGenerator(
await FakeContentGenerator.fromFile(gcConfig.fakeResponses),
gcConfig,
);
}
const version = await getVersion();
const model = resolveModel(
+18 -6
View File
@@ -10,10 +10,12 @@ import {
type HookExecutionRequest,
type HookExecutionResponse,
} from '../confirmation-bus/types.js';
import type {
SessionStartSource,
SessionEndReason,
PreCompressTrigger,
import {
type SessionStartSource,
type SessionEndReason,
type PreCompressTrigger,
createHookOutput,
type DefaultHookOutput,
} from '../hooks/types.js';
import { debugLogger } from '../utils/debugLogger.js';
@@ -22,13 +24,17 @@ import { debugLogger } from '../utils/debugLogger.js';
*
* @param messageBus The message bus to use for hook communication
* @param source The source/trigger of the session start
* @returns The output from the SessionStart hook, or undefined if failed/no output
*/
export async function fireSessionStartHook(
messageBus: MessageBus,
source: SessionStartSource,
): Promise<void> {
): Promise<DefaultHookOutput | undefined> {
try {
await messageBus.request<HookExecutionRequest, HookExecutionResponse>(
const response = await messageBus.request<
HookExecutionRequest,
HookExecutionResponse
>(
{
type: MessageBusType.HOOK_EXECUTION_REQUEST,
eventName: 'SessionStart',
@@ -38,8 +44,14 @@ export async function fireSessionStartHook(
},
MessageBusType.HOOK_EXECUTION_RESPONSE,
);
if (response.output) {
return createHookOutput('SessionStart', response.output);
}
return undefined;
} catch (error) {
debugLogger.debug(`SessionStart hook failed:`, error);
return undefined;
}
}