Problem
Two small UX papercuts at the prompt-input area:
-
The current version is invisible. The status row above the input shows model / token / cost telemetry but nothing about which reasonix version is running. When a user hits a bug, the first question I always ask back is "what version" — and they have to drop to the shell and run reasonix --version to find out. The info is right there at startup but scrolls off after one screen of activity.
-
No discoverable, one-step path from "I hit a bug" to "open an issue with diagnostics attached." Today the user has to leave the TUI, find the GitHub repo, click new-issue, then remember / look up version / OS / terminal / Node / model / locale and paste them in. Friction kills bug reports we'd otherwise get. A /feedback slash command alone doesn't fix this — most users will never type it because they don't know it exists.
Design
A. Always-visible version badge
Add v0.34.1 to the right-hand cluster of the prompt-input status row (alongside the existing model / cache chips, src/cli/ui/PromptInput.tsx). Cheap, anchors the eye, no interaction needed.
B. A visible feedback chip — discoverability is the whole point
A /feedback slash command alone is not enough. Render a small chip in the status row, e.g.:
… deepseek-v4-flash · v0.34.1 · [ feedback ↗ ]
The chip is the load-bearing affordance. It's discoverable simply because it's there.
Activation paths (all converge on the same handler):
- Mouse click on the chip — Reasonix already has mouse plumbing in the chat region. Wire the chip to the same path. Terminals without mouse reporting fall back to the next two.
- Slash command
/feedback — register it for keyboard-only / power users, and surface it in the chip's tooltip / hint where space allows.
- Keyboard shortcut — not a default. Hotkeys collide with readline / IME / shell; keep this one off the global keymap unless an RFC says otherwise.
The chip itself should look clickable: bracket framing, an ↗ glyph, and dim-but-not-faint color so it reads as actionable, not decorative.
C. Prefill the URL — don't trust clipboard
Original draft used the system clipboard. That's bad UX: most users won't know we copied anything, and they'll start typing into an empty issue body. Use GitHub's URL query params so the diagnostic is already in the textarea when their browser lands:
https://github.com/esengine/DeepSeek-Reasonix/issues/new
?title=<urlencoded title>
&body=<urlencoded markdown diag>
&labels=bug
GitHub respects ?title=, ?body=, ?labels= (comma-separated) on /issues/new. URL length cap on chromium-based browsers is 32 KB; our diagnostic fits in well under 1 KB even URL-encoded. Clipboard becomes a fallback only for the (very unlikely) case of an oversized body.
The pre-filled body:
<!-- describe what you were doing when this happened -->
---
**Reasonix**: 0.34.1
**Platform**: win32 (10.0.26200)
**Terminal**: Windows Terminal (TERM_PROGRAM=…, TERM=…)
**Node**: v22.10.0
**Locale**: zh-CN
**Model**: deepseek-v4-flash
The free-text comment lives at the top so the cursor lands on it; the diagnostic block is below the --- so the user doesn't have to scroll past it to write.
D. Open the URL
Wrap the platform-specific opener in src/cli/ui/open-url.ts:
- Windows:
cmd /c start "" "<url>"
- macOS:
open "<url>"
- Linux:
xdg-open "<url>"
Skip when process.env.CI is set, or when the user has set REASONIX_NO_OPEN=1. Print the URL to chat in either case so the user can copy it manually.
What does NOT belong in this issue
- Auto-attaching
events.jsonl, transcripts, file paths, or anything that could leak code / secrets. The diag block is fixed and small. Anything richer is opt-in and a separate issue.
- Filing through the GitHub API. We'd need a token; the URL hand-off keeps us tokenless.
- Anonymous telemetry / "send report" pipes. Out of scope.
Acceptance
- Status row shows
v<version> and [ feedback ↗ ] on every render where the input is shown.
- Clicking the chip (mouse-mode terminals) OR running
/feedback opens the prefilled GitHub new-issue URL with the diagnostic block already visible in the body, focus on the comment placeholder above the --- rule.
- A unit test pins the diagnostic field set so we can't accidentally regress to leaking session content.
- Falls back gracefully (prints URL to chat, optional clipboard copy) when the OS opener is unavailable or
REASONIX_NO_OPEN=1.
Problem
Two small UX papercuts at the prompt-input area:
The current version is invisible. The status row above the input shows model / token / cost telemetry but nothing about which
reasonixversion is running. When a user hits a bug, the first question I always ask back is "what version" — and they have to drop to the shell and runreasonix --versionto find out. The info is right there at startup but scrolls off after one screen of activity.No discoverable, one-step path from "I hit a bug" to "open an issue with diagnostics attached." Today the user has to leave the TUI, find the GitHub repo, click new-issue, then remember / look up version / OS / terminal / Node / model / locale and paste them in. Friction kills bug reports we'd otherwise get. A
/feedbackslash command alone doesn't fix this — most users will never type it because they don't know it exists.Design
A. Always-visible version badge
Add
v0.34.1to the right-hand cluster of the prompt-input status row (alongside the existing model / cache chips,src/cli/ui/PromptInput.tsx). Cheap, anchors the eye, no interaction needed.B. A visible feedback chip — discoverability is the whole point
A
/feedbackslash command alone is not enough. Render a small chip in the status row, e.g.:The chip is the load-bearing affordance. It's discoverable simply because it's there.
Activation paths (all converge on the same handler):
/feedback— register it for keyboard-only / power users, and surface it in the chip's tooltip / hint where space allows.The chip itself should look clickable: bracket framing, an
↗glyph, and dim-but-not-faint color so it reads as actionable, not decorative.C. Prefill the URL — don't trust clipboard
Original draft used the system clipboard. That's bad UX: most users won't know we copied anything, and they'll start typing into an empty issue body. Use GitHub's URL query params so the diagnostic is already in the textarea when their browser lands:
GitHub respects
?title=,?body=,?labels=(comma-separated) on/issues/new. URL length cap onchromium-based browsers is 32 KB; our diagnostic fits in well under 1 KB even URL-encoded. Clipboard becomes a fallback only for the (very unlikely) case of an oversized body.The pre-filled body:
The free-text comment lives at the top so the cursor lands on it; the diagnostic block is below the
---so the user doesn't have to scroll past it to write.D. Open the URL
Wrap the platform-specific opener in
src/cli/ui/open-url.ts:cmd /c start "" "<url>"open "<url>"xdg-open "<url>"Skip when
process.env.CIis set, or when the user has setREASONIX_NO_OPEN=1. Print the URL to chat in either case so the user can copy it manually.What does NOT belong in this issue
events.jsonl, transcripts, file paths, or anything that could leak code / secrets. The diag block is fixed and small. Anything richer is opt-in and a separate issue.Acceptance
v<version>and[ feedback ↗ ]on every render where the input is shown./feedbackopens the prefilled GitHub new-issue URL with the diagnostic block already visible in the body, focus on the comment placeholder above the---rule.REASONIX_NO_OPEN=1.