Repository navigation
Open group Channels as a native mobile chat with @mentions, like Bot DMs - #1879
DoodleBears wants to merge 13 commits into
Conversation
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LzUNRQhy85WgjWULziwrxc
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LzUNRQhy85WgjWULziwrxc
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LzUNRQhy85WgjWULziwrxc
… fade Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LzUNRQhy85WgjWULziwrxc
Group Channels used to open the embedded full client. They now use the same native chat screen as a DM: the screen moves to src/ui/chat/conversation-screen.tsx and takes a DM or a Channel. Bot messages keep their author, so each Bot's group is named and split, several Bots' drafts stream side by side, cards resolve against their own Bot, and the status strip stops the working member. Pushes and Activity items for a group Channel open it, at the card when there is one. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YXLBzevwCYAWycH1iTuBwK
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YXLBzevwCYAWycH1iTuBwK
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 50 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Typing @ in a group Channel lists All Bots and the active member Bots above the composer. A choice inserts a mention token that channelSend receives like the Web Client's, reusing its mention helpers. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YXLBzevwCYAWycH1iTuBwK
…didates by name Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YXLBzevwCYAWycH1iTuBwK
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YXLBzevwCYAWycH1iTuBwK
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YXLBzevwCYAWycH1iTuBwK
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YXLBzevwCYAWycH1iTuBwK
* feat(mobile): transparent DM header with an avatar, name and state chip Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LzUNRQhy85WgjWULziwrxc * docs(mobile): DM header screenshots for the PR Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LzUNRQhy85WgjWULziwrxc * docs: change fragment for the mobile DM header Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LzUNRQhy85WgjWULziwrxc * feat(mobile): concentric chip padding, round header buttons and a top fade Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LzUNRQhy85WgjWULziwrxc * Open group Channels as a native mobile chat, like Bot DMs Group Channels used to open the embedded full client. They now use the same native chat screen as a DM: the screen moves to src/ui/chat/conversation-screen.tsx and takes a DM or a Channel. Bot messages keep their author, so each Bot's group is named and split, several Bots' drafts stream side by side, cards resolve against their own Bot, and the status strip stops the working member. Pushes and Activity items for a group Channel open it, at the card when there is one. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YXLBzevwCYAWycH1iTuBwK * Link the group Channel change fragment to #1879 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YXLBzevwCYAWycH1iTuBwK * Mention member Bots or All Bots from the mobile group Channel composer Typing @ in a group Channel lists All Bots and the active member Bots above the composer. A choice inserts a mention token that channelSend receives like the Web Client's, reusing its mention helpers. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YXLBzevwCYAWycH1iTuBwK * Collapse a decided mobile request card into a Bot bubble The collapsed approval/question line was a narrower pill with its own padding and full rounding, so it did not line up with the Bot bubbles around it. It now shares the bubble's edge, width cap, padding, fill and radius.lg corners, and joins the Bot's message group. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PRzwpD3Ht4zCzYLgvaZ6Up * Add the change fragment and screenshots for the card bubble Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PRzwpD3Ht4zCzYLgvaZ6Up * Say Channel, not DM, at the top of a group chat, and list mention candidates by name Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YXLBzevwCYAWycH1iTuBwK * Add group Channel screenshots for #1879 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YXLBzevwCYAWycH1iTuBwK * Show a working Bot at the bottom of the mobile message list The fixed status strip above the composer took space and pushed the composer up and down as a Bot started and stopped. The working Bot now shows as the last row of the message list, like the Web Client's timeline working rows, with its steps and Stop. In a group Channel each working member Bot gets its own row and Stop. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UwdrAXbW2EURZFtgVjeUF2 * Add the #1881 change fragment Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UwdrAXbW2EURZFtgVjeUF2 * Keep open request cards out of Bot bubble groups An open request renders as a full action card, so the Bot bubbles next to it should not take joined corners. chatRows takes a standalone predicate; the DM marks cards that have no resolution yet. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PRzwpD3Ht4zCzYLgvaZ6Up --------- Co-authored-by: Claude <noreply@anthropic.com>
…hannel-native-91hm5z # Conflicts: # .github/pr-screenshots/mobile-chat-header/latest-dark.png # .github/pr-screenshots/mobile-chat-header/latest-light.png # .github/pr-screenshots/mobile-chat-header/scrolled-dark.png # .github/pr-screenshots/mobile-chat-header/scrolled-light.png # apps/mobile/DESIGN.md # apps/mobile/src/ui/chat/conversation-screen.tsx # apps/mobile/src/ui/chat/header-chrome.tsx # apps/mobile/src/ui/chat/message-bubble.tsx # apps/mobile/src/ui/design/tokens.ts # changes/1875-mobile-chat-header.md
|
This PR's changes already landed on Generated by Claude Code |
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UwdrAXbW2EURZFtgVjeUF2
Requested by Vain · project thread
Why
In the mobile app only Bot DMs were native; tapping a group Channel (from Chats, search, a push or Activity) still opened the embedded full client.
Change outline
Before: a group Channel opened
/full-clientat that Channel (a web view; in the web render below it stays on its loader).After: a group Channel opens
/channel/[id], the same native chat as a DM. Each Bot's name sits above its group of bubbles, the header shows#, name and member count, and the composer says "Message #Weekly sync" without the per-Bot Model/Workspace chips.Streaming: a member Bot's draft streams in with its name and "Replying…", and the status strip offers Stop for the working Bot.
@mentions: typing
@lists All Bots and the active member Bots above the composer; choosing one inserts@Nameand sends it as a mention token, like the Web Client. Below,@小明 please send the screenshots…was stored withmentions: [{botSlug: 小明's ID, label: "小明", start: 0, end: 3}]and 小明 answered.Screenshots are the React Native Web render (390 × 844) against an isolated Host with live DeepSeek V4.1 Flash replies, paired through the device gateway, taken before #1875's header was merged in. Native Simulator screenshots (with the #1875 header) are queued in the combined Batch 1 and will be added as a comment.
app/dm/[slug].tsx's body moved tosrc/ui/chat/conversation-screen.tsxand takes a place:{ kind: 'dm', slug }or{ kind: 'channel', channelId }.app/dm/[slug].tsxand the newapp/channel/[id].tsxare thin routes.ConversationMessagekeepsbot(the author slug).createConversationno longer needs abotSlugwhen it has achannelId; its cache key iscacheKey(channel:<id>for groups).send(body, files, tags)passesmentions/allBotMentiontochannelSend.useChannelConversationsits next touseConversation.src/ui/chat/mention-draft.tsreuses the Web Client'spackages/client/src/client/mentions.ts(query detection, token insertion, rebasing on edit) and builds the trimmed-body offsets the Host checks. All Bots loadschannelAllBotPreviewthe first time@is typed.MentionSuggestionsis asheet-layer list above the composer pill.DESIGN.md): Bot names above groups and drafts, a different Bot starts a new group, app accent instead of one Bot's colour, Stop acts on the first working member, no Model/Workspace footer, and a question card keeps its own Other field (a group message is not silently taken as an answer).pushHref/cardHreftake anisGrouplookup, so a group reply, mention or card push (and Activity item) opens the Channel chat, focused on the card.Includes #1875
At the simulator queue's request (Batch 2 folded into Batch 1), this branch merges #1875 (
claude/mobile-chat-header-3bkg6h). Its header hunks fromapp/dm/[slug].tsx(transparent header,HeaderBackButton,HeaderEdgeFade, round full-client button, header-height list padding) are ported intoconversation-screen.tsx, so DMs and groups both get them. The group title (channel-title.tsx) now uses the same raised chip as the Bot chip: round#mark, name, member count.Checks
pnpm --filter @botharness/mobile typecheckpnpm vitest run apps/mobile(new: group conversation follows/sends/streams two drafts, mentions passed tochannelSend, mention candidates/insertion/offsets/All Bots, author split in groups, author label, group push routing)oxfmt --check,oxlint, source policy,pnpm changelog:checkSpecial things to note
conversation-screen.tsxDM/group branches andmention-draft.tsoffsets.🤖 Generated with Claude Code
https://claude.ai/code/session_01YXLBzevwCYAWycH1iTuBwK