跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

Todo、压缩与状态观察

核对可阻止的 Todo 验证阶段,以及只供审计的权限、指令和压缩事件。

观察事件能帮助建立审计记录,但其中多数忽略输出。是否等待 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 只定义了名称,尚未实现,不能依赖它触发。

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