mergegate/docs/dtp/OPENCLAW-DOCKING-PLAN.md
林 駿甫 (Shunsuke Hayashi) 1bfc0f9643 [文書] OpenClaw ドッキングプラン — DTP × OpenClaw 統合設計
5つのドッキングポイントを特定:
1. exec-approvals ↔ gate.rs(承認ゲート)
2. hooks ↔ protocol.rs(イベント通知)
3. sessions-spawn ↔ orchestration.rs(サブエージェント起動)
4. memory ↔ store.rs(tasks.json 同期)
5. routing ↔ dag.rs(DAG レベル振り分け)

改善項目 8件:
  #1-5: miyabi-cli-standalone 側(Phase A/B で対応可能)
  #6-8: OpenClaw 側(Phase C 以降)

GNI で OpenClaw Gateway/CLI/Sessions/Memory/Hooks/Routing/Agents を
全て横断分析した結果に基づく。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 01:22:29 +09:00

11 KiB
Raw Blame History

OpenClaw ドッキングプラン — DTP × OpenClaw 統合設計


現状のドッキングポイント5箇所

┌──────────────────────────────────────────────────────────────────┐
│  OpenClaw (TypeScript/Node.js)                                    │
│                                                                    │
│  ┌────────────────┐  ┌────────────────┐  ┌────────────────────┐  │
│  │ exec-approvals │  │ hooks          │  │ sessions-spawn     │  │
│  │ スナップショット│  │ イベント発火   │  │ サブエージェント   │  │
│  │ 承認/拒否判定  │  │ 外部通知       │  │ 起動/停止          │  │
│  └───────┬────────┘  └───────┬────────┘  └─────────┬──────────┘  │
│          │                    │                      │             │
│  ┌───────┴────────┐  ┌───────┴────────┐  ┌─────────┴──────────┐  │
│  │ routing        │  │ memory         │  │ gateway            │  │
│  │ セッションキー │  │ sync/search    │  │ WebSocket/HTTP     │  │
│  │ エージェント   │  │ ベクトル検索   │  │ メッセージ配信     │  │
│  │ 振り分け       │  │                │  │                    │  │
│  └────────────────┘  └────────────────┘  └────────────────────┘  │
│                                                                    │
└────────────────────┬─────────────────────────────────────────────┘
                     │
                     │ Shell / HTTP
                     │
┌────────────────────┴─────────────────────────────────────────────┐
│  miyabi-cli-standalone (Rust)                                     │
│                                                                    │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐            │
│  │ gate.rs  │ │ lock.rs  │ │store.rs  │ │protocol  │ ← Phase A  │
│  │ GATE検証 │ │ ファイル │ │tasks.json│ │.rs       │            │
│  │          │ │ ロック   │ │永続化    │ │統合窓口  │            │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘            │
│                                                                    │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ 既存      │
│  │ dag.rs   │ │github.rs │ │approval  │ │openclaw  │            │
│  │ DAG 823行│ │ GH 947行 │ │.rs 231行 │ │.rs 354行 │            │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘            │
└──────────────────────────────────────────────────────────────────┘

ドッキングポイント詳細

1. exec-approvals ↔ gate.rs

OpenClaw 側: exec-approvals-cli.ts

  • loadSnapshot() / saveSnapshot() で承認状態を永続化
  • normalizeAllowlistEntry() で許可リストを管理
  • resolveAgentKey() でエージェント特定

DTP 側: gate.rs

  • ensure_impact(task, human_approved) で HIGH/CRITICAL を承認ゲート
  • ensure_issue() で Issue 存在を検証

ドッキング方法:

  • OpenClaw の exec-approvals が DTP の GATE 結果を参照
  • DTP の protocol.record_impact() が承認を要求 → OpenClaw が approval snapshot に記録
  • 連携: miyabi gate impact <task-id> --risk HIGH → exit code 1承認待ち→ OpenClaw が承認 → miyabi gate impact <task-id> --risk HIGH --approve

改善が必要:

  • gate.rs に --approve フラグ対応(承認者 ID + 理由を記録)
  • exit code で承認状態を返す0=承認済み, 1=承認待ち, 2=拒否)

2. hooks ↔ protocol.rs イベント

OpenClaw 側: hooks/

  • loadHookEntries() でフックを登録
  • registerInternalHook() でイベント発火
  • イベント: ツール実行前後、セッション開始/終了、メッセージ送受信

DTP 側: protocol.rs の各メソッド

  • register_task → task_registered イベント
  • assign_and_lock → lock_acquired イベント
  • record_merge → task_completed イベント

ドッキング方法:

  • DTP の各 protocol メソッドが完了後に hook を発火
  • OpenClaw の hooks システムが DTP イベントを購読
  • 連携: miyabi gate register 実行 → stdout に JSON イベント → OpenClaw hook がキャッチ

改善が必要:

  • protocol.rs の各メソッドに --emit-event オプションJSON イベントを stdout に出力)
  • OpenClaw hooks に DTP イベント用のフックテンプレートを追加

3. sessions-spawn ↔ orchestration.rs

OpenClaw 側: subagent-spawn.ts

  • spawnSubagentDirect() でサブエージェントを起動
  • セッションキーで管理

DTP 側: orchestration.rs

  • Orchestrator で並列実行
  • ParallelConfig で同時実行数制御

ドッキング方法:

  • OpenClaw main が DTP のタスクを受け取る
  • miyabi gate dispatchable で実行可能タスクを取得
  • 各タスクを spawnSubagentDirect() でサブエージェントに配布
  • サブエージェントが miyabi gate assign → 作業 → miyabi gate prmiyabi gate merge

改善が必要:

  • miyabi gate dispatchable --format json でマシン可読出力
  • 各タスクに assigned_agent フィールドを OpenClaw agent ID で記録

4. memory ↔ store.rs

OpenClaw 側: memory/

  • syncMemoryFiles() でファイル同期
  • searchVector() / searchKeyword() でメモリ検索
  • indexFileEntryIfChanged() でインデックス更新

DTP 側: store.rs

  • tasks.json の読み書き
  • atomic rename で永続化

ドッキング方法:

  • tasks.json を OpenClaw のメモリ同期対象に含める
  • OpenClaw の syncMemoryFiles()project_memory/tasks.json を各ノードに配布
  • 検索: searchKeyword("task-001") で特定タスクの状態を取得

改善が必要:

  • project_memory/ を OpenClaw memory sync の対象パスに追加
  • tasks.json の変更を OpenClaw memory index に自動反映

5. routing ↔ dag.rs タスク振り分け

OpenClaw 側: routing/

  • resolveAgentIdFromSessionKey() でエージェントを特定
  • normalizeAgentId() / sanitizeAgentId()

DTP 側: dag.rs

  • TaskGraph で依存関係管理
  • build_levels() で並列実行グループ計算

ドッキング方法:

  • DTP の DAG レベルに基づいて、OpenClaw routing がエージェントを振り分け
  • Level 0 のタスク → 即座にディスパッチ
  • Level 1 のタスク → Level 0 完了後にディスパッチ
  • 連携: miyabi gate dag --format json → OpenClaw が読んで routing 判定

改善が必要:

  • dag.rs の出力に assigned_agent を含める
  • OpenClaw routing が DTP DAG レベルを考慮するアダプタ

ドッキング実行シーケンス

OpenClaw main (Gateway)
    │
    ▼
1. miyabi gate register --issue 45 --title "認証移行"
    │ → tasks.json に登録、GATE 0 検証
    │ → exit 0 (成功) or exit 2 (Issue なし)
    │
    ▼
2. miyabi gate dispatchable --format json
    │ → 実行可能タスク一覧を返す
    │
    ▼
3. openclaw sessions spawn --agent kade
    │ → サブエージェント(カエデ)を起動
    │
    ▼
4. miyabi gate assign task-001 --agent kade --node macbook --files "src/auth.rs"
    │ → ファイルロック獲得、implementing に遷移
    │ → exit 0 (成功) or exit 1 (ロック競合)
    │
    ▼
5. (カエデが実装)
    │
    ▼
6. miyabi gate branch task-001 feature/issue-45-auth
    │
    ▼
7. miyabi gate pr task-001 78
    │ → reviewing に遷移
    │
    ▼
8. openclaw sessions spawn --agent sakura
    │ → サクラにレビュー依頼
    │
    ▼
9. miyabi gate merge task-001
    │ → GitHub API で merge 検証
    │ → ロック解放、Done に遷移
    │ → 後続タスク解放
    │
    ▼
10. openclaw hooks emit "task_completed" --task task-001
    │ → Telegram 通知、worklog 記録

改善が必要な項目まとめ

# 項目 場所 難易度 Phase
1 --approve フラグ + 承認者記録 gate.rs A
2 exit code 標準化 (0/1/2) CLI B
3 --emit-event JSON イベント出力 protocol.rs B
4 --format json 全コマンド対応 CLI B
5 assigned_agent の OpenClaw ID 記録 store.rs A
6 OpenClaw hooks に DTP テンプレート OpenClaw 側 C
7 memory sync に tasks.json を追加 OpenClaw 側 C
8 routing が DAG レベルを考慮 OpenClaw 側 C 以降

#1-5 は miyabi-cli-standalone 側Phase A/B で対応可能) #6-8 は OpenClaw 側Phase C 以降で対応)


リスク評価

リスク 影響 対策
OpenClaw Gateway が落ちている DTP CLI は動くが通知が飛ばない DTP は GitHub SSOT に依存、Gateway は補助
tasks.json の同期タイミングズレ 別ノードが古い状態を見る memory sync の頻度を上げる or git push で共有
サブエージェントがクラッシュ ロックが残る TTL + stale 検出で自動解放
exec-approvals と gate.rs の二重承認 混乱 DTP gate を authority にし、exec-approvals は参照のみ

This plan defines how OpenClaw docks with DTP. Implementation starts after Phase A/B are complete.