( messages: NormalizedMessage[], toolUseID: string, hookEvent: HookEvent, )
| 1057 | } |
| 1058 | |
| 1059 | function getResolvedHookCount( |
| 1060 | messages: NormalizedMessage[], |
| 1061 | toolUseID: string, |
| 1062 | hookEvent: HookEvent, |
| 1063 | ): number { |
| 1064 | // Count unique hook names, since a single hook can produce multiple |
| 1065 | // attachment messages (e.g., hook_success + hook_additional_context) |
| 1066 | const uniqueHookNames = new Set( |
| 1067 | messages |
| 1068 | .filter( |
| 1069 | (_): _ is AttachmentMessage<HookAttachmentWithName> => |
| 1070 | isHookAttachmentMessage(_) && |
| 1071 | _.attachment.toolUseID === toolUseID && |
| 1072 | _.attachment.hookEvent === hookEvent, |
| 1073 | ) |
| 1074 | .map(_ => _.attachment.hookName), |
| 1075 | ) |
| 1076 | return uniqueHookNames.size |
| 1077 | } |
| 1078 | |
| 1079 | export function hasUnresolvedHooks( |
| 1080 | messages: NormalizedMessage[], |
no test coverage detected