feat(ui): /feedback + version badge in status row#501
Merged
Conversation
…agnostic clipboard When a user hits a bug, the first question back is "what version" — and the only way to find out today is to drop to the shell. Filing the issue itself means leaving the TUI, finding the repo URL, then either remembering or re-collecting version / OS / terminal / Node / locale / model. Both papercuts are easy to fix from the prompt-input surface. - StatusRow shows a `v<VERSION>` pill on the right cluster, gated to cols ≥ 70 so it doesn't crowd narrow terminals. - New `/feedback` slash: gathers version + platform + os release + TERM_PROGRAM/TERM + Node + locale + model + sessionId, writes a paste-ready Markdown block to the clipboard via the existing `writeClipboard` helper, then opens the GitHub new-issue URL in the default browser via a new cross-platform `openUrl` (win32 cmd /c start, darwin open, linux xdg-open). No-ops under CI / when REASONIX_NO_OPEN is set. - Diagnostic body contains exactly the seven advertised fields and nothing else — `tests/feedback.test.ts` pins the field set and asserts no API keys / file paths / transcript content can leak through. Closes #499
…tus row Two follow-ups so the affordance actually gets discovered and used: - The issue page now opens with the diagnostic block already in the textarea via `?body=<urlencoded>`. Most users won't notice we copied to clipboard; pre-filling the URL is the obvious path. Clipboard stays as belt-and-suspenders for when the URL fails to open. - StatusRow shows a `⚑ /feedback` hint after the version pill at cols ≥ 100 so users see the command exists. Narrower terminals (70–99 cols) still get the version, just without the hint. - Body length is capped at 6000 chars before encoding so a runaway diagnostic can't blow past the URL limit.
| } | ||
|
|
||
| try { | ||
| const child = spawn(cmd, args, { detached: true, stdio: "ignore" }); |
The original block had version + platform + TERM_PROGRAM + Node + locale + model + session — fine for "agent ran the wrong tool" reports, but useless for the rendering / flicker reports we actually field. Adds the fields that come up first when triaging those: - terminal size (cols×rows) — lots of repaint bugs only repro at specific widths - env markers that change the rendering pipeline: COLORTERM, WT_SESSION, TMUX, SSH_TTY, WSL_DISTRO_NAME — TERM_PROGRAM alone can't distinguish cmd / WSL / SSH-tunnelled terminals - theme name — different themes use different background fills, flicker is often theme-dependent - edit / plan mode — decides which surfaces are mounted, changes repaint cadence - latest version compare — surfaces "you're on an old build" without a follow-up question - reasoning effort + MCP server count — incidentally cheap, occasionally load-bearing for cost / latency reports Still no transcripts, paths, workspace name, or env outside the hand-picked safe list. New tests pin the exact field set so future fields can't sneak in unannounced.
ChasLui
pushed a commit
to ChasLui/DeepSeek-Reasonix
that referenced
this pull request
May 23, 2026
* feat(ui): version badge in status row + /feedback opens issue with diagnostic clipboard When a user hits a bug, the first question back is "what version" — and the only way to find out today is to drop to the shell. Filing the issue itself means leaving the TUI, finding the repo URL, then either remembering or re-collecting version / OS / terminal / Node / locale / model. Both papercuts are easy to fix from the prompt-input surface. - StatusRow shows a `v<VERSION>` pill on the right cluster, gated to cols ≥ 70 so it doesn't crowd narrow terminals. - New `/feedback` slash: gathers version + platform + os release + TERM_PROGRAM/TERM + Node + locale + model + sessionId, writes a paste-ready Markdown block to the clipboard via the existing `writeClipboard` helper, then opens the GitHub new-issue URL in the default browser via a new cross-platform `openUrl` (win32 cmd /c start, darwin open, linux xdg-open). No-ops under CI / when REASONIX_NO_OPEN is set. - Diagnostic body contains exactly the seven advertised fields and nothing else — `tests/feedback.test.ts` pins the field set and asserts no API keys / file paths / transcript content can leak through. Closes esengine#499 * feat(ui): pre-fill /feedback issue body via URL + surface chip in status row Two follow-ups so the affordance actually gets discovered and used: - The issue page now opens with the diagnostic block already in the textarea via `?body=<urlencoded>`. Most users won't notice we copied to clipboard; pre-filling the URL is the obvious path. Clipboard stays as belt-and-suspenders for when the URL fails to open. - StatusRow shows a `⚑ /feedback` hint after the version pill at cols ≥ 100 so users see the command exists. Narrower terminals (70–99 cols) still get the version, just without the hint. - Body length is capped at 6000 chars before encoding so a runaway diagnostic can't blow past the URL limit. * feat(ui): expand /feedback diagnostic with flicker-relevant fields The original block had version + platform + TERM_PROGRAM + Node + locale + model + session — fine for "agent ran the wrong tool" reports, but useless for the rendering / flicker reports we actually field. Adds the fields that come up first when triaging those: - terminal size (cols×rows) — lots of repaint bugs only repro at specific widths - env markers that change the rendering pipeline: COLORTERM, WT_SESSION, TMUX, SSH_TTY, WSL_DISTRO_NAME — TERM_PROGRAM alone can't distinguish cmd / WSL / SSH-tunnelled terminals - theme name — different themes use different background fills, flicker is often theme-dependent - edit / plan mode — decides which surfaces are mounted, changes repaint cadence - latest version compare — surfaces "you're on an old build" without a follow-up question - reasoning effort + MCP server count — incidentally cheap, occasionally load-bearing for cost / latency reports Still no transcripts, paths, workspace name, or env outside the hand-picked safe list. New tests pin the exact field set so future fields can't sneak in unannounced.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two small UX papercuts at the prompt-input area, both fixed in one PR:
v<VERSION>pill on the right cluster (after wallet, before the rule). Gated to cols ≥ 70 so narrow terminals don't get crowded./feedbackslash command:TERM_PROGRAM/TERM+ Node + locale + model + session id,writeClipboardhelper,openUrl(cmd /c start/open/xdg-open). No-ops underCIorREASONIX_NO_OPEN.The diagnostic block contains exactly the seven advertised fields — version / platform / terminal / Node / locale / model / session — and nothing else.
tests/feedback.test.tspins the field set and asserts no API keys, absolute paths, or transcript content can leak through.Activation surface follows the issue's "be honest about TUI constraints" guidance: ship the slash command first; mouse-clickable chip is a follow-up that can wire into the same handler when the host terminal reports clicks.
Closes #499
Test plan
tests/feedback.test.ts— 4 cases: field set + ordering, optionalSessionline, terminal fallback whenTERM_PROGRAM/TERMare absent, no leak of secrets / paths / transcripts.npm run verify(full suite, 2328 tests).