Repository navigation
fix(desktop): agent graph appears frozen while 0/7 operators are running (no heartbeat) #3878
Description
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 settledfor an extended period.settledonly countscompleted/failed/aborted/cancelled(agent-graph-panel.tsx: progress.settled), so 7 operators inrunningkeep the counter at0/7with 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 parallellocal-readoperators look like a static list. - Chat shows
Yield agent graph 64 msand调度完成,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
Spinneris shown whenloading && !snapshot(agent-graph-panel.tsx:452). Once a snapshot exists withstatus: 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-readsource-archaeology operators), the only visible change is0/7 → 7/7at the very end. Users in the 10-30s window often conclude the graph is stuck and pressStop Graphor 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:23orDispatched 3/7 · Settled 0/7) to break the static-number illusion. - Optional per-operator live preview / incremental log line from
childSessionId/snapshot.work[].instructionPreviewso homogeneouslocal-readbatches look differentiated. - Indeterminate linear progress in the header while
activeis true, as a fallback heartbeat.
How to reproduce
- Start a session that triggers an Agent Graph with fan-out (e.g. prompt that creates 7
local-readoperators:pi,hermes-agent,oh-my-pi(can1357/oh-my-pi),openclaw,cline,kilocode,freebuffas in the screenshot). - Observe the
Agent Graphpanel header:Running · 0/7 settled(zh:运行中 · 0/7 已结束). - Observe the 7 operator rows: all show static blue dot
Runningand no animation for >15s. - Observe the main chat: after
调度完成...已交棒给 graphno further streaming in the parent session. - Note the lack of any pulsing dot, spinner, elapsed time, or progress bar despite
window.maka.graphs.subscribereceiving 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 progresscopy.status(snapshot.status) · copy.progress(settled,total,omitted)+ conditionalstopAvailable/dismissAvailableapps/desktop/src/renderer/agent-graph-panel.tsx:452—Spinneronly onloading && !snapshotapps/desktop/src/renderer/agent-graph-panel.tsx:488-494— operator row<span className="maka-agent-graph-status-dot">+operatorStatus+waitapps/desktop/src/renderer/styles/*.css—.maka-agent-graph-status-dot { width:7px; height:7px; background: var(--muted-foreground) }with color overrides only, noanimationapps/desktop/src/renderer/agent-graph-panel-visibility.ts— panel show/hide gating (not related to liveness)
Suggested minimal fix (incremental):
- Add CSS pulse to
running/runnabledots (1.5sscale+opacityloop) and a header heartbeatSpinner/pulse whensnapshot.status === 'active'|'waiting'|'closing'. - Add elapsed ticker next to
settled/total(derived fromsnapshotsubscription age orscheduleRevisiontimestamp) or split intoDispatched/Running/Settled. - Surface per-operator incremental preview from
snapshot.work/ child session streaming to break homogeneous-list illusion. - 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
ggbdpq commentedon Sep 1, 2026
take
fix(desktop): keep the Agent Graph panel visibly alive while operator…
fix(desktop): keep the Agent Graph panel visibly alive while operator…
fix(desktop): keep the Agent Graph panel visibly alive while operator…
fix(desktop): keep the Agent Graph panel visibly alive while operator…
fix(desktop): keep the Agent Graph panel visibly alive while operator…
fix(desktop): keep the Agent Graph panel visibly alive while operator…
fix(desktop): keep the Agent Graph panel visibly alive while operator…
fix(desktop): keep the Agent Graph panel visibly alive while operator…
fix(desktop): keep the Agent Graph panel visibly alive while operator…
fix(desktop): keep the Agent Graph panel visibly alive while operator…
fix(desktop): keep the Agent Graph panel visibly alive while operator…
fix(desktop): keep the Agent Graph panel visibly alive while operator…
fix(desktop): keep the Agent Graph panel visibly alive while operator…