add singal abort for hooks

This commit is contained in:
DennisYu07 2026-03-23 16:02:54 +08:00
parent a0041191a7
commit 8bd7cf2cda
16 changed files with 344 additions and 52 deletions

View file

@ -89,9 +89,12 @@ export class HookSystem {
async fireUserPromptSubmitEvent(
prompt: string,
signal?: AbortSignal,
): Promise<DefaultHookOutput | undefined> {
const result =
await this.hookEventHandler.fireUserPromptSubmitEvent(prompt);
const result = await this.hookEventHandler.fireUserPromptSubmitEvent(
prompt,
signal,
);
return result.finalOutput
? createHookOutput('UserPromptSubmit', result.finalOutput)
: undefined;
@ -100,10 +103,12 @@ export class HookSystem {
async fireStopEvent(
stopHookActive: boolean = false,
lastAssistantMessage: string = '',
signal?: AbortSignal,
): Promise<DefaultHookOutput | undefined> {
const result = await this.hookEventHandler.fireStopEvent(
stopHookActive,
lastAssistantMessage,
signal,
);
return result.finalOutput
? createHookOutput('Stop', result.finalOutput)
@ -115,12 +120,14 @@ export class HookSystem {
model: string,
permissionMode?: PermissionMode,
agentType?: AgentType,
signal?: AbortSignal,
): Promise<DefaultHookOutput | undefined> {
const result = await this.hookEventHandler.fireSessionStartEvent(
source,
model,
permissionMode,
agentType,
signal,
);
return result.finalOutput
? createHookOutput('SessionStart', result.finalOutput)
@ -129,8 +136,12 @@ export class HookSystem {
async fireSessionEndEvent(
reason: SessionEndReason,
signal?: AbortSignal,
): Promise<DefaultHookOutput | undefined> {
const result = await this.hookEventHandler.fireSessionEndEvent(reason);
const result = await this.hookEventHandler.fireSessionEndEvent(
reason,
signal,
);
return result.finalOutput
? createHookOutput('SessionEnd', result.finalOutput)
: undefined;
@ -144,12 +155,14 @@ export class HookSystem {
toolInput: Record<string, unknown>,
toolUseId: string,
permissionMode: PermissionMode,
signal?: AbortSignal,
): Promise<DefaultHookOutput | undefined> {
const result = await this.hookEventHandler.firePreToolUseEvent(
toolName,
toolInput,
toolUseId,
permissionMode,
signal,
);
return result.finalOutput
? createHookOutput('PreToolUse', result.finalOutput)
@ -165,6 +178,7 @@ export class HookSystem {
toolResponse: Record<string, unknown>,
toolUseId: string,
permissionMode: PermissionMode,
signal?: AbortSignal,
): Promise<DefaultHookOutput | undefined> {
const result = await this.hookEventHandler.firePostToolUseEvent(
toolName,
@ -172,6 +186,7 @@ export class HookSystem {
toolResponse,
toolUseId,
permissionMode,
signal,
);
return result.finalOutput
? createHookOutput('PostToolUse', result.finalOutput)
@ -188,6 +203,7 @@ export class HookSystem {
errorMessage: string,
isInterrupt?: boolean,
permissionMode?: PermissionMode,
signal?: AbortSignal,
): Promise<DefaultHookOutput | undefined> {
const result = await this.hookEventHandler.firePostToolUseFailureEvent(
toolUseId,
@ -196,6 +212,7 @@ export class HookSystem {
errorMessage,
isInterrupt,
permissionMode,
signal,
);
return result.finalOutput
? createHookOutput('PostToolUseFailure', result.finalOutput)
@ -208,10 +225,12 @@ export class HookSystem {
async firePreCompactEvent(
trigger: PreCompactTrigger,
customInstructions: string = '',
signal?: AbortSignal,
): Promise<DefaultHookOutput | undefined> {
const result = await this.hookEventHandler.firePreCompactEvent(
trigger,
customInstructions,
signal,
);
return result.finalOutput
? createHookOutput('PreCompact', result.finalOutput)
@ -225,11 +244,13 @@ export class HookSystem {
message: string,
notificationType: NotificationType,
title?: string,
signal?: AbortSignal,
): Promise<DefaultHookOutput | undefined> {
const result = await this.hookEventHandler.fireNotificationEvent(
message,
notificationType,
title,
signal,
);
return result.finalOutput
? createHookOutput('Notification', result.finalOutput)
@ -243,11 +264,13 @@ export class HookSystem {
agentId: string,
agentType: AgentType | string,
permissionMode: PermissionMode,
signal?: AbortSignal,
): Promise<DefaultHookOutput | undefined> {
const result = await this.hookEventHandler.fireSubagentStartEvent(
agentId,
agentType,
permissionMode,
signal,
);
return result.finalOutput
? createHookOutput('SubagentStart', result.finalOutput)
@ -264,6 +287,7 @@ export class HookSystem {
lastAssistantMessage: string,
stopHookActive: boolean,
permissionMode: PermissionMode,
signal?: AbortSignal,
): Promise<DefaultHookOutput | undefined> {
const result = await this.hookEventHandler.fireSubagentStopEvent(
agentId,
@ -272,6 +296,7 @@ export class HookSystem {
lastAssistantMessage,
stopHookActive,
permissionMode,
signal,
);
return result.finalOutput
? createHookOutput('SubagentStop', result.finalOutput)
@ -286,12 +311,14 @@ export class HookSystem {
toolInput: Record<string, unknown>,
permissionMode: PermissionMode,
permissionSuggestions?: PermissionSuggestion[],
signal?: AbortSignal,
): Promise<DefaultHookOutput | undefined> {
const result = await this.hookEventHandler.firePermissionRequestEvent(
toolName,
toolInput,
permissionMode,
permissionSuggestions,
signal,
);
return result.finalOutput
? createHookOutput('PermissionRequest', result.finalOutput)