sibyl-cli 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. sibyl_cli-0.2.1/.gitignore +16 -0
  2. sibyl_cli-0.2.1/PKG-INFO +15 -0
  3. sibyl_cli-0.2.1/README.md +100 -0
  4. sibyl_cli-0.2.1/docs/25-10-12-17_codex_resume_spec.md +25 -0
  5. sibyl_cli-0.2.1/docs/25-11-01-19_experiment.yaml +333 -0
  6. sibyl_cli-0.2.1/docs/25-11-03-04_refactor_plan.md +62 -0
  7. sibyl_cli-0.2.1/docs/25-11-03-07_cycle_flow.yaml +72 -0
  8. sibyl_cli-0.2.1/docs/25-11-09-08_controller_contract.md +15 -0
  9. sibyl_cli-0.2.1/docs/assets/sibyl_workflow.png +0 -0
  10. sibyl_cli-0.2.1/docs/experiment.yaml +950 -0
  11. sibyl_cli-0.2.1/docs/requirement.yaml +140 -0
  12. sibyl_cli-0.2.1/pyproject.toml +40 -0
  13. sibyl_cli-0.2.1/src/parallel_developer/__init__.py +5 -0
  14. sibyl_cli-0.2.1/src/parallel_developer/cli.py +649 -0
  15. sibyl_cli-0.2.1/src/parallel_developer/controller/__init__.py +1398 -0
  16. sibyl_cli-0.2.1/src/parallel_developer/controller/commands.py +132 -0
  17. sibyl_cli-0.2.1/src/parallel_developer/controller/events.py +17 -0
  18. sibyl_cli-0.2.1/src/parallel_developer/controller/flow.py +43 -0
  19. sibyl_cli-0.2.1/src/parallel_developer/controller/history.py +70 -0
  20. sibyl_cli-0.2.1/src/parallel_developer/controller/pause.py +94 -0
  21. sibyl_cli-0.2.1/src/parallel_developer/controller/workflow_runner.py +135 -0
  22. sibyl_cli-0.2.1/src/parallel_developer/orchestrator.py +1234 -0
  23. sibyl_cli-0.2.1/src/parallel_developer/services/__init__.py +14 -0
  24. sibyl_cli-0.2.1/src/parallel_developer/services/codex_monitor.py +627 -0
  25. sibyl_cli-0.2.1/src/parallel_developer/services/log_manager.py +161 -0
  26. sibyl_cli-0.2.1/src/parallel_developer/services/tmux_manager.py +245 -0
  27. sibyl_cli-0.2.1/src/parallel_developer/services/worktree_manager.py +119 -0
  28. sibyl_cli-0.2.1/src/parallel_developer/stores/__init__.py +20 -0
  29. sibyl_cli-0.2.1/src/parallel_developer/stores/session_manifest.py +165 -0
  30. sibyl_cli-0.2.1/src/parallel_developer/stores/settings_store.py +242 -0
  31. sibyl_cli-0.2.1/src/parallel_developer/ui/widgets.py +269 -0
  32. sibyl_cli-0.2.1/tests/25-11-02-22_pdev_ui_test.py +570 -0
  33. sibyl_cli-0.2.1/tests/25-11-06-03_integration_flow_test.py +151 -0
  34. sibyl_cli-0.2.1/tests/builder_test.py +63 -0
  35. sibyl_cli-0.2.1/tests/cli_test.py +881 -0
  36. sibyl_cli-0.2.1/tests/conftest.py +19 -0
  37. sibyl_cli-0.2.1/tests/controller_command_test.py +339 -0
  38. sibyl_cli-0.2.1/tests/log_manager_test.py +38 -0
  39. sibyl_cli-0.2.1/tests/monitor_test.py +451 -0
  40. sibyl_cli-0.2.1/tests/orchestrator_test.py +688 -0
  41. sibyl_cli-0.2.1/tests/selection_ui_test.py +76 -0
  42. sibyl_cli-0.2.1/tests/tmux_manager_test.py +200 -0
  43. sibyl_cli-0.2.1/tests/workflow_test.py +342 -0
  44. sibyl_cli-0.2.1/tests/worktree_test.py +57 -0
@@ -0,0 +1,16 @@
1
+ .venv/
2
+ .venv
3
+ .parallel-dev/
4
+ logs/
5
+ __pycache__/
6
+ *.pyc
7
+ *.pyo
8
+ *.swp
9
+ 25-11-01-18_codex_src/
10
+ codex_src/
11
+ dev_test/
12
+ dist/
13
+ uv.lock
14
+ *uv.lock
15
+ *.jsonl
16
+ .DS_Store
@@ -0,0 +1,15 @@
1
+ Metadata-Version: 2.4
2
+ Name: sibyl-cli
3
+ Version: 0.2.1
4
+ Summary: CLI orchestrator for parallel Codex agents with tmux and git worktree integration.
5
+ Author: Parallel Developer Team
6
+ Requires-Python: >=3.11
7
+ Requires-Dist: gitpython>=3.1.45
8
+ Requires-Dist: libtmux>=0.46.2
9
+ Requires-Dist: platformdirs>=4.3.6
10
+ Requires-Dist: pydantic>=2.9
11
+ Requires-Dist: pyyaml>=6.0.2
12
+ Requires-Dist: rich>=13.9.2
13
+ Requires-Dist: textual>=0.51.1
14
+ Requires-Dist: typer>=0.12.3
15
+ Requires-Dist: watchfiles>=0.23.0
@@ -0,0 +1,100 @@
1
+ ![Sibyl CLI screenshot](docs/assets/sibyl_workflow.png)
2
+
3
+ # Sibyl CLI(シビュラ)
4
+
5
+ tmux と git worktree を土台に、複数の Codex/LLM エージェントを同じコンテキストで同時起動し、指示・比較・採点・統合までを 1 つの CLI から操作できるツールです。指示を 1 回入力するだけでワーカーが並列に実装し、採点エージェント(Boss)が結果を評価・統合することで、より良い実装案を自動的に得られます。
6
+
7
+ ## 特徴
8
+ - **コンテキスト維持型マルチエージェント**: メインへ与えた指示が各ワーカーへ自動コピーされるため、毎回プロジェクト概要を説明し直す必要がありません。
9
+ - **柔軟な並列度**: `/parallel` コマンドでワーカー数を自由に増減可能。途中で人数を変えてもセッション履歴は保持されます。
10
+ - **比較&自動採点**: 複数実装を並べて比較し、採点エージェントが自動でスコアリング。点数に応じてベスト案を選択できます。
11
+ - **採点後の統合能力**: Boss は高得点の断片を組み合わせたり、複数案を見た後に改めて実装することで、より洗練された最終成果物を生成します。
12
+ - **統一 CLI からの操作**: 指示送信、エージェント起動、採点、統合、再開までを Textual ベースの CLI 1 つで完結。
13
+ - **フルオートにも対応**: エージェント起動→指示送信→採点→マージ→再開の一連の流れを自動化(Flow/Boss/マージ戦略はコマンドで切り替え)。
14
+
15
+ ## セットアップ
16
+ ### クイックスタート
17
+ ```bash
18
+ pipx install sibyl-cli==0.2.1 # 既存インストールを上書きする場合は --force
19
+ sibyl # 起動、Ctrl+Q で終了
20
+ ```
21
+
22
+ バージョン更新時は `pipx upgrade sibyl-cli` を実行してください。pipx 自体がまだなら、macOS なら `brew install pipx && pipx ensurepath`、その他環境なら `python3 -m pip install --user pipx` のあと `pipx ensurepath` を実行し、シェルを再起動して PATH を反映させてください。
23
+
24
+
25
+ ## 使い方の流れ
26
+ 1. `sibyl` を起動し、CLI で指示または `/command` を入力。
27
+ 2. ワーカーが同じコンテキストを共有したまま並列実装。必要に応じて `/parallel <n>` で人数を増減。
28
+ 3. Boss(採点エージェント)が自動でスコアリング。rewrite モードでは複数案を踏まえた実装も実施。
29
+ 4. スコアに応じて候補を採択し、選ばれたセッションを `codex resume` でメインへリジューム。
30
+ 5. `/flow full_auto` 等を使えば上記を全自動で回せます。
31
+
32
+ ## 主なコマンド
33
+ | コマンド | 役割(概要) |
34
+ | --- | --- |
35
+ | `/attach [auto\|manual\|now]` | tmux へのアタッチ方法を切り替える |
36
+ | `/mode [main\|parallel]` | メインのみ or 並列モードを選ぶ |
37
+ | `/parallel <n>` | ワーカー数を設定(途中変更も可) |
38
+ | `/flow [manual\|auto_review\|auto_select\|full_auto]` | レビュー/採択の自動化レベルを決める |
39
+ | `/boss [skip\|score\|rewrite]` | 採点エージェントの役割を決める |
40
+ | `/merge` | マージの進め方を選ぶ |
41
+ | `/continue` | 完了扱いのワーカーに追加指示を送る |
42
+ | `/done` | 採点フェーズへ進める |
43
+ | `/resume` | 保存済みセッションを再開する |
44
+ | `/log copy` | その場でログをコピーする |
45
+ | `/log save <path>` | ログをファイルに保存する |
46
+ | `/commit` | サイクル開始時の自動コミットを切り替える |
47
+ | `/status` | 現在の状態を表示する |
48
+ | `/scoreboard` | 直近の採点結果を表示する |
49
+ | `/help` | コマンド一覧を表示する |
50
+ | `/exit` | CLI を終了する |
51
+
52
+ 以下では「何ができるか」に絞って簡潔にまとめます。設定系コマンドは実行すると `~/.parallel-dev/config.yaml` に保存され、次回も同じ振る舞いになります。
53
+
54
+ ### `/attach [auto|manual|now]`
55
+ - `auto`: CLIが自動で tmux に張り付く。何もせず画面を確認したいとき向け。
56
+ - `manual`: 必要なときにだけ自分でアタッチ。バックグラウンドで回したいとき向け。
57
+ - `now`: その場でアタッチを実行。
58
+
59
+ ### `/mode [main|parallel]`
60
+ - `main`: メインペインだけを使い、並列化を一時停止。
61
+ - `parallel`: メイン+ワーカー+Bossをすべて起動する通常運転。
62
+
63
+ ### `/parallel <n>`
64
+ - 指示中のプロジェクトに、そのままワーカーを増減させたいときに使います(例: 2→4人に増員)。既存の文脈は保たれます。
65
+
66
+ ### `/flow [manual|auto_review|auto_select|full_auto]`
67
+ - `manual`: 採点フェーズへの移行も採択も手動。1ステップずつ人が確認したいときの基本設定。
68
+ - `auto_review`: ワーカー完了後に採点フェーズへ自動遷移するが、採択ボタンは手動。進行だけ自動化したい場合に使う。
69
+ - `auto_select`: 採点フェーズへ進む合図は手動のまま、採択はスコア順に自動。採点を見届けてから自動選定したいとき用。
70
+ - `full_auto` (デフォルト): ワーカー完了→採点→採択まで全自動。完全フルオート運転で回したい場合に利用。
71
+
72
+ ### `/boss [skip|score|rewrite]`
73
+ - `skip`: Bossペインを起動せず、ユーザーが手動で結果をまとめる。軽量な検証用。
74
+ - `score`: Bossが採点のみ担当し、最終統合はホストが行う。デフォルト動作。
75
+ - `rewrite`: Bossが採点後に自ら統合/再実装も行い、候補の1つとして提示する。統合作業を任せたいときに。
76
+
77
+ ### `/merge`
78
+ - `manual`: これまで通りホスト側がFast-Forwardで統合します。
79
+ - `auto` (デフォルト): 採択されたエージェントに「git add/commit→mainへFast-Forward→完了フラグ」の手順を送ってからマージします。
80
+
81
+ ### `/continue` と `/done`
82
+ - `/continue`: 完了扱いになったワーカーを再び動かし、ユーザーが追加入力した内容をそのまま送ります。
83
+ - `/done`: 今の段階で採点フェーズへ進めたいときに押す合図。Workersがフラグを出さなくても前に進めます。
84
+
85
+ ### `/resume`
86
+ - 過去のサイクルを一覧表示し、任意のセッションをそのまま再開できます。中断した作業を引き継ぐときに便利です。
87
+
88
+ ### `/log [copy|save]`
89
+ - `copy`: 現在のログ全文を手元クリップボードへ取り込み、別エディタに貼りたいときに使います。
90
+ - `save <path>`: ログをファイルとして書き出し、共有や検証用の資料にできます。
91
+
92
+ ### `/commit [manual|auto]`
93
+ - `manual`: 今ある変更をすぐ記録したいときのショートカット。
94
+ - `auto`: サイクル開始時に自動コミットを入れる/止める設定。毎周回でクリーンな差分にしたいときに便利。
95
+
96
+ ### `/status`, `/scoreboard`, `/help`, `/exit`
97
+ - `/status`: 現在ステップ(待機・一時停止など)を確認。
98
+ - `/scoreboard`: 直近の採点結果を再掲。
99
+ - `/help`: コマンド一覧を表示。
100
+ - `/exit`: CLI を終了。
@@ -0,0 +1,25 @@
1
+ ## Codex CLI `resume` 調査メモ(2025-10-12 17:00)
2
+
3
+ ### 現行仕様の要点
4
+ - `codex resume` は `~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl` を探索し、選択したロールアウトファイルからセッションを再構築する。
5
+ - CLI フラグは通常起動と同様に有効。例: `codex resume --last -m gpt-5`、`codex resume <SESSION_ID> --search` 等。
6
+ - ピッカー表示(引数なし)、最新セッションの直接再開(`--last`)、UUID 指定での復帰の 3 パターンがサポートされる。
7
+ - TUI 側は `ResumeSelection::Resume(path)` を受けると `ConversationManager::resume_conversation_from_rollout` を呼び出し、過去の会話コンテキストを含む `CodexConversation` を復元して `ChatWidget::new_from_existing` に渡す。
8
+ - 復元時はセッション ID を維持したまま新しい `RolloutRecorder` を再アタッチし、履歴の追記やトークン使用量追跡を継続できる。
9
+
10
+ ### JSONL から復元される情報
11
+ - `RolloutRecorder::get_rollout_history` がロールアウトを `Vec<RolloutItem>` にパースし、`SessionMeta` や `TurnContext`、`EventMsg` など非メッセージ項目も保持したまま `InitialHistory::Resumed` を生成する。
12
+ - `RolloutItem` にはコマンド実行ログ、Plan 更新、MCP 関連イベント、モデル構成変更などが含まれ、単なるメッセージ履歴以上の状態を復元可能。
13
+ - `ChatWidget::new_from_existing` と `spawn_agent_from_existing` が `SessionConfigured` を即座に投げ直し、TUI 上で差分ビューや承認ダイアログなどの履歴を再表示する。
14
+
15
+ ### 旧仕様との違い
16
+ - 0.36.0(2025-09-15)以前は `codex resume` / `codex --resume` が未実装で、ロールアウトを直接閲覧する以外に継続不可だった。
17
+ - 0.46.0(2025-10-09 現在)では終了時に再開コマンドをリマインドするなど、レジューム前提の UX 改善が入っている。
18
+
19
+ ### 確認に使った主なコマンド
20
+ - `codex --version`
21
+ - `codex resume --help`
22
+ - `git clone --depth=1 https://github.com/openai/codex.git`
23
+ - `rg "codex resume" -n`
24
+ - `sed -n '400,470p' codex-rs/tui/src/lib.rs`
25
+ - `sed -n '200,340p' codex-rs/core/src/rollout/recorder.rs`
@@ -0,0 +1,333 @@
1
+ - date: '2025-11-01'
2
+ time_utc: 09:56:00
3
+ summary: 要件定義をもとにCLI・オーケストレーターをTTDで完成させた
4
+ details:
5
+ - uv環境とpyprojectを整備し、pytestを導入
6
+ - OrchestratorとCLIのテストを先行作成し、tmux制御・完了検知・Boss統合まで実装
7
+ - サービス層(WorktreeManager, CodexMonitor, LogManager, TmuxLayoutManager)をテスト駆動で構築
8
+ reproduce:
9
+ - uv run pytest
10
+ result: tests 10 passed
11
+ notes: 実TMUX制御はlibtmuxスタブで検証、実環境でのキー送出確認が今後の確認事項
12
+ - date: '2025-11-01'
13
+ time_utc: '11:30:00'
14
+ summary: Boss採点・スコアボード・ユーザー選択・mainマージまで実装
15
+ details:
16
+ - WorktreeManagerにboss用ワークツリーとfast-forwardマージ機能を追加
17
+ - CodexMonitorでmanual session登録をサポートし、bossセッション投入を自動化
18
+ - Orchestratorで自動スコアリング&採用決定フローを実装し、CLIは結果表示のみ
19
+ reproduce:
20
+ - uv run pytest
21
+ result: tests 12 passed
22
+ notes: 実環境ではBossワークツリーで改良した成果をmainへマージ後、codex resumeにより継続可能
23
+ - date: '2025-11-01'
24
+ time_utc: '19:20:00'
25
+ summary: ワーカーペイン起動が停止していた問題を修正
26
+ details:
27
+ - TmuxLayoutManager.fork_workersを更新し、各ワーカーペインで直接`codex --cd <worktree>`を起動するよう変更
28
+ - Orchestratorのフォーク処理から未実装のresumeステップを除去し、ワークツリー割当のフォールバックを排除
29
+ - TTDでtmux/オーケストレータテストを更新し、期待するコマンドとパス検証を追加
30
+ reproduce:
31
+ - uv run pytest
32
+ result: tests 15 passed
33
+ notes: 暫定対応(20:45エントリで要件どおりのフォーク処理へ差し替え)。
34
+ - date: '2025-11-01'
35
+ time_utc: '20:45:00'
36
+ summary: 要件定義どおりメインセッションからフォークする挙動へ再修正
37
+ details:
38
+ - TmuxLayoutManager.fork_workersで`codex resume <main_session_id>`実行後に`Esc`×2→`Enter`を送出する処理へ変更
39
+ - Orchestratorで全ワーカーにワークツリーを必須割当とし、既存のresumeワークフローに合わせたエラーハンドリングを追加
40
+ - tmux/orchestratorテストを更新し、resumeコマンド・キー入力の送信を検証
41
+ - 起動待機のばらつきに備えてstartup_delayとキー入力間隔を導入
42
+ - デバッグ用途で`PARALLEL_DEV_PAUSE_AFTER_RESUME=1`時にワーカーレジューム直後で停止するフックを追加
43
+ - フォーク後は指示文を再送せずEnterのみ送るよう変更し、worker側の重複入力を解消
44
+ - CodexMonitorでレジューム直後の既存`/done`を無視し、新規追記分のみ検出するようoffset管理を追加
45
+ - tmux起動コマンドを`cd <path> && codex`に簡素化し、`--cd`重複指定を解消
46
+ - Boss用ワークツリーをtmuxへ渡し、workersと同様に`codex resume`→フォークまで自動化
47
+ - BossManagerによる自動採点を廃止し、CLI上で手動選択(selector)を必須化
48
+ - スコアボードは完了情報主体にし、選択結果のみスコアへ反映
49
+ - Bossが出力したJSON評価をロールアウトから抽出し、スコア・コメントとして表示/ログ化
50
+ - `PARALLEL_DEV_DEBUG_STATE` / `PARALLEL_DEV_PAUSE_BEFORE_BOSS` で完了検知と送信タイミングをデバッグ可能に
51
+ reproduce:
52
+ - uv run pytest
53
+ result: tests 15 passed
54
+ notes: 各ワーカーロールアウトIDはCodexMonitorが取得し、指示送信はtmux pane_idを用いるフローで整合
55
+ - date: '2025-11-02'
56
+ time_utc: '19:35:00'
57
+ summary: メインCodex停止処理をCtrl+C化
58
+ details:
59
+ - TmuxLayoutManager.interrupt_paneでEsc送信をやめ、Ctrl+Cを二度送るよう変更
60
+ - tmuxマネージャテストの期待値をCtrl+C送信に合わせて更新
61
+ - uv run pytestで全18件のテストが成功することを確認
62
+ reproduce:
63
+ - uv run pytest
64
+ result: tests 18 passed
65
+ notes: メインpaneリジューム前にcodexが確実に終了し、既存セッションへ誤送信しなくなることを狙った変更
66
+ - date: '2025-11-02'
67
+ time_utc: '19:55:00'
68
+ summary: 要件定義ドキュメントを現状仕様に合わせて更新
69
+ details:
70
+ - docs/requirement.yamlでCtrl+C中断やBoss採点フローなど最新の実装手順に揃えた
71
+ - ログ設計・完了検知・セッションID取得の記述をCodexMonitor/LogManagerの挙動に合わせて整理
72
+ reproduce:
73
+ - N/A (ドキュメント更新のみ)
74
+ result: not run (docs-only)
75
+ notes: 今後の実装リファクタリング前提としてドキュメントの齟齬を解消
76
+ - date: '2025-11-02'
77
+ time_utc: '20:20:00'
78
+ summary: 日付付きモジュールを整理しログ処理を共通化
79
+ details:
80
+ - 日付付きのCLI/サービス/オーケストレーターのシンボリックリンクを廃止し、本体ファイルへ統合
81
+ - HELLO系スクリプトを`hello_*`命名へリネームし、logging_utils.configure_file_loggerでログ設定を共通化
82
+ - pytestのテストファイルを`*_test.py`へ整理し、conftestでsrcディレクトリをPATHに追加
83
+ reproduce:
84
+ - uv run pytest
85
+ result: tests 19 passed
86
+ notes: 旧ログファイル名との互換性は新テストで保証、logs/ 配下の新命名へ移行
87
+ - date: '2025-11-02'
88
+ time_utc: '20:35:00'
89
+ summary: HELLO系サンプルコードを削除
90
+ details:
91
+ - HELLO出力用スクリプトとlogging_utilsモジュールを削除し、テスト資産からも除去
92
+ - サンプルログファイル生成フローを停止し、プロダクト本体コードのみに集中できる構成へ整理
93
+ reproduce:
94
+ - uv run pytest
95
+ result: tests 13 passed
96
+ notes: サンプル削除後も本体テストは全て成功し、実CLI/サービスへの影響は確認されていない
97
+ - date: '2025-11-02'
98
+ time_utc: '20:45:00'
99
+ summary: Orchestrator処理フローを分割リファクタ
100
+ details:
101
+ - CycleLayoutデータクラスを導入し、paneとワークツリーの対応関係を保持
102
+ - run_cycle本体を準備・worker処理・Boss処理・選択/マージの個別メソッドに分割
103
+ - デバッグ用環境変数による一時停止ロジックを _maybe_pause に集約し重複を削減
104
+ reproduce:
105
+ - uv run pytest
106
+ result: tests 13 passed
107
+ notes: 既存pytestのモック検証も全て通過し、外部APIとのインターフェース互換性を維持
108
+ - date: '2025-11-02'
109
+ time_utc: '21:20:00'
110
+ summary: `/attach` コマンドの外部ターミナル起動を安定化
111
+ details:
112
+ - macOSのosascript向けに`cd <workdir> && tmux attach -t <session>`をダブルクォートエスケープして実行する処理を追加
113
+ - Linuxではgnome-terminal経由で同コマンドを起動し、未インストール時は`bash -lc`をフォールバックとして呼び出すように改善
114
+ - CLIControllerから作業ディレクトリを添えてattachマネージャへ委譲し、macOS/Linux/フォールバックを網羅するテストを新設
115
+ - `/attach auto|manual` で重複アタッチ検知を切り替えられるようにし、auto時はtmuxの既存クライアントを検出して未接続なら即座に新規アタッチ、manual時は常に新規アタッチする挙動を実装
116
+ - auto中でも`/attach`単体入力は検知をバイパスして強制接続するよう分岐を追加し、挙動をテストで保証
117
+ - 選択したattachモードを`.parallel-dev/settings.yaml`に保存し、次回起動時に復元する設定ファイルを追加
118
+ - tmuxセッションが存在しない段階ではアタッチを実行せず、「指示送信後に再試行する」旨をログに出す安全策を導入
119
+ - アタッチ時のコマンドから`cd`を除去し、純粋に `tmux attach -t <session>` のみを実行するよう簡素化
120
+ - autoモード有効時は指示開始直後に自動アタッチ処理をバックグラウンドで起動し、セッション生成完了を待機してから未接続なら接続するよう調整
121
+ - `/attach`仕様の更新内容をdocs/requirement.yamlへ反映
122
+ reproduce:
123
+ - uv run pytest
124
+ result: tests 20 passed
125
+ notes: 実tmux環境でのosascript挙動は引き続き実機での確認が必要
126
+ - date: '2025-11-02'
127
+ time_utc: '21:50:00'
128
+ summary: CommandPalette初期化でTextual例外を防止
129
+ details:
130
+ - CommandPaletteの__init__とset_itemsでupdate()を即時呼び出し、初回描画がNoneになる問題を解消
131
+ - _render内の改行挿入ロジックのインデント崩れを修正し、pytestで検出されたIndentationErrorを解決
132
+ - CLI回りのテスト群を実行し、コマンドパレットのハイライト更新が意図通り動作することを確認
133
+ reproduce:
134
+ - uv run pytest
135
+ result: tests 32 passed
136
+ notes: 実行時にAttributeError: 'NoneType' object has no attribute 'get_height'が再発しないことを手動確認
137
+ - date: '2025-11-02'
138
+ time_utc: '22:10:00'
139
+ summary: Textualテストでコマンドパレット挙動を再現
140
+ details:
141
+ - CommandPaletteの内部メソッド名を_rebuild_renderableへ変更し、Textual内部の_static._renderと衝突しないよう修正
142
+ - renderable更新時はrefresh()のみ呼ぶよう整理し、Noneが返ることで再発していたget_height例外を根絶
143
+ - Textualのrun_test()を使い、スラッシュ入力と矢印キー操作でパレットが開閉・遷移するUIテストを追加
144
+ reproduce:
145
+ - uv run pytest
146
+ result: tests 34 passed
147
+ notes: `.venv/bin/pdev`を直接起動せずともUIフローをpytestで再現できることを確認
148
+ - date: '2025-11-02'
149
+ time_utc: '22:30:00'
150
+ summary: 入力フォーカス制御とクリック操作の挙動を統一
151
+ details:
152
+ - EventLogをクリックしてもフォーカスが移動しないようcan_focus/focus_on_clickを無効化
153
+ - ParallelDeveloperApp.on_clickでOptionList選択時を除き常に入力欄へフォーカスを戻す処理を追加
154
+ - run_testベースのUIテストでログクリック・空白クリック・選択肢クリック時のフォーカス遷移を検証
155
+ reproduce:
156
+ - uv run pytest
157
+ result: tests 37 passed
158
+ notes: クリック後も端末の選択ハイライトは維持されるため、ログのドラッグ選択→コピーも可能
159
+ - date: '2025-11-02'
160
+ time_utc: '22:55:00'
161
+ summary: ログ選択のコピー操作をショートカット対応
162
+ details:
163
+ - ParallelDeveloperAppでctrl+alt+c(およびctrl+shift+c等)のショートカットを捕捉し、選択範囲優先でログ内容をクリップボードへ転送する処理を実装
164
+ - CLIに`/log copy`・`/log save <path>`を追加し、ショートカットを使わずにログコピー/ファイル保存ができるようにした
165
+ - 選択情報が取得できない場合はRichLog.linesからプレーンテキストを構築してコピーするフォールバックを追加
166
+ - ctrl+a系ショートカットでログ全体を即時選択できるようにし、UIテストでショートカット経路を検証
167
+ reproduce:
168
+ - uv run pytest tests/25-11-02-22_pdev_ui_test.py
169
+ - uv run pytest
170
+ result: tests 38 passed
171
+ notes: 実行環境ではマウス選択後にcmd/ctrl+shift+cでコピー可能、cmd+cは端末依存のため要確認
172
+ - date: '2025-11-02'
173
+ time_utc: '23:10:00'
174
+ summary: ログビューを折り返し表示に統一
175
+ details:
176
+ - EventLogでwrapを有効化し、CLIの横幅に合わせて自動改行されるよう調整
177
+ - #logスタイルにoverflow-x: hiddenを適用し、横スクロールを無効化して縦方向の移動に限定
178
+ reproduce:
179
+ - uv run pytest
180
+ result: tests 40 passed
181
+ notes: 長文ログも横スクロールなしで読みやすくなった
182
+ - date: '2025-11-03'
183
+ time_utc: '00:05:00'
184
+ summary: RichLogに再ラップ機構を追加
185
+ details:
186
+ - EventLogで元のRichLogを拡張し、生ログを保持してリサイズ時に再描画する仕組みを実装
187
+ - Text.from_markupを用いて折り返し可能なTextを生成し、/log copy・/log save で期待どおりの改行を維持
188
+ - UIテストを再実行し、横幅変更後も折り返し位置が追随することを確認
189
+ reproduce:
190
+ - uv run pytest
191
+ result: tests 40 passed
192
+ notes: 選択コピー動作は従来どおり保持されている
193
+ - date: '2025-11-03'
194
+ time_utc: '00:20:00'
195
+ summary: コマンド入力をTextArea化し折り返し・改行を改善
196
+ details:
197
+ - 入力欄をTextAreaベースのCommandTextAreaに置き換え、ソフトラップと複数行編集をサポート
198
+ - Enterで送信、Shift+Enterで改行できるようキー処理を追加し、上下キーはコマンドパレット操作に転送
199
+ - テキスト変更イベントの二重処理を抑制し、既存のコマンドサジェストやショートカットを維持
200
+ reproduce:
201
+ - uv run pytest
202
+ result: tests 40 passed
203
+ notes: command_inputはフォーカスを保持したまま、矢印キーでパレット候補を移動可能
204
+ - date: '2025-11-03'
205
+ time_utc: '04:10:00'
206
+ summary: Shift+Enter送信バグを再現テストでFIX
207
+ details:
208
+ - TextAreaにシフト押下フラグを持たせ、Shift+Enterは改行、Ctrl+Enterは送信、単独Enterは送信になるよう整理
209
+ - 送信処理をスタブ化するテストヘルパを導入し、Shift+Enterが送信されないこと・Enterが送信されることをUIテストで検証
210
+ - shift→enter→enter など実機で起きていたシーケンスもテストで再現しレッド→グリーンを確認
211
+ reproduce:
212
+ - uv run pytest tests/25-11-02-22_pdev_ui_test.py
213
+ result: tests 46 passed
214
+ notes: テストはTextualのPilot APIでキー操作を再現、tmuxや本来の送信フローを起動せず検証可能
215
+ - date: '2025-11-04'
216
+ time_utc: '10:46:00'
217
+ summary: 複数 pdev 同時起動時の共有リソース競合を調査
218
+ details:
219
+ - WorktreeManager.prepare が `.parallel-dev/worktrees/worker-*` を常に再生成するため、2本目の pdev が既存ワークツリーの変更ファイルを強制削除する挙動を確認
220
+ - CodexMonitor.register_new_rollout が共有 `.codex/sessions` を基準にロールアウト検出しており、別CLIの新規セッションを誤って取得する再現スクリプトを作成
221
+ - ManifestStore や `.parallel-dev/settings.yaml` などのグローバル設定が排他制御なしで上書きされる設計リスクを洗い出し
222
+ reproduce:
223
+ - uv run python - <<'PY' # WorktreeManager 再生成によるファイル消失を確認
224
+ - uv run python - <<'PY' # CodexMonitor が同一ロールアウトIDを重複検出することを確認
225
+ result: 手動検証で双方のシナリオが再現し、複数起動時は競合が避けられないことを確認
226
+ notes: 同時稼働を許容するにはワークツリーとセッション検知をセッションIDごとに分離し、設定ファイルへの書き込みも排他制御を導入する必要がある
227
+ - date: '2025-11-04'
228
+ time_utc: '11:03:00'
229
+ summary: セッション専用ワークツリーとCodex HOME分離を実装
230
+ details:
231
+ - WorktreeManagerにsession_namespaceを導入し、`.parallel-dev/sessions/<session_id>/worktrees/{worker-n,boss}`へワークツリーを再配置
232
+ - TmuxLayoutManagerが`env HOME=<session codex-home>`付きでcodex/codex resumeを送信するよう変更し、Boss/worker/メインすべてを同一HOMEに統一
233
+ - build_orchestratorとCLIコントローラからセッションnamespaceとcodex-homeを渡すよう見直し、CodexMonitorには専用`.codex/sessions`を設定
234
+ - Worktree・tmux・builder・orchestratorテストを更新し、セッション分離とenv注入を検証するケースを追加
235
+ - `/codexhome` コマンドで session/shared を切り替えられるようにし、設定ファイルへ保存する処理を追加
236
+ - `PARALLEL_DEV_CODEX_HOME(_MODE)` 環境変数でCodex HOMEを外部指定できるようにし、初回ブートストラップで`~/.codex`構成をコピーする
237
+ - `/boss` コマンドで Boss モードを `skip`/`score`/`rewrite` に切り替えられるようにし、rewriteでは採点後にBossが統合実装を行うよう指示テキストを更新
238
+ reproduce:
239
+ - uv run pytest
240
+ result: tests 63 passed
241
+ notes: 複数 pdev を並行起動しても互いのworktreeとCodexロールアウトが干渉しない構成へ移行
242
+ - date: '2025-11-04'
243
+ time_utc: '11:50:00'
244
+ summary: CLIロジックをcontroller/uiモジュールへ分割しrewriteフローを2段階化
245
+ details:
246
+ - `parallel_developer/controller.py` を新設し、CLIController・設定管理・tmuxアタッチ・build_orchestratorをUIから切り離した
247
+ - Textualコンポーネントを `parallel_developer/ui/widgets.py` へ移動し、CLIはUIとcontrollerの橋渡しに専念
248
+ - `/boss rewrite` がJSONスコア生成後に自動で統合フェーズ用プロンプトを送信するよう変更し、フォローアップ送信のテストを追加
249
+ - SettingsStoreとCommandSpecEntryでコマンド/設定処理をモジュール化し、WorkflowManagerで指示実行フローを分離
250
+ - 既存テストを新構成に合わせて更新し、全73テストが通過することを確認
251
+ reproduce:
252
+ - uv run pytest
253
+ result: tests 73 passed
254
+ notes: UIとワークフローの依存境界が明確になり、今後の拡張や分割テストが容易になった
255
+ - date: '2025-11-05'
256
+ time_utc: '04:20:00'
257
+ summary: ワーカー再開時に指示が消える回帰を修正
258
+ details:
259
+ - Orchestrator.run_cycle内でfork後に`tmux.send_instruction_to_workers`を呼び出すよう変更し、各workerへ最新指示を再送するよう統一
260
+ - `tests/orchestrator_test.py` にワーカー指示送信を検証するアサーションを追加し、回帰テストを先行作成
261
+ - `uv run pytest` で87件すべてのテストが通過することを確認し、worker指示が即時実行されることを手動で再現
262
+ reproduce:
263
+ - uv run pytest
264
+ result: tests 87 passed
265
+ notes: tmux側でEnterのみ送信していたため指示が残らないケースが判明。指示本文を再送することで既存フローと整合
266
+ - date: '2025-11-05'
267
+ time_utc: '04:45:00'
268
+ summary: ワーカー起動時のキー入力を一括送信して待機時間を短縮
269
+ details:
270
+ - TmuxLayoutManager.fork_workersでEsc×2→Enterの送信を各ペイン個別ではなくブロードキャスト化し、backtrack_delayの適用をワーカー単位からステップ単位に変更
271
+ - confirm_workersでもEnter送信を一括化し、ワーカー数に比例していた待機時間を削減
272
+ - tmuxマネージャテストを更新し、全ワーカーにキー列が配布されることを検証
273
+ - `uv run pytest` で高速化後も全テストが通過することを確認
274
+ reproduce:
275
+ - uv run pytest
276
+ result: tests 87 passed
277
+ notes: backtrack_delayを維持しつつステップ毎のsleepへ変更したことで、安定性を保ちながら体感レスポンスを改善
278
+ - date: '2025-11-05'
279
+ time_utc: '05:05:00'
280
+ summary: tmuxセッションのUIを視認性重視に再構成
281
+ details:
282
+ - TmuxLayoutManager.ensure_layoutでpaneタイトルをMAIN/BOSS/WORKER-Nに設定し、pane-border-status topを有効化して役割を常時表示
283
+ - tmuxのマウス操作を有効化し、クリックでペイン選択・ドラッグでリサイズできるようマウスサポートをオンに設定
284
+ - 枠線色を通常=緑、アクティブ=オレンジに統一し、display-panesのカラーも同系色へ変更して視認性を向上
285
+ - tmuxマネージャテストを更新し、オプション設定・タイトル付与が行われることを検証
286
+ reproduce:
287
+ - uv run pytest
288
+ result: tests 87 passed
289
+ notes: tmux 3.x 系を前提にしつつ、古いバージョンでコマンド失敗しても処理継続できるよう例外を無視するガードを追加
290
+ - date: '2025-11-05'
291
+ time_utc: '05:25:00'
292
+ summary: /done コマンドでBossフェーズへ進まない問題を修正
293
+ details:
294
+ - CodexMonitor.await_completionでforce_completionをループ毎に評価するようリファクタし、待機中に追加された強制完了フラグを即時反映
295
+ - 強制完了が適用された際にrolloutオフセットを更新し、完了情報へ`forced: true`を付与してログに残すよう統一
296
+ - モニターテストにforce_completionを遅延呼び出しするケースを追加し、timeout前に強制完了が検知されることを検証
297
+ reproduce:
298
+ - uv run pytest
299
+ result: tests 88 passed
300
+ notes: CLIで /done 実行後すぐにBossフェーズへ遷移することを手動でも再確認
301
+ - date: '2025-11-05'
302
+ time_utc: '05:40:00'
303
+ summary: コマンド履歴呼び出し時にTextAreaでクラッシュする問題を修正
304
+ details:
305
+ - CommandTextAreaにaction_cursor_endを実装し、履歴呼び出し後にカーソルを末尾へ移動できるよう整備
306
+ - UIテストにカーソル移動の検証ケースを追加し、`action_cursor_end`が既存のTextual APIと整合することを確認
307
+ reproduce:
308
+ - uv run pytest
309
+ result: tests 89 passed
310
+ notes: 上キー操作で落ちなくなったことを手動確認。Textual内部仕様変更に備えてdoc.get_line取得時は例外を無視するガードを追加
311
+ - date: '2025-11-05'
312
+ time_utc: '05:55:00'
313
+ summary: ワーカーへの指示再送と自動Enter送信を廃止
314
+ details:
315
+ - Orchestratorでfork後に`tmux.send_instruction_to_workers`を呼び出す処理を削除し、既存セッション履歴に残った指示のみを利用するよう戻した
316
+ - TmuxLayoutManager.fork_workersから空行Enter送出を取り除き、resume直後に指示が自動送信されて消える回帰を解消
317
+ - 付随するユニットテストを更新し、自動送信用のMock呼び出しが発生しないことと空のEnterが送出されないことを検証
318
+ - CodexMonitorに `wait_for_rollout_activity` を追加し、メイン指示がロールアウトへ反映されるまでCtrl+Cしないよう調整
319
+ reproduce:
320
+ - uv run pytest
321
+ result: tests 89 passed
322
+ notes: 04:45対応のEnterブロードキャストは撤回。フォーク後は従来通りワーカーが手動でEnter入力して指示を送信する運用に戻した
323
+ - date: '2025-11-05'
324
+ time_utc: '07:30:00'
325
+ summary: Codexセッション共有時の衝突を防止
326
+ details:
327
+ - Codex CLIが~/.codex/sessionsのみを参照する仕様に合わせ、`codex_home_mode`の既定値を`shared`へ変更
328
+ - CodexMonitorにセッションレジストリを導入し、別namespaceが同じsession_idを占有しようとした場合はエラーで検知(終了済みPIDのロックは自動解放)
329
+ - worker完了時にレジストリを解放し、ユニットテストをnamespace付きで更新
330
+ reproduce:
331
+ - uv run pytest
332
+ result: tests 89 passed
333
+ notes: 並列にpdevを起動しても`.codex/sessions`を共有しつつ、session_idの取り合いによる混線が起きないことを狙った対応
@@ -0,0 +1,62 @@
1
+ # Parallel Developer リファクタ計画(UTC 2025-11-03 04:56)
2
+
3
+ ## 現状整理
4
+ - `src/parallel_developer/cli.py` に Textual UI ウィジェット、CLIController、補助クラス、エントリーポイントが1ファイルで集約されており、約1500行規模になっている。
5
+ - `ParallelDeveloperApp` は UI 描画だけでなく、コマンドパレット制御・ショートカット処理・ログコピー・Manifest 更新など多数の責務を直接保持。
6
+ - `CLIController` は orchestrator 呼び出し、Manifest 永続化、tmux アタッチ制御、設定ロード、Textual イベント送出を一括で扱い、内部状態を UI が直接参照(例:`controller._config`)している。
7
+ - サービス層(`services.py`)や orchestrator との結合はプレーンな関数呼び出しで、依存注入ポイントが `build_orchestrator` のみ。UI 側がログ出力やステータス表示のたびに controller の内部詳細へアクセスする必要がある。
8
+ - UI イベントハンドラに重複実装や一貫性のない API(`on_option_list_option_selected` が2回定義される等)が混在し、バグ温床になりやすい。
9
+
10
+ ## 課題
11
+ 1. **責務分離の欠如**
12
+ - UI とアプリケーション制御が密結合で、単体テストや差分検証が困難。
13
+ 2. **状態共有の脆さ**
14
+ - UI から controller の内部属性へ直接アクセスしており、構造変更時に容易に破綻する。
15
+ 3. **拡張性の制約**
16
+ - 新しい入力モードやコマンドを追加する際に Textual 側イベントと controller 側ロジックの双方を修正する必要があり、変更範囲が読みにくい。
17
+ 4. **バグ発生源**
18
+ - イベントハンドラ重複やキーバインド処理の複雑化が Shift+Enter 送信バグなどの再発に繋がっている。
19
+
20
+ ## リファクタ目標
21
+ - UI(描画・入力・ショートカット処理)とアプリケーションロジック(指示管理・tmux制御・ログ保存)を明確に分割し、双方向依存を減らす。
22
+ - controller の公開 API を定義し、UI はその API 経由で状態を取得・更新する。
23
+ - コマンド体系(`/attach` など)を設定/ハンドラテーブル化し、テスト容易性を高める。
24
+ - Textual ウィジェットを再利用可能な粒度で整理し、UI テストとロジックテストの責務を分ける。
25
+
26
+ ## 段階的リファクタ案
27
+
28
+ ### フェーズ1: 依存境界の明確化
29
+ - `CLIController` を独立モジュールへ切り出し(例: `controller.py`)。公開メソッドとイベント種別を整理。
30
+ - `ParallelDeveloperApp` から controller の内部属性参照を排除し、必要な情報は専用データクラス(例: `ControllerState`)で受け取る。
31
+ - `EventLog`/`CommandPalette` など UI 専用クラスを `ui/widgets.py` に移動。
32
+ - 既存テストを調整し、フェーズ1完了時点で `uv run pytest` を緑に保つ。
33
+
34
+ ### フェーズ2: コマンド処理のモジュール化
35
+ - コマンド仕様を `commands.py` などに集約し、CLIController は仕様に従ってディスパッチするだけにする。
36
+ - `/resume` 等で利用するオプション生成処理を pure function 化し、単体テストを追加。
37
+ - Textual 側はコマンド候補表示専用のインターフェイスを介して suggestions を取得する。
38
+
39
+ ### フェーズ3: UI フローの簡素化
40
+ - `ParallelDeveloperApp` のキーハンドラ・クリックハンドラをプレーンメソッドへ分割し、重複定義を解消。
41
+ - Command palette / selection list 表示状態をステートマシン(`Enum` など)で管理し、分岐の複雑度を低減。
42
+ - UI テストは Textual の `run_test` ベースを維持しつつ、新しいハンドラテストを追加。
43
+
44
+ ### フェーズ4: ログ/Manifest ハンドリングの抽象化
45
+ - ログ保存やステータス通知を controller のイベントとして扱い、UI は subscribe するだけにする。
46
+ - Manifest 更新処理も controller 側に閉じ込め、UI は「セッション選択→結果受信」という形で操作。
47
+
48
+ ## テスト戦略
49
+ - 各フェーズで既存 pytest スイートを完走させる。
50
+ - controller の API 切り出しに合わせて新しいユニットテストを追加し、Textual 依存のないロジック部分を隔離。
51
+ - UI リファクタ後は既存 UI テストを更新し、主要キーボード操作(Enter/Shift+Enter、コマンドパレット遷移)を再確認。
52
+
53
+ ## リスクと緩和策
54
+ - **大量の差分発生**: フェーズごとに git コミットを細かく分け、docs/experiment.yaml に進捗記録を残す。
55
+ - **TTD の崩壊**: 各フェーズで失敗するテスト(仮テスト)を書いてから実装し直す運用を徹底。
56
+ - **回帰の見落とし**: UI テストが遅い場合は対象メソッドをピンポイントにスタブ化し、高速フィードバックを維持。
57
+
58
+ ## 次のアクション
59
+ 1. フェーズ1の詳細タスクブレークダウン(クラス移動手順、公開API定義、状態データクラス仕様)を作成。
60
+ 2. 既存テストで controller / UI の境界に関わる箇所を列挙し、フェーズ1実施時の影響範囲チェックリストを作る。
61
+ 3. フェーズ1着手前に `/docs/experiment.yaml` へ計画開始を記録し、完了時に結果を追記する。
62
+
@@ -0,0 +1,72 @@
1
+ weekly_flow:
2
+ - week: 1
3
+ label: 初回サイクル
4
+ steps:
5
+ - "1. CLIアプリケーションを起動する。"
6
+ - "2. 現在時刻からセッションIDを生成する。"
7
+ - "3. セッションIDを基にtmuxセッション名を決定する。"
8
+ - "4. logs/<session-id> ディレクトリを作成する。"
9
+ - "5. 初期ステータスを待機中として表示する。"
10
+ - "6. ユーザーから最初の指示テキストを受信する。"
11
+ - "7. サイクル用のログディレクトリ logs/<session-id>/<yy-mm-dd-hhmmss> を作成する。"
12
+ - "8. tmux制御・ワークツリー・Codex監視・ログ管理の各オブジェクトを初期化する。"
13
+ - "9. tmuxセッションで必要なペインレイアウトを確認する。"
14
+ - "10. 不足しているペインを分割してメイン/Boss/ワーカー構成を整える。"
15
+ - "11. `.parallel-dev/sessions/<session-id>` 配下に各種ワークツリーを準備する。"
16
+ - "12. 各ワーカー用ディレクトリ `.parallel-dev/sessions/<session-id>/worktrees/worker-N` を再生成する。"
17
+ - "13. Boss用ディレクトリ `.parallel-dev/sessions/<session-id>/worktrees/boss` を再生成する。"
18
+ - "14. tmuxメインペインで `codex` を起動し、メインセッションのrolloutファイルを検出する。"
19
+ - "15. ユーザー指示の末尾に完了フラグを作成する手順付きの完全指示文を保持する。"
20
+ - "16. メインペインへフォーク準備用メッセージ(文字列 `Fork`)のみ送信する。"
21
+ - "17. メインペインから最初の出力を検知したら Ctrl+C を二回送信して停止する。"
22
+ - "18. 生成されたrolloutファイルからメインセッションIDを取得しpane情報と紐づける。"
23
+ - "19. 各ワーカーペインへ Ctrl+C を二回送信して待機状態にする。"
24
+ - "20. 各ワーカーペインに `codex resume <main-id>` を送信する。"
25
+ - "21. 各ワーカーペインに Esc を二回送信する。"
26
+ - "22. 各ワーカーペインに Enter を1回送信してフォークを確定する。"
27
+ - "23. ワーカーの新しいrolloutファイルが現れるまで待機する。"
28
+ - "24. 新しいrolloutからワーカーセッションIDを取得しpane情報と紐づける。"
29
+ - "25. 各ワーカーペインへ、割り当てたワークツリーへの移動手順(pwd→必要ならcd→再度pwd)とタスク本体を含む専用指示文を送信する。"
30
+ - "26. 監視処理が全ワーカーの完了フラグ生成を検知するまで待機する。"
31
+ - "26a. ワーカー完了直後に `/continue` を送ると既存ワーカーペインへ同じユーザー指示だけを再送し(フォークやワークツリー再作成は行わない)、追加作業が終わったらCLIの `/done` コマンドで次工程へ進む。"
32
+ - "27. ワーカー完了ステータスをログへ書き出す。"
33
+ - "28. Bossペインに Ctrl+C を送信して待機状態にする。"
34
+ - "29. Bossペインに `codex resume <main-id>` を送信する。"
35
+ - "30. Bossペインに Esc を二回送信する。"
36
+ - "31. Bossペインに Enter を送信して独立セッションにフォークする。"
37
+ - "32. 新しいBossセッションIDを取得する。"
38
+ - "33. ワーカー候補一覧と採点手順を含む評価指示文を生成し、Boss用ワークツリー内で作業するよう注意書きを付与する。"
39
+ - "34. 評価指示文をBossペインへ送信する。"
40
+ - "35. Bossセッションの評価JSONを受信し、Bossモードがrewriteの場合のみ追加統合の完了フラグを検知するまで待機する。"
41
+ - "36. Bossレスポンスを取得する。"
42
+ - "37. BossレスポンスのJSONを解析する。"
43
+ - "38. score と comment を候補ごとに抽出する。"
44
+ - "39. ワーカー完了情報とBossスコアを統合したスコアボードを組み立てる。"
45
+ - "40. 候補一覧とスコアボードをUIへ送信する。"
46
+ - "41. ユーザーの採択選択を待機する。"
47
+ - "42. 選択された候補のブランチをmainへfast-forwardマージする。"
48
+ - "43. 選択されたセッションIDでメインペインに `codex resume` を送信する。"
49
+ - "44. サイクルの指示・tmux配置・完了情報・スコアボードをYAML/JSONLへ記録する。"
50
+ - "45. 会話ログパスやセッションIDを含むマニフェストを保存する。"
51
+ - "46. 実行状態を待機中に戻す。"
52
+ - "47. スコアボードと採択結果を履歴に追加する。"
53
+ - "48. 第1週目のサイクルを完了と宣言する。"
54
+ - week: 2
55
+ label: 2回目以降のサイクル
56
+ steps:
57
+ - "1. 1.6の手順で次のユーザー指示テキストを受信する。"
58
+ - "2. 前回サイクルで採択したセッションIDとtmuxセッション名を保持する。"
59
+ - "3. 1.7〜1.49の手順を順に再実行し、ログ準備から記録保存まで第1サイクルと同じ処理を行う。"
60
+
61
+ esc_behavior:
62
+ description: "ESCキー操作の共通ルール"
63
+ rules:
64
+ - "ESCを1回押すとCLIControllerが一時停止モードへ入り、全ペインへEscapeをブロードキャストしてCodex入力を中断させる。"
65
+ - "一時停止中に再度ESCを押すと直前に採択された `_last_selected_session` をメインに戻し、進行中サイクルをキャンセルする。"
66
+ - "巻き戻し後に再開する際はステップ15から同じ手順(Ctrl+C×2 → `codex resume <_last_selected_session>` → 完了プロトコル付き指示投入)を繰り返す。"
67
+
68
+ continue_behavior:
69
+ description: "ワーカー完了後の分岐"
70
+ rules:
71
+ - "ワーカーが完了フラグを `touch` した直後は `/continue` で同じ指示文のみを既存ワーカーペインへ再送でき、既存の作業内容を保持したまま追記が可能。"
72
+ - "追加作業が完了したら CLI `/done` コマンドを送るとBoss評価(ステップ28以降)へ進む。Bossのscore/skipモードはJSON受信で完了し、rewriteモードでは統合作業の完了フラグを待機する。"