Skip to content

[Enhancement] peers 列表把同名 auto-name 的 bg-respawn 孤儿显示成多个独立 peer —— 建议按母体 sessionId 折叠 #40

Description

@NorveraFlorent

[Enhancement] peers 列表把同名 auto-name 的 bg-respawn 孤儿显示成多个独立 peer —— 建议按母体 sessionId 折叠

定性:显示层 enhancement,不是 hub 的产生型 bug。fork 的产生源在 Claude Code 上游(见下),hub 行为本身正确,只是显示可以更聪明。先把归属讲清楚,免得 debug 跑偏到 hub 内部。

环境

  • forge-hub: com.forge-hub daemon(bun ~/.forge-hub/hub.ts,KeepAlive)
  • Claude Code 2.1.154 / macOS 15

现象

fh hub peers 里同一个逻辑对话显示成多个 peer:

forge-85671 (Extract talking points for Silicon Valley article) [13h前]
forge-3417  (Extract talking points for Silicon Valley article) [2h前]   ← 同名,不同 id
forge-18036 (Debug conversation windows forking issue) ...

用户感知:"一个对话裂成好几个窗口"。

真根因在 Claude Code 上游(非 hub)

两条独立的 CC 原生机制各自产生"多实例",hub 只是如实显示:

  1. bg-respawn — session 切后台后,CC 的 background job 机制把它 respawn 成带全新 session id 的 job,且 nameSource:auto 自动起名撞车(同一对话的多个派生 job 拿到相同 name)。产物是 jsonl 几乎为空(只有 title+name)、内容在 state.json 的孤儿 job。本机实例:母体 e36cb49e 被 respawn 成 99f3e1db + cacf6b15,两者 name 同为 "Design file organization skill...",resumeSessionId 各指向自己、互不引用。

  2. resume-fork — CC 的 --resume 在多叉 jsonl 上选错 leaf(anthropics/claude-code #48270)+ file-history-snapshot 的 messageId 撞 message uuid 断链(#36583)。产物是有完整内容的多个 session 文件。本机实例:88ab1e7d 一个 session 内 58 个快照中 57 个 messageId 撞号、13 个分叉点。

hub 不产生这些,只是把它们注册成 peer 显示出来。 上游两个 bug(#36583/#48270)均 closed,改不了。

hub 能做的(显示层折叠)

  1. 按母体 sessionId / resumeSessionId 折叠 — 同一对话派生出的多个 job/leaf 折叠成一个 peer,而非各占一行。
  2. 识别并降权空壳孤儿 — jsonl 只有 title+name、实质内容在 state.json 的派生 job,标注或折叠,不当独立实例。
  3. auto-name 撞车去歧义 — 同 name 多 peer 时附 short-id / 创建时间,避免视觉上"同一个挂多个"。

不该让 hub 背的

fork/respawn 的产生本身(属 CC 上游 background job + resume 机制)。本 issue 只请求 hub 在显示层不放大歧义。

备注

  • forge-launcher 的 agents 列表是同源显示问题(同一批孤儿 job 的另一个 UI 投影),折叠逻辑可共用。
  • 用户侧缓解:重度文件写入工作流一口气跑完、少切后台,可减少 respawn/fork 触发。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions