Skip to content

[Bug] opencode v1 复用固定回环端口,会话恢复/回滚时 fetch failed #434

Description

@tingfeng347

Area

Harness Adapter

Summary

opencode v1 的 serve --port=0 并不使用临时端口,而是绑定默认端口 127.0.0.1:4096(v2 才是真正的临时端口)。codexhost 为每个 Session 启动一个受管的原生 serve 进程,因此所有 v1 Session 共用同一个回环 origin。

Node 的全局 fetch 连接池按 origin 复用 keep-alive 连接。上一个受管 Server 退出后,针对同一 origin 的下一个请求可能复用连接池中已经失效的 socket,从而报 fetch failed。表现为:

  • 恢复(resume / 重新 open)Session 时:OpenCode health check failed: fetch failed
  • 打开回滚(rollbackLastTurn)Session 时:OpenCode Provider list failed: fetch failed

Expected behavior

同一 v1 CLI 下,连续创建 / 恢复 / 回滚 Session 都应成功;每个受管 Server 使用独立的回环端口(与 v2 的 --port=0 语义一致)。

Actual behavior

在 Linux(opencode v1.18.33)上,仓库自带的真实 CLI 测试可确定性复现:

  • packages/adapters/opencode/test/opencode-adapter.real.test.ts 在 resume 处失败:OpenCode health check failed: fetch failed
  • packages/adapters/opencode/test/opencode-adapter.rollback.real.test.ts 打开回滚 Session 时失败:OpenCode Provider list failed: fetch failed

同一提交在 opencode v2.0.18 上通过(v2 使用随机临时端口,origin 不会重复)。

Reproduction

环境:Arch Linux x86_64,Node v26.10.0,codexhost 源码 main(636b5013),opencode v1.18.33。

CODEXHOST_OPENCODE_REAL_COMMAND=<opencode v1 可执行文件> \
  npx vitest run --config tests/vitest.config.js \
  packages/adapters/opencode/test/opencode-adapter.real.test.ts \
  packages/adapters/opencode/test/opencode-adapter.rollback.real.test.ts

观察到 resume / 回滚处报 fetch failed;ss -ltnp 可见多个受管 Server 依次绑定 4096。

codexhost version

源码 main(commit 636b5013,对应最新 release v0.10.2)

Codex Desktop version

不适用(直接运行 Adapter 的真实 CLI 测试)

OS / Architecture

Arch Linux x86_64

Installation

Source / 源码

Harness / Version

OpenCode v1.18.33(opencode-ai 最新 1.x);对照 OpenCode v2.0.18

Connection

Local

Redacted logs / Screenshots

Error: OpenCode health check failed: fetch failed
Error: OpenCode Provider list failed: fetch failed

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:adapterHarness Adapter 原生能力接入area:threadThread、历史、恢复与协作优先级:高影响较多用户的核心功能,但有可行的临时规避办法类型:缺陷反馈报告现有行为异常;不代表根因已确认或已完成复现

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions