ACP: expose contextTier as a session config option (parity with interactive /model picker)
- Langage dominant
- Shell
- Étoiles
- 11.2k
- Forks
- 1.9k
- Merge moyen
- 14 h 16 min
- PR mergées (30 j)
- 6
Description
### Describe the feature or problem you'd like to solve
The interactive CLI lets you change the context window tier mid-session (via the `/model` context tier picker), but the ACP server does not expose `contextTier` as a session config option. ACP clients can only set the tier at spawn time with `--context `, and have no way to discover or change it once the session is running.
### Proposed solution
Expose the context tier over ACP with the same shape already used for `reasoning_effort`:
1. Include a `contextTier` entry in the `configOptions` array returned by `session/new` (and `session/load`), of `type: "select"`, with the eligible values for the current model (`default`, `long_context`) and the current value.
2. Accept `session/set_config_option` with `configId: "contextTier"` and apply it to the live session, exactly as the `/model` picker does interactively.
3. Only advertise the option for tiered-pricing models, mirroring the interactive behaviour ("context tier picker appears for eligible models").
This closes a parity gap rather than adding new functionality: the capability already exists in the runtime and is reachable from the interactive UI and from `settings.json`; it is just not reachable through ACP.
Issue #1994 ("Allow reasoning effort discovery and setting via ACP") is the direct precedent — `reasoning_effort` is now a first-class ACP config option, and `contextTier` is the remaining sibling setting that isn't.
### Example prompts or workflows
1. An ACP client (Zed, or any ACP editor integration) shows a "Context Size" picker next to the model and reasoning-effort pickers, populated from `session/new`, instead of having to hardcode the tier list per CLI version.
2. A user on Claude Opus hits a large refactor mid-conversation and switches from `default` to `long_context` without losing session state — today the client must kill and respawn `copilot --acp --context long_context` and resume, or the control is simply hidden.
3. A client drops back from `long_context` to `default` after the large task is done, to avoid the surcharge for the rest of the conversation.
4. A client reads the current tier from `session/load` when reconnecting to an existing session, so the UI reflects reality instead of guessing.
### Additional context
Reproduced against GitHub Copilot CLI **1.0.75**.
**The interactive CLI supports hot changes** — from `copilot help config`:
```
contextTier: context window tier for tiered-pricing models (e.g., "default" or "long_context").
- Can also be set with --context flag (overrides persisted setting)
- Can be changed with /model command (context tier picker appears for eligible models)
```
**ACP does not.** Minimal probe over `copilot --acp` (initialize → `session/new` → `session/set_config_option`):
```
configOptions ids: ["mode","model","reasoning_effort","allow_all"]
contextTier -> {"code":-32602,"message":"Unknown config option 'contextTier'."}
context -> {"code":-32602,"message":"Unknown config option 'context'."}
contextSize -> {"code":-32602,"message":"Unknown config option 'contextSize'."}
```
So `reasoning_effort` is exposed but `contextTier` is not, even though both are per-session model settings adjustable from the interactive `/model` flow.
**Current workaround and why it's poor.** The tier can only be pinned at spawn time via `--context `. Changing it for a running conversation requires terminating the agent process and respawning it with a different flag, then reloading the session — an intrusive lifecycle operation for what is a per-request setting, and one that ACP clients cannot make feel like the interactive picker.
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez par l’option de configuration ACP existante reasoning_effort comme précédent, puis suivez l’annonce et le traitement de session/new et session/load, ainsi que de session/set_config_option. Comparez ces chemins avec le comportement du sélecteur interactif /model et de --context. Le travail est terminé lorsque les modèles éligibles exposent le contextTier actuel et que les clients peuvent le modifier pendant une session active sans redémarrer.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- shell
- Domaine
- api, cli
- Type d'issue
- Fonctionnalité
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- Active
- Clarté
- Plutôt claire
- Accessibilité débutants
- 65/100