yoi/tickets/pod-comm-tools.md
2026-04-18 18:48:26 +09:00

95 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Pod 間通信ツール: SendToPod / ReadPodOutput / StopPod / ListPods
## 背景
`SpawnPod` で Pod を生成した後、spawner の LLM が spawned Pod に指示を送り、結果を読み、完了したら停止させる手段が必要。
## 依存
- `tickets/spawn-pod-tool.md`: SpawnPod による Pod 生成と spawn 記録
## ツール群
すべて**都度接続の request-response** で動作する。spawned Pod の socket に接続し、操作を行い、切断する。
### `SendToPod`
既知の Pod にメッセージを送る。
入力:
- `name`: 対象の Pod
- `message`: 送信するテキスト
出力:
- 送信確認
内部動作:
- spawn 記録から `name` の socket path を引く
- socket に接続 → `Method::Run { input: message }` を送信 → ack 受信 → 切断
### `ReadPodOutput`
既知の Pod の出力を読む。前回読んだ位置を自動追跡(カーソルベース)。
入力:
- `name`: 対象の Pod
出力:
- 前回読んだ位置以降の assistant テキスト出力
- 現在の状態(`running` / `idle` / `stopped`
内部動作:
- spawn 記録から socket path を引く
- socket に接続 → `Method::GetHistory` で履歴取得 → 前回カーソル以降の assistant text を抽出 → カーソル更新 → 切断
- 接続できなければ `stopped` として返す
### `StopPod`
既知の Pod を終了させ、譲渡した scope を回収する。
入力:
- `name`: 対象の Pod
出力:
- 終了確認
- 回収された scope の要約
内部動作:
- socket に接続 → `Method::Shutdown` 送信 → 終了確認受信 → 切断
- scope lock file を flock → 対象の allocation 削除 → spawner の deny を解除 → unlock
- spawn 記録から対象を削除
### `ListPods`
自分が知っている Pod の一覧と状態を返す。
入力: なし
出力:
- 各 Pod の `name`、`name`、`status`、譲渡中の scope 要約、最終応答の要約
内部動作:
- spawn 記録を元にリストを構築
- 各 Pod に都度接続して health check`Method::GetHistory` でステータス取得、接続できなければ `stopped`
- stopped な Pod は scope lock file の stale 回収をトリガー
## 設計で決めること
- **ReadPodOutput のカーソル管理**: spawn 記録内に `last_read_hash` を持つか、別の場所で管理するか
- **StopPod と scope 回収の順序**: 先に Shutdown してから lock file を更新するか、lock file を先に更新するかShutdown が失敗した場合の整合性)
- **ListPods の health check コスト**: 大量の Pod がいるとき全部に接続するのは重い。キャッシュ戦略
## 完了条件
- `SendToPod` で spawned Pod にメッセージを送り、Pod がそれを処理する
- `ReadPodOutput` で spawned Pod の最新出力を読め、カーソルベースの差分取得が動作する
- `StopPod` で spawned Pod を graceful に停止でき、scope が spawner に返却される
- `ListPods` で既知の Pod の状態を一覧でき、health check が機能する
- 接続できない Pod は `stopped` として扱われ、scope の stale 回収がトリガーされる
- 単体テストで各ツールの正常系・異常系が検証される
## 範囲外
- コールバック通知は `tickets/pod-callback.md`
- Pod ネットワークの GUI / TUI 可視化