ACPスレッドバウンドエージェント
概要
OpenClawがスレッド対応チャンネル(まずDiscord)でACPコーディングエージェントをサポートする方法を定義する。本番レベルのライフサイクルとリカバリを含む。
関連ドキュメント:
ターゲットのユーザー体験:
- ユーザーがACPセッションをスレッドにspawnまたはfocusする
- そのスレッド内のユーザーメッセージがバインドされたACPセッションにルーティングされる
- エージェント出力が同じスレッドペルソナにストリーミングされる
- セッションは永続または明示的なクリーンアップコントロール付きワンショット
決定事項のまとめ
長期的な推奨はハイブリッドアーキテクチャ:
- OpenClawコアがACP制御プレーンの責務を所有
- セッションのアイデンティティとメタデータ
- スレッドバインディングとルーティング判断
- 配信の不変条件と重複抑制
- ライフサイクルのクリーンアップとリカバリセマンティクス
- ACPランタイムバックエンドはプラガブル
- 最初のバックエンドはacpxベースのプラグインサービス
- ランタイムがACPトランスポート、キューイング、キャンセル、再接続を担当
OpenClawはコア内でACPトランスポートの内部実装を再実装すべきではない。 OpenClawはルーティングのためにプラグインのみのインターセプションパスに依存すべきではない。
北極星アーキテクチャ(理想型)
ACPをOpenClawのファーストクラスの制御プレーンとして扱い、プラガブルなランタイムアダプターを持つ。
譲れない不変条件:
- すべてのACPスレッドバインディングは有効なACPセッションレコードを参照
- すべてのACPセッションは明示的なライフサイクル状態を持つ(
creating、idle、running、cancelling、closed、error) - すべてのACPランは明示的な実行状態を持つ(
queued、running、completed、failed、cancelled) - spawn、bind、初期エンキューはアトミック
- コマンドリトライは冪等(重複する実行やDiscord出力なし)
- バウンドスレッドのチャンネル出力はACPランイベントの投影であり、アドホックな副作用ではない
長期的な所有権モデル:
AcpSessionManagerがACPの唯一のライターかつオーケストレーター- マネージャーは最初にgatewayプロセス内に存在し、同じインターフェースの背後で専用サイドカーに移動可能
- ACPセッションキーごとに、マネージャーが1つのインメモリアクターを所有(コマンド実行のシリアライズ)
- アダプター(
acpx、将来のバックエンド)はトランスポート/ランタイム実装のみ
長期的な永続化モデル:
- ACP制御プレーン状態を専用SQLiteストア(WALモード)に移行(OpenClawの状態ディレクトリ配下)
- 移行中は
SessionEntry.acpを互換性投影として維持するが、ソースオブトゥルースではない - ACPイベントを追記のみで保存し、リプレイ、クラッシュリカバリ、決定論的配信をサポート
このドキュメントの残りの部分には、配信戦略、ルーティング、状態マシン、アクターモデル、冪等性、リカバリ、ライフサイクル、設定、実装仕様、テスト計画、リスクと緩和策、受入チェックリスト、およびターゲット付きリファクタリングの付録が含まれる。詳細は英語版の完全なドキュメントを参照。