feat(core): Add support for transcript_path in hooks for git-ai/Gemini extension (#14663)

Co-authored-by: Christian Gunderman <gundermanc@gmail.com>
This commit is contained in:
Sasha Varlamov
2025-12-10 15:44:30 -05:00
committed by GitHub
parent 648041c62a
commit d4506e0fc0
3 changed files with 24 additions and 2 deletions

View File

@@ -45,6 +45,13 @@ describe('HookEventHandler', () => {
mockConfig = {
getSessionId: vi.fn().mockReturnValue('test-session'),
getWorkingDir: vi.fn().mockReturnValue('/test/project'),
getGeminiClient: vi.fn().mockReturnValue({
getChatRecordingService: vi.fn().mockReturnValue({
getConversationFilePath: vi
.fn()
.mockReturnValue('/test/project/.gemini/tmp/chats/session.json'),
}),
}),
} as unknown as Config;
mockLogger = {} as Logger;
@@ -513,7 +520,7 @@ describe('HookEventHandler', () => {
HookEventName.BeforeTool,
expect.objectContaining({
session_id: 'test-session',
transcript_path: '',
transcript_path: '/test/project/.gemini/tmp/chats/session.json',
cwd: '/test/project',
hook_event_name: 'BeforeTool',
timestamp: expect.any(String),

View File

@@ -548,9 +548,16 @@ export class HookEventHandler {
* Create base hook input with common fields
*/
private createBaseInput(eventName: HookEventName): HookInput {
// Get the transcript path from the ChatRecordingService if available
const transcriptPath =
this.config
.getGeminiClient()
?.getChatRecordingService()
?.getConversationFilePath() ?? '';
return {
session_id: this.config.getSessionId(),
transcript_path: '', // TODO: Implement transcript path when supported
transcript_path: transcriptPath,
cwd: this.config.getWorkingDir(),
hook_event_name: eventName,
timestamp: new Date().toISOString(),

View File

@@ -468,6 +468,14 @@ export class ChatRecordingService {
}
}
/**
* Gets the path to the current conversation file.
* Returns null if the service hasn't been initialized yet.
*/
getConversationFilePath(): string | null {
return this.conversationFile;
}
/**
* Deletes a session file by session ID.
*/