Emoji support: message-box picker, :shortcode: autocomplete, and reactions the agent learns from - #7
Merged
Conversation
…ions Input side: an emoji flyout button next to Send inserts at the caret, and Slack-style :shortcode: typing pops the existing suggestion list (exact :name: auto-replaces inline). Transcript side: hovering an agent response reveals a ghosted add-reaction button that opens a floating picker card; chosen emojis render as pills under the message and ride along with the user's next message as a clearly-framed feedback preamble, so the model sees how the user reacted without any harness or protocol changes. Transcript scrollbars are now theme-colored as well.
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
This PR makes conversations with the agent more expressive in three ways: users can now insert emojis while composing messages, complete emoji shortcodes as they type, and react to the agent's responses — with those reactions passed along to the AI model as feedback it can adjust to. It also includes a small visual polish fix for scrollbars.
No changes were made to the agent protocol, the model integration, or any backend behavior — everything here is user-interface work plus message composition.
What's new
1. Emoji picker in the message box
A smiley button now sits between the message input and the Send button. Clicking it opens a small card with 64 curated emojis (faces, gestures, and developer favorites like the bug and rocket). Picking one inserts it exactly where the user's cursor is. The card also reminds users that Win + . opens the full Windows emoji picker. The button disables itself whenever the input is locked (e.g., while a plan approval is pending), so emojis can never be injected at the wrong moment.
2. Emoji shortcodes while typing
Typing a colon followed by a couple of letters (for example
:fi) pops up the same suggestion list used for slash-commands and file mentions, showing matching emoji shortcodes such as:fire:🔥. Users can accept with Enter, Tab, or a click. Typing a complete code like:fire:converts to the emoji instantly, the way Slack does it. About 70 common names and aliases are supported, and ordinary uses of colons (like times or:)faces) never trigger the popup.3. Reactions on agent responses — delivered to the model
Hovering over any agent response reveals a subtle "add reaction" button next to the existing Copy button (the same pattern Teams and Slack use). Clicking it opens a floating picker with seven quick choices (👍 👎 ❤️ 🔥 🎉 🤔 😂) and a "More" section with the full set. Chosen reactions appear as small pills under the message; clicking a pill removes it. Users can react to the latest response or scroll back to older ones, with multiple reactions per message supported.
The differentiator: reactions are not just cosmetic. When the user sends their next message, any reactions they left are included with it as clearly labeled feedback — for example, "the user reacted 🔥 to your response beginning: 'Here's the refactored version…'". The model reads this as a factual signal (explicitly framed so it is never mistaken for something the user typed) and can adjust course accordingly. Reactions are only delivered with real messages to the model — slash-commands and shell commands don't consume them — and removing a reaction before the next send retracts it entirely.
4. Theme-matched scrollbars in the chat view
Scrollbars inside the chat transcript (the main scroll, code blocks, and the new reaction picker) previously used the browser's default gray styling regardless of the app theme. They now draw from the active theme's colors.
Why it matters
Reacting with an emoji is far lower-friction than typing "that was good" or "not quite right" — and because the reaction reaches the model, it becomes a lightweight steering mechanism, not just decoration. The input-side features bring the app up to par with the emoji ergonomics users expect from modern messaging tools.
Scope and risk
How to verify
:fire:in the message box — confirm it converts to 🔥, and that typing:fioffers suggestions.