Repository navigation
feat(messaging): compact conversation rows and relabel External connectors (#1113) - #1122
Merged
Merged
Conversation
…llow again (#1109) The app's Conversations list in Edit identity sorts entries into Waiting, Active, Muted and Blocked. Mute admits silently, Rules reuses the group reception editor, Block revokes the entry, cancels unsent replies and writes a durable block per Bot, app fingerprint and conversation that survives restart and rebind; Allow again creates a fresh entry with no backfill. New conversations can be admitted automatically or held for the user, and new entries are bounded to 20 per hour and 500 active per app with at most 200 held. Issue: #1109 Agent-Task: claude-code/cloud/session_01WXjBatxGTRyRSxZYeJpqgH Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WXjBatxGTRyRSxZYeJpqgH
A Bot can now bind several apps of the same platform; one app still belongs to one Bot. Generation 63 drops messaging_binding_bot_platform and the bind and authorize commands no longer refuse a second app of a platform. A new apps projection lists every Provider account with its bound Bot; Bind app hides apps another Bot uses, External identities groups apps by platform, and Bot settings gets an IM apps list that refreshes on roster changes. Shared replies from a Bot with two apps in the same group refuse with reply-target-ambiguous. Issue: #1110 Agent-Task: claude-code/cloud/session_01WXjBatxGTRyRSxZYeJpqgH Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WXjBatxGTRyRSxZYeJpqgH
…tors A conversation of a bound app now syncs into a Channel from its own row (Sync to a Channel). External connectors lists existing syncs and keeps the saved send target as an advanced fallback. The Lark setup guide shrinks to app, bind, verify, and the Lark, Slack and WeChat guides, CONTEXT terms and the architecture Messaging section follow ADR-0142. The Host now inspects implicit entries through the account when a sync is added, and places later default traffic into synced Channels without admitting it twice. Issue: #1113 Agent-Task: claude-code/cloud/session_01WXjBatxGTRyRSxZYeJpqgH Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WXjBatxGTRyRSxZYeJpqgH
|
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 55 minutes. View limit detailsLimit details: You’ve used the included review currently available. Review configuration: ⚙️ Run configuration
📒 Files selected for processing (51)
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 |
Issue: #1113 Agent-Task: claude-code/cloud/session_01WXjBatxGTRyRSxZYeJpqgH Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WXjBatxGTRyRSxZYeJpqgH
Conversation row actions move from a trailing column onto their own row of DSH Buttons, so the name and meta keep the full width. The sync hint moves into an info tooltip beside the "Sync to a Channel" label. The setup guide puts platform and account side by side, numbers the three steps in one compact list with each hint behind an info icon, and keeps the test text under the verify step. Issue: #1113 Agent-Task: claude-code/cloud/session_01WXjBatxGTRyRSxZYeJpqgH Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WXjBatxGTRyRSxZYeJpqgH
Per review, the app overview lives where apps are chosen. Bind app now lists every connected app: apps a Bot already uses are disabled and name that Bot (or say they are bound to this Bot), disconnected apps say so, and Manage app credentials opens IM bots settings. The IM apps list in Bot settings and its messagingApps bridge method are removed; the snapshot's accounts already carry the owner. Issue: #1110 Agent-Task: claude-code/cloud/session_01WXjBatxGTRyRSxZYeJpqgH Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WXjBatxGTRyRSxZYeJpqgH
Brings in the Bind app change from #1110. The edit-identity modal's generic list indent no longer applies to card lists, so conversation cards line up like External connectors. Issue: #1113 Agent-Task: claude-code/cloud/session_01WXjBatxGTRyRSxZYeJpqgH Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WXjBatxGTRyRSxZYeJpqgH
Per review, syncing hangs off a bound app's conversation the wrong way round and will be redesigned around External connectors (any connected app, bound or not). The row Sync and its panel are removed while the Host fixes stay; rows still show where an existing sync goes, and External connectors lists and edits existing syncs. Row actions use outline DSH Buttons, each with a tooltip explaining it (Mute vs Block in particular). Guides, CONTEXT, architecture and changelog drop the row Sync steps. Issue: #1113 Agent-Task: claude-code/cloud/session_01WXjBatxGTRyRSxZYeJpqgH Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WXjBatxGTRyRSxZYeJpqgH
# Conflicts: # CHANGELOG.md # CHANGELOG.zh.md # packages/client/src/client/external-entries.tsx # packages/client/src/client/external-identity-list.tsx # packages/client/src/client/locale.ts # packages/client/test/external-identity-list.test.ts # packages/core/src/database/schema-plan.ts
…s-relabel # Conflicts: # packages/client/src/client/external-entries.tsx # packages/client/src/client/external-identity-list.tsx
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.
Requested by Vain · project thread
Closes #1113 · part of #1107 · ADR-0142 · stacked on #1121 (base switches to
mainonce #1120 and #1121 merge)Before: External connectors mixed saved delivery targets, per-conversation authorization and Channel syncs. The Lark setup guide had five steps (account, target, identity, grant, verify), and the Lark, Slack and WeChat guides still taught saved targets and per-conversation authorization.
After: External connectors lists existing syncs and keeps Save a send target (advanced) for apps that can't post to conversations directly. A conversation row shows where it is synced, and its actions (Mute, Rules, Block) are outline DSH buttons on their own row, each with a tooltip. The Lark setup guide is one compact list of three numbered steps. The guides, CONTEXT terms and architecture follow ADR-0142.
Per review, syncing that hangs off a bound app's conversation is the wrong model. Adding a sync will be redesigned around External connectors, taking any connected app's conversation whether or not a Bot has it bound (separate spec). So this PR adds no new way to create a sync; the Host fixes below still apply to existing and future syncs.
How
provider-unavailable, becausechannelBridgeinspected the entry by its saved target, and implicit entries have none. It now uses the sameinspectGrantas reception, which checks the account.ExternalConversationsputs row actions on a separate row of outlineButtons wrapped inTooltips, so the name and meta keep the full width. Cards in the edit-identity modal no longer get the generic list indent.ChannelBridgeListdrops + Add connector; with no syncs it shows No external sources connected. The authorize row is relabelled Save a send target (advanced).larkSetupStateandLarkSetupGuidedrop the target picker and use app → bind → verify. Platform and account sit side by side, each step is one numbered line (✓ when confirmed) with its hint behind an info icon and a short Locate button, and the test text sits under the verify step.CONTEXT.md/CONTEXT.zh.md, the architecture Messaging section and CHANGELOG zh/en.Screenshots
From a real Host with a simulated Lark provider. All variants: https://github.com/BotHarness/BotHarness/tree/claude/1113-connectors-relabel/docs/assets/pr/1113-connectors-relabel
Tests
messaging-default-traffic.test.ts: an implicit group entry synced into a Group Channel gets its next mention placed there; the Channel lists one sync and the Bot DM lists no Inbox-only row.pnpm changelog:checkare clean.Real Host (DSH 0.2.0-rc.1, OpenCode Go model): an implicit group entry synced into Ada's DM received an @mention there, and Ada replied
SYNC-OKthrough the app in 3 s. Hovering Mute shows its tooltip.Merge risk
Human verification
🤖 Generated with Claude Code
https://claude.ai/code/session_01WXjBatxGTRyRSxZYeJpqgH
Generated by Claude Code