Skip to content

ui: surface current version + a one-step feedback affordance in the prompt-input status row #499

@esengine

Description

@esengine

Problem

Two small UX papercuts at the prompt-input area:

  1. 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.

  2. 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 shortcutnot 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions