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 触发。

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions