Skip to content

fix(renderer): exclude durable and unready RPC catalog entries from known Hosts - #758

Merged
BytePioneer-AI merged 1 commit into
BytePioneer-AI:mainfrom
ump45nose:fix/rpc-known-host-ids
Nov 7, 2026
Merged

BytePioneer-AI merged 1 commit into
BytePioneer-AI:mainfrom
ump45nose:fix/rpc-known-host-ids

Conversation

@ump45nose

Copy link
Copy Markdown
Contributor

Fixes #757

Summary

Codex Desktop 26.1027+ touches the RPC signal-family map during [remote-connections/bootstrap] catalog_synced for:

  1. "durable" — Desktop's built-in Long-lived Cloud Host (wss://codex-cloud-backend.chatgpt.com/), which has { status: "unavailable" } and is not a codexhost Host runtime.
  2. "remote-control:env_e_<id>" — cloud environments synced from the user's account catalog, which remain { status: "disconnected" } with generation: null when not connected.

Previously, rendererHostRpcHostIds returned [...discovery.family.keys()] unconditionally, causing knownHostIds() to expose "durable" and disconnected remote-control:env_e_<id> entries to Settings → Connections and Settings → Usage Statistics, where they rendered with fallback labels (durable and env_e_<id>) and failed Harness directory discovery.

Changes

  • packages/desktop-control/src/renderer-host-rpc-discovery.ts:
    • Reject "durable" in resolveRendererHostRpc and rendererHostRpcHostIds.
    • Filter discovery.family.entries() in rendererHostRpcHostIds so only entries with status === "ready", matching client.hostId, and a callable/object client.rpc are returned.
  • packages/desktop-control/src/renderer-host-rpc-routing.ts & packages/desktop-control/src/renderer-host-routing.ts:
    • Exclude "durable" from forHost and knownHostIds().
    • Filter knownHostIds() by connectionFor(hostId) !== null (and resolve(current, hostId) !== null for RPC entries) so disconnected remote-control: entries with generation: null are not advertised.
  • packages/renderer-extension/src/renderer-binding-probe.ts & packages/renderer-extension/src/renderer-usage-statistics-source.ts:
    • Guard against "durable" entering harnessAvailabilityByHost, connectionDiagnostics, activeModelHostId, or usage statistics Host lists.
  • Tests & Docs:
    • Added unit coverage in renderer-host-rpc-routing.test.ts, renderer-binding-probe-host-catalog.test.ts, and renderer-usage-statistics-source.test.ts.
    • Updated docs/architecture/official-traffic-ownership.md.

Validation

  • npm run build:typescript
  • npx vitest run --config tests/vitest.config.js packages/desktop-control/test/renderer-host-rpc-routing.test.ts packages/desktop-control/test/renderer-host-routing.test.ts packages/renderer-extension/test/renderer-binding-probe-host-catalog.test.ts packages/renderer-extension/test/renderer-usage-statistics-source.test.ts packages/renderer-extension/test/settings/pages.test.ts (5 files, 196 tests passed)
  • npm run build:renderer
  • npm run typecheck
  • npm run lint
  • npm run format:check

@coderabbitai

coderabbitai Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

Explain Change →

No actionable comments were generated in the recent review.

Summary

Summary by CodeRabbit

  • 问题修复
    • 优化 Host 发现与连接状态判断:仅将符合条件且已连接的 Host 列入已知列表;连接不可用时不提供对应路由。
    • 内置的 durable Host 不再作为外部 Harness 路由或已连接 Host 展示,也不会触发相关检查和诊断。

本次更新调整 Host 发现和路由筛选,排除内置 durable Host 及连接不可用的目录项。Renderer Extension 的连接诊断和用量统计也过滤 durable,并新增或更新相关测试。

Changes: Host 发现与展示

Layer / File(s) Summary
Host 发现与路由过滤
docs/architecture/official-traffic-ownership.md, packages/desktop-control/src/renderer-host-routing.ts, packages/desktop-control/src/renderer-host-rpc-discovery.ts, packages/desktop-control/src/renderer-host-rpc-routing.ts, packages/desktop-control/test/renderer-host-rpc-routing.test.ts
路由解析不再为 durable 创建路由。已知 Host 列表排除 durable 和连接为 null 的 Host;RPC Host 还需具有可读取、状态为 ready 且结构有效的 RPC。测试覆盖连接不可用、恢复及 durable 路由过滤。
连接诊断中的 durable 过滤
packages/renderer-extension/src/renderer-binding-probe.ts, packages/renderer-extension/test/renderer-binding-probe-host-catalog.test.ts
模型 Host、插件查询、Harness 可用性刷新和连接诊断路径跳过 durable。新增测试验证诊断列表不包含该 Host,且不会调用其 Harness 接口。
用量统计 Host 过滤
packages/renderer-extension/src/renderer-usage-statistics-source.ts, packages/renderer-extension/test/renderer-usage-statistics-source.test.ts
用量统计从已知 Host ID 中过滤 durable;测试 mock 增加该 Host。

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix · Severity of issue fixed: Medium

Possibly related PRs

Suggested labels: 范围:桌面界面

Suggested reviewers: bytepioneer-ai

Merge Risk: Minimal · up to c5b65

This change keeps Desktop's built-in durable entry and disconnected remote-control entries out of Host discovery, routing, Harness probing, and the Connections and Usage Statistics lists. Ready, connected Hosts continue to appear as before. No concrete merge-blocking defect was established. The one open question is whether Desktop's durable Composer is affected, and it can only be answered by checking real Desktop behavior.

Pre-merge checks: Passed 4

Check name Status Explanation
Title check Passed 标题准确概括了从已知 Host 中排除 durable 和未就绪 RPC 目录条目的主要变更。
Description check Passed 描述与变更相关,说明了 Host 发现、路由、探测、测试和文档的更新。
Linked Issues check Passed [#757] RPC 发现排除 durable 和未就绪客户端。路由过滤无连接的 Host,并禁止 durable 路由。绑定探测和统计列表增加 durable 过滤。测试覆盖断开、恢复、SSH Host 和 durable。
Out of Scope Changes check Passed [#757] 代码、测试和架构文档均与 Host 发现、路由或界面过滤有关。未发现无关变更。
Finishing Touches

Generate unit tests (beta)

  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

Recent review info

Run configuration

Commits

Reviewing files that changed from the base of the PR and between 39c9565 and c5b655b.

Files selected for processing: 9

  • docs/architecture/official-traffic-ownership.md
  • packages/desktop-control/src/renderer-host-routing.ts
  • packages/desktop-control/src/renderer-host-rpc-discovery.ts
  • packages/desktop-control/src/renderer-host-rpc-routing.ts
  • packages/desktop-control/test/renderer-host-rpc-routing.test.ts
  • packages/renderer-extension/src/renderer-binding-probe.ts
  • packages/renderer-extension/src/renderer-usage-statistics-source.ts
  • packages/renderer-extension/test/renderer-binding-probe-host-catalog.test.ts
  • packages/renderer-extension/test/renderer-usage-statistics-source.test.ts

Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 7 remain after this review.

Recent review details

Context from checks skipped due to timeout: 5

  • GitHub Check: CodeRabbit
  • GitHub Check: Check ubuntu-22.04
  • GitHub Check: Check windows-latest
  • GitHub Check: Check Linux ARM64
  • GitHub Check: Check macos-26
Additional context used

Code guidelines: 2

CLAUDE.md — auto-discovered
AGENTS.md — auto-discovered
Path-based instructions: 2

Source excerpt: `renderer-extension` must not import Node.js built-ins, Electron private APIs, or Harness SDKs.

CodeRabbit inference engine (CLAUDE.md)

Files:

  • packages/renderer-extension/src/renderer-usage-statistics-source.ts
  • packages/renderer-extension/test/renderer-usage-statistics-source.test.ts
  • packages/renderer-extension/test/renderer-binding-probe-host-catalog.test.ts
  • packages/renderer-extension/src/renderer-binding-probe.ts
Source excerpt: `codexhost` runs external Agent Harnesses as independent Threads inside Codex Desktop, preserving the official shell and native Codex path.

CodeRabbit inference engine (AGENTS.md)

Files:

  • packages/renderer-extension/src/renderer-usage-statistics-source.ts
  • packages/renderer-extension/test/renderer-usage-statistics-source.test.ts
  • docs/architecture/official-traffic-ownership.md
  • packages/renderer-extension/test/renderer-binding-probe-host-catalog.test.ts
  • packages/desktop-control/src/renderer-host-routing.ts
  • packages/desktop-control/test/renderer-host-rpc-routing.test.ts
  • packages/desktop-control/src/renderer-host-rpc-routing.ts
  • packages/desktop-control/src/renderer-host-rpc-discovery.ts
  • packages/renderer-extension/src/renderer-binding-probe.ts
Additional comments: 1

packages/renderer-extension/src/renderer-binding-probe.ts: 1

786-786: Functional Correctness

没有证据表明 durable Composer 会通过挂载检查。

如果 durable 草稿通过检查且进入所述输入路径,输入可能被阻止。但现有代码和测试没有确定该 Desktop Composer 的 DOM 和类型,因此不能据此要求跳过拦截。

@BytePioneer-AI
BytePioneer-AI merged commit d5d6e5f into BytePioneer-AI:main Nov 7, 2026
4 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Desktop 26.1027+: reserved durable Host and disconnected remote-control catalog entries appear as unknown devices in Settings → Connections

2 participants