feat(tui): UI improvements for messages, tool calls, text entry, etc#8156
feat(tui): UI improvements for messages, tool calls, text entry, etc#8156alexhancock merged 1 commit intomainfrom
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 22fefe2eed
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| ); | ||
| } | ||
|
|
||
| const showInputBar = !pendingPermission && !initialPrompt && !isViewingHistory; |
There was a problem hiding this comment.
Prevent pre-ready input from entering a stuck queue
The new showInputBar condition renders the input while the app is still initializing, so handleSubmit can run in the startup loading state and enqueue messages. At startup there is no in-flight sendPrompt call to trigger processQueue, so that queued message will not be sent until the user submits another prompt, and then it is sent out of order (new prompt first, queued prompt second). This only occurs when the user types before readiness, but it causes lost/incorrectly ordered first requests in that common path.
Useful? React with 👍 / 👎.
DOsinga
left a comment
There was a problem hiding this comment.
This is a nice cleanup — good simplification, net deletion of 105 lines, and idiomatic use of Ink's border primitives.
One issue to address in a follow-up: the input bar is now rendered during the splash/loading state, so users can submit messages before the client is ready. These get queued via handleSubmit, but nothing calls processQueue after initialization completes — the queue only drains when sendPrompt finishes a prompt. The fix is small: after setStatus("ready") in the initialization useEffect, add an else if (queueRef.current.length > 0) { processQueue(); } branch and add processQueue to the dependency array.
(Couldn't push the fix directly since the branch is already in the merge queue.)
* origin/main: (63 commits) remove name from blog post (#8157) fix: use `overflow: clip` to not disrupt sticky ToC (#8158) chore(deps): bump path-to-regexp from 0.1.12 to 0.1.13 in /documentation (#8161) chore(deps): bump node-forge from 1.3.2 to 1.4.0 in /documentation (#8145) refactor: goose-acp-server -> goose binary for TUI (#8155) fix "View as Markdown" feature not working (#8160) feat(tui): UI improvements for messages, tool calls, text entry, etc (#8156) feat(desktop): add i18n infrastructure with react-intl (#8105) fix(tui): ordering of messages (#8144) fix: extension command with quotes in cli (#8150) chore(aaif): Use Azure Artifact Signing for Windows (#8116) chore(aaif): Switch macOS code signing (#8076) Remove unused tool call json in logs (#8147) feat(tui): tab expand tool calls cleanly (#8136) fix: replace panics with user-friendly errors in CLI session builder (#7901) fix: read GOOSE_CONTEXT_LIMIT from config.yaml, not just env vars (#7900) fix: deliver truncation notice as separate content block (#7899) fix: use platform-appropriate commands in developer extension instructions (#7898) fix: replace any with proper SVG types in icon components (#7873) chore: remove debug console.log statements, stale comments, and dead code (#8142) ...
…lock#8156) Signed-off-by: Cameron Yick <[email protected]>
Make the UI nicer for splash screen, message spacing, tool calls, text entry. Things now use the full width, and spacing is nicer across the board.
Before
After