@@ -55,8 +55,8 @@ repo hooks 文件路径固定为:
5555<workspace>/.neocode/hooks.yaml
5656```
5757
58- 仅支持与 P2 相同的 builtin 子集(` kind=builtin ` 、` mode=sync ` 、` UserAllowed=true ` points、3 个 handlers)。
59- repo hooks 暂不支持 ` kind=http ` , external kinds( ` command/http/ prompt/agent ` )在 repo 侧仍显式拒绝 。
58+ 支持与 P2 相同的 builtin 子集(` kind=builtin ` 、` mode=sync ` 、` UserAllowed=true ` points、3 个 handlers),并开放 ` kind=command + mode=sync ` 。
59+ repo hooks 仍不支持 ` kind=http ` ; external kinds 中当前仅 ` command ` 开放, ` prompt/agent ` 仍显式拒绝 。
6060
6161执行顺序固定为:
6262
@@ -73,22 +73,55 @@ internal -> user -> repo
7373
7474### 上下文裁剪
7575
76- user/repo hook 接收的 ` HookContext ` 经过白名单裁剪 ,仅保留最小必要字段:
76+ user/repo hook 接收的 ` HookContext ` 经过点位感知的 payload schema 裁剪 ,仅保留最小必要字段:
7777
78- - ` run_id ` / ` session_id `
79- - ` point ` / ` tool_call_id ` / ` tool_name `
80- - ` tool_arguments_preview ` (脱敏+截断后的参数预览)
81- - ` is_error ` / ` error_class `
82- - ` result_content_preview ` / ` result_metadata_present `
83- - ` execution_error `
84- - ` workdir `
78+ - 顶层字段:` run_id ` / ` session_id `
79+ - metadata 字段:按 ` point ` 不同暴露对应的最小子集,例如 ` tool_call_id ` 、` tool_name ` 、` workdir `
80+ - 预览/摘要类字段:` tool_arguments_preview ` 、` result_content_preview ` 、` todo_summary ` 、` recent_tool_summary `
81+ - 完整机器可读契约见 ` docs/reference/hook-payload.v1.json `
8582
8683不会暴露:
8784
8885- API key / capability token
8986- service 指针与 provider 客户端对象
9087- 原始工具参数明文(` tool_arguments ` )
9188
89+ ### Payload Schema
90+
91+ Hook payload 已从 runtime 内部白名单提升为公开契约:
92+
93+ - 版本号真源:` internal/runtime/hooks.PayloadVersion `
94+ - 当前版本:` payload_version: "1" `
95+ - 生成命令:` go generate ./internal/runtime/hooks `
96+ - 生成产物:` docs/reference/hook-payload.v1.json `
97+ - command stdin 与 HTTP observe body 都带 ` payload_version `
98+ - HTTP observe 在共享字段之外,继续保留 ` scope ` 、` kind ` 、` mode ` 、` triggered_at ` 作为 transport 附加字段
99+ - ` metadata.point ` 、` completion_passed ` 、` has_tool_calls ` 、` assistant_role ` 这类未由 runtime 真实生产的字段不再公开
100+
101+ 稳定性分级:
102+
103+ - ` stable ` :身份/控制类字段,默认兼容承诺
104+ - ` experimental ` :预览/摘要类字段,当前包括 ` tool_arguments_preview ` 、` result_content_preview ` 、` todo_summary ` 、` recent_tool_summary `
105+ - ` deprecated ` :保留给后续版本迁移,本版未使用
106+
107+ 各点位 metadata 字段:
108+
109+ | point | metadata fields |
110+ | ---| ---|
111+ | ` before_tool_call ` | ` run_id ` , ` session_id ` , ` tool_call_id ` , ` tool_name ` , ` tool_arguments_preview ` (experimental), ` workdir ` |
112+ | ` after_tool_result ` | ` run_id ` , ` session_id ` , ` tool_call_id ` , ` tool_name ` , ` is_error ` , ` error_class ` , ` result_content_preview ` (experimental), ` result_metadata_present ` , ` execution_error ` , ` workdir ` |
113+ | ` before_completion_decision ` | ` run_id ` , ` session_id ` |
114+ | ` accept_gate ` | ` run_id ` , ` session_id ` , ` workdir ` , ` workspace_changed ` , ` assistant_text_empty ` , ` todo_summary ` (experimental), ` recent_tool_summary ` (experimental) |
115+ | ` before_permission_decision ` | ` run_id ` , ` session_id ` , ` tool_call_id ` , ` tool_name ` , ` decision ` , ` reason ` , ` rule_id ` , ` workdir ` |
116+ | ` after_tool_failure ` | ` run_id ` , ` session_id ` , ` tool_call_id ` , ` tool_name ` , ` tool_arguments_preview ` (experimental), ` is_error ` , ` error_class ` , ` execution_error ` , ` result_content_preview ` (experimental), ` workdir ` |
117+ | ` session_start ` | ` run_id ` , ` session_id ` , ` workdir ` |
118+ | ` session_end ` | ` run_id ` , ` session_id ` , ` stop_reason ` , ` detail ` |
119+ | ` user_prompt_submit ` | ` run_id ` , ` session_id ` , ` workdir ` |
120+ | ` pre_compact ` | ` run_id ` , ` session_id ` , ` workdir ` , ` trigger_mode ` |
121+ | ` post_compact ` | ` run_id ` , ` session_id ` , ` workdir ` , ` trigger_mode ` , ` applied ` |
122+ | ` subagent_start ` | ` run_id ` , ` session_id ` , ` task_id ` , ` role ` , ` workspace ` , ` tool_name ` , ` trigger ` , ` workdir ` |
123+ | ` subagent_stop ` | ` run_id ` , ` session_id ` , ` task_id ` , ` role ` , ` state ` , ` stop_reason ` , ` step_count ` , ` error ` |
124+
92125### 点位能力矩阵(P4)
93126
94127runtime 内置 ` HookPointCapability ` 作为唯一真源,定义每个点位是否允许 block/observe/update_input 以及是否允许 user/repo 挂载。
@@ -184,6 +217,7 @@ trust store 固定路径:
184217- ` hook_id ` :hook 配置中的 ` id `
185218- ` point ` :触发点位名称
186219- ` metadata ` :经白名单裁剪后的上下文字段(与 builtin/http hook 相同的 allowlist)
220+ - 完整字段表与稳定性分级见 ` docs/reference/hook-payload.v1.json `
187221
188222### stdout 协议
189223
0 commit comments