trinity-agent 0.7.0__tar.gz → 0.7.2__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 (156) hide show
  1. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/PKG-INFO +12 -4
  2. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/README.en.md +12 -3
  3. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/README.md +11 -3
  4. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/checkpoint.md +24 -2
  5. trinity_agent-0.7.2/docs/plans/2026-06-04-isolated-provider-bootstrap.md +60 -0
  6. trinity_agent-0.7.2/docs/plans/2026-06-04-v0.7.0-follow-up-implementation-candidates.md +252 -0
  7. trinity_agent-0.7.2/docs/test-results/2026-06-04-isolated-provider-bootstrap.md +62 -0
  8. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/test-results/v0.7.0-workflow-engine.md +52 -3
  9. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/test-results/v070-smoke-checklist.md +9 -8
  10. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/troubleshooting-provider-readiness.md +13 -13
  11. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/workflow-v0.7.0-guide.md +50 -2
  12. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/pyproject.toml +1 -1
  13. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/__init__.py +1 -1
  14. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/agents/gemini_agent.py +11 -0
  15. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/agents/response_cleaner.py +1 -0
  16. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/cli.py +105 -0
  17. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/config.py +2 -2
  18. trinity_agent-0.7.2/src/trinity/providers/bootstrap.py +203 -0
  19. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/providers/readiness.py +45 -11
  20. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/tmux/pane.py +4 -0
  21. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/tui/app.py +3 -1
  22. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/tui/prompt.py +62 -2
  23. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/tui/session.py +321 -21
  24. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/workflow/engine.py +151 -14
  25. trinity_agent-0.7.2/src/trinity/workflow/persistence.py +207 -0
  26. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/workflow/structured.py +53 -12
  27. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_cli.py +50 -0
  28. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_config.py +1 -1
  29. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_gemini_agent.py +31 -0
  30. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_protocol.py +6 -0
  31. trinity_agent-0.7.2/tests/test_provider_bootstrap.py +120 -0
  32. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_provider_readiness.py +70 -3
  33. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_response_cleaner.py +13 -0
  34. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_structured_consensus.py +62 -0
  35. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_tmux.py +20 -1
  36. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_tui_prompt.py +65 -5
  37. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_tui_session.py +169 -1
  38. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_workflow_engine.py +60 -3
  39. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_workflow_persistence.py +38 -0
  40. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/uv.lock +1 -1
  41. trinity_agent-0.7.0/src/trinity/workflow/persistence.py +0 -86
  42. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/.github/workflows/publish-pypi.yml +0 -0
  43. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/.gitignore +0 -0
  44. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/LICENSE +0 -0
  45. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/phase-6-plan.md +0 -0
  46. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/plans/2026-06-02-phase-10-interactive-redesign.md +0 -0
  47. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/plans/2026-06-02-prompt-compression.md +0 -0
  48. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/plans/2026-06-02-token-analytics.md +0 -0
  49. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/plans/2026-06-02-token-optimization-phase7b.md +0 -0
  50. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/plans/2026-06-02-tui-overhaul.md +0 -0
  51. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/plans/2026-06-02-v0.6.9-interactive-error-analysis.md +0 -0
  52. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/plans/2026-06-03-phase10-remaining.md +0 -0
  53. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/plans/2026-06-03-v0.7.0-workflow-engine-redesign.md +0 -0
  54. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/reference-architecture.md +0 -0
  55. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/test-results/phase-1-T.md +0 -0
  56. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/test-results/phase-10-T.md +0 -0
  57. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/test-results/phase-2-T.md +0 -0
  58. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/test-results/phase-3-T.md +0 -0
  59. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/test-results/phase-4-T.md +0 -0
  60. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/test-results/phase-5-T.md +0 -0
  61. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/test-results/phase-6-T.md +0 -0
  62. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/test-results/phase-7-T.md +0 -0
  63. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/docs/test-results/phase-9-T.md +0 -0
  64. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/__main__.py +0 -0
  65. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/agents/__init__.py +0 -0
  66. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/agents/base.py +0 -0
  67. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/agents/claude_agent.py +0 -0
  68. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/agents/codex_agent.py +0 -0
  69. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/agents/factory.py +0 -0
  70. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/completion/__init__.py +0 -0
  71. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/completion/base.py +0 -0
  72. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/completion/hook.py +0 -0
  73. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/completion/idle.py +0 -0
  74. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/completion/marker.py +0 -0
  75. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/completion/prompt.py +0 -0
  76. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/context/__init__.py +0 -0
  77. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/context/analytics.py +0 -0
  78. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/context/budget.py +0 -0
  79. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/context/compressor.py +0 -0
  80. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/context/monitor.py +0 -0
  81. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/context/rotator.py +0 -0
  82. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/context/shared.py +0 -0
  83. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/deliberation/__init__.py +0 -0
  84. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/deliberation/consensus.py +0 -0
  85. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/deliberation/distributor.py +0 -0
  86. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/deliberation/protocol.py +0 -0
  87. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/error_handler.py +0 -0
  88. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/health/__init__.py +0 -0
  89. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/health/checker.py +0 -0
  90. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/i18n.py +0 -0
  91. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/logging.py +0 -0
  92. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/models.py +0 -0
  93. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/orchestrator.py +0 -0
  94. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/providers/__init__.py +0 -0
  95. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/retry.py +0 -0
  96. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/setup/__init__.py +0 -0
  97. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/setup/detector.py +0 -0
  98. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/setup/wizard.py +0 -0
  99. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/tmux/__init__.py +0 -0
  100. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/tmux/layout.py +0 -0
  101. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/tmux/session.py +0 -0
  102. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/tui/__init__.py +0 -0
  103. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/tui/events.py +0 -0
  104. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/tui/theme.py +0 -0
  105. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/workflow/__init__.py +0 -0
  106. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/workflow/decomposer.py +0 -0
  107. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/workflow/execution.py +0 -0
  108. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/workflow/ledger.py +0 -0
  109. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/workflow/lifecycle.py +0 -0
  110. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/workflow/models.py +0 -0
  111. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/workflow/review.py +0 -0
  112. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/workspace/__init__.py +0 -0
  113. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/workspace/isolation.py +0 -0
  114. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/src/trinity/workspace/managed_home.py +0 -0
  115. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/templates/trinity.config.example +0 -0
  116. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/conftest.py +0 -0
  117. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_agent_factory.py +0 -0
  118. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_analytics.py +0 -0
  119. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_blueprint_decomposer.py +0 -0
  120. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_budget.py +0 -0
  121. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_claude_agent.py +0 -0
  122. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_cli_detector.py +0 -0
  123. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_cli_v2.py +0 -0
  124. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_codex_agent.py +0 -0
  125. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_completion.py +0 -0
  126. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_compressor.py +0 -0
  127. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_consensus_v2.py +0 -0
  128. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_context_monitor.py +0 -0
  129. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_deliberation.py +0 -0
  130. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_e2e.py +0 -0
  131. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_error_handling.py +0 -0
  132. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_execution_protocol.py +0 -0
  133. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_health_checker.py +0 -0
  134. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_i18n.py +0 -0
  135. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_interactive_claude.py +0 -0
  136. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_lifecycle_guard.py +0 -0
  137. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_logging.py +0 -0
  138. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_managed_home.py +0 -0
  139. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_models.py +0 -0
  140. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_multi_provider.py +0 -0
  141. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_orchestrator.py +0 -0
  142. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_peer_review.py +0 -0
  143. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_protocol_compression.py +0 -0
  144. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_protocol_v2.py +0 -0
  145. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_response_contract.py +0 -0
  146. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_retry.py +0 -0
  147. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_rotator.py +0 -0
  148. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_session_handoff.py +0 -0
  149. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_session_rotator.py +0 -0
  150. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_setup_wizard.py +0 -0
  151. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_shared_context.py +0 -0
  152. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_shared_ledger.py +0 -0
  153. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_tmux_integration.py +0 -0
  154. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_tmux_layout.py +0 -0
  155. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_tui.py +0 -0
  156. {trinity_agent-0.7.0 → trinity_agent-0.7.2}/tests/test_workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: trinity-agent
3
- Version: 0.7.0
3
+ Version: 0.7.2
4
4
  Summary: Three minds, one context — Multi-agent AI orchestrator for Claude Code, Codex, and Gemini CLI.
5
5
  Project-URL: Homepage, https://github.com/hongdangmoo49/Trinity
6
6
  Project-URL: Repository, https://github.com/hongdangmoo49/Trinity
@@ -85,6 +85,9 @@ trinity init
85
85
 
86
86
  # 비대화형 실행 (기본 설정값 적용)
87
87
  trinity init --non-interactive
88
+
89
+ # 격리된 provider-state에서 각 CLI의 auth/theme/trust 초기 설정을 완료합니다
90
+ trinity bootstrap
88
91
  ```
89
92
 
90
93
  ### 첫 번째 토론(Deliberation) 실행
@@ -147,7 +150,7 @@ Trinity가 백그라운드에서 다음 단계를 자동으로 수행합니다:
147
150
  Trinity는 **Rich 라이브러리 기반의 미려한 터미널 UI(TUI)**를 제공하여, 에이전트 간의 실시간 토론 과정을 시각적으로 보여줍니다.
148
151
 
149
152
  ```
150
- 🧠 Trinity v0.7.0 — 세 개의 두뇌, 하나의 컨텍스트
153
+ 🧠 Trinity v0.7.2 — 세 개의 두뇌, 하나의 컨텍스트
151
154
 
152
155
  🏗️ claude ✅ ⚙️ codex ✅ 🔍 gemini ✅
153
156
 
@@ -202,6 +205,7 @@ Trinity는 **Rich 라이브러리 기반의 미려한 터미널 UI(TUI)**를 제
202
205
  | `trinity` | 대화형 TUI 세션 실행 |
203
206
  | `trinity init` | 현재 디렉토리에 Trinity 작업 공간(`.trinity/`) 초기화 |
204
207
  | `trinity init --non-interactive` | 사용자 입력 요청 없이 기본값으로 즉시 초기화 |
208
+ | `trinity bootstrap` | 격리된 에이전트별 provider-state에서 CLI 초기 설정/auth/trust 진행 |
205
209
  | `trinity ask "질문"` | 입력한 프롬프트에 대해 즉시 단발성(One-shot) 토론 실행 |
206
210
  | `trinity status` | 현재 에이전트들의 활성화 및 연결 상태를 표 형태로 표시 |
207
211
  | `trinity status-watch` | 실시간으로 상태가 갱신되는 상태 모니터 대시보드 실행 |
@@ -224,9 +228,13 @@ Trinity는 **Rich 라이브러리 기반의 미려한 터미널 UI(TUI)**를 제
224
228
  | `/agent <이름> on\|off` | 특정 에이전트를 즉시 활성화하거나 비활성화 |
225
229
  | `/history` | 이전 라운드의 토론 히스토리 요약 조회 |
226
230
  | `/save` | 현재 토론 세션의 전체 결과를 파일로 영구 저장 |
231
+ | `/resume [N\|latest\|ID]` | 저장된 workflow 세션을 선택해 재개 |
227
232
  | `/help` | 사용 가능한 인라인 명령어 도움말 표시 |
228
233
  | `/quit` | Trinity 종료 및 백그라운드 리소스 정리 |
229
234
 
235
+ TUI는 기본적으로 새 workflow 세션으로 시작한다. 이전 active workflow는
236
+ `.trinity/workflow/history/`에 보존되며 `/resume`으로 명시적으로 재개한다.
237
+
230
238
  ---
231
239
 
232
240
  ## ⚙️ 설정
@@ -404,8 +412,8 @@ uv publish --token <PYPI_TOKEN>
404
412
 
405
413
  | 지표 | 수치 |
406
414
  | :--- | :--- |
407
- | **버전** | 0.7.0 |
408
- | **테스트** | 882개 테스트 통과 |
415
+ | **버전** | 0.7.2 |
416
+ | **테스트** | 915개 테스트 통과 |
409
417
  | **커버리지** | 약 87% |
410
418
  | **소스 파일** | 50여 개 |
411
419
  | **주요 의존성 라이브러리** | `click`, `rich`, `prompt_toolkit`, `tomli` |
@@ -59,6 +59,9 @@ trinity init
59
59
 
60
60
  # Non-interactive (uses defaults)
61
61
  trinity init --non-interactive
62
+
63
+ # Complete CLI auth/theme/trust setup inside isolated provider-state homes
64
+ trinity bootstrap
62
65
  ```
63
66
 
64
67
  ### Run Your First Deliberation
@@ -121,7 +124,7 @@ That's it. Trinity will:
121
124
  Trinity features a **Rich-based terminal UI** with real-time deliberation visualization.
122
125
 
123
126
  ```
124
- 🧠 Trinity v0.7.0 — Three minds, one context
127
+ 🧠 Trinity v0.7.2 — Three minds, one context
125
128
 
126
129
  🏗️ claude ✅ ⚙️ codex ✅ 🔍 gemini ✅
127
130
 
@@ -176,6 +179,7 @@ Trinity features a **Rich-based terminal UI** with real-time deliberation visual
176
179
  | `trinity` | Launch interactive TUI session |
177
180
  | `trinity init` | Initialize `.trinity/` in current directory |
178
181
  | `trinity init --non-interactive` | Initialize with defaults (no prompts) |
182
+ | `trinity bootstrap` | Run provider first-use auth/trust setup in isolated provider-state homes |
179
183
  | `trinity ask "question"` | One-shot deliberation on a prompt |
180
184
  | `trinity status` | Show agent status table |
181
185
  | `trinity status-watch` | Live-updating status dashboard |
@@ -198,9 +202,14 @@ Inside the interactive TUI (`trinity` with no args):
198
202
  | `/agent <name> on\|off` | Enable/disable an agent |
199
203
  | `/history` | Show deliberation history |
200
204
  | `/save` | Save session results to file |
205
+ | `/resume [N\|latest\|ID]` | Select and resume a saved workflow session |
201
206
  | `/help` | Show help |
202
207
  | `/quit` | Exit Trinity |
203
208
 
209
+ The TUI starts with a new workflow session by default. The previous active
210
+ workflow is preserved in `.trinity/workflow/history/` and can be resumed
211
+ explicitly with `/resume`.
212
+
204
213
  ---
205
214
 
206
215
  ## ⚙️ Configuration
@@ -378,8 +387,8 @@ uv publish --token <PYPI_TOKEN>
378
387
 
379
388
  | Metric | Value |
380
389
  | :--- | :--- |
381
- | **Version** | 0.7.0 |
382
- | **Tests** | 882 passed |
390
+ | **Version** | 0.7.2 |
391
+ | **Tests** | 915 passed |
383
392
  | **Coverage** | ~87% |
384
393
  | **Source files** | 50+ |
385
394
  | **Dependencies** | `click`, `rich`, `prompt_toolkit`, `tomli` |
@@ -57,6 +57,9 @@ trinity init
57
57
 
58
58
  # 비대화형 실행 (기본 설정값 적용)
59
59
  trinity init --non-interactive
60
+
61
+ # 격리된 provider-state에서 각 CLI의 auth/theme/trust 초기 설정을 완료합니다
62
+ trinity bootstrap
60
63
  ```
61
64
 
62
65
  ### 첫 번째 토론(Deliberation) 실행
@@ -119,7 +122,7 @@ Trinity가 백그라운드에서 다음 단계를 자동으로 수행합니다:
119
122
  Trinity는 **Rich 라이브러리 기반의 미려한 터미널 UI(TUI)**를 제공하여, 에이전트 간의 실시간 토론 과정을 시각적으로 보여줍니다.
120
123
 
121
124
  ```
122
- 🧠 Trinity v0.7.0 — 세 개의 두뇌, 하나의 컨텍스트
125
+ 🧠 Trinity v0.7.2 — 세 개의 두뇌, 하나의 컨텍스트
123
126
 
124
127
  🏗️ claude ✅ ⚙️ codex ✅ 🔍 gemini ✅
125
128
 
@@ -174,6 +177,7 @@ Trinity는 **Rich 라이브러리 기반의 미려한 터미널 UI(TUI)**를 제
174
177
  | `trinity` | 대화형 TUI 세션 실행 |
175
178
  | `trinity init` | 현재 디렉토리에 Trinity 작업 공간(`.trinity/`) 초기화 |
176
179
  | `trinity init --non-interactive` | 사용자 입력 요청 없이 기본값으로 즉시 초기화 |
180
+ | `trinity bootstrap` | 격리된 에이전트별 provider-state에서 CLI 초기 설정/auth/trust 진행 |
177
181
  | `trinity ask "질문"` | 입력한 프롬프트에 대해 즉시 단발성(One-shot) 토론 실행 |
178
182
  | `trinity status` | 현재 에이전트들의 활성화 및 연결 상태를 표 형태로 표시 |
179
183
  | `trinity status-watch` | 실시간으로 상태가 갱신되는 상태 모니터 대시보드 실행 |
@@ -196,9 +200,13 @@ Trinity는 **Rich 라이브러리 기반의 미려한 터미널 UI(TUI)**를 제
196
200
  | `/agent <이름> on\|off` | 특정 에이전트를 즉시 활성화하거나 비활성화 |
197
201
  | `/history` | 이전 라운드의 토론 히스토리 요약 조회 |
198
202
  | `/save` | 현재 토론 세션의 전체 결과를 파일로 영구 저장 |
203
+ | `/resume [N\|latest\|ID]` | 저장된 workflow 세션을 선택해 재개 |
199
204
  | `/help` | 사용 가능한 인라인 명령어 도움말 표시 |
200
205
  | `/quit` | Trinity 종료 및 백그라운드 리소스 정리 |
201
206
 
207
+ TUI는 기본적으로 새 workflow 세션으로 시작한다. 이전 active workflow는
208
+ `.trinity/workflow/history/`에 보존되며 `/resume`으로 명시적으로 재개한다.
209
+
202
210
  ---
203
211
 
204
212
  ## ⚙️ 설정
@@ -376,8 +384,8 @@ uv publish --token <PYPI_TOKEN>
376
384
 
377
385
  | 지표 | 수치 |
378
386
  | :--- | :--- |
379
- | **버전** | 0.7.0 |
380
- | **테스트** | 882개 테스트 통과 |
387
+ | **버전** | 0.7.2 |
388
+ | **테스트** | 915개 테스트 통과 |
381
389
  | **커버리지** | 약 87% |
382
390
  | **소스 파일** | 50여 개 |
383
391
  | **주요 의존성 라이브러리** | `click`, `rich`, `prompt_toolkit`, `tomli` |
@@ -21,21 +21,43 @@
21
21
  - Execution protocol MVP, dependency-level 병렬 dispatch, `Task Results` 기록
22
22
  - Subagent delegation reporting과 `Subtasks` 기록
23
23
  - Shared ledger renderer, LifecycleGuard MVP, peer review planning foundation
24
+ - 명시적 `/answer` user decision UX, `/questions --select` 방향키 옵션 선택
25
+ - `/questions --select --all` decision wizard
26
+ - 한국어/번호형 open question parser 보강
24
27
 
25
28
  ### 운영 문서
26
29
 
27
30
  - [v0.7.0 Workflow Guide](workflow-v0.7.0-guide.md)
31
+ - [v0.7.0 후속 구현 후보](plans/2026-06-04-v0.7.0-follow-up-implementation-candidates.md)
28
32
  - [Provider Readiness Troubleshooting](troubleshooting-provider-readiness.md)
29
33
  - [v0.7.0 Workflow Engine 테스트 결과](test-results/v0.7.0-workflow-engine.md)
30
34
  - [v0.7.0 WSL/tmux Smoke Test Checklist](test-results/v070-smoke-checklist.md)
31
35
 
32
36
  ### 검증 기준선
33
37
 
34
- - 패키지/CLI 버전: `0.7.0`
35
- - `uv run pytest -q` → 882 passed, 1 warning
38
+ - 패키지/CLI 버전: `0.7.2`
39
+ - `uv run pytest -q` → 915 passed, 1 warning
36
40
  - 변경 파일 대상 ruff check 통과
37
41
  - 실제 WSL/tmux/provider smoke는 릴리스 전 별도 수행 필요
38
42
 
43
+ ### Post-merge smoke follow-ups
44
+
45
+ - [x] `needs_user_decision` 상태의 일반 텍스트 FIFO 자동 기록을 제거했다.
46
+ 사용자는 `/answer <question-id|index|next> <answer>`로 대상 질문을 명시한다.
47
+ - [x] `/questions`를 실행 가능한 답변 안내 panel로 바꾸고, `/questions --select`로
48
+ 첫 pending question의 options를 방향키로 선택할 수 있게 했다.
49
+ - [x] `/questions --select --all`은 pending question을 순서대로 처리하며,
50
+ options가 없는 질문은 자유 텍스트 답변을 받는다.
51
+ - [x] 잘못 기록한 decision은 `/answer --replace <question-id|decision-id> <answer>`로 정정한다.
52
+ - [x] 한국어 `질문/옵션/추천/이유` 필드와 빈 `Options:` 뒤 번호형 선택지를
53
+ structured open question parser가 options/recommended/rationale로 보존한다.
54
+ - [x] WSL/tmux smoke 중 Codex pane의 과거 `model: loading` scrollback이 현재 ready prompt보다
55
+ 먼저 판정되어 continuation deliberation을 차단하는 false positive가 확인됐다.
56
+ readiness 판정은 현재 prompt readiness를 stale loading/auth/banner scrollback보다 우선하도록 수정했다.
57
+ - [x] 후속 구현 후보를 별도 문서로 정리했다.
58
+ 우선순위는 실제 WSL/tmux smoke, peer review execution, lifecycle rotation 보강,
59
+ non-blocking question 정책, workflow repair/reset UX 순서다.
60
+
39
61
  ---
40
62
 
41
63
  ## Phase 1: 최소 작동 프로토타입 — ✅ 완료
@@ -0,0 +1,60 @@
1
+ # Isolated Provider Bootstrap Plan
2
+
3
+ ## Goal
4
+
5
+ Keep Trinity's per-agent provider-state isolation, but add an explicit bootstrap
6
+ flow so Claude, Codex, and Gemini can complete their first-run setup,
7
+ authentication, and workspace trust prompts inside the same isolated homes that
8
+ normal Trinity sessions use.
9
+
10
+ ## Problem
11
+
12
+ Trinity launches each provider with a managed home:
13
+
14
+ - `.trinity/agents/claude/provider-state`
15
+ - `.trinity/agents/codex/provider-state`
16
+ - `.trinity/agents/gemini/provider-state`
17
+
18
+ This is correct for isolation, but it means provider CLIs do not see the user's
19
+ normal WSL home configuration. A provider that is already authenticated in
20
+ `/home/user` can still show first-run setup or auth prompts when launched by
21
+ Trinity.
22
+
23
+ ## Implementation Plan
24
+
25
+ 1. Add a `trinity bootstrap` command that:
26
+ - loads the project config;
27
+ - prepares the same per-agent managed homes and launch directories used by
28
+ regular Trinity sessions;
29
+ - opens a tmux bootstrap session;
30
+ - launches each selected provider CLI with the isolated `HOME` and `XDG_*`
31
+ environment variables;
32
+ - optionally attaches to the session so the user can complete auth/setup.
33
+
34
+ 2. Keep isolation as the default and only supported behavior for this flow.
35
+ - Do not copy credentials from the user's real home.
36
+ - Do not symlink provider configs into `.trinity`.
37
+ - Do not disable `HOME`/`XDG_*` overrides.
38
+
39
+ 3. Improve readiness guidance so auth/trust failures point users to
40
+ `trinity bootstrap` instead of generic provider commands that would use the
41
+ wrong home directory.
42
+
43
+ 4. Add focused tests for:
44
+ - bootstrap target selection;
45
+ - isolated env command construction;
46
+ - CLI command behavior without launching real provider CLIs or tmux;
47
+ - readiness action hints.
48
+
49
+ 5. Document the completed behavior in a result note after implementation and
50
+ verification.
51
+
52
+ ## Acceptance Criteria
53
+
54
+ - `trinity bootstrap` starts a separate tmux session for provider first-run
55
+ setup using isolated provider-state directories.
56
+ - Running normal Trinity after bootstrap reuses the initialized provider-state.
57
+ - The command supports agent filtering and disabled-agent inclusion for manual
58
+ preparation.
59
+ - Existing print/interactive deliberation paths continue using isolated homes.
60
+ - Unit tests pass for the changed areas.
@@ -0,0 +1,252 @@
1
+ # Trinity v0.7.0 후속 구현 후보
2
+
3
+ 작성일: 2026-06-04
4
+ 대상 브랜치: `codex/v070-workflow-followups`
5
+ 상태: 후속 구현 후보 정리
6
+
7
+ ## 1. 현재 기준선
8
+
9
+ v0.7.0 workflow engine의 주요 구조는 구현되어 있다.
10
+
11
+ - Provider readiness/auth gating
12
+ - Interactive response contract와 response artifact 저장
13
+ - Workflow state machine과 user decision loop
14
+ - Structured deliberation/blueprint consensus
15
+ - Blueprint decomposition과 work package execution protocol MVP
16
+ - Shared ledger renderer, LifecycleGuard MVP, peer review planning foundation
17
+ - 명시적 `/answer` UX, `/questions --select`, `/questions --select --all`
18
+ - 한국어/번호형 open question parser 보강
19
+
20
+ 자동 검증 기준선:
21
+
22
+ ```text
23
+ uv run pytest -q
24
+ 901 passed, 1 warning
25
+ ```
26
+
27
+ 남은 작업은 크게 두 종류다.
28
+
29
+ 1. **릴리스 전 검증 게이트**: 실제 WSL/tmux/provider 환경에서 지금 구현이 동작하는지 확인한다.
30
+ 2. **후속 구현 후보**: v0.7.0 이후 또는 v0.7.x에서 workflow 완성도를 높이는 기능이다.
31
+
32
+ ## 2. 릴리스 전 검증 게이트
33
+
34
+ ### G0. WSL/tmux/provider end-to-end smoke
35
+
36
+ 이 항목은 코드 구현보다 먼저 수행해야 하는 검증이다.
37
+
38
+ #### 이유
39
+
40
+ 현재 자동 테스트는 unit/mock 중심이다. provider CLI의 실제 TUI repaint, tmux pane 폭, 인증/모델 로딩 화면,
41
+ prompt echo 경계는 자동 테스트만으로 완전히 검증하기 어렵다.
42
+
43
+ #### 실행 범위
44
+
45
+ - Claude/Codex/Gemini가 모두 ready 상태인 세션
46
+ - readiness strict mode에서 unready provider 차단
47
+ - degraded mode에서 ready provider만으로 진행
48
+ - 설계 요청에서 structured open question 생성
49
+ - `/questions --select --all`로 decision wizard 처리
50
+ - decision 이후 deliberation 재개
51
+ - blueprint 생성
52
+ - execution package dispatch와 `Task Results` 기록
53
+
54
+ #### 산출물
55
+
56
+ - `docs/test-results/v070-smoke-checklist.md` Pass/Fail 업데이트
57
+ - 실패 시 pane capture 일부와 원인 분류 기록
58
+ - 실패가 재현 가능하면 별도 follow-up issue/PR 후보로 분리
59
+
60
+ #### 완료 기준
61
+
62
+ - 최소 1회 실제 3-provider smoke가 blueprint 또는 명확한 readiness failure까지 도달한다.
63
+ - `needs_user_decision` 상태에서 일반 텍스트가 자동 decision으로 오기록되지 않는다.
64
+ - `/questions --select --all`이 options 질문과 자유 텍스트 질문을 모두 처리한다.
65
+
66
+ ## 3. 후속 구현 후보
67
+
68
+ ### F1. Peer review prompt execution loop
69
+
70
+ #### 현재 상태
71
+
72
+ `PeerReviewPlanner`는 execution result 이후 review package를 계획하고 persistence한다.
73
+ 하지만 실제 reviewer agent에게 review prompt를 보내고 결과를 workflow state에 반영하는 loop는 아직 없다.
74
+
75
+ #### 목표
76
+
77
+ `REVIEWING` 상태를 실제 agent review 단계로 확장한다.
78
+
79
+ ```text
80
+ EXECUTING
81
+ -> REVIEWING
82
+ -> review package dispatch
83
+ -> review result collect
84
+ -> DONE | NEEDS_USER_DECISION | FAILED
85
+ ```
86
+
87
+ #### 구현 후보
88
+
89
+ - `ReviewExecutionProtocol` 또는 `ExecutionProtocol` 내 review dispatch 경로 추가
90
+ - `ReviewResult` persistence와 shared ledger `## Reviews` 렌더링
91
+ - TUI 명령 추가 후보:
92
+ - `/reviews`: planned/running/done review 표시
93
+ - `/review run`: pending review 실행
94
+ - reviewer response contract:
95
+
96
+ ```text
97
+ ## Review Summary
98
+ ## Findings
99
+ ## Required Changes
100
+ ## Approval
101
+ APPROVE | CHANGES_REQUIRED | BLOCKED
102
+ ```
103
+
104
+ #### 테스트 후보
105
+
106
+ - `tests/test_peer_review.py`: review result parsing/serialization
107
+ - `tests/test_workflow_engine.py`: `REVIEWING -> DONE/NEEDS_USER_DECISION/FAILED`
108
+ - `tests/test_tui_session.py`: `/reviews` 표시
109
+ - `tests/test_execution_protocol.py`: review prompt dispatch mock
110
+
111
+ #### 완료 기준
112
+
113
+ - execution이 모두 `DONE`이면 review package가 실제 reviewer agent에게 전송된다.
114
+ - 모든 review가 `APPROVE`이면 workflow가 `DONE`으로 이동한다.
115
+ - `CHANGES_REQUIRED` 또는 `BLOCKED`이면 work package 상태와 user decision/open question으로 연결된다.
116
+
117
+ ### F2. Lifecycle rotation 실 workflow 통합 보강
118
+
119
+ #### 현재 상태
120
+
121
+ `LifecycleGuard`는 process/readiness/context ratio/projected ratio를 평가한다.
122
+ 문서상 hook은 deliberation/execution 전후까지 확장되어 있지만, 실제 provider 세션에서
123
+ rotation이 모든 workflow 구간에서 안정적으로 이어지는지는 smoke가 필요하다.
124
+
125
+ #### 목표
126
+
127
+ context threshold 도달 시 workflow state를 잃지 않고 다음 prompt 전에 세션 요약과 새 provider session을 보장한다.
128
+
129
+ #### 구현 후보
130
+
131
+ - user decision 이후 deliberation continuation prompt 직전 guard 평가
132
+ - review dispatch 전후 guard 평가
133
+ - rotation 발생 시 `events.jsonl`에 `rotation_requested`, `rotation_completed` 기록
134
+ - `shared.md ## Session History`에 rotation summary가 누락되지 않도록 검증
135
+ - TUI `/status`에 projected prompt ratio와 rotation action hint 표시
136
+
137
+ #### 테스트 후보
138
+
139
+ - `tests/test_lifecycle_guard.py`: user decision/review hook coverage
140
+ - `tests/test_workflow_engine.py`: rotation event persistence
141
+ - `tests/test_tui_session.py`: rotation hint rendering
142
+ - 실제 smoke: context threshold를 낮춘 config로 강제 rotation
143
+
144
+ #### 완료 기준
145
+
146
+ - threshold 초과 시 다음 provider call 전에 rotation이 수행된다.
147
+ - rotation 이후 workflow id, decisions, open questions, work packages가 유지된다.
148
+ - rotation summary가 shared ledger와 event log에 남는다.
149
+
150
+ ### F3. Non-blocking question 정책
151
+
152
+ #### 현재 상태
153
+
154
+ `OpenQuestion.blocking` 필드는 존재하지만, workflow는 open question이 있으면 대체로
155
+ `NEEDS_USER_DECISION`으로 이동한다. non-blocking question을 표시만 하고 진행하는 정책은 아직 명확하지 않다.
156
+
157
+ #### 목표
158
+
159
+ blocking question과 non-blocking question을 분리한다.
160
+
161
+ ```text
162
+ blocking open question 있음 -> NEEDS_USER_DECISION
163
+ non-blocking open question만 있음 -> workflow 계속 진행, /questions에 표시
164
+ ```
165
+
166
+ #### 구현 후보
167
+
168
+ - `WorkflowSession.blocking_open_questions` property 추가
169
+ - `WorkflowEngine._apply_structured_questions()`에서 blocking 여부에 따라 state transition 분기
170
+ - `/questions`에 `blocking` column/badge 표시
171
+ - `/questions --select --all`은 blocking 질문을 우선 처리
172
+ - non-blocking question answer는 workflow continuation을 강제로 시작하지 않음
173
+
174
+ #### 테스트 후보
175
+
176
+ - `tests/test_workflow_engine.py`: non-blocking question만 있을 때 `BLUEPRINT_READY` 또는 `DELIBERATING` 유지
177
+ - `tests/test_tui_session.py`: blocking/non-blocking 표시
178
+ - `tests/test_shared_ledger.py`: question blocking flag 렌더링
179
+
180
+ #### 완료 기준
181
+
182
+ - non-blocking question만 남아도 workflow가 멈추지 않는다.
183
+ - 사용자는 `/questions`에서 non-blocking question을 확인하고 선택적으로 답할 수 있다.
184
+ - blocking question은 기존처럼 answer 전까지 continuation을 막는다.
185
+
186
+ ### F4. Workflow repair/reset UX
187
+
188
+ #### 현재 상태
189
+
190
+ `/answer --replace`로 잘못 기록한 decision을 정정할 수 있다.
191
+ 하지만 smoke 중 깨진 workflow session을 깨끗하게 되돌리거나 특정 decision을 제거하는 UX는 없다.
192
+
193
+ #### 목표
194
+
195
+ 실사용 중 잘못 기록된 workflow state를 안전하게 복구한다.
196
+
197
+ #### 구현 후보
198
+
199
+ - `/workflow reset`: 현재 workflow session을 백업 후 idle로 초기화
200
+ - `/undo dec-001`: decision 제거 또는 이전 값 복원
201
+ - `/workflow export`: session/debug bundle 생성
202
+ - reset 전 확인 prompt 또는 `--yes` 옵션
203
+ - `.trinity/workflow/backups/`에 reset 전 session snapshot 저장
204
+
205
+ #### 테스트 후보
206
+
207
+ - `tests/test_workflow_engine.py`: decision undo와 state recompute
208
+ - `tests/test_workflow_persistence.py`: reset backup persistence
209
+ - `tests/test_tui_session.py`: command routing과 확인 메시지
210
+
211
+ #### 완료 기준
212
+
213
+ - 사용자가 잘못된 decision/session을 삭제하지 않고 백업 후 초기화할 수 있다.
214
+ - reset/undo 후 `session.json`과 `events.jsonl`이 일관된다.
215
+ - 일반 입력 오기록 같은 smoke 실패를 사용자가 수동 파일 삭제 없이 복구할 수 있다.
216
+
217
+ ## 4. 권장 순서
218
+
219
+ 1. **G0 WSL/tmux/provider smoke**
220
+ - 지금 구현의 실제 수용 여부를 먼저 확인한다.
221
+ 2. **F1 Peer review prompt execution loop**
222
+ - workflow의 `REVIEWING` 상태를 실제 완료 루프로 연결한다.
223
+ 3. **F2 Lifecycle rotation 실 workflow 통합 보강**
224
+ - 긴 workflow에서 session/context 안정성을 확보한다.
225
+ 4. **F3 Non-blocking question 정책**
226
+ - 질문 UX를 blocking/non-blocking으로 정교화한다.
227
+ 5. **F4 Workflow repair/reset UX**
228
+ - 실사용 복구성과 디버깅 편의성을 높인다.
229
+
230
+ ## 5. PR 분리 기준
231
+
232
+ 각 후보는 별도 PR로 분리하는 것이 좋다.
233
+
234
+ | 후보 | 권장 PR 범위 | 이유 |
235
+ |------|--------------|------|
236
+ | G0 | 문서/결과 기록 또는 smoke failure fix | 검증 결과에 따라 코드 수정 범위가 달라짐 |
237
+ | F1 | review protocol + tests + docs | workflow state transition에 영향이 큼 |
238
+ | F2 | lifecycle hooks + rotation evidence | provider/session runtime 리스크가 큼 |
239
+ | F3 | question state policy + TUI 표시 | decision UX와 state transition 변경 |
240
+ | F4 | persistence repair commands | destructive/backup UX가 필요 |
241
+
242
+ ## 6. 비목표
243
+
244
+ 다음은 이 후보 문서의 직접 범위가 아니다.
245
+
246
+ - 새 provider 추가
247
+ - GUI/web dashboard
248
+ - provider 내부 subagent 직접 제어
249
+ - secrets/config 자동 마이그레이션
250
+ - release/publish 절차
251
+
252
+ 위 항목은 필요하면 별도 계획 문서로 분리한다.
@@ -0,0 +1,62 @@
1
+ # Isolated Provider Bootstrap Result
2
+
3
+ ## Branch
4
+
5
+ - `codex/isolated-provider-bootstrap`
6
+
7
+ ## Summary
8
+
9
+ Implemented an explicit isolated provider bootstrap flow while keeping Trinity's
10
+ per-agent provider-state isolation intact.
11
+
12
+ The new command is:
13
+
14
+ ```bash
15
+ trinity bootstrap
16
+ ```
17
+
18
+ It starts a separate tmux session, launches selected provider CLIs with the same
19
+ isolated `HOME` and `XDG_*` environment variables used by normal Trinity
20
+ sessions, and lets the user complete first-run setup, authentication, theme
21
+ selection, and workspace trust prompts inside `.trinity/agents/<agent>/provider-state`.
22
+
23
+ ## Implemented
24
+
25
+ - Added `src/trinity/providers/bootstrap.py`.
26
+ - Added `trinity bootstrap` CLI command.
27
+ - Added options:
28
+ - `--agents claude,codex`
29
+ - `--all`
30
+ - `--session-name <name>`
31
+ - `--force`
32
+ - `--no-attach`
33
+ - Changed readiness action hints to direct users to `trinity bootstrap` instead
34
+ of running provider CLIs in the normal user home.
35
+ - Documented the flow in README files and provider readiness troubleshooting.
36
+ - Added tests for bootstrap target selection, command construction, tmux launch
37
+ orchestration, CLI behavior, and readiness hints.
38
+
39
+ ## Verification
40
+
41
+ ```bash
42
+ uv run pytest tests/test_provider_bootstrap.py tests/test_provider_readiness.py tests/test_cli.py -q
43
+ ```
44
+
45
+ Result:
46
+
47
+ ```text
48
+ 41 passed in 0.20s
49
+ ```
50
+
51
+ ```bash
52
+ uv run pytest -q
53
+ ```
54
+
55
+ Result:
56
+
57
+ ```text
58
+ 909 passed, 1 warning in 19.65s
59
+ ```
60
+
61
+ The remaining warning is an existing AsyncMock resource warning in the test
62
+ suite and is not introduced by this change.
@@ -7,7 +7,7 @@
7
7
  | 항목 | 결과 |
8
8
  |------|------|
9
9
  | CLI 버전 | `trinity, version 0.7.0` |
10
- | 전체 테스트 | 882 passed |
10
+ | 전체 테스트 | 901 passed |
11
11
  | 경고 | 1건: `unittest.mock` AsyncMock coroutine RuntimeWarning |
12
12
  | 실행 명령 | `uv run pytest -q` |
13
13
  | 변경 파일 ruff | `uv run --with ruff ruff check ...` 통과 |
@@ -22,8 +22,10 @@ v0.7.0 workflow engine redesign에서 추가한 다음 영역을 검증했다.
22
22
  | Provider readiness | `tests/test_provider_readiness.py`, `tests/test_orchestrator.py`, `tests/test_tui.py` |
23
23
  | Response contract/artifacts | `tests/test_response_contract.py`, `tests/test_protocol.py` |
24
24
  | Workflow state machine | `tests/test_workflow_engine.py`, `tests/test_tui_session.py` |
25
+ | User decision UX | `tests/test_workflow_engine.py`, `tests/test_tui_session.py`, `tests/test_tui_prompt.py` |
25
26
  | Workflow persistence | `tests/test_workflow_persistence.py`, `tests/test_workflow_engine.py` |
26
27
  | Structured consensus | `tests/test_structured_consensus.py`, `tests/test_protocol.py` |
28
+ | Open question parser | `tests/test_structured_consensus.py`, `tests/test_protocol.py` |
27
29
  | Blueprint decomposition | `tests/test_blueprint_decomposer.py`, `tests/test_workflow_engine.py` |
28
30
  | Execution protocol | `tests/test_execution_protocol.py`, `tests/test_workflow_engine.py` |
29
31
  | Subagent reporting | `tests/test_execution_protocol.py`, `tests/test_tui_session.py` |
@@ -54,6 +56,53 @@ uv run pytest -q \
54
56
  171 passed
55
57
  ```
56
58
 
59
+ 최근 user decision UX 후속 작업에서 실행한 집중 테스트:
60
+
61
+ ```bash
62
+ uv run pytest -q \
63
+ tests/test_workflow_engine.py \
64
+ tests/test_tui_session.py \
65
+ tests/test_tui_prompt.py
66
+ ```
67
+
68
+ 결과:
69
+
70
+ ```text
71
+ 82 passed
72
+ ```
73
+
74
+ 최근 decision wizard 후속 작업에서 실행한 집중 테스트:
75
+
76
+ ```bash
77
+ uv run pytest -q \
78
+ tests/test_tui_session.py \
79
+ tests/test_tui_prompt.py \
80
+ tests/test_workflow_engine.py
81
+ ```
82
+
83
+ 결과:
84
+
85
+ ```text
86
+ 85 passed
87
+ ```
88
+
89
+ 최근 open question parser 후속 작업에서 실행한 집중 테스트:
90
+
91
+ ```bash
92
+ uv run pytest -q \
93
+ tests/test_structured_consensus.py \
94
+ tests/test_protocol.py \
95
+ tests/test_workflow_engine.py \
96
+ tests/test_tui_session.py \
97
+ tests/test_tui_prompt.py
98
+ ```
99
+
100
+ 결과:
101
+
102
+ ```text
103
+ 109 passed
104
+ ```
105
+
57
106
  전체 테스트:
58
107
 
59
108
  ```bash
@@ -63,7 +112,7 @@ uv run pytest -q
63
112
  결과:
64
113
 
65
114
  ```text
66
- 882 passed, 1 warning
115
+ 901 passed, 1 warning
67
116
  ```
68
117
 
69
118
  ## 4. 구현 기준선
@@ -102,4 +151,4 @@ uv run pytest -q
102
151
  RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited
103
152
  ```
104
153
 
105
- 테스트 실패를 만들지는 않지만, error handling 계열 mock fixture 정리 여지가 있다.
154
+ 테스트 실패를 만들지는 않지만, e2e context 계열 mock fixture 정리 여지가 있다.