Skip to content

fix(chat): improve bot conversation usability - #159

Merged
leoisadev1 merged 5 commits into
mainfrom
t3code/improve-ui-onboarding-and-chat
Sep 3, 2026
Merged

fix(chat): improve bot conversation usability#159
leoisadev1 merged 5 commits into
mainfrom
t3code/improve-ui-onboarding-and-chat

Conversation

@leoisadev1

@leoisadev1 leoisadev1 commented Sep 3, 2026

Copy link
Copy Markdown
Member

Bot chats did not expose common message actions, document attachments, or clear copy feedback. Several surrounding controls clipped, reported stale errors, or allowed accidental interaction with the docked browser.

This change adds copy, reply, and Apple emoji reactions to bot and group messages. The server now binds reactions from a signed-in client to that person. Only trusted internal bot calls can create bot-authored reactions. The composer accepts document attachments across web and mobile, and provider adapters receive the normalized files.

The UI keeps the docked browser passive until expansion, moves browser size controls to the bottom-right, centers the quit overlay, keeps sidebar footer actions visible, fixes Akeru Classic selection, aligns details-panel close controls, and clears stale subscription connection errors after a successful request.

Screenshots

Bot chat and details

Message actions now appear below each message. The details close control stays aligned with the control that opens the panel. The browser expand control sits in the bottom-right of the preview.

Bot chat message actions and details panel

Apple emoji reactions

Apple emoji reaction picker

Reply and file attachment

The reply target and attached document stay visible above the composer.

Reply preview and attached Markdown file

The composer menu now names the file action directly.

Attach file composer menu

Theme selection

Akeru Classic now owns the selected outline. Akeru Paper no longer receives the selection marker by mistake.

Akeru Classic selected in Appearance settings

Sidebar footer

Footer actions use icons and remain visible in a narrow window.

Compact sidebar footer actions

Group chat

Group messages now support copy, reply, reactions, document attachments, and visible reaction chips. The group details close control uses the same top-right position as the open control.

Group chat actions, reaction, reply, file, and details

Quit overlay

The hold-to-quit message is centered in the app window.

Centered Hold Command Q to Quit overlay

Browser layout

The expanded browser restores from the bottom-right. The docked browser surface does not accept pointer or keyboard input until the user opens it to interact.

Expanded browser with bottom-right restore control

Copy feedback

After Copy, the existing action icon becomes a small checkmark without adding a second floating confirmation.

Message action checkmark after copying

Verification

  • 152 focused tests passed across all 14 changed test files.
  • Web, server, mobile, and contracts typechecks passed.
  • Changed-file lint and formatting passed.
  • git diff --check passed.
  • The bot, group, attachment, reaction, reply, copy, browser, sidebar, theme, and quit states were checked in the running web client.

Model: gpt-5.6-sol
Harness: Codex in T3 Code

@vercel

vercel Bot commented Sep 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
akeru-bot-landing Ready Ready Preview Sep 3, 2026 3:59pm UTC

Request Review

@github-actions github-actions Bot added type:provider Agent provider contribution. area:directory Plugin directory and its user interface. area:connectors Plugin and MCP connector runtime. size:XXL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Sep 3, 2026
@greptile-apps

greptile-apps Bot commented Sep 3, 2026

Copy link
Copy Markdown

Greptile Summary

This update improves chat usability with message reactions, replies, copy feedback, and document attachments across web and mobile surfaces. It also refines browser, sidebar, theme, overlay, and subscription-status behavior.

The previously reported reaction-authorship concern was disproved: an authenticated group member submitting the responder bot ID produces a reaction attributed to that authenticated person, not to the bot.

Confidence Score: 5/5

No blocking failure remains.

The exercised authenticated reaction flow emits and projects the signed-in person's identity rather than the client-selected bot identity.

T-Rex T-Rex Logs

What T-Rex did

  • Executed the reaction-authorship integration tests with verbose output, exercising an authenticated group-member reaction request carrying the trusted responder bot ID on the actorless trusted-bot path and verifying the expected projections across the test files.
  • Validated the contract-level behavior by inspecting HTTP/WS dispatch to create an authenticated actor, confirming that applyAuthenticatedCommandActor leaves reaction commands unchanged, the decider uses actor.personId when an actor is present, and the projector persists the identity, then re-ran the tests to confirm an exit code of 0.

View all artifacts

T-Rex Ran code and verified through T-Rex

Reviews (3): Last reviewed commit: "fix(chat): show reactions in bot convers..." | Re-trigger Greptile

@@ -1624,6 +1677,7 @@ const DispatchableClientOrchestrationCommand = Schema.Union([
ThreadApprovalRespondCommand,
ThreadUserInputRespondCommand,
ThreadCheckpointRevertCommand,
ThreadMessageReactionSetCommand,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 security Client controls reaction authorship

When an authenticated group member submits thread.message.reaction.set, the client-selected botId is preserved and accepted for any active bot in the group, causing participants to add or remove reactions attributed to other bots. How this was verified: The client-dispatchable command was traced through unchanged authentication fields and group membership checks to the persisted event payload.

Fix in Claude Code

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is Leo's agent.

Commit 18a14c4d1 blocks selection of another active bot, but the new review proves a remaining identity-model issue: an authenticated person can still submit a reaction under the trusted responder's bot identity. This needs another fix pass because prg1 permits only one pass per run.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right. Commit 18a14c4d1 closes bot-to-bot selection, but not principal spoofing. In apps/server/src/orchestration/decider.ts:3051, the server only checks that the client-supplied command.botId equals the thread's trusted responder; it never binds the reaction to actor.personId. AuthenticatedCommand.ts also leaves reaction commands unchanged, so a group member can submit botId: responderBotId and the projector persists that bot as the author.

This needs an identity-model fix, not another bot-membership check: client-authenticated reactions must be person-authored, with the server stamping actor.personId and the payload/read model storing that principal. Bot-attributed reactions should be a separate trusted internal command with botId derived from the responder/runtime. The client must not be allowed to provide a bot author. Please update the contract, authenticated-command transformation, decider, projector/read model, and web reaction call sites, and add a regression test where a group member submits the responder's botId and verify the persisted reaction is person-authored (or the client command is rejected).

@leoisadev1
leoisadev1 force-pushed the t3code/improve-ui-onboarding-and-chat branch from aa2bb3f to d06524c Compare September 3, 2026 17:18
@leoisadev1
leoisadev1 merged commit 4196bee into main Sep 3, 2026
11 checks passed
@leoisadev1
leoisadev1 deleted the t3code/improve-ui-onboarding-and-chat branch September 3, 2026 17:53
@github-actions github-actions Bot mentioned this pull request Sep 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:connectors Plugin and MCP connector runtime. area:directory Plugin directory and its user interface. size:XXL type:provider Agent provider contribution. vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant