Skip to content
FunCoding

Search

Search docs, Skills and MCP

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 只定义了名称,尚未实现,不能依赖它触发。

这些事件与生命周期、工具事件配合时,应按真实事件字段关联记录,不用模型自述补造不存在的审计事件。