[ACP] Emit `usage_update` in `--acp` mode (context window + AI credits) for parity with the interactive statusline
- Lingua principale
- Shell
- Stelle
- 11.2k
- Fork
- 1.9k
- Merge medio
- 14h 16m
- PR unite (30g)
- 6
Descrizione
### Describe the feature or problem you'd like to solve
`copilot --acp` never emits the ACP `usage_update` session update, so ACP clients (Zed, etc.) can't show a context-window or AI-credit usage indicator for Copilot — even though the CLI already computes this data for `/context`, `/usage`, and the statusline.
### Proposed solution
### Summary
When Copilot CLI runs in ACP mode (`copilot --acp`), it never sends the ACP
`session/update` notification with `sessionUpdate: "usage_update"`. As a result,
ACP clients (Zed and other editors/tools integrating over ACP) cannot show a
context‑window usage indicator or AI‑credit usage for Copilot — even though the
CLI already computes this data and surfaces it in interactive mode.
### The gap: interactive mode has it, ACP mode doesn't
In interactive mode the data is already there:
- The experimental `statusLine.command` receives JSON with
`context_window.current_context_tokens`, `context_window.displayed_context_limit`,
`context_window.current_context_used_percentage`, etc.
- `/context` shows the context‑window breakdown.
- `/usage` shows AI credits used in the current session.
But in `--acp` mode none of it is forwarded — the client only ever receives
`agent_message_chunk`, `tool_call`, `available_commands_update`, etc., and never a
`usage_update` (even though the type is part of the ACP schema the CLI already speaks).
### Why it matters
- ACP standardized session usage reporting (Session Context Size & Cost RFD).
`usage_update` carries `{ used, size }` (+ optional `cost`) and powers Zed's
context‑window indicator.
- Other ACP agents (e.g. Claude Code via claude-agent-acp) emit `usage_update`, so
their users get a live context indicator in Zed. Copilot users don't — Zed falls
back to inaccurate estimation (see zed-industries/zed#44909, where Copilot models
show a hardcoded 128k limit that doesn't match the real limit).
- For long agentic sessions, knowing how close you are to compaction — and how many
credits you've spent — is valuable.
### Request
In `--acp` mode, emit `session/update` with `sessionUpdate: "usage_update"`:
- After `session/new`, `session/load`, `session/resume`, and after each prompt turn.
- Populate the standard fields: `used` (current context tokens), `size` (context
window size), and `cost` (session cost) when available.
- For AI credits (used / remaining) — which have no standard ACP field — attach them
via the update's `_meta` (already part of the `usage_update` schema), e.g.
`_meta: { ai_credits_used, ai_credits_remaining }`.
This brings ACP mode to parity with the interactive statusline / `/context` /
`/usage`, with no new data to compute — just forwarding what already exists over the
protocol the CLI already implements.
### References
- ACP `usage_update` (Session Context Size & Cost RFD)
- Zed context indicator; zed-industries/zed#44909 (Copilot token limits estimated / incorrect)
- Related CLI requests: #2052 (persistent token/context indicator), #1953 (always‑visible context status)
### Example prompts or workflows
_No response_
### Additional context
_No response_
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Start at the --acp entry point and trace session/new, session/load, session/resume, and prompt-turn handling. Compare the existing /context, /usage, and statusline data with the ACP session/update schema, then verify that usage_update reports used, size, cost, and the requested AI-credit metadata after each lifecycle event.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- shell
- Ambito
- cli
- Tipo di issue
- Funzionalità
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 48/100