Skip to content

fix(desktop): agent graph appears frozen while 0/7 operators are running (no heartbeat) #3878

Closed

Description

@me2seeks

What happened

When an Agent Graph fans out, the Desktop panel looks frozen even though work is in progress, which makes users think Maka is idle.

Observed in ScreenShot_2026-08-26_150336_899.png (7× local-read graph):

  • Header shows Agent Graph Running · 0/7 settled for an extended period. settled only counts completed/failed/aborted/cancelled (agent-graph-panel.tsx: progress.settled), so 7 operators in running keep the counter at 0/7 with no intermediate movement.
  • Each operator row shows a static blue dot (● Running / 运行中) + Open child task. The dot only changes color via CSS (apps/desktop/src/renderer/styles/*.css: .maka-agent-graph-status-dot → running/runnable → --status-running, completed → --success) with no pulse/animation, so 7 parallel local-read operators look like a static list.
  • Chat shows Yield agent graph 64 ms and 调度完成,graph已创建 7个 local-read ... 正等待派发, then goes silent. The main transcript stops streaming while all work moves to child sessions, reinforcing the "stalled" impression.
  • The panel's only Spinner is shown when loading && !snapshot (agent-graph-panel.tsx:452). Once a snapshot exists with status: active/waiting/closing, there is no global heartbeat (no spinner, progress bar, or elapsed timer).

User impact:

  • With homogeneous fan-out (e.g. 7 local-read source-archaeology operators), the only visible change is 0/7 → 7/7 at the very end. Users in the 10-30s window often conclude the graph is stuck and press Stop Graph or reload.
  • This is a liveness signal gap, not a performance bug: mod+n / scheduling is correct, but the UI provides no continuous "alive" feedback.

Expected:

  • Running operators should animate (pulse) and the header should show a persistent heartbeat when status ∈ {active, waiting, closing}.
  • Time dimension next to 0/7 (e.g. · Running 00:23 or Dispatched 3/7 · Settled 0/7) to break the static-number illusion.
  • Optional per-operator live preview / incremental log line from childSessionId / snapshot.work[].instructionPreview so homogeneous local-read batches look differentiated.
  • Indeterminate linear progress in the header while active is true, as a fallback heartbeat.

How to reproduce

  1. Start a session that triggers an Agent Graph with fan-out (e.g. prompt that creates 7 local-read operators: pi, hermes-agent, oh-my-pi (can1357/oh-my-pi), openclaw, cline, kilocode, freebuff as in the screenshot).
  2. Observe the Agent Graph panel header: Running · 0/7 settled (zh: 运行中 · 0/7 已结束).
  3. Observe the 7 operator rows: all show static blue dot Running and no animation for >15s.
  4. Observe the main chat: after 调度完成...已交棒给 graph no further streaming in the parent session.
  5. Note the lack of any pulsing dot, spinner, elapsed time, or progress bar despite window.maka.graphs.subscribe receiving snapshots.

Screenshot: /home/me2seeks/ScreenShot_2026-08-26_150336_899.png (0/7, 7× SOURCE ARCHAEOLOGY OPERATOR — project: oh-my-pi / freebuff / cline / openclaw ..., all 运行中).

Environment

  • Maka version or commit: 2b4c0deaa (main, 2026-08-26)
  • OS and version: Linux (also visible on macOS/Windows — UI issue, not platform-specific)
  • Surface: Desktop (Electron + Renderer, apps/desktop/src/renderer/agent-graph-panel.tsx)
  • Node.js version: N/A (desktop build)

Logs, screenshots, or additional context

No runtime error. Graph scheduling is correct; only the presentation layer lacks liveness.

Relevant code:

  • apps/desktop/src/renderer/agent-graph-panel.tsx:82-135 — copy (progress: settled/total, status: active/running...)
  • apps/desktop/src/renderer/agent-graph-panel.tsx:390-410 — header progress copy.status(snapshot.status) · copy.progress(settled,total,omitted) + conditional stopAvailable/dismissAvailable
  • apps/desktop/src/renderer/agent-graph-panel.tsx:452 — Spinner only on loading && !snapshot
  • apps/desktop/src/renderer/agent-graph-panel.tsx:488-494 — operator row <span className="maka-agent-graph-status-dot"> + operatorStatus + wait
  • apps/desktop/src/renderer/styles/*.css — .maka-agent-graph-status-dot { width:7px; height:7px; background: var(--muted-foreground) } with color overrides only, no animation
  • apps/desktop/src/renderer/agent-graph-panel-visibility.ts — panel show/hide gating (not related to liveness)

Suggested minimal fix (incremental):

  1. Add CSS pulse to running/runnable dots (1.5s scale+opacity loop) and a header heartbeat Spinner/pulse when snapshot.status === 'active'|'waiting'|'closing'.
  2. Add elapsed ticker next to settled/total (derived from snapshot subscription age or scheduleRevision timestamp) or split into Dispatched/Running/Settled.
  3. Surface per-operator incremental preview from snapshot.work / child session streaming to break homogeneous-list illusion.
  4. Optional indeterminate header progress bar while active.

Related: the previous display-fix #3876 (⌘ N on Windows) was the same class of bug — correct behavior, wrong display signal.

中文详情 / Chinese details

如 ScreenShot_2026-08-26_150336_899.png 所示,Graph 过程中页面看起来“没在动”:Agent Graph 运行中 · 0/7 已结束 长时间不变,7 个 local-read(pi / hermes-agent / oh-my-pi / openclaw / cline / kilocode / freebuff)全显示静态蓝点 运行中 + 打开子任务,聊天区在 调度完成,graph已创建...正等待派发给子会话执行 后不再流式,用户很容易误以为 Maka 没在工作。

原因:progress.settled 仅统计 completed/failed/aborted/cancelled,7 个 running 会让 0/7 卡很久;status-dot 只有颜色无动画;Spinner 仅在 loading && !snapshot 时出现,active 状态下无全局心跳;local-read 同构扇出缺少逐个 completed 的视觉反馈。

预期:running 点加脉冲、header 常驻心跳、计数旁加 已运行 00:23 或 已分发 3/7、子任务增量预览、header 进度条兜底。属于 UX 存活感缺失,非性能 bug。

复现:触发 7 算子扇出的 Graph → 观察 0/7 与 7 个静态 运行中 → 观察主会话停止流式 → 无心跳反馈。

Activity

  1. added theissue type on Aug 29, 2026
  2. ggbdpq commented on Sep 1, 2026

    @ggbdpq
    Contributor

    take

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

Metadata

Metadata

Assignees

Labels

bugSomething isn't workinghelp wantedExtra attention is needed

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions