Skip to content

Hook 生命周期管理 (hook)

Headless 命令 — 不依赖桌面 GUI,直接使用核心包运行。适用于服务器、CI/CD、容器化等无桌面环境。

核心特性

  • 🪝 28 种事件类型: 涵盖笔记、会话、AI、系统等全生命周期事件
  • 同步/异步执行: 支持 SYNC(阻塞)和 ASYNC(非阻塞)两种执行模式
  • 🎯 优先级系统: SYSTEM / HIGH / NORMAL / LOW / MONITOR 五级优先级
  • 🔍 通配符匹配: 支持 wildcard 和 regex 两种事件匹配模式
  • 📊 执行统计: 自动记录每个 Hook 的执行次数、成功率、平均耗时
  • 🔌 热插拔: 运行时动态注册/注销 Hook,无需重启

概述

ChainlessChain CLI 提供完整的生命周期 Hook 管理系统,允许在系统关键事件触发时执行自定义逻辑。Hook 系统支持精细化的事件过滤、优先级排序和执行模式控制,适用于数据同步、自动备份、审计日志、工作流触发等场景。

每个 Hook 绑定一个事件名(支持通配符如 note:*),并在事件触发时按优先级顺序执行。SYNC 模式下 Hook 可以修改事件数据或中止事件传播,ASYNC 模式下 Hook 在后台运行不影响主流程。

命令参考

hook list — 列出已注册的 Hook(默认)

bash
chainlesschain hook list
chainlesschain hook list --event "note:created"   # 按事件过滤
chainlesschain hook list --enabled                 # 仅显示已启用
chainlesschain hook list --json                    # JSON 输出
chainlesschain hook                                # 等同于 hook list

显示所有已注册的 Hook,包含事件、类型、优先级、启用状态等信息。

hook add — 注册新 Hook

bash
chainlesschain hook add <event> <name> --handler <code>
chainlesschain hook add "note:created" "auto-tag" --handler "console.log('new note')"
chainlesschain hook add "note:*" "note-logger" --type ASYNC --priority LOW
chainlesschain hook add "ai:response" "audit" --matcher regex --pattern ".*:response"

注册一个新的 Hook,绑定到指定事件。可通过 --type 设置同步/异步,--priority 设置优先级,--matcher 设置匹配模式。

hook remove — 注销 Hook

bash
chainlesschain hook remove <hook-id>

根据 Hook ID 注销指定 Hook,立即生效。

hook run — 手动触发事件

bash
chainlesschain hook run <event>
chainlesschain hook run "note:created" --data '{"noteId":"abc123"}'
chainlesschain hook run "system:startup" --json

手动触发指定事件,执行所有匹配的 Hook。可通过 --data 传入事件数据。

hook stats — 查看执行统计

bash
chainlesschain hook stats
chainlesschain hook stats --json

显示所有 Hook 的执行统计,包括总执行次数、成功次数、失败次数、平均耗时。

hook events — 列出支持的事件类型

bash
chainlesschain hook events
chainlesschain hook events --json

列出所有 28 种支持的事件类型及其说明。

事件类型

分类事件说明
笔记note:created, note:updated, note:deleted笔记生命周期
会话session:started, session:ended会话管理
AIai:request, ai:response, ai:errorAI 交互事件
系统system:startup, system:shutdown, system:error系统级事件
同步sync:push, sync:pull, sync:conflict数据同步事件

数据库表

表名说明
hooksHook 注册信息(事件、名称、类型、优先级、处理函数)
hook_stats执行统计(执行次数、成功/失败、平均耗时)

系统架构

用户命令 → hook.js (Commander) → hook-manager.js

                    ┌────────────────┼────────────────┐
                    ▼                ▼                ▼
             事件匹配引擎      优先级排序器      执行统计收集
                    │                │                │
                    ▼                ▼                ▼
            wildcard/regex     SYNC/ASYNC 执行   hooks/hook_stats 表

关键文件

  • packages/cli/src/commands/hook.js — 命令实现
  • packages/cli/src/lib/hook-manager.js — Hook 管理库

使用示例

场景 1:文件修改后自动格式化

bash
# 注册一个 Hook,在文件修改时自动运行 Prettier
chainlesschain hook add --event FileModified \
  --type command \
  --command "npx prettier --write {filePath}" \
  --priority 500 \
  --pattern "*.ts|*.js"

# 验证 Hook 是否注册成功
chainlesschain hook list --event FileModified

场景 2:工具调用前的安全拦截

bash
# 拦截危险的文件删除操作
chainlesschain hook add --event PreToolUse \
  --type sync \
  --command "echo BLOCKED: Dangerous operation" \
  --pattern "rm -rf*|deltree*"

# 手动触发测试
chainlesschain hook run PreToolUse --context '{"tool":"bash","args":"rm -rf /"}'

场景 3:Git 提交前代码检查

bash
chainlesschain hook add --event PreGitCommit \
  --type script \
  --command "npm run lint && npm test" \
  --priority 100

故障排查

Hook 未触发

症状可能原因解决方案
Hook 已注册但不执行事件名拼写错误运行 chainlesschain hook events 查看支持的事件列表
Hook 执行但无效果优先级配置不当检查 --priority,SYSTEM(0) 最先执行,MONITOR(1000) 最后
Command 类型 Hook 报错命令路径不正确使用绝对路径或确保命令在 PATH 中
Pattern 不匹配正则/通配符语法错误使用 chainlesschain hook list 查看已注册的 pattern

常见错误

bash
# 错误: "Hook event not found"
# 原因: 使用了不支持的事件名
# 修复: 查看支持列表
chainlesschain hook events

# 错误: "Database not available"
# 原因: 数据库未初始化
# 修复:
chainlesschain db init

安全考虑

  • 命令注入防护: Command/Script 类型的 Hook 会执行外部命令,避免将用户输入直接拼接到 --command 参数中
  • 优先级控制: SYSTEM(0) 级别的 Hook 仅限系统内部使用,用户自定义 Hook 建议使用 NORMAL(500) 或 LOW(900)
  • Pattern 验证: 正则表达式 pattern 会编译执行,不信任来源的 pattern 可能导致 ReDoS(正则拒绝服务)
  • 审计追踪: 所有 Hook 执行都记录统计信息(执行次数、错误次数、平均耗时),可通过 hook stats 监控异常
  • 脚本隔离: Script 类型 Hook 应限制文件系统访问范围,避免执行未经审查的外部脚本

相关文档

基于 MIT 许可发布