プラットフォームアダプタ
源码版本v2026.7.20
職務
各プラットフォーム(Telegram、Discord、Slack、Signal、WhatsApp、微信、QQ…)にアダプタがあり、プラットフォームネイティブイベントを統一 MessageEvent に翻訳し、統一送信アクションをプラットフォーム API に翻訳し戻す。アダプタは BasePlatformAdapter を継承し、少数の抽象メソッドを実装するだけでよい。アダプタは内蔵 gateway/platforms/ またはプラグイン plugins/platforms/ から提供され、どちらも PlatformRegistry に登録される。
主要ファイル
class BasePlatformAdapter(ABC):2317— アダプタ抽象基底クラス抽象メソッド send / send_draft:2983-3015— サブクラス必須の送信インターフェースMessageType / ProcessingOutcome / MessageEvent:1737-1759— 統一イベントモデルCachedMedia:1638-1737— メディアキャッシュ(重複アップロード回避)SendResult / EphemeralReply:1898-2068— 送信結果と一時返信汎用送信補助:3173-3326—send_slash_confirm/send_clarify/send_typing/send_multiple_imagesgateway/platforms/ ディレクトリ— signal / whatsapp_cloud / weixin / bluebubbles / yuanbao / qqbot…plugins/platforms/ ディレクトリ— Telegram / Discord / Slack(プラグイン形式)ADDING_A_PLATFORM.md— 新規プラットフォーム追加ガイドPlatformRegistry:162— レジストリ(register / register_deferred / unregister)
データフロー
- 起動期
GatewayRunner(gateway/run.py:3029) が_start_one_profile_adapter:9389経由でアダプタを起動する。 - アダプタは
PlatformRegistry(gateway/platform_registry.py:162) から名前で探し、deferred ロードをサポート(安価にプレースホルダを置き、実際に使う時にインポート)。 - アダプタはプラットフォームイベントを監視し、
MessageEvent:1759に翻訳して_handle_message:9947に渡す。 - agent がストリーミング出力を出すと、アダプタは統一インターフェース(
send:3008/send_draft)で内容をプラットフォームに配信する。メディアはCachedMedia:1638でキャッシュする。 - プラットフォーム差異(メッセージ長、リッチテキスト、画像上限)はすべてアダプタ内部に吸収され、ゲートウェイコアは関与しない。
まとめ
アダプタ = 「プラットフォーム方言 ↔ 統一イベント」の翻訳器。新規プラットフォームは BasePlatformAdapter を継承していくつか抽象メソッドを実装し登録するだけでよく、gateway/platforms/ADDING_A_PLATFORM.md を参照。Telegram/Discord/Slack はプラグインパスを通り、内蔵アダプタと同等に扱われる。