The heartbeat runner used agent.write() (normal write), which persisted both the heartbeat prompt and HEARTBEAT_OK response as regular messages visible in the UI chat history. Switch to runInternalForResult() — a new AsyncAgent method that runs via runInternal() (messages marked internal: true, rolled back from in-memory state). This hides both the heartbeat prompt and response from the UI entirely, while still persisting to JSONL for diagnostics. The previous commit's event-stream heartbeat ACK filter remains as a defense-in-depth layer for edge cases. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| core | ||
| hooks | ||
| sdk | ||
| store | ||
| types | ||
| ui | ||
| utils | ||