Repository navigation
RTerm v3.7.3
RTerm v3.7.3 — AI-Native Terminal App by Hyperspace Technologies
v3.7.3 (2026-09-02)
Fix — duplicate tool definitions sent to the model (HTTP 400 on strict providers)
The bug: every plugin tool (agentspan_*, web_*, synapse_*,
fraudops_*, iam_*, patch_*, sop_*, …) was sent to the model
provider twice in the same request. Strict providers that validate
tool-name uniqueness (Grok 4.6, Fable 5.1) rejected the whole request
with HTTP 400 before the model even ran; lenient providers (OpenAI,
Anthropic, most OpenAI-compatible gateways) deduped silently — so the
malformed request looked like a provider-specific failure when it was
an RTerm request-building bug all along.
Root cause — two commits, each correct alone, double-appending
together: v3.1.8 (6bb8082) injected plugin schemas into the session
binding's toolsForModel so the model could see them; v3.4.0 (c009c46)
appended the same pluginToolSchemas again at bindTools() time to fix
async-wiring staleness. From v3.4.0 onward, builtInTools (derived from
the cached binding) already contained the plugin schemas, and the
bind-time spread added them a second time.
The fix, two layers:
- The session binding no longer carries plugin schemas — the bind-time
append is kept because it is the fresher source (setPluginTools
may run after a binding was cached). dedupeToolsByName()(new, exported fromAgentHelper/utils/model_config,
exposed viaAgentHelpers) now guards everybindTools()call —
primary and fallback — so no future duplicate source (built-in/MCP/
plugin collision, or a list appended twice) can ever reach a provider.
Regression spec: duplicateToolBinding.extreme.spec.ts — 9/9,
testing the real dedupeToolsByName() plus the exact bind-time
composition, including the historical double-append scenario and an
MCP/plugin name collision.
Verified: new spec 9/9; toolVisibility 6/6; parallelToolExecution
21/21; pluginRegistry 17/17; offensivePlugins 47/47; backend typecheck
clean (the one typecheck:web error in appTheme.extreme.spec.ts is
pre-existing on the v3.7.2 tag — verified by stashing).
Downloads
| Platform | File |
|---|---|
| macOS ARM64 | RTerm-3.7.3-arm64.dmg |
| Windows x64 (Portable) | RTerm.Portable.3.7.3-x64.exe |
| Windows x64 (Setup) | RTerm.Setup.3.7.3-x64.exe |
| Linux x64 (AppImage) | RTerm-3.7.3-x64.AppImage |
| Linux x64 (deb) | RTerm-3.7.3-x64.deb |
| Linux x64 (pacman) | RTerm-3.7.3-x64.pacman |
| Linux x64 (rpm) | RTerm-3.7.3-x64.rpm |
| Linux ARM64 (AppImage) | RTerm-3.7.3-arm64.AppImage |
| Linux ARM64 (deb) | RTerm-3.7.3-arm64.deb |
| Linux ARM64 (rpm) | RTerm-3.7.3-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