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