Repository navigation
Description
Before submitting
- I searched existing issues and did not find a duplicate.
- I included enough detail to reproduce or investigate the problem.
Area
apps/server (packages/provider-acp, packages/provider-acp-registry)
Steps to reproduce
- Give Copilot CLI a default model that differs from the model it advertises in ACP
session/new, for example"model": "gpt-6.1-sol"in~/.copilot/settings.json. Copilot'ssession/newstill reportsmodel: claude-sonnet-5.5andreasoning_effort: medium(ACPsession/newreports amodelthat the session is not running github/copilot-cli#5363). - Use the Copilot provider from the ACP Registry in T3 Code.
- Start a new thread. The composer shows
Sonnet 5.5and an effort level (xhighin my case). - Send a few prompts without touching the model picker.
- Check which model ran: the
session.usage_recordevents in~/.copilot/session-state/<session-id>/events.jsonlcarryusage.modelandusage.reasoningEffort.
Expected behavior
The thread runs the model and effort that the composer shows.
Actual behavior
The first four turns ran gpt-6.1-sol at medium effort while the composer showed Sonnet 5.5 and xhigh. After I changed the model in the picker, T3 sent session/set_config_option and later turns ran the selected model and effort.
Copilot sends a config_option_update with model: gpt-6.1-sol shortly after the first session/prompt (reproduced with a standalone ACP script), but the composer kept showing Sonnet 5.5 until I changed the model myself.
Three things combine:
setConfigOptioninpackages/provider-acp/src/server/AcpSessionRuntime.tsreturns early when the cachedcurrentValuealready matches (configOptionCurrentValueMatches). Because of ACPsession/newreports amodelthat the session is not running github/copilot-cli#5363 that cached value is wrong, soconfigureSessioninpackages/provider-acp/src/server/adapter.tssends nothing for the model.- The thread's stored
modelSelectionhad no options, so T3 sent noreasoning_efforteither. The effort in the composer comes from the provider-level live configuration (applyAcpRegistryLiveConfigurationinpackages/provider-acp-registry/src/server/driver.ts), which the last Copilot session to report an effort sets. The composer can therefore show an effort that the thread never requests. - When Copilot later reports a different
currentValueformodel, the thread keeps its selection in the UI and T3 does not apply it again.
Suggested fixes:
- On session open, send the thread's model, and its effort when set, with
session/set_config_optioneven when it matches the advertisedcurrentValue, at least for Copilot. ACPsession/newreports amodelthat the session is not running github/copilot-cli#5363 recommends this as the client workaround. In [Bug]: ACP adapter re-sends an unchanged model, which resets Copilot's 1M context tier #27022 a redundant model set kept thelong_contexttier on Copilot CLI 1.0.109, so this should not reset the 1M context. - Store the effort the composer shows in the thread's
modelSelection.optionswhen the thread is created, so session open sends it. - When the agent reports a
currentValuethat differs from the thread's selection, apply the selection again or show the model the session runs.
Impact
Major degradation or frequent failure
Version or commit
T3 Code desktop 0.1.9. Source references are from main @ d6ac53e.
Environment
Windows x64, T3 Code desktop 0.1.9, GitHub Copilot CLI 1.0.109 through the ACP Registry provider
Logs or stack traces
Request sequence from the thread's provider event log:
initialize
session/new
session/prompt turn 1, ran gpt-6.1-sol at medium
session/prompt turn 2, same
session/prompt turn 3, same
session/prompt turn 4, same
session/set_config_option after a manual model change in the picker
session/set_config_option
Copilot CLI log at session start:
model_resolution_info: config_model=gpt-6.1-sol, default_model=claude-sonnet-5.5, resolution_source=config
Workaround
Pass the model and effort as launch flags in the Copilot provider's command args, for example ["--acp", "--model", "claude-opus-5.5", "--reasoning-effort", "xhigh"]. With these flags session/new reports the model and effort the session runs, so the existing check in setConfigOption works. Setting model in ~/.copilot/settings.json to the model Copilot advertises also works, but it changes the default of the interactive CLI too.
Activity
test(acp): Copilot model write when session/new reports it as current
fix(acp): new Copilot threads run the effort the composer shows
fix(acp): read Copilot's shown effort before the new session can repl…