feat: 支持 UserPromptSubmit 事件,将 prompt 存入 MySQL
- 新增 db.go:MySQL 连接管理、自动建表、兼容旧表 ALTER - handler.go:处理 UserPromptSubmit,从 cwd 提取项目名称 - main.go:可选初始化 MySQL,优雅关闭释放连接 - config.go:新增 MYSQL_DSN 配置项 - 表结构:session_id + project_name + prompt + created_at
This commit is contained in:
@@ -93,6 +93,16 @@ docker-compose up -d
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"UserPromptSubmit": [
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"type": "http",
|
||||
"url": "http://47.121.181.112:8082/hooks"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -123,6 +133,32 @@ docker-compose up -d
|
||||
| `AskUserQuestion` | 等待回答 | 6 | Claude 向你提问,等待回答 |
|
||||
| 其他工具 | 工具调用 | 4 | Claude 正在使用工具 |
|
||||
|
||||
### UserPromptSubmit 事件
|
||||
|
||||
| 行为 | 说明 |
|
||||
|------|------|
|
||||
| 记录 Prompt | 将用户提交的 prompt 存入 MySQL 数据库,便于复盘提示词质量 |
|
||||
|
||||
> ⚠️ 需要配置 `MYSQL_DSN` 环境变量才会启用数据库记录,否则仅打印日志。
|
||||
|
||||
#### 数据库表结构
|
||||
|
||||
```sql
|
||||
CREATE TABLE prompts (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
session_id VARCHAR(128) NOT NULL, -- Claude Code 会话 ID
|
||||
project_name VARCHAR(255) NOT NULL, -- 项目名称(从 cwd 自动提取)
|
||||
prompt TEXT NOT NULL, -- 用户提交的 prompt
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_session_id (session_id),
|
||||
INDEX idx_project_name (project_name),
|
||||
INDEX idx_created_at (created_at)
|
||||
);
|
||||
```
|
||||
|
||||
- `session_id`:用于关联同一会话的多条 prompt
|
||||
- `project_name`:从工作目录自动提取(如 `/home/user/my-app` → `my-app`),便于按项目筛选
|
||||
|
||||
## 配置说明
|
||||
|
||||
| 环境变量 | 必填 | 说明 |
|
||||
@@ -130,6 +166,7 @@ docker-compose up -d
|
||||
| `GOTIFY_URL` | 是 | Gotify 服务器地址 |
|
||||
| `GOTIFY_TOKEN` | 是 | Gotify 应用 Token |
|
||||
| `PORT` | 否 | 服务监听端口(默认 `:8082`) |
|
||||
| `MYSQL_DSN` | 否 | MySQL 连接串,留空则不记录 prompt(格式: `user:password@tcp(host:port)/dbname?parseTime=true`) |
|
||||
|
||||
## API 端点
|
||||
|
||||
@@ -196,6 +233,11 @@ curl -X POST http://47.121.181.112:8082/hooks \
|
||||
curl -X POST http://47.121.181.112:8082/hooks \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"session_id":"test","cwd":"/tmp","hook_event_name":"PreToolUse","tool_name":"AskUserQuestion","tool_input":{"question":"你想使用哪种数据库?"}}'
|
||||
|
||||
# 模拟 UserPromptSubmit 事件(记录 prompt 到 MySQL)
|
||||
curl -X POST http://47.121.181.112:8082/hooks \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"session_id":"test","cwd":"/tmp","hook_event_name":"UserPromptSubmit","tool_input":{"prompt":"帮我写一个 Hello World 程序"}}'
|
||||
```
|
||||
|
||||
## 项目结构
|
||||
@@ -205,6 +247,7 @@ cc-hook/
|
||||
├── .env.example # 环境变量示例
|
||||
├── .gitignore # Git 忽略规则
|
||||
├── config.go # 配置管理(环境变量读取)
|
||||
├── db.go # MySQL 连接与 prompt 存储
|
||||
├── gotify.go # Gotify HTTP 客户端
|
||||
├── handler.go # Hook 事件处理器
|
||||
├── main.go # HTTP 服务入口
|
||||
@@ -215,10 +258,8 @@ cc-hook/
|
||||
|
||||
## 扩展计划
|
||||
|
||||
- [ ] 数据库记录:将 Hook 事件写入数据库,便于复盘和分析
|
||||
- [x] 数据库记录:将 UserPromptSubmit 的 prompt 写入 MySQL,便于复盘提示词质量
|
||||
- [x] 更多事件支持:PreToolUse(AskUserQuestion 提问通知)
|
||||
- [ ] 消息模板:自定义通知消息格式
|
||||
- [ ] 多 Gotify 支持:同时推送到多个 Gotify 服务器
|
||||
|
||||
## License
|
||||
|
||||
|
||||
Reference in New Issue
Block a user