e9f2e6a829
When a heartbeat run results in HEARTBEAT_OK (or empty/duplicate), the user+assistant turns are now pruned from the session transcript. This prevents context window pollution from zero-information exchanges. Implementation: - captureTranscriptState(): records transcript file path and size before heartbeat - pruneHeartbeatTranscript(): truncates file back to pre-heartbeat size - Called in ok-empty, ok-token, and duplicate cases (same places as restoreHeartbeatUpdatedAt) This extends the existing pattern where delivery is suppressed and updatedAt is restored for HEARTBEAT_OK responses - now the transcript is also cleaned up. Fixes #17804