Core Architecture
The framework is divided into two primary layers:palyra-connector-core, which defines the protocols and base traits, and palyra-connectors, which provides the implementation of the supervisor, storage, and specific platform adapters.
Data Flow: Inbound and Outbound
The following diagram illustrates the flow of messages through the system, bridging the platform-specific adapters to the centralChannelRouter.
Connector Message Flow
Sources: [crates/palyra-connector-core/src/supervisor.rs#131-137](http://crates/palyra-connector-core/src/supervisor.rs#131-137), [crates/palyra-daemon/src/channels.rs#148-182](http://crates/palyra-daemon/src/channels.rs#148-182), [crates/palyra-connectors/src/lib.rs#2-18](http://crates/palyra-connectors/src/lib.rs#2-18)
Key Code Entities
| Entity | Role | Definition |
|---|---|---|
ConnectorAdapter | Trait implemented by specific platforms (Discord, Slack, Echo). Handles raw network I/O. | [crates/palyra-connector-core/src/supervisor.rs#140-140](http://crates/palyra-connector-core/src/supervisor.rs#140-140) |
ConnectorSupervisor | Manages the lifecycle, retries, and background polling for all active connectors. | [crates/palyra-connector-core/src/supervisor.rs#25-25](http://crates/palyra-connector-core/src/supervisor.rs#25-25) |
ConnectorStore | SQLite-backed persistence for connector instances, outbox queues, and dead-letter records. | [crates/palyra-connector-core/src/storage.rs#20-20](http://crates/palyra-connector-core/src/storage.rs#20-20) |
ConnectorRouter | Interface used by the supervisor to dispatch inbound events to the daemon’s agent logic. | [crates/palyra-connector-core/src/supervisor.rs#131-131](http://crates/palyra-connector-core/src/supervisor.rs#131-131) |
OutboundMessageRequest | Standardized structure for messages leaving the system. | [crates/palyra-connector-core/src/protocol.rs#16-16](http://crates/palyra-connector-core/src/protocol.rs#16-16) |
Trait-Based Interface (ConnectorAdapter)
The ConnectorAdapter trait is the core abstraction for adding new platforms. It defines how a connector interacts with its external service.
Primary Methods
send_outbound: Sends a message to the platform. Returns aDeliveryOutcome(Delivered, Retry, or DeadLetter).[crates/palyra-connector-core/src/supervisor.rs#172-176](http://crates/palyra-connector-core/src/supervisor.rs#172-176)poll_inbound: Optional method for platforms that do not support webhooks, allowing the supervisor to pull new messages.[crates/palyra-connector-core/src/supervisor.rs#164-170](http://crates/palyra-connector-core/src/supervisor.rs#164-170)capabilities: Returns aConnectorCapabilitySetdefining supported features like message editing, reactions, or thread support.[crates/palyra-connector-core/src/supervisor.rs#145-147](http://crates/palyra-connector-core/src/supervisor.rs#145-147)edit_message/delete_message: Methods for mutating existing content on the platform.[crates/palyra-connector-core/src/supervisor.rs#200-220](http://crates/palyra-connector-core/src/supervisor.rs#200-220)
[crates/palyra-connector-core/src/supervisor.rs#140-230](http://crates/palyra-connector-core/src/supervisor.rs#140-230)
Connector Supervisor & Storage
TheConnectorSupervisor acts as the engine of the framework. It ensures reliability through several mechanisms:
- Deduplication: Inbound events are checked against the
ConnectorStoreusing platform-specific IDs to prevent double-processing.[crates/palyra-connector-core/src/supervisor.rs#47-47](http://crates/palyra-connector-core/src/supervisor.rs#47-47) - Retry Logic: If
send_outboundreturns aRetryClass, the supervisor schedules a retry with exponential backoff.[crates/palyra-connector-core/src/supervisor.rs#32-35](http://crates/palyra-connector-core/src/supervisor.rs#32-35) - Dead Letter Queue: Messages that exceed
max_retry_attemptsare moved to aDeadLetterRecordfor manual operator intervention.[crates/palyra-connector-core/src/supervisor.rs#50-50](http://crates/palyra-connector-core/src/supervisor.rs#50-50) - Queue Management: The supervisor can pause queues per connector instance to prevent cascading failures during platform outages.
[crates/palyra-daemon/src/transport/http/handlers/console/channels/mod.rs#183-197](http://crates/palyra-daemon/src/transport/http/handlers/console/channels/mod.rs#183-197)
[crates/palyra-connector-core/src/supervisor.rs#25-28](http://crates/palyra-connector-core/src/supervisor.rs#25-28), [crates/palyra-connector-core/src/storage.rs#20-22](http://crates/palyra-connector-core/src/storage.rs#20-22), [crates/palyra-daemon/src/channels.rs#169-174](http://crates/palyra-daemon/src/channels.rs#169-174)
Simulator & Testing
The framework includes a simulator harness for testing connector logic without requiring external network access.Echo Connector
TheEchoConnectorAdapter is used for internal integration tests. It simulates message delivery and can be triggered to simulate a crash using the [connector-crash-once] marker in the message text.
- Implementation:
[crates/palyra-connectors/src/connectors/echo.rs#21-76](http://crates/palyra-connectors/src/connectors/echo.rs#21-76) - Idempotency: It tracks delivered IDs in a
Mutex<HashMap>to ensure that duplicateenvelope_idrequests return the samenative_message_id.[crates/palyra-connectors/src/connectors/echo.rs#63-74](http://crates/palyra-connectors/src/connectors/echo.rs#63-74)
Multi-Connector Management
Thepalyra-connectors crate aggregates all available adapters via default_adapters().
[crates/palyra-connectors/src/connectors/mod.rs]() (inferred from [crates/palyra-daemon/src/channels.rs#172-172](http://crates/palyra-daemon/src/channels.rs#172-172))
CLI Integration
The Palyra CLI provides a robust interface for managing connectors and testing message flow via thechannels and message subcommands.
- Capabilities: Operators can query what actions a specific connector supports (e.g.,
palyra message capabilities discord:123).[crates/palyra-cli/src/commands/message.rs#26-46](http://crates/palyra-cli/src/commands/message.rs#26-46) - Manual Dispatch: Messages can be sent directly via the CLI to verify routing:
palyra message send --to <target> --text "hello".[crates/palyra-cli/src/commands/message.rs#47-81](http://crates/palyra-cli/src/commands/message.rs#47-81) - History & Search: The CLI supports reading message history (
read) and searching across platform-specific conversations (search).[crates/palyra-cli/src/commands/message.rs#118-191](http://crates/palyra-cli/src/commands/message.rs#118-191)
[crates/palyra-cli/src/commands/channels/mod.rs#61-224](http://crates/palyra-cli/src/commands/channels/mod.rs#61-224), [crates/palyra-cli/src/client/message.rs#156-215](http://crates/palyra-cli/src/client/message.rs#156-215)