Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

ACP: expose the model list as a category:model config option (session/new returns only mode and allow_all)

未关闭
#4,880 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
52/100
Issue 类型
功能
描述清晰度
基本清楚
活跃度
活跃
技术栈
node.js, shell
领域
api, cli

调研方向

Start at the copilot --acp entry point and trace the session/new, session/load, and session/set_config_option handlers; the issue names no source files or tests. Compare their behavior with the interactive /model picker. Done means model options and the active value are exposed, model changes emit updates, and unknown --model values no longer silently fall back.

由索引模型根据 Issue 内容生成。

描述

triage
Describe the feature or problem you'd like to solve

Over copilot --acp, a client has no way to list the models available to the signed-in account or to pick one for a session.

Measured on GitHub Copilot CLI 1.0.85 (macOS arm64):

  • session/new returns sessionId, modes and configOptions only. configOptions holds exactly two select options, mode and allow_all. There is no option with category: "model".
  • session/load returns the same set.
  • Sending /model as a prompt answers: "The model-picker dialog is only available in the interactive CLI."
  • --model <id> accepts any string. copilot --acp --model=not_a_real_model_xyz starts, creates a session and completes a prompt with no error, no stderr, and nothing on the wire reports which model actually ran.

So an ACP client (an editor or a desktop app embedding Copilot) can only offer a single "Copilot default" row. It cannot show the models the user's plan allows, and if it hard-codes ids it cannot tell when one silently fell back.

Proposed solution

Advertise the model list the way the ACP spec already provides for it:

  1. Include a SessionConfigOption with type: "select" and category: "model" in session/new and session/load responses, listing the ids the account can use and currentValue set to the active model. Grouping by vendor via SessionConfigSelectGroup is fine.
  2. Accept session/set_config_option for that option and emit config_option_update on change, so a client can switch models mid-session without respawning.
  3. Ideally, reject an unknown --model value (or at least log it to stderr) instead of silently running the default.

This is the same shape the interactive /model picker already has; it just needs to be exposed on the ACP surface.

Example prompts or workflows

An ACP client starts copilot --acp, calls session/new, reads the model config option, shows its values in a picker, and calls session/set_config_option with the user's choice. Today step 3 yields nothing to show.

Additional context

Minimal reproduction (Node 24):

import { spawn } from 'node:child_process'
const c = spawn('copilot', ['--acp', '--no-auto-update'], { stdio: ['pipe', 'pipe', 'inherit'] })
const send = (o) => c.stdin.write(JSON.stringify(o) + '\n')
let buf = ''
c.stdout.on('data', (d) => {
  buf += d
  for (const line of buf.split('\n').slice(0, -1)) {
    const m = JSON.parse(line)
    if (m.id === 1) send({ jsonrpc: '2.0', id: 2, method: 'session/new', params: { cwd: process.cwd(), mcpServers: [] } })
    if (m.id === 2) { console.log(Object.keys(m.result), m.result.configOptions.map((o) => o.id)); c.kill() }
  }
  buf = buf.slice(buf.lastIndexOf('\n') + 1)
})
send({ jsonrpc: '2.0', id: 1, method: 'initialize', params: { protocolVersion: 1, clientCapabilities: { fs: { readTextFile: false, writeTextFile: false } }, clientInfo: { name: 'probe', version: '0' } } })

Prints [ 'sessionId', 'modes', 'configOptions' ] [ 'mode', 'allow_all' ].

Version: GitHub Copilot CLI 1.0.85. ACP SDK used by the client: @agentclientprotocol/sdk 1.4.0.

主要语言
Shell
星标
11.2k
派生
1.9k
平均合并
14 小时 16 分钟
30 天内合并 PR
6

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

github/copilot-cli 的其他 Issue

查看 github/copilot-cli 的全部 Issue

相似的 Issue

更多 Shell/Bash Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。