Skip to content

长会话打开分支图时 dagre 布局栈溢出会清空前端 #89

Description

@XunFengCC

现象

Arkloop Desktop Dev 打开一个较长会话后,页面先正常显示约一秒,随后整个内容区变成空白/黑屏。Command+R 重新加载后会重复同样现象。

同一时间 channel/worker 仍在工作,Telegram/QQ 入站消息仍能处理。

环境

  • Arkloop Dev: 26.3.27
  • macOS Desktop / Electron dev
  • 触发区域:右侧 ConversationGraphPanel / 分支图面板

报错

Renderer console 中出现:

RangeError: Maximum call stack size exceeded
    at .../dagre.js
    at dfs (...)

React 随后提示:

An error occurred in the <ConversationGraphPanel> component.

本地排查数据

抓到的 graph API 请求返回 200:

  • threads: 1
  • graph nodes: 1832
  • edges: 1831
  • self edges: 0
  • missing edges: 0
  • detected cycles: 0

这次样本是长线性会话图。当前后端 maxThreadGraphMessages = 2000,这个上限仍可能触发前端 dagre 递归布局栈溢出。

预期行为

分支图太大或布局失败时,应该只让分支图面板降级、显示错误态或使用 fallback 布局,不应该清空整个 Arkloop 前端。

实际行为

ConversationGraphPanel 抛错后,React root 被清空,用户看到整个页面空白。

可能修复方向

  • 在调用 dagre.layout 前增加大图 guard。
  • dagre.layout 抛错时 fallback 到简单迭代布局,或显示“图过大,暂不渲染”。
  • ConversationGraphPanel 或右侧面板加 error boundary,避免单个面板炸掉整个 app。
  • 增加长线性 graph 的测试用例,例如 1800+ 节点、接近后端 2000 message cap 的情况。

本地临时验证过一种修法:小图继续用 dagre,大图或 dagre 抛错时走简单 fallback layout;1832 节点长链测试和实际窗口 reload 均通过。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Status
    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions