feat: 支持 PreToolUse 事件,AskUserQuestion 触发通知

- handler.go 添加 PreToolUse 事件处理,提取 AskUserQuestion 的 question 字段作为通知内容
- README.md 更新 hooks 配置示例、支持事件文档和测试命令
This commit is contained in:
2026-06-21 22:46:20 +08:00
parent ad585bf101
commit 2ac582ecfd
2 changed files with 45 additions and 2 deletions
+20
View File
@@ -49,6 +49,8 @@ func (h *HookHandler) HandleHook(w http.ResponseWriter, r *http.Request) {
title, message, priority = h.handleNotification(event)
case "Stop":
title, message, priority = h.handleStop(event)
case "PreToolUse":
title, message, priority = h.handlePreToolUse(event)
default:
log.Printf("ignored event: %s", event.HookEventName)
w.WriteHeader(http.StatusOK)
@@ -90,6 +92,24 @@ func (h *HookHandler) handleNotification(event ClaudeCodeHookEvent) (title, mess
return title, message, priority
}
func (h *HookHandler) handlePreToolUse(event ClaudeCodeHookEvent) (title, message string, priority int) {
switch event.ToolName {
case "AskUserQuestion":
title = "Claude Code - 等待回答"
if question, ok := event.ToolInput["question"].(string); ok && question != "" {
message = "Claude 向你提问: " + question
} else {
message = "Claude 向你提出了一个问题,等待你的回答"
}
priority = 6
default:
title = "Claude Code - 工具调用"
message = fmt.Sprintf("Claude 正在使用 %s", event.ToolName)
priority = 4
}
return title, message, priority
}
func (h *HookHandler) handleStop(event ClaudeCodeHookEvent) (title, message string, priority int) {
if event.StopHookActive {
// Avoid infinite loop: Stop hook triggered too many times