Todo、压缩与状态观察
核对可阻止的 Todo 验证阶段,以及只供审计的权限、指令和压缩事件。
This page has not been translated into English yet. The original Chinese version is shown below.
观察事件能帮助建立审计记录,但其中多数忽略输出。是否等待 Hook 完成,也不等于允许 Hook 改变原操作。
Todo 的两个阶段
TodoCreated 与 TodoCompleted 都分 validation 和 postWrite。输入 phase 标明时点,另含 todo_id、todo_content、all_todos;创建事件带 todo_status,完成事件带 previous_status。
| 阶段 | 合适用途 | block / deny |
|---|---|---|
| validation | 持久化前验证 | 可阻止写入,原列表或状态不变 |
| postWrite | 日志、同步等副作用 | 不撤销已写入状态 |
阻止时提供 reason。若使用 command 的退出码 2,stdout 会被通用协议忽略,应把解释写 stderr;若要返回 JSON decision 与 reason,应正常退出。不要照抄“把 JSON 打到 stdout 后 exit 2”并期待该 JSON 被解析。
{
"decision": "block",
"reason": "The required verification evidence is missing."
}这段返回只应在 validation 使用。postWrite 用于记录事实,避免同一次操作的两个阶段各执行一次外部写入。
压缩前后
PreCompact 按 trigger 的 manual/auto 匹配,输入 custom_instructions,可添加压缩前上下文。
PostCompact 只在压缩成功后触发,失败不发出;输入 compact_summary 是替代历史的摘要,去除 <analysis> 部分。Qwen 会等 Hook 完成,但所有输出、决定和退出码都无效,适合归档或统计,不能用它否决已经完成的压缩。
指令文件加载
InstructionsLoaded 在文件读取后、继续加载之前运行,覆盖启动、重载及 import 文件。matcher 匹配 file_path,load_reason 为 session_start、refresh 或 include;导入还可提供 trigger_file_path 与 parent_file_path。
memory_type 区分 user、project、local、extension。导入文件继承其导入上下文的类别;.qwen/QWEN.local.md 属于 local。它只观察,不会停止或修改加载,故障记日志后继续。
Auto 权限拒绝
PermissionDenied 在 Auto 分类器拒绝工具时触发,包括连续拒绝导致下一步向用户询问的情况。Qwen 等待它,但输出不能批准或修改该工具调用。
输入包含工具名、参数、标识与 reason。当前实际 reason 为 classifier_blocked;虽然协议定义了 classifier_unavailable,分类器未给出结果的路径并不发出该事件。不能用这个 Hook 单独统计全部分类服务故障。
Notification
按 notification_type 匹配,当前类型为 permission_prompt、idle_prompt、auth_success,输入 message 和可选 title,可附上下文。elicitation_dialog 只定义了名称,尚未实现,不能依赖它触发。