PTYとプロセス監視計画
1. 課題と目標
以下にまたがる長時間実行コマンド実行の統一的で信頼性の高いライフサイクルが必要:
execフォアグラウンド実行execバックグラウンド実行processフォローアップアクション(poll、log、send-keys、paste、submit、kill、remove)- CLIエージェントランナーサブプロセス
目標はPTYのサポートだけではない。安全でないプロセスマッチングヒューリスティクスなしに、予測可能な所有権、キャンセル、タイムアウト、クリーンアップを実現すること。
2. スコープと境界
- 実装は
src/process/supervisor内部に維持。 - 新しいパッケージは作成しない。
- 現在の動作互換性を実用的な範囲で維持。
- ターミナルリプレイやtmux型セッション永続化へのスコープ拡大はしない。
3. このブランチで実装済み
- 明示的なPTYコマンドコントラクト —
SpawnInputが判別共用体に。PTY実行は汎用argvではなくptyCommandを要求。 - プロセス層の型分離 — Supervisorの型がエージェントから
SessionStdinをインポートしない。 - プロセスツールのライフサイクル所有権改善 —
process kill/removeがスーパーバイザー経由でキャンセルを要求。 - 単一ソースのウォッチドッグデフォルト —
src/agents/cli-watchdog-defaults.tsに共有デフォルト。 - 不要ヘルパーのクリーンアップ。
- 直接スーパーバイザーパステストの追加。
- 信頼性ギャップの修正 — スーパーバイザールックアップミス時の実OSレベルプロセス終了フォールバック。
- PTYコントラクトのエッジケースカバレッジの追加。
4. 残課題と決定事項
耐久性と起動時の調整
再起動動作はインメモリライフサイクルのみとして明示的に定義。reconcileOrphans()は設計上no-opのまま。アクティブな実行はプロセス再起動後に復旧されない。部分的な永続化リスクを回避するため、この実装パスでは意図的な境界。
5. 定義の完了
- スーパーバイザーが管理対象実行のライフサイクル所有者。
- PTY spawnが明示的なコマンドコントラクトを使用(argv再構築なし)。
- プロセス層がスーパーバイザーstdinコントラクトでエージェント層への型依存なし。
- ウォッチドッグデフォルトが単一ソース。
- ターゲットユニット/E2Eテストがグリーン。
- 再起動耐久性の境界が明示的にドキュメント化または完全実装。