Description
opencode acp 的 session/new 始终返回 -32603 Internal error: "No models available",
即使 provider 已正确配置且 opencode run 可以正常使用。
这是阻断了 cc-connect 等 ACP bridge 工具通过 ACP 协议对接 OpenCode 的关键 bug。
Environment
- OpenCode: 1.15.10 (npm)
- OS: Linux (Arch, WSL)
- Config:
~/.config/opencode/opencode.json 已配置 DeepSeek provider,opencode run 正常工作
Reproduction
(echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1}}'
sleep 2
echo '{"jsonrpc":"2.0","id":2,"method":"session/new","params":{"cwd":"/tmp","mcpServers":[]}}'
sleep 8) | timeout 15 opencode acp --cwd /tmp 2>&1
Actual Output
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":1,...}} ← initialize OK
Error handling request {
jsonrpc: "2.0", id: 2, method: "session/new", ...
} {
code: -32603,
message: "Internal error",
data: { details: "No models available" } ← FAILS
}
Root Cause Analysis
问题出在 src/server/routes/instance/index.ts。
ACP 命令启动内部 HTTP 服务器时,InstanceRoutes 使用 Context.empty() 创建路由处理器,
而不是正确初始化的 Effect 服务上下文。导致所有 SDK API 调用
(GET /config, /config/providers, /session)返回 502 Bad Gateway,
session/new 因此报 "No models available"。
使用 ExperimentalHttpApiServer.context 替代 Context.empty() 可以修复此问题。
Note
这个问题不同于已关闭的 #25568(PR #25591 修复的是 internal HTTP client 的 auth token 传递问题)。
即使 auth 正确,Context.empty() 导致的路由 502 仍然存在。
Impact
此 bug 阻断了 OpenCode 通过 ACP 协议与 cc-connect 等 bridge 工具的完整集成。cc-connect 的 ACP 适配器已经实现了完整的交互式权限转发(session/request_permission → 飞书/Telegram Allow/Deny 弹窗),但由于此 bug 无法创建 session。参见 chenhg5/cc-connect#1100。
Description
opencode acp的session/new始终返回-32603 Internal error: "No models available",即使 provider 已正确配置且
opencode run可以正常使用。这是阻断了 cc-connect 等 ACP bridge 工具通过 ACP 协议对接 OpenCode 的关键 bug。
Environment
~/.config/opencode/opencode.json已配置 DeepSeek provider,opencode run正常工作Reproduction
Actual Output
Root Cause Analysis
问题出在
src/server/routes/instance/index.ts。ACP 命令启动内部 HTTP 服务器时,
InstanceRoutes使用Context.empty()创建路由处理器,而不是正确初始化的 Effect 服务上下文。导致所有 SDK API 调用
(
GET /config,/config/providers,/session)返回 502 Bad Gateway,session/new因此报 "No models available"。使用
ExperimentalHttpApiServer.context替代Context.empty()可以修复此问题。Note
这个问题不同于已关闭的 #25568(PR #25591 修复的是 internal HTTP client 的 auth token 传递问题)。
即使 auth 正确,
Context.empty()导致的路由 502 仍然存在。Impact
此 bug 阻断了 OpenCode 通过 ACP 协议与 cc-connect 等 bridge 工具的完整集成。cc-connect 的 ACP 适配器已经实现了完整的交互式权限转发(
session/request_permission→ 飞书/Telegram Allow/Deny 弹窗),但由于此 bug 无法创建 session。参见 chenhg5/cc-connect#1100。