What version of Kimi Code is running?
v0.9.0
Which open platform/subscription were you using?
Kimi Code
Which model were you using?
kimi-k2.6 thinking
What platform is your computer?
Microsoft Windows NT 10.0.19045.0 x64
What issue are you seeing?
Kimi Code v0.9.0 的 ACP 适配器无法识别旧版 Python kimi-cli 风格的 session/request_permission 响应 optionId。基于旧版行为实现的自定义 ACP 客户端发送 approve 或 approve_for_session 时,会被新版适配器防御性映射为 rejected,导致 Bash、Write 等工具被自动拒绝。
What steps can reproduce the bug?
- 启动
kimi acp
- 使用自定义 ACP 客户端完成握手并发送触发 Bash 的 prompt
- 客户端在响应
session/request_permission 时使用旧版 optionId:
{
"jsonrpc": "2.0",
"id": 4,
"result": {
"outcome": {
"outcome": "selected",
"optionId": "approve_for_session"
}
}
}
- 观察结果:Bash 工具被阻止,模型收到
Tool "Bash" was not run because the user rejected the approval request.
What is the expected behavior?
在 permissionResponseToApprovalResponse 中增加兼容分支:
case 'approve_once':
case 'approve': // ← 兼容旧版
return { decision: 'approved' };
case 'approve_always':
case 'approve_for_session': // ← 兼容旧版
return { decision: 'approved', scope: 'session' };
或在 ACP 参考文档中显式声明 v0.9.0+ 的 canonical optionIds,要求自定义客户端适配。
Additional information
新旧版使用的 optionId 约定不同,但 kind 标准一致:
| 语义 |
旧版 Python kimi-cli |
新版 TS kimi-code |
kind(标准一致) |
| 一次性批准 |
approve |
approve_once |
allow_once |
| 会话级批准 |
approve_for_session |
approve_always |
allow_always |
| 拒绝 |
reject |
reject |
reject_once |
- 旧版:
kimi-cli-source/src/kimi_cli/acp/session.py:426-439
- 新版:
kimi-code/packages/acp-adapter/src/approval.ts:21-71
推测根因
ACP 规范将 optionId 定义为 opaque to the client,由服务器实现自行选择。新旧版 SDK 的 kind 语义一致(allow_once / allow_allow / reject_once),说明 ACP 协议标准本身无冲突。
问题根源在于:Kimi 团队在从 Python(ACP SDK 0.8.0)迁移到 TypeScript(ACP SDK 0.23.0)时,更改了 opaque optionId 的约定,但未对旧版值做兼容,导致基于旧版行为实现的客户端被防御性拒绝。
What version of Kimi Code is running?
v0.9.0
Which open platform/subscription were you using?
Kimi Code
Which model were you using?
kimi-k2.6 thinking
What platform is your computer?
Microsoft Windows NT 10.0.19045.0 x64
What issue are you seeing?
Kimi Code v0.9.0 的 ACP 适配器无法识别旧版 Python
kimi-cli风格的session/request_permission响应optionId。基于旧版行为实现的自定义 ACP 客户端发送approve或approve_for_session时,会被新版适配器防御性映射为rejected,导致 Bash、Write 等工具被自动拒绝。What steps can reproduce the bug?
kimi acpsession/request_permission时使用旧版 optionId:{ "jsonrpc": "2.0", "id": 4, "result": { "outcome": { "outcome": "selected", "optionId": "approve_for_session" } } }What is the expected behavior?
在
permissionResponseToApprovalResponse中增加兼容分支:或在 ACP 参考文档中显式声明 v0.9.0+ 的 canonical optionIds,要求自定义客户端适配。
Additional information
新旧版使用的
optionId约定不同,但kind标准一致:kimi-clikimi-codekind(标准一致)approveapprove_onceallow_onceapprove_for_sessionapprove_alwaysallow_alwaysrejectrejectreject_oncekimi-cli-source/src/kimi_cli/acp/session.py:426-439kimi-code/packages/acp-adapter/src/approval.ts:21-71推测根因
ACP 规范将
optionId定义为 opaque to the client,由服务器实现自行选择。新旧版 SDK 的kind语义一致(allow_once/allow_allow/reject_once),说明 ACP 协议标准本身无冲突。问题根源在于:Kimi 团队在从 Python(ACP SDK 0.8.0)迁移到 TypeScript(ACP SDK 0.23.0)时,更改了 opaque
optionId的约定,但未对旧版值做兼容,导致基于旧版行为实现的客户端被防御性拒绝。