feat: unify Slack + Telegram into dual-transport agents (inbox-buddy, hn-monitor, joke-bot, spotify-releases)#91
Conversation
Collapses inbox-buddy + inbox-buddy-telegram into a single agent that chats over Slack, Telegram, or both. One persona declares both transports; the handler registers both webhook triggers (slack.app_mention + telegram.message), dispatches by event type, and always replies on the ORIGIN transport (a Slack question is answered in Slack, never mirrored). The Gmail data path + model call are transport-agnostic and shared via a single composeAnswer core. Uses the new workforce#252 optional-integration gating: slack/telegram are each `optional: true` + `enabledByInput` (SLACK_CHANNEL / TELEGRAM_CHAT), so a single-transport deploy never connects the other provider. These fields landed in persona-kit 4.1.12 (4.1.3 silently drops them), so bump persona-kit + the agentworkforce CLI to ^4.1.12. Also migrate hn-monitor to the same enabledByInput gating (it previously declared both integrations unconditionally with only its inputs optional, so it still connected both providers). - Delete inbox-buddy-telegram/ (superseded) - Tests: dual-transport dispatch + trigger registration + optional-integration invariants; repoint the Telegram inbox tests at the unified agent - Full suite 162/162 green Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
|
Warning Review limit reached
More reviews will be available in 55 minutes. Learn how PR review limits work. Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file). ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits. 🚦 How do rate limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (10)
📒 Files selected for processing (22)
✨ Finishing Touches🧪 Generate unit tests (beta)
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 |
…nsport agents
Completes the dual-transport rollout begun with inbox-buddy + hn-monitor.
joke-bot: one agent over Slack and/or Telegram. Dispatches by event type across
four paths — Slack @mention, relay-inbox DM, Telegram message, and a daily cron
"joke of the day" that fans out to EVERY configured transport. Replies on the
origin transport; keeps the Slack-only capabilities.conversational routing.
spotify-releases: cron-only, delivers the release digest to each configured
transport (Slack DM to SLACK_USER and/or Telegram message to TELEGRAM_CHAT).
Adopts the robust checkpoint from the Telegram sibling (notified-set dedup,
per-transport delivery confirmation, advance only on full success) and unifies
the memory tags to spotify-releases:{last-check,notified}.
Both use workforce#252 optional-integration gating (slack/telegram each optional
+ enabledByInput on their id input), so a single-transport deploy never connects
the other provider. joke-bot gates slack→SLACK_CHANNEL, telegram→TELEGRAM_CHAT;
spotify gates slack→SLACK_USER, telegram→TELEGRAM_CHAT.
- Delete joke-bot-telegram/ and spotify-releases-telegram/ (superseded)
- Tests: repoint Telegram tests at the unified agents; add Slack-side coverage
(joke-bot @mention reply + wrong-channel fail-closed + cron fan-out to both;
spotify Slack DM). Full suite 166/166 green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Review of PR #91 —
|
Review: PR #91 — unify Slack + Telegram into dual-transport agentsSummaryThis PR collapses three I made no file edits — nothing met the "mechanical, non-semantic" bar, and the remaining items are intentional design changes for a human to confirm. The working tree is clean. Verification
CI-status caveat (important for the human)In this sandbox 5 tests fail, but only because the sandbox exports Addressed comments
Findings (left as comments, not auto-applied — semantic)
Advisory Notes
No merge-blocking issues found in the code itself, but I cannot confirm from here that all required GitHub checks have completed and are green, nor that GitHub reports the PR mergeable. Because that gate is unverified, I am not printing READY. |
What
Completes the dual-transport unification across the personal-use agents (piloted on hn-monitor in #88/#89). Each agent that had a separate
*-telegramsibling is now one agent that runs over Slack, Telegram, or both — gated by the new workforce#252 optional integrations feature.inbox-buddy+inbox-buddy-telegramjoke-bot+joke-bot-telegramspotify-releases+spotify-releases-telegramenabledByInputgatingworkforce#252 optional integrations (the enabling mechanism)
optional: true+enabledByInput: '<INPUT>'. The provider connection + trigger register only when that input is non-empty, so a single-transport deploy never wires up the other provider.slack→SLACK_CHANNEL,telegram→TELEGRAM_CHAT; spotifyslack→SLACK_USER,telegram→TELEGRAM_CHAT.@agentworkforce/persona-kit+agentworkforceCLI to^4.1.12.Behavior notes
event.typeand reply on the origin transport (a Slack question is answered in Slack, never mirrored). joke-bot keeps its Slack-onlycapabilities.conversationalrouting + relay-inbox path; its daily "joke of the day" fans out to every configured transport.spotify-releases:{last-check,notified}.Tests
tsc --noEmitclean; all four personas compile via the CLI with the gating fields emitted.inbox-buddy-telegram/,joke-bot-telegram/,spotify-releases-telegram/.Follow-up (separate repo)
The
creating-cloud-personaskill (in theskillsrepo) documentsPersonaIntegrationConfigbut notoptional/enabledByInputor the dual-transport pattern — being updated separately.🤖 Generated with Claude Code