Hook `ask` decisions show raw JSON instead of diff view
- 主要语言
- Shell
- 星标
- 11.2k
- 派生
- 1.9k
- 平均合并
- 14 小时 16 分钟
- 30 天内合并 PR
- 6
描述
### Describe the bug
Copilot CLI normally shows a rich diff/content view when asking permission to create or edit a file. However, when the `ask` decision comes from a `PreToolUse` hook (i.e. the hook returns `{"permissionDecision": "ask", "permissionDecisionReason": "..."}`) rather than from the default built-in ask-before-write behavior, that rich diff view does not get triggered.
Instead, the "Hook permission request" dialog renders the `permissionDecisionReason` correctly as readable yellow text, but shows the proposed change as a single JSON line containing the raw tool input (file path plus the entire file content field), hard-wrapped at the current terminal width. For a file write/edit with non-trivial content this becomes a wall of wrapped JSON (quotes, escaped `\n`, braces, etc.) that is effectively unreadable, instead of the normal diff view Copilot CLI already has and uses elsewhere.
### Affected version
```
$ copilot --version
GitHub Copilot CLI 1.0.70.
```
### Steps to reproduce the behavior
1. Configure a `PreToolUse` hook script for Copilot CLI (a hook that reads the tool-call JSON from stdin and can return a permission decision).
2. Have the hook return an `ask` decision for a file create/edit tool call, e.g.:
```json
{
"permissionDecision": "ask",
"permissionDecisionReason": "Human review requested for this file write."
}
```
3. Trigger a tool call that creates or edits a file with non-trivial (multi-line) content.
4. Observe the "Hook permission request" dialog that Copilot CLI shows: compare it to the normal ask-before-write dialog (without a hook forcing `ask`), which renders a proper diff/content view for the same kind of file change.
### Expected behavior
- The `permissionDecisionReason` should display as it currently does (readable yellow text) — this part works correctly.
- When the `ask` decision is produced by a hook for a file create/edit tool, the dialog should render the proposed change using the same rich diff/content view Copilot CLI already uses for its default ask-before-write flow, instead of falling back to a single wrapped line of raw JSON tool input.
### Additional context
- OS: Windows 11
- CPU architecture: x86_64
- Terminal: Windows Terminal
- Shell: PowerShell 7 — note that Copilot CLI runs its own tool calls (including file create/edit) via its internal PowerShell invocation regardless of the interactive shell, so this shouldn't affect reproduction
贡献指南
调研方向
通过一个针对多行文件创建或编辑返回 ask 决定的 PreToolUse hook 重现该问题,然后将 Hook permission request 对话框与默认的 ask-before-write 流程进行比较。跟踪 hook permission request 入口点和现有的 diff/content view;完成标准是 hook 路径保留可读的原因,并使用同一个 rich view,而不是使用换行后的原始 JSON。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- powershell, shell
- 领域
- cli
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 55/100