Skip to content

feat: epic 7964 — TinyChannels v2 unified channel API - #157

Merged
senamakel merged 3018 commits into
tinyhumansai:mainfrom
senamakel:epic/7964-channel-v2
Oct 25, 2026
Merged

senamakel merged 3018 commits into
tinyhumansai:mainfrom
senamakel:epic/7964-channel-v2

Conversation

@senamakel

Copy link
Copy Markdown
Member

TinyChannels v2: typed content model, per-instance ChannelCapabilities, conversation events (typing/receipts/reactions/edits), one streaming projection, WebChannelEvent wire contract, contract purity, media + voice-note pipeline (inbound STT, outbound native voice replies, typing), every provider on ChannelAdapter v2 with a conformance kit, web adapter, and docs.

Rolled-up work

97 fork PRs merged into senamakel/tinychannels:epic/7964-channel-v2: https://github.com/senamakel/tinychannels/pulls?q=is%3Apr+is%3Amerged+base%3Aepic%2F7964-channel-v2

The branch already contains the current upstream default branch (merge commit, no rebase), so it merges cleanly.

Gates

Per-PR hosted CI on the fork passed (or the bypassed check is named on the fork PR). Local gates run: build, clippy -D warnings, focused tests, fmt. Cross-repo integration evidence: senamakel/openhuman#678 and docs/handoffs/7964/upstream-merge-receipts.md.

Part of tinyhumansai/openhuman#7964

senamakel and others added 30 commits October 21, 2026 15:28
The test support module has been refactored to use a dedicated test file instead of being conditionally compiled alongside debug assertions. This cleans up the module structure for better test isolation.

Auto-committed-on: dragonfly
Adds new tests to verify that typed sending correctly uses scoped conversations on active connections and rejects invalid address formats before connection. This ensures robust handling of message routing and input validation for IRC.

Auto-committed-on: dragonfly
The condition for including test support modules has been updated to use `any(test, debug_assertions)` instead of just `test`. This allows test support code to be compiled during debug builds as well as dedicated test runs.

Auto-committed-on: dragonfly
Adds tests to cover specific edge cases for the split_message function, such as when the byte limit is zero or when the limit is shorter than a single character in unicode strings.

Auto-committed-on: dragonfly
This change reorganizes the provider modules and their associated tests by moving them into dedicated subdirectories. This improves the overall structure and organization of the provider implementations.

Auto-committed-on: dragonfly
This change renames several test files and updates module paths across various providers to follow a more consistent structure. This streamlines the organization of tests and native implementations within each provider module.

Auto-committed-on: dragonfly
…tests

This adds a timeout mechanism to the test that verifies the listener recovers from poll errors. It ensures the test waits until the expected update offset is reached before concluding the listener has stopped.

Auto-committed-on: dragonfly
Adds a test case to verify that stopping an IRC channel recovers from a poisoned listener lock. Additionally, several older, specific tests related to message splitting have been removed as they are now covered by more general tests.

Auto-committed-on: dragonfly
This removes a previously defined test case in the IRC module tests as it was no longer relevant to the current functionality.

Auto-committed-on: dragonfly
This change introduces comprehensive support for typed inbound email processing by adding logic to handle IMAP connections, message fetching, and content parsing. It includes sender allowlisting, HTML stripping, and a robust IDLE loop for real-time message notification.

Auto-committed-on: dragonfly
Removed placeholder trait implementations from DingTalk and QQ providers as they were not being used. This cleans up the module structure without changing external behavior.

Auto-committed-on: dragonfly
This introduces the attachment http client field to both DingTalk and QQ channel structs. This allows for standardized handling of attachments across different provider integrations.

Auto-committed-on: dragonfly
This change removes the implementations for DingTalk, EmailChannel, Lark, Mattermost, and QQ providers. This was done to clean up the codebase by removing providers that are no longer in use or supported.

Auto-committed-on: dragonfly
This change refactors the email channel implementation by moving related logic into dedicated modules like `config` and `outbound`. This improves the organization and separation of concerns within the provider.

Auto-committed-on: dragonfly
Introduces logic to check if an incoming email sender is allowed based on configured rules, and adds helper functions to strip HTML and extract sender/text content from parsed emails. This improves email filtering and content extraction capabilities.

Auto-committed-on: dragonfly
Implements typed and untyped health checking for the email channel using IMAP probing. This allows for more robust status reporting across different adapter paths.

Auto-committed-on: dragonfly
This change refactors the structure of the DingTalk, Lark, Mattermost, and QQ providers by moving configuration, inbound, and capabilities logic into dedicated modules. This improves organization and separation of concerns across the provider implementations.

Auto-committed-on: dragonfly
…essing

The `async_trait` macro was removed from the inbound processing logic in mattermost as it is no longer necessary for the current implementation structure.

Auto-committed-on: dragonfly
Add a test asserting that an invalid Gateway lookup response fails startup with an unknown, retryable error prefixed by the listener failure message, and that listener ownership is released so a retry can proceed.

Auto-committed-on: dragonfly
…rement

refactor(runtime): retire legacy Channel trait
fix(telegram): normalize legacy topic and reply addresses
senamakel and others added 25 commits October 24, 2026 18:13
The test now opens the output handle through an explicit OpenOutput command and feeds it with a matching turn id instead of relying on the open helper and a null turn. This keeps the handle and turn consistent so the cancellation assertion exercises the intended sequenced-final path.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
End a module-sequenced handle after its final message
Voice messages now persist through a module-provided VoiceMediaStore instead of relying on the host, and the transcriber fills in the configured instance and provider identity on the scope so a provider that only knows the conversation and turn still yields a scope the host accepts.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Inbound voice notes: wire the host voice store, scope the transcriber, transcribe at Telegram ingress
BuiltChannel now carries an optional ChannelTyping port alongside the
existing output, edit, draft, and reaction ports, with a with_typing_port
builder and a typing accessor. Every adapter constructed in build_channels
is wired through it so the module can start and stop typing indicators
without downcasting the erased channel type.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
…ing dispatch

Typing refresh handling is pulled out of the interaction dispatcher into
dedicated helpers, and factory-built adapters now route typing operations
through their typing port. This keeps the dispatch path uniform and lets
both channel kinds share the same refresh lifecycle.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Route incoming typing interactions through the channel's typing port
before falling back to the native webhook dispatcher, so typing events
are handled by the adapter that owns them.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The host builder now wires a synthesizer, voice codec, and voice media store
into the channel host, and the resulting SpokenReply is retained on Hooks and
Running so module-delivered replies can reach the outbound voice pipeline.
Inbound voice media requests are also recorded for tracking.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The running module now captures the spoken reply hook from its hooks and
stores it alongside the channel, so voice replies can be forwarded through
the provider listener.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Introduce a new module that handles voice reply generation for the tinychannels crate.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The adapter output target now holds an optional spoken reply so voice synthesis can be attached to progressive replies, and the voice_reply module is registered in the crate. Removed a dead-code type alias that only existed to keep an unused import reachable.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Adapter-backed replies now carry the provider's spoken reply into the worker so a synthesized voice part can be added alongside the final text message. Text-only delivery remains the fallback whenever the voice stage is unavailable.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The adapter sender's typing method now forwards to the adapter's typing port when one is available, instead of always returning success. Adapters without a typing port keep the previous no-op behaviour.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
…plies

Add tests asserting that a channel's typing indicator is started before the
final reply is delivered, and that an adapter without a typing port still
receives the reply. Also cover that spoken context without a voice pipeline
leaves the final message unchanged.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The lost send worker reply test constructs a channel value that now requires a spoken field, so the fixture is updated to keep the test compiling.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Add a counting ChannelTyping stub and a paused-clock test that drives the
adapter typing port through start, refresh and stop interactions, asserting
that refreshes re-issue typing and that the refresh registry is emptied on
stop.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Reformatted long type aliases, chained method calls, and nested match
expressions to satisfy rustfmt, and reindented the factory wiring so the
provider construction reads consistently. No behaviour changes.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
SpokenReply now holds trait objects for the reply policy, synthesizer,
codec, and media store instead of concrete module types, with a new
ReplyPolicy trait wrapping the host's voice reply policy lookup. This
lets the pipeline be constructed and tested against the host interfaces
rather than the module's own implementations.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Add ModuleSynthesizer and ModuleVoiceCodec implementations that bind the
host voice scope and transcode through the loaded codec module, plus a
reply policy lookup on host channels. Tests cover scope identity binding,
codec format handling, and the spoken reply path that now attaches a voice
part alongside the final text.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Add a debug print of the underlying error in feed_adapter_output before it is
converted into an Error, so adapter output failures are visible when
diagnosing dispatch problems.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Print the full error with eprintln before downcasting so the underlying
cause is visible when a send fails to match a known error type.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Implement read_voice on ModuleVoiceMediaStore so stored voice media can be
retrieved and returned as base64 alongside its content type and file name. The
voice size limit is hoisted to a module constant so both the write and read
paths share it, and leftover debug logging in the adapter output and Telegram
send error paths was removed.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Co-authored-by: Medulla <medulla@tinyhumans.ai>
feat(module): outbound voice replies and adapter typing for module channels
@tinysweeper

tinysweeper Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Tiny Sweeper review

⚠️ Review of ec6bdf9de885 could not complete.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review 🔄 Running since 2026-10-25T03:16:58.345358Z ec6bdf9 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Oct 25, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 432 files, which is 332 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: ebbdc464-0516-477b-8e13-1cbe88e15dcc
Commits

Reviewing files that changed from the base of the PR and between 337d713 and ec6bdf9.

Files ignored due to path filters: 5
  • Cargo.lock is excluded by !**/*.lock
  • src/providers/telegram/fixtures/cc0-flower.mp4 is excluded by !**/*.mp4
  • src/providers/telegram/fixtures/cc0-mp3-test.mp3 is excluded by !**/*.mp3
  • src/providers/telegram/fixtures/sine-ogg-opus.ogg is excluded by !**/*.ogg
  • src/providers/telegram/fixtures/sine.mp3 is excluded by !**/*.mp3
Files selected for processing: 432
  • .gitignore
  • Cargo.toml
  • README.md
  • crates/tinychannels-bus/Cargo.toml
  • crates/tinychannels-bus/README.md
  • crates/tinychannels-bus/schema/web-channel-event.schema.json
  • crates/tinychannels-bus/src/channel/error.rs
  • crates/tinychannels-bus/src/channel/error_tests.rs
  • crates/tinychannels-bus/src/channel/event.rs
  • crates/tinychannels-bus/src/channel/intent.rs
  • crates/tinychannels-bus/src/channel/mod.rs
  • crates/tinychannels-bus/src/config.rs
  • crates/tinychannels-bus/src/context.rs
  • crates/tinychannels-bus/src/context_tests.rs
  • crates/tinychannels-bus/src/fixtures/web/historical_events.json
  • crates/tinychannels-bus/src/host.rs
  • crates/tinychannels-bus/src/host_tests.rs
  • crates/tinychannels-bus/src/lib.rs
  • crates/tinychannels-bus/src/module_control.rs
  • crates/tinychannels-bus/src/module_controller.rs
  • crates/tinychannels-bus/src/module_delivery_tests.rs
  • crates/tinychannels-bus/src/module_inbound.rs
  • crates/tinychannels-bus/src/module_inbound_tests.rs
  • crates/tinychannels-bus/src/module_interaction.rs
  • crates/tinychannels-bus/src/module_interaction_tests.rs
  • crates/tinychannels-bus/src/module_progressive.rs
  • crates/tinychannels-bus/src/module_relay.rs
  • crates/tinychannels-bus/src/module_remote.rs
  • crates/tinychannels-bus/src/module_runtime.rs
  • crates/tinychannels-bus/src/module_web_output.rs
  • crates/tinychannels-bus/src/module_web_output_tests.rs
  • crates/tinychannels-bus/src/names.rs
  • crates/tinychannels-bus/src/names_tests.rs
  • crates/tinychannels-bus/src/storage/migrate_parse_tests.rs
  • crates/tinychannels-bus/src/traits.rs
  • crates/tinychannels-bus/src/traits_tests.rs
  • crates/tinychannels-bus/src/version.rs
  • crates/tinychannels-bus/src/web/events.rs
  • crates/tinychannels-bus/src/web/web_tests.rs
  • crates/tinychannels-bus/src/wire_tests.rs
  • crates/tinychannels-conformance/Cargo.toml
  • crates/tinychannels-conformance/src/lib.rs
  • crates/tinychannels-conformance/src/lib_tests.rs
  • crates/tinychannels-module/Cargo.toml
  • crates/tinychannels-module/src/control.rs
  • crates/tinychannels-module/src/controller.rs
  • crates/tinychannels-module/src/controller_tests.rs
  • crates/tinychannels-module/src/email.rs
  • crates/tinychannels-module/src/health.rs
  • crates/tinychannels-module/src/health_tests.rs
  • crates/tinychannels-module/src/host.rs
  • crates/tinychannels-module/src/host_tests.rs
  • crates/tinychannels-module/src/interaction.rs
  • crates/tinychannels-module/src/interaction_tests.rs
  • crates/tinychannels-module/src/lib.rs
  • crates/tinychannels-module/src/media_account.rs
  • crates/tinychannels-module/src/media_account_tests.rs
  • crates/tinychannels-module/src/native.rs
  • crates/tinychannels-module/src/native_tests.rs
  • crates/tinychannels-module/src/progressive.rs
  • crates/tinychannels-module/src/progressive_tests.rs
  • crates/tinychannels-module/src/provider.rs
  • crates/tinychannels-module/src/provider_tests.rs
  • crates/tinychannels-module/src/remote.rs
  • crates/tinychannels-module/src/remote_tests.rs
  • crates/tinychannels-module/src/runtime_tests.rs
  • crates/tinychannels-module/src/service.rs
  • crates/tinychannels-module/src/service_tests.rs
  • crates/tinychannels-module/src/voice_reply.rs
  • crates/tinychannels-module/src/voice_reply_tests.rs
  • crates/tinychannels-module/src/web_output.rs
  • crates/tinychannels-module/src/web_output_tests.rs
  • crates/tinychannels-module/tests/module_artifact.rs
  • crates/tinychannels-module/tests/runtime_artifact.rs
  • crates/tinychannels-runtime/README.md
  • crates/tinychannels-runtime/src/adapters/web/adapter.rs
  • crates/tinychannels-runtime/src/adapters/web/adapter_tests.rs
  • crates/tinychannels-runtime/src/adapters/web/project.rs
  • crates/tinychannels-runtime/src/adapters/web/project_tests.rs
  • crates/tinychannels-runtime/src/channel/adapter.rs
  • crates/tinychannels-runtime/src/channel/adapter_tests.rs
  • crates/tinychannels-runtime/src/channel/envelope.rs
  • crates/tinychannels-runtime/src/channel/envelope_tests.rs
  • crates/tinychannels-runtime/src/channel/intent.rs
  • crates/tinychannels-runtime/src/channel/mod.rs
  • crates/tinychannels-runtime/src/channel/mod_tests.rs
  • crates/tinychannels-runtime/src/channel/session.rs
  • crates/tinychannels-runtime/src/channel/session_tests.rs
  • crates/tinychannels-runtime/src/cli.rs
  • crates/tinychannels-runtime/src/cli_tests.rs
  • crates/tinychannels-runtime/src/config.rs
  • crates/tinychannels-runtime/src/config_tests.rs
  • crates/tinychannels-runtime/src/context.rs
  • crates/tinychannels-runtime/src/context_tests.rs
  • crates/tinychannels-runtime/src/controllers/definitions.rs
  • crates/tinychannels-runtime/src/controllers/definitions_tests.rs
  • crates/tinychannels-runtime/src/dispatch.rs
  • crates/tinychannels-runtime/src/health.rs
  • crates/tinychannels-runtime/src/health_tests.rs
  • crates/tinychannels-runtime/src/lib.rs
  • crates/tinychannels-runtime/src/lib_tests.rs
  • crates/tinychannels-runtime/src/relocation_tests.rs
  • crates/tinychannels-runtime/src/runtime_extras_tests.rs
  • crates/tinychannels-runtime/src/traits.rs
  • crates/tinychannels-runtime/src/traits_tests.rs
  • deny.toml
  • docs/adapter-conformance.md
  • docs/channel-architecture.md
  • docs/channel-capabilities.md
  • docs/channel-contracts.md
  • docs/channel-delivery.md
  • docs/channel-providers.md
  • docs/issue-22-media-protocol-research.md
  • docs/spec/README.md
  • docs/spec/contract-v2.md
  • docs/spec/progress-output.md
  • docs/spec/tinychannels-migration-remaining-plan.md
  • docs/spec/voice-pipeline.md
  • scripts/__tests__/check_bus_purity_tests.py
  • scripts/check-bus-purity.py
  • scripts/test-adapter-conformance.sh
  • scripts/test-feature-lanes.py
  • scripts/test-feature-shell.py
  • scripts/test-features.sh
  • scripts/verify-module.ps1
  • scripts/verify-module.sh
  • src/approvals/mod_tests.rs
  • src/backend.rs
  • src/backend_tests.rs
  • src/delivery/progressive/README.md
  • src/delivery/progressive/bubbles.rs
  • src/delivery/progressive/draft.rs
  • src/delivery/progressive/finalize.rs
  • src/delivery/progressive/mod.rs
  • src/delivery/progressive/mod_tests.rs
  • src/delivery/progressive/reply.rs
  • src/delivery/progressive/state.rs
  • src/factory.rs
  • src/factory_tests.rs
  • src/harness/bridge.rs
  • src/harness/mod_tests.rs
  • src/harness/types.rs
  • src/host/dispatch_tests.rs
  • src/host/mod.rs
  • src/host/noop.rs
  • src/host/services.rs
  • src/host/services_tests.rs
  • src/host/tests.rs
  • src/host/voice.rs
  • src/host/voice_tests.rs
  • src/lib.rs
  • src/provider_test_support.rs
  • src/providers/dingtalk.rs
  • src/providers/dingtalk/capabilities.rs
  • src/providers/dingtalk/config.rs
  • src/providers/dingtalk/dingtalk_tests.rs
  • src/providers/dingtalk/inbound.rs
  • src/providers/dingtalk/media.rs
  • src/providers/dingtalk/mod.rs
  • src/providers/dingtalk/native.rs
  • src/providers/dingtalk/native_tests.rs
  • src/providers/dingtalk/outbound.rs
  • src/providers/dingtalk_tests.rs
  • src/providers/discord/adapter.rs
  • src/providers/discord/adapter_tests.rs
  • src/providers/discord/api.rs
  • src/providers/discord/bot_api.rs
  • src/providers/discord/bot_api_tests.rs
  • src/providers/discord/capabilities.rs
  • src/providers/discord/channel.rs
  • src/providers/discord/channel_tests.rs
  • src/providers/discord/conformance_tests.rs
  • src/providers/discord/gateway.rs
  • src/providers/discord/gateway_tests.rs
  • src/providers/discord/http.rs
  • src/providers/discord/http_tests.rs
  • src/providers/discord/inbound.rs
  • src/providers/discord/inbound_tests.rs
  • src/providers/discord/interactions.rs
  • src/providers/discord/interactions_tests.rs
  • src/providers/discord/mod.rs
  • src/providers/discord/outbound.rs
  • src/providers/discord/outbound_tests.rs
  • src/providers/discord/support_tests.rs
  • src/providers/discord/voice.rs
  • src/providers/discord/voice_tests.rs
  • src/providers/email_channel.rs
  • src/providers/email_channel/capabilities.rs
  • src/providers/email_channel/capabilities_tests.rs
  • src/providers/email_channel/config.rs
  • src/providers/email_channel/conformance_tests.rs
  • src/providers/email_channel/email_channel_send_only_tests.rs
  • src/providers/email_channel/email_channel_tests.rs
  • src/providers/email_channel/fixtures_tests.rs
  • src/providers/email_channel/inbound.rs
  • src/providers/email_channel/inbound_tests.rs
  • src/providers/email_channel/mod.rs
  • src/providers/email_channel/native.rs
  • src/providers/email_channel/native_tests.rs
  • src/providers/email_channel/outbound.rs
  • src/providers/email_channel/test_support_tests.rs
  • src/providers/email_verify.rs
  • src/providers/http_test_support_tests.rs
  • src/providers/imessage.rs
  • src/providers/imessage/capabilities.rs
  • src/providers/imessage/capabilities_tests.rs
  • src/providers/imessage/config.rs
  • src/providers/imessage/conformance_tests.rs
  • src/providers/imessage/db.rs
  • src/providers/imessage/db_tests.rs
  • src/providers/imessage/fixtures_tests.rs
  • src/providers/imessage/inbound.rs
  • src/providers/imessage/inbound_tests.rs
  • src/providers/imessage/listener.rs
  • src/providers/imessage/mod.rs
  • src/providers/imessage/outbound.rs
  • src/providers/imessage/outbound/tests/inbound_tests.rs
  • src/providers/imessage/outbound/tests/mod.rs
  • src/providers/imessage/outbound/tests/outbound_tests.rs
  • src/providers/imessage/tests/database_tests.rs
  • src/providers/imessage/tests/mod.rs
  • src/providers/imessage/tests/runtime_tests.rs
  • src/providers/imessage/tests/validation_tests.rs
  • src/providers/imessage_tests.rs
  • src/providers/irc/capabilities.rs
  • src/providers/irc/config.rs
  • src/providers/irc/inbound.rs
  • src/providers/irc/listen_tests.rs
  • src/providers/irc/mod.rs
  • src/providers/irc/mod_tests.rs
  • src/providers/irc/outbound.rs
  • src/providers/irc/test_support_tests.rs
  • src/providers/irc_listen_tests.rs
  • src/providers/lark.rs
  • src/providers/lark/api_tests.rs
  • src/providers/lark/capabilities.rs
  • src/providers/lark/config.rs
  • src/providers/lark/inbound.rs
  • src/providers/lark/lark_tests.rs
  • src/providers/lark/legacy_conformance_tests.rs
  • src/providers/lark/media.rs
  • src/providers/lark/mod.rs
  • src/providers/lark/native.rs
  • src/providers/lark/native_tests.rs
  • src/providers/lark/outbound.rs
  • src/providers/lark/test_support_tests.rs
  • src/providers/lark/ws_tests.rs
  • src/providers/lark_api_tests.rs
  • src/providers/lark_ws_tests.rs
  • src/providers/linq.rs
  • src/providers/linq/capabilities.rs
  • src/providers/linq/capabilities_tests.rs
  • src/providers/linq/config.rs
  • src/providers/linq/conformance_tests.rs
  • src/providers/linq/fixtures_tests.rs
  • src/providers/linq/inbound.rs
  • src/providers/linq/inbound_tests.rs
  • src/providers/linq/legacy_tests.rs
  • src/providers/linq/mod.rs
  • src/providers/linq/outbound.rs
  • src/providers/linq/outbound/tests/mod.rs
  • src/providers/long_tail.rs
  • src/providers/long_tail_conformance_tests.rs
  • src/providers/long_tail_tests.rs
  • src/providers/mail/smtp.rs
  • src/providers/mail/smtp_tests.rs
  • src/providers/mail/types.rs
  • src/providers/mattermost.rs
  • src/providers/mattermost/capabilities.rs
  • src/providers/mattermost/config.rs
  • src/providers/mattermost/inbound.rs
  • src/providers/mattermost/mattermost_tests.rs
  • src/providers/mattermost/media.rs
  • src/providers/mattermost/mod.rs
  • src/providers/mattermost/native.rs
  • src/providers/mattermost/native_tests.rs
  • src/providers/mattermost/outbound.rs
  • src/providers/mattermost/test_support_tests.rs
  • src/providers/mod.rs
  • src/providers/native/capabilities.rs
  • src/providers/native/capabilities_tests.rs
  • src/providers/native/edit.rs
  • src/providers/native/fixtures_tests.rs
  • src/providers/native/inbound.rs
  • src/providers/native/inbound_tests.rs
  • src/providers/native/mod.rs
  • src/providers/native/mod_tests.rs
  • src/providers/native/outbound.rs
  • src/providers/native/outbound_tests.rs
  • src/providers/no_text_markers_tests.rs
  • src/providers/qq.rs
  • src/providers/qq/capabilities.rs
  • src/providers/qq/config.rs
  • src/providers/qq/inbound.rs
  • src/providers/qq/media.rs
  • src/providers/qq/mod.rs
  • src/providers/qq/native.rs
  • src/providers/qq/native_tests.rs
  • src/providers/qq/outbound.rs
  • src/providers/qq/qq_tests.rs
  • src/providers/signal.rs
  • src/providers/signal/capabilities.rs
  • src/providers/signal/capabilities_tests.rs
  • src/providers/signal/config.rs
  • src/providers/signal/conformance_tests.rs
  • src/providers/signal/fixtures_tests.rs
  • src/providers/signal/inbound.rs
  • src/providers/signal/inbound_tests.rs
  • src/providers/signal/listener.rs
  • src/providers/signal/mod.rs
  • src/providers/signal/outbound.rs
  • src/providers/signal/outbound/tests/inbound_tests.rs
  • src/providers/signal/outbound/tests/mod.rs
  • src/providers/signal/outbound/tests/outbound_tests.rs
  • src/providers/signal/tests/configuration_tests.rs
  • src/providers/signal/tests/mod.rs
  • src/providers/signal/tests/transport_tests.rs
  • src/providers/slack.rs
  • src/providers/slack/adapter.rs
  • src/providers/slack/adapter_tests.rs
  • src/providers/slack/api.rs
  • src/providers/slack/api_tests.rs
  • src/providers/slack/blocks.rs
  • src/providers/slack/blocks_tests.rs
  • src/providers/slack/capabilities.rs
  • src/providers/slack/capabilities_tests.rs
  • src/providers/slack/events.rs
  • src/providers/slack/events_tests.rs
  • src/providers/slack/fixtures_tests.rs
  • src/providers/slack/inbound.rs
  • src/providers/slack/inbound_tests.rs
  • src/providers/slack/interact.rs
  • src/providers/slack/interact_tests.rs
  • src/providers/slack/mod.rs
  • src/providers/slack/outbound.rs
  • src/providers/slack/outbound_tests.rs
  • src/providers/slack/socket.rs
  • src/providers/slack/socket_tests.rs
  • src/providers/slack/text.rs
  • src/providers/slack/text_tests.rs
  • src/providers/slack/types.rs
  • src/providers/slack/types_tests.rs
  • src/providers/slack/upload.rs
  • src/providers/slack/upload_tests.rs
  • src/providers/slack_tests.rs
  • src/providers/telegram/attachments.rs
  • src/providers/telegram/bot_api.rs
  • src/providers/telegram/bot_api_tests.rs
  • src/providers/telegram/capabilities.rs
  • src/providers/telegram/channel.rs
  • src/providers/telegram/channel_core.rs
  • src/providers/telegram/channel_ops.rs
  • src/providers/telegram/channel_ops_tests.rs
  • src/providers/telegram/channel_recv.rs
  • src/providers/telegram/channel_recv_tests.rs
  • src/providers/telegram/channel_send.rs
  • src/providers/telegram/channel_send_tests.rs
  • src/providers/telegram/channel_tests.rs
  • src/providers/telegram/channel_types.rs
  • src/providers/telegram/fixtures/CC0-1.0.txt
  • src/providers/telegram/fixtures/sticker-512.webp
  • src/providers/telegram/fixtures_tests.rs
  • src/providers/telegram/mod.rs
  • src/providers/telegram/mod_test_support_tests.rs
  • src/providers/telegram/text.rs
  • src/providers/telegram/text_tests.rs
  • src/providers/whatsapp.rs
  • src/providers/whatsapp/api.rs
  • src/providers/whatsapp/api_tests.rs
  • src/providers/whatsapp/capabilities.rs
  • src/providers/whatsapp/channel.rs
  • src/providers/whatsapp/conformance_tests.rs
  • src/providers/whatsapp/ingress.rs
  • src/providers/whatsapp/ingress_tests.rs
  • src/providers/whatsapp/mod.rs
  • src/providers/whatsapp/mod_tests.rs
  • src/providers/whatsapp/outbound.rs
  • src/providers/whatsapp/outbound_tests.rs
  • src/providers/whatsapp_shared/capabilities.rs
  • src/providers/whatsapp_shared/capabilities_tests.rs
  • src/providers/whatsapp_shared/error.rs
  • src/providers/whatsapp_shared/error_tests.rs
  • src/providers/whatsapp_shared/fakes_tests.rs
  • src/providers/whatsapp_shared/inbound.rs
  • src/providers/whatsapp_shared/inbound_tests.rs
  • src/providers/whatsapp_shared/mod.rs
  • src/providers/whatsapp_shared/plan.rs
  • src/providers/whatsapp_shared/plan_tests.rs
  • src/providers/whatsapp_shared/text.rs
  • src/providers/whatsapp_shared/text_tests.rs
  • src/providers/whatsapp_shared/vcard.rs
  • src/providers/whatsapp_shared/vcard_tests.rs
  • src/providers/whatsapp_shared/window.rs
  • src/providers/whatsapp_shared/window_tests.rs
  • src/providers/whatsapp_web/capabilities.rs
  • src/providers/whatsapp_web/channel.rs
  • src/providers/whatsapp_web/client.rs
  • src/providers/whatsapp_web/config.rs
  • src/providers/whatsapp_web/conformance_tests.rs
  • src/providers/whatsapp_web/fakes_tests.rs
  • src/providers/whatsapp_web/identity.rs
  • src/providers/whatsapp_web/identity_tests.rs
  • src/providers/whatsapp_web/inbound.rs
  • src/providers/whatsapp_web/inbound_tests.rs
  • src/providers/whatsapp_web/media_build.rs
  • src/providers/whatsapp_web/media_build_tests.rs
  • src/providers/whatsapp_web/mod.rs
  • src/providers/whatsapp_web/mod_tests.rs
  • src/providers/whatsapp_web/outbound.rs
  • src/providers/whatsapp_web/outbound_tests.rs
  • src/providers/yuanbao/capabilities.rs
  • src/providers/yuanbao/channel.rs
  • src/providers/yuanbao/channel_tests.rs
  • src/providers/yuanbao/conformance_tests.rs
  • src/providers/yuanbao/connection.rs
  • src/providers/yuanbao/inbound.rs
  • src/providers/yuanbao/inbound_tests.rs
  • src/providers/yuanbao/mod.rs
  • src/providers/yuanbao/native.rs
  • src/providers/yuanbao/native_tests.rs
  • src/providers/yuanbao/outbound.rs
  • src/providers/yuanbao/outbound_tests.rs
  • src/relay/mod.rs
  • src/relay/mod_tests.rs
  • src/remote/mod.rs
  • src/remote/mod_tests.rs
  • src/runtime.rs
  • src/storage/delivery_tests.rs
  • tests/fixtures/dingtalk/AMR-FIXTURE-LICENSE-MIT.txt
  • tests/fixtures/dingtalk/README.md
  • tests/fixtures/dingtalk/amrnb_mode0.amr
  • tests/fixtures/tls/cert.der

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@senamakel
senamakel merged commit 72b46e9 into tinyhumansai:main Oct 25, 2026
15 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant