Repository navigation
RTerm v3.2.12
RTerm v3.2.12 — AI-Native Terminal App by Hyperspace Technologies
v3.2.12 (2026-08-22)
Bug fixes — chat console: response cleared and re-answered after completion
The reported bug: after the agent delivered a full response, the chat would
clear that response and start responding again to the already-completed task
unless the user clicked Stop. Root cause found in the task-completion guard,
plus two related defects fixed alongside.
-
Guard continue loop unbounded (the core bug). After the model produced
its final answer, thetask_completion_guardnode asked a thinking-model
"auditor" whether the task was truly done. The auditor prompt instructed it
to reject stopping "if there are reasonable alternative attempts/tools
left" — for open-ended tasks it can always invent one more verification
step, so it kept answeringfalse. Eachfalseremoved the assistant's
answer from the UI and forced the model to re-answer from scratch,
indefinitely. Live logs confirmed it ("Triggered continue. reason=…never
verified… optionally round-trip a test request…"). The guard is now bounded
to at mostTASK_COMPLETION_GUARD_MAX_CONTINUES(1) forced continues per
run; after that the run ends with the answer it produced. New graph state
guardContinueCount(reducer-backed) tracks it. -
Guard deleted the completed answer. On a forced continue the guard
calledemitRemoveMessageIfPresenton the assistant's last message — the
"clears that response" half of the bug. It no longer removes anything: the
answer stays in the transcript and the continue instruction arrives as a
new turn. -
Auditor prompt biased toward "not done". Rewrote
createTaskCompletionDecisionUserPrompt: true when the user's request was
answered/work performed; explicitly forbids inventing optional follow-up
work (extra checks, alternative approaches, further reading) as a reason to
continue; false only when a stated requirement is unmet or the answer is
factually wrong. -
Duplicate DONE per run. Both the agent's
final_outputnode and
GatewayService.dispatchTask's finally block emitteddone, so every run
finished twice in the UI. The agent now records its runId in
doneEmittedForRunIds; the gateway checksemittedDoneForRun(runId)and
skips its duplicate (still emitting when the agent threw before
final_output, so failed runs still produce exactly one DONE). -
FP: queued-insertion echo re-armed the spinner. A late
ADD_MESSAGE(user)with a non-normalinputKind(inserted/queued echo
arriving after DONE) setisThinking=truewith no run behind it, leaving
the chat stuck "thinking". The ChatStore handler now ignores non-normal
input kinds; the backend's run events drive the real state.
Tests
New v3212ChatFixes.extreme.spec.ts (12/12): guard bound (first continue
allowed, second blocked, missing count = 0, over-strict auditor terminates),
answer preservation on continue, DONE dedupe (exactly one per successful AND
failed run), and the UI re-arm guard (normal arms, inserted/queued echoes
don't, busy state unchanged, no-metadata treated as normal). Registered in
test:backend-unit-extreme. Full backend-unit / layout-ui / automation
suites green.
Downloads
| Platform | File |
|---|---|
| macOS ARM64 | RTerm-3.2.12-arm64.dmg |
| Windows x64 (Portable) | RTerm.Portable.3.2.12-x64.exe |
| Windows x64 (Setup) | RTerm.Setup.3.2.12-x64.exe |
| Linux x64 (AppImage) | RTerm-3.2.12-x64.AppImage |
| Linux x64 (deb) | RTerm-3.2.12-x64.deb |
| Linux x64 (pacman) | RTerm-3.2.12-x64.pacman |
| Linux x64 (rpm) | RTerm-3.2.12-x64.rpm |
| Linux ARM64 (AppImage) | RTerm-3.2.12-arm64.AppImage |
| Linux ARM64 (deb) | RTerm-3.2.12-arm64.deb |
| Linux ARM64 (rpm) | RTerm-3.2.12-arm64.rpm |
Install
macOS: After installing, run xattr -cr /Applications/RTerm.app to remove quarantine.
Linux AppImage: chmod +x RTerm-*.AppImage && ./RTerm-*.AppImage
Linux deb: sudo dpkg -i RTerm-*.deb
Linux rpm: sudo rpm -i RTerm-*.rpm
Contact: rterm@hyperspace.ng