github / github/copilot-cli

Hook `ask` decisions show raw JSON instead of diff view

Aberta
#4,135 1 comentário 0 reações 0 responsáveis Ver no GitHub
area:permissions area:terminal-rendering
Linguagem predominante
Shell
Estrelas
11.2k
Forks
1.9k
Merge médio
14h 16min
PRs com merge (30d)
6

Descrição

### 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

Guia de contribuição

Abrir o guia de contribuição

Direção de pesquisa

Reproduza o problema por meio de um hook PreToolUse que retorne uma decisão ask para a criação ou edição de um arquivo com várias linhas e, em seguida, compare o diálogo Hook permission request com o fluxo padrão ask-before-write. Rastreie o ponto de entrada de hook permission request e a diff/content view existente; considera-se concluído quando o caminho do hook preserva o motivo legível e usa essa mesma visualização avançada em vez de JSON bruto quebrado em linhas.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
powershell, shell
Domínio
cli
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Pouca atividade
Clareza
Razoavelmente clara
Facilidade para iniciantes
55/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.