ouroboros-ai 0.27.1.dev10__tar.gz → 0.27.2.dev2__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.

Potentially problematic release.


This version of ouroboros-ai might be problematic. Click here for more details.

Files changed (640) hide show
  1. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.claude-plugin/marketplace.json +1 -1
  2. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.claude-plugin/plugin.json +1 -1
  3. ouroboros_ai-0.27.2.dev2/.ouroboros/seeds/seed_73827177a2a3.yaml +125 -0
  4. ouroboros_ai-0.27.2.dev2/.ouroboros/seeds/seed_78c8e6e41813.yaml +159 -0
  5. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/PKG-INFO +9 -16
  6. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/README.ko.md +2 -0
  7. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/README.md +2 -0
  8. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/cli-reference.md +4 -0
  9. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/getting-started.md +3 -2
  10. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/pyproject.toml +4 -15
  11. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/run/SKILL.md +34 -25
  12. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/setup/SKILL.md +1 -1
  13. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/_version.py +2 -2
  14. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/tui.py +1 -1
  15. ouroboros_ai-0.27.2.dev2/src/ouroboros/cli/formatters/prompting.py +68 -0
  16. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/config/loader.py +43 -5
  17. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/errors.py +28 -0
  18. ouroboros_ai-0.27.2.dev2/src/ouroboros/core/file_lock.py +55 -0
  19. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/lineage.py +63 -0
  20. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/ontology_aspect.py +1 -2
  21. ouroboros_ai-0.27.2.dev2/src/ouroboros/core/retry.py +51 -0
  22. ouroboros_ai-0.27.2.dev2/src/ouroboros/core/ttl_cache.py +76 -0
  23. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/events/lineage.py +3 -0
  24. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evolution/loop.py +10 -0
  25. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evolution/projector.py +1 -0
  26. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evolution/reflect.py +15 -0
  27. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evolution/wonder.py +15 -0
  28. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/client/adapter.py +5 -5
  29. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/server/adapter.py +36 -1
  30. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/__init__.py +4 -0
  31. ouroboros_ai-0.27.2.dev2/src/ouroboros/mcp/tools/ac_tree_hud_handler.py +1087 -0
  32. ouroboros_ai-0.27.2.dev2/src/ouroboros/mcp/tools/ac_tree_hud_render.py +289 -0
  33. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/definitions.py +8 -0
  34. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/evaluation_handlers.py +30 -2
  35. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/execution_handlers.py +4 -3
  36. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/adapter.py +30 -0
  37. ouroboros_ai-0.27.2.dev2/src/ouroboros/orchestrator/capabilities.py +387 -0
  38. ouroboros_ai-0.27.2.dev2/src/ouroboros/orchestrator/control_plane.py +110 -0
  39. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/coordinator.py +24 -6
  40. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/mcp_tools.py +4 -5
  41. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/parallel_executor.py +235 -182
  42. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/parallel_executor_models.py +3 -0
  43. ouroboros_ai-0.27.2.dev2/src/ouroboros/orchestrator/policy.py +161 -0
  44. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/runner.py +44 -2
  45. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/runtime_message_projection.py +12 -1
  46. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/claude_code_adapter.py +110 -51
  47. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/litellm_adapter.py +4 -7
  48. ouroboros_ai-0.27.2.dev2/tests/unit/cli/commands/test_tui_command.py +29 -0
  49. ouroboros_ai-0.27.2.dev2/tests/unit/cli/formatters/test_prompting.py +32 -0
  50. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_run_qa.py +1 -1
  51. ouroboros_ai-0.27.2.dev2/tests/unit/config/test_loader_env.py +36 -0
  52. ouroboros_ai-0.27.2.dev2/tests/unit/core/test_file_lock.py +17 -0
  53. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_lineage.py +92 -1
  54. ouroboros_ai-0.27.2.dev2/tests/unit/core/test_retry.py +47 -0
  55. ouroboros_ai-0.27.2.dev2/tests/unit/core/test_ttl_cache.py +37 -0
  56. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evolution/test_wonder_scope.py +35 -1
  57. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/server/test_adapter.py +23 -0
  58. ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_footer.py +92 -0
  59. ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_handler.py +856 -0
  60. ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_handler_completed.py +95 -0
  61. ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_handler_cursor_changed.py +113 -0
  62. ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_handler_invalid_session.py +43 -0
  63. ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_handler_no_execution.py +58 -0
  64. ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_handler_waiting.py +61 -0
  65. ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_max_nodes.py +130 -0
  66. ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_render_depth2.py +49 -0
  67. ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_render_depth3.py +120 -0
  68. ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_status_icons.py +166 -0
  69. ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_truncation.py +51 -0
  70. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_definitions.py +70 -2
  71. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_adapter.py +5 -5
  72. ouroboros_ai-0.27.2.dev2/tests/unit/orchestrator/test_capabilities.py +47 -0
  73. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_codex_cli_runtime.py +4 -2
  74. ouroboros_ai-0.27.2.dev2/tests/unit/orchestrator/test_control_plane.py +35 -0
  75. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_coordinator.py +5 -0
  76. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_parallel_executor.py +374 -13
  77. ouroboros_ai-0.27.2.dev2/tests/unit/orchestrator/test_parallel_executor_atomic_judgment.py +102 -0
  78. ouroboros_ai-0.27.2.dev2/tests/unit/orchestrator/test_parallel_executor_recursive_depth.py +106 -0
  79. ouroboros_ai-0.27.2.dev2/tests/unit/orchestrator/test_policy.py +44 -0
  80. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_runner.py +3 -1
  81. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_runtime_factory.py +3 -3
  82. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_runtime_message_projection.py +8 -0
  83. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/providers/test_claude_code_adapter.py +278 -0
  84. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/providers/test_factory.py +4 -4
  85. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/providers/test_litellm_adapter.py +1 -1
  86. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_dependencies_configured.py +2 -2
  87. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_evolve_step.py +129 -0
  88. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_projector_rewind.py +44 -0
  89. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/uv.lock +17 -526
  90. ouroboros_ai-0.27.1.dev10/src/ouroboros/cli/formatters/prompting.py +0 -38
  91. ouroboros_ai-0.27.1.dev10/src/ouroboros/core/file_lock.py +0 -43
  92. ouroboros_ai-0.27.1.dev10/tests/unit/cli/formatters/test_prompting.py +0 -45
  93. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.claude/settings.json +0 -0
  94. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.claude-plugin/.mcp.json +0 -0
  95. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.env.example +0 -0
  96. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  97. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  98. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  99. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  100. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/workflows/dev-publish.yml +0 -0
  101. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/workflows/lint.yml +0 -0
  102. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/workflows/release.yml +0 -0
  103. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/workflows/test.yml +0 -0
  104. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.gitignore +0 -0
  105. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.mcp.json +0 -0
  106. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.ouroboros/mechanical.toml +0 -0
  107. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.pre-commit-config.yaml +0 -0
  108. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.python-version +0 -0
  109. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/CHANGELOG.md +0 -0
  110. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/CLAUDE.md +0 -0
  111. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/CODE_OF_CONDUCT.md +0 -0
  112. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/CONTRIBUTING.md +0 -0
  113. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/HANDOFF.md +0 -0
  114. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/LICENSE +0 -0
  115. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/SECURITY.md +0 -0
  116. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/UNINSTALL.md +0 -0
  117. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/cancel.md +0 -0
  118. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/evaluate.md +0 -0
  119. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/evolve.md +0 -0
  120. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/help.md +0 -0
  121. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/interview.md +0 -0
  122. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/ralph.md +0 -0
  123. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/run.md +0 -0
  124. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/seed.md +0 -0
  125. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/setup.md +0 -0
  126. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/status.md +0 -0
  127. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/tutorial.md +0 -0
  128. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/unstuck.md +0 -0
  129. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/welcome.md +0 -0
  130. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/.gitignore +0 -0
  131. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/Cargo.lock +0 -0
  132. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/Cargo.toml +0 -0
  133. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/README.md +0 -0
  134. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/db.rs +0 -0
  135. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/main.rs +0 -0
  136. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/mock.rs +0 -0
  137. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/state.rs +0 -0
  138. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/views/dashboard.rs +0 -0
  139. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/views/execution.rs +0 -0
  140. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/views/lineage.rs +0 -0
  141. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/views/logs.rs +0 -0
  142. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/views/mod.rs +0 -0
  143. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/views/session_selector.rs +0 -0
  144. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/README.md +0 -0
  145. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/api/README.md +0 -0
  146. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/api/core.md +0 -0
  147. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/api/mcp.md +0 -0
  148. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/architecture.md +0 -0
  149. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/config-reference.md +0 -0
  150. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/contributing/architecture-overview.md +0 -0
  151. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/contributing/findings-registry.md +0 -0
  152. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/contributing/issue-quality-policy.md +0 -0
  153. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/contributing/key-patterns.md +0 -0
  154. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/contributing/testing-guide.md +0 -0
  155. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/examples/mcp-config.yaml +0 -0
  156. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/guides/evaluation-pipeline.md +0 -0
  157. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/guides/evolution-loop.md +0 -0
  158. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/guides/issue-176-subagent-mcp-inheritance.md +0 -0
  159. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/guides/mcp-bridge.md +0 -0
  160. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/guides/seed-authoring.md +0 -0
  161. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/guides/tui-usage.md +0 -0
  162. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/images/PLACEHOLDER_README.md +0 -0
  163. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/images/ouroboros.png +0 -0
  164. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/platform-support.md +0 -0
  165. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/runtime-capability-matrix.md +0 -0
  166. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/runtime-guides/claude-code.md +0 -0
  167. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/runtime-guides/codex.md +0 -0
  168. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/coordinator_test_seed.yaml +0 -0
  169. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/dummy_seed.yaml +0 -0
  170. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/parallel_subac_test_seed.yaml +0 -0
  171. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/subac_test_seed.yaml +0 -0
  172. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/task_manager/README.md +0 -0
  173. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/task_manager/__init__.py +0 -0
  174. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/task_manager/__main__.py +0 -0
  175. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/task_manager/cli.py +0 -0
  176. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/task_manager/models.py +0 -0
  177. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/task_manager/storage.py +0 -0
  178. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/test_display.py +0 -0
  179. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/hooks/hooks.json +0 -0
  180. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/llms-full.txt +0 -0
  181. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/llms.txt +0 -0
  182. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/project-context.md +0 -0
  183. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/drift-monitor.py +0 -0
  184. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/install.sh +0 -0
  185. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/keyword-detector.py +0 -0
  186. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/mcp-serve.sh +0 -0
  187. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/ralph-rewind.py +0 -0
  188. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/ralph.py +0 -0
  189. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/ralph.sh +0 -0
  190. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/session-start.py +0 -0
  191. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/sync-plugin-version.py +0 -0
  192. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/version-check.py +0 -0
  193. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/brownfield/SKILL.md +0 -0
  194. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/cancel/SKILL.md +0 -0
  195. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/evaluate/SKILL.md +0 -0
  196. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/evolve/SKILL.md +0 -0
  197. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/help/SKILL.md +0 -0
  198. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/interview/SKILL.md +0 -0
  199. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/pm/SKILL.md +0 -0
  200. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/publish/SKILL.md +0 -0
  201. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/qa/SKILL.md +0 -0
  202. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/ralph/SKILL.md +0 -0
  203. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/seed/SKILL.md +0 -0
  204. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/status/SKILL.md +0 -0
  205. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/tutorial/SKILL.md +0 -0
  206. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/unstuck/SKILL.md +0 -0
  207. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/update/SKILL.md +0 -0
  208. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/welcome/SKILL.md +0 -0
  209. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/__init__.py +0 -0
  210. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/__main__.py +0 -0
  211. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/__init__.py +0 -0
  212. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/advocate.md +0 -0
  213. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/analysis-agent.md +0 -0
  214. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/architect.md +0 -0
  215. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/breadth-keeper.md +0 -0
  216. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/code-executor.md +0 -0
  217. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/codebase-explorer.md +0 -0
  218. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/consensus-reviewer.md +0 -0
  219. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/contrarian.md +0 -0
  220. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/evaluator.md +0 -0
  221. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/hacker.md +0 -0
  222. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/judge.md +0 -0
  223. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/loader.py +0 -0
  224. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/ontologist.md +0 -0
  225. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/ontology-analyst.md +0 -0
  226. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/qa-judge.md +0 -0
  227. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/research-agent.md +0 -0
  228. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/researcher.md +0 -0
  229. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/seed-architect.md +0 -0
  230. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/seed-closer.md +0 -0
  231. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/semantic-evaluator.md +0 -0
  232. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/simplifier.md +0 -0
  233. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/socratic-interviewer.md +0 -0
  234. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/__init__.py +0 -0
  235. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/ambiguity.py +0 -0
  236. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/brownfield.py +0 -0
  237. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/explore.py +0 -0
  238. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/interview.py +0 -0
  239. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/pm_completion.py +0 -0
  240. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/pm_document.py +0 -0
  241. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/pm_interview.py +0 -0
  242. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/pm_seed.py +0 -0
  243. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/question_classifier.py +0 -0
  244. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/seed_generator.py +0 -0
  245. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/__init__.py +0 -0
  246. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/__init__.py +0 -0
  247. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/cancel.py +0 -0
  248. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/config.py +0 -0
  249. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/init.py +0 -0
  250. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/mcp.py +0 -0
  251. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/pm.py +0 -0
  252. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/run.py +0 -0
  253. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/setup.py +0 -0
  254. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/status.py +0 -0
  255. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/uninstall.py +0 -0
  256. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/formatters/__init__.py +0 -0
  257. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/formatters/panels.py +0 -0
  258. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/formatters/progress.py +0 -0
  259. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/formatters/tables.py +0 -0
  260. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/formatters/workflow_display.py +0 -0
  261. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/main.py +0 -0
  262. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/codex/__init__.py +0 -0
  263. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/codex/artifacts.py +0 -0
  264. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/codex/ouroboros.md +0 -0
  265. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/codex_permissions.py +0 -0
  266. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/config/__init__.py +0 -0
  267. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/config/models.py +0 -0
  268. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/__init__.py +0 -0
  269. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/ac_tree.py +0 -0
  270. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/context.py +0 -0
  271. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/git_workflow.py +0 -0
  272. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/initial_context.py +0 -0
  273. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/json_utils.py +0 -0
  274. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/ontology_questions.py +0 -0
  275. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/project_paths.py +0 -0
  276. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/security.py +0 -0
  277. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/seed.py +0 -0
  278. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/text.py +0 -0
  279. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/types.py +0 -0
  280. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/worktree.py +0 -0
  281. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/__init__.py +0 -0
  282. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/artifact_collector.py +0 -0
  283. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/consensus.py +0 -0
  284. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/json_utils.py +0 -0
  285. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/languages.py +0 -0
  286. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/mechanical.py +0 -0
  287. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/models.py +0 -0
  288. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/pipeline.py +0 -0
  289. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/semantic.py +0 -0
  290. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/trigger.py +0 -0
  291. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/verification_artifacts.py +0 -0
  292. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/events/__init__.py +0 -0
  293. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/events/base.py +0 -0
  294. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/events/decomposition.py +0 -0
  295. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/events/evaluation.py +0 -0
  296. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/events/interview.py +0 -0
  297. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/events/ontology.py +0 -0
  298. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evolution/__init__.py +0 -0
  299. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evolution/convergence.py +0 -0
  300. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evolution/regression.py +0 -0
  301. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/execution/__init__.py +0 -0
  302. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/execution/atomicity.py +0 -0
  303. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/execution/decomposition.py +0 -0
  304. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/execution/double_diamond.py +0 -0
  305. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/execution/subagent.py +0 -0
  306. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/__init__.py +0 -0
  307. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/bridge/__init__.py +0 -0
  308. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/bridge/bridge.py +0 -0
  309. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/bridge/config.py +0 -0
  310. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/bridge/factory.py +0 -0
  311. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/client/__init__.py +0 -0
  312. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/client/manager.py +0 -0
  313. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/client/protocol.py +0 -0
  314. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/errors.py +0 -0
  315. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/job_manager.py +0 -0
  316. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/resources/__init__.py +0 -0
  317. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/resources/handlers.py +0 -0
  318. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/server/__init__.py +0 -0
  319. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/server/protocol.py +0 -0
  320. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/server/security.py +0 -0
  321. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/authoring_handlers.py +0 -0
  322. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/bridge_mixin.py +0 -0
  323. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/brownfield_handler.py +0 -0
  324. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/dashboard.py +0 -0
  325. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/evolution_handlers.py +0 -0
  326. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/job_handlers.py +0 -0
  327. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/pm_handler.py +0 -0
  328. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/qa.py +0 -0
  329. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/query_handlers.py +0 -0
  330. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/registry.py +0 -0
  331. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/types.py +0 -0
  332. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/observability/__init__.py +0 -0
  333. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/observability/drift.py +0 -0
  334. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/observability/logging.py +0 -0
  335. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/observability/retrospective.py +0 -0
  336. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/__init__.py +0 -0
  337. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/codex_cli_runtime.py +0 -0
  338. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/command_dispatcher.py +0 -0
  339. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/dependency_analyzer.py +0 -0
  340. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/events.py +0 -0
  341. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/execution_runtime_scope.py +0 -0
  342. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/execution_strategy.py +0 -0
  343. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/heartbeat.py +0 -0
  344. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/level_context.py +0 -0
  345. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/mcp_config.py +0 -0
  346. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/runtime_factory.py +0 -0
  347. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/session.py +0 -0
  348. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/workflow_state.py +0 -0
  349. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/__init__.py +0 -0
  350. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/brownfield.py +0 -0
  351. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/checkpoint.py +0 -0
  352. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/event_store.py +0 -0
  353. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/migrations/__init__.py +0 -0
  354. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/migrations/runner.py +0 -0
  355. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
  356. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/migrations/scripts/002_brownfield.sql +0 -0
  357. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/schema.py +0 -0
  358. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/uow.py +0 -0
  359. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/__init__.py +0 -0
  360. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/agents/__init__.py +0 -0
  361. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/agents/pool.py +0 -0
  362. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/agents/registry.py +0 -0
  363. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/orchestration/__init__.py +0 -0
  364. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/orchestration/router.py +0 -0
  365. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/orchestration/scheduler.py +0 -0
  366. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/skills/__init__.py +0 -0
  367. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/skills/docs.py +0 -0
  368. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/skills/executor.py +0 -0
  369. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/skills/keywords.py +0 -0
  370. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/skills/registry.py +0 -0
  371. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/pm/__init__.py +0 -0
  372. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/pm/handoff.py +0 -0
  373. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/pm/renderer.py +0 -0
  374. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/__init__.py +0 -0
  375. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/anthropic_adapter.py +0 -0
  376. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/base.py +0 -0
  377. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/codex_cli_adapter.py +0 -0
  378. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/codex_cli_stream.py +0 -0
  379. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/factory.py +0 -0
  380. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/gemini_cli_adapter.py +0 -0
  381. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/py.typed +0 -0
  382. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/resilience/__init__.py +0 -0
  383. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/resilience/lateral.py +0 -0
  384. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/resilience/stagnation.py +0 -0
  385. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/routing/__init__.py +0 -0
  386. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/routing/complexity.py +0 -0
  387. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/routing/downgrade.py +0 -0
  388. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/routing/escalation.py +0 -0
  389. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/routing/router.py +0 -0
  390. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/routing/tiers.py +0 -0
  391. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/secondary/__init__.py +0 -0
  392. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/secondary/scheduler.py +0 -0
  393. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/secondary/todo_registry.py +0 -0
  394. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/strategies/__init__.py +0 -0
  395. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/strategies/devil_advocate.py +0 -0
  396. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/__init__.py +0 -0
  397. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/app.py +0 -0
  398. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/components/__init__.py +0 -0
  399. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/components/agents_panel.py +0 -0
  400. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/components/event_log.py +0 -0
  401. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/components/progress.py +0 -0
  402. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/components/token_tracker.py +0 -0
  403. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/events.py +0 -0
  404. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/__init__.py +0 -0
  405. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/confirm_rewind.py +0 -0
  406. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/dashboard.py +0 -0
  407. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/dashboard_v2.py +0 -0
  408. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/dashboard_v3.py +0 -0
  409. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/debug.py +0 -0
  410. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/execution.py +0 -0
  411. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/hud_dashboard.py +0 -0
  412. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/lineage_detail.py +0 -0
  413. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/lineage_selector.py +0 -0
  414. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/logs.py +0 -0
  415. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/session_selector.py +0 -0
  416. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/__init__.py +0 -0
  417. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/ac_progress.py +0 -0
  418. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/ac_tree.py +0 -0
  419. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/agent_activity.py +0 -0
  420. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/cost_tracker.py +0 -0
  421. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/drift_meter.py +0 -0
  422. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/lineage_tree.py +0 -0
  423. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/parallel_graph.py +0 -0
  424. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/phase_progress.py +0 -0
  425. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/verification/__init__.py +0 -0
  426. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/verification/extractor.py +0 -0
  427. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/verification/models.py +0 -0
  428. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/verification/verifier.py +0 -0
  429. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/__init__.py +0 -0
  430. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/conftest.py +0 -0
  431. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/e2e/__init__.py +0 -0
  432. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/e2e/conftest.py +0 -0
  433. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/e2e/mcp_bridge_test_config.yaml +0 -0
  434. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/e2e/test_cli_commands.py +0 -0
  435. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/e2e/test_full_workflow.py +0 -0
  436. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/e2e/test_session_persistence.py +0 -0
  437. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/fixtures/test_atomicity_seed.yml +0 -0
  438. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/__init__.py +0 -0
  439. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/conftest.py +0 -0
  440. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/mcp/__init__.py +0 -0
  441. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/mcp/bridge/__init__.py +0 -0
  442. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/mcp/bridge/test_bridge_server_to_server.py +0 -0
  443. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/mcp/conftest.py +0 -0
  444. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/mcp/test_client_adapter.py +0 -0
  445. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/mcp/test_client_manager.py +0 -0
  446. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/mcp/test_server_adapter.py +0 -0
  447. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/plugin/test_orchestration.py +0 -0
  448. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/test_codex_cli_passthrough_smoke.py +0 -0
  449. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/test_codex_skill_fallback.py +0 -0
  450. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/test_codex_skill_smoke.py +0 -0
  451. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/test_entry_point.py +0 -0
  452. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/__init__.py +0 -0
  453. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/agents/__init__.py +0 -0
  454. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/agents/test_loader.py +0 -0
  455. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/__init__.py +0 -0
  456. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_ambiguity.py +0 -0
  457. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_brownfield.py +0 -0
  458. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_classifier_context.py +0 -0
  459. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_decide_later_items.py +0 -0
  460. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_explore.py +0 -0
  461. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_interview.py +0 -0
  462. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_interview_async_io.py +0 -0
  463. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_interview_no_web_search_hint.py +0 -0
  464. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_interview_research_prefix.py +0 -0
  465. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_pm_completion.py +0 -0
  466. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_pm_document_generator.py +0 -0
  467. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_pm_document_writer.py +0 -0
  468. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_pm_interview.py +0 -0
  469. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_pm_interview_brownfield_db.py +0 -0
  470. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_pm_seed_ac12.py +0 -0
  471. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_pm_seed_save.py +0 -0
  472. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_question_classifier.py +0 -0
  473. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_seed_generator.py +0 -0
  474. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/__init__.py +0 -0
  475. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/formatters/__init__.py +0 -0
  476. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/formatters/test_console.py +0 -0
  477. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/formatters/test_panels.py +0 -0
  478. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/formatters/test_progress.py +0 -0
  479. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/formatters/test_tables.py +0 -0
  480. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/formatters/test_workflow_display.py +0 -0
  481. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_cancel.py +0 -0
  482. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_config.py +0 -0
  483. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_init_pm_seed_detection.py +0 -0
  484. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_init_runtime.py +0 -0
  485. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_main.py +0 -0
  486. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_mcp_nested_guard.py +0 -0
  487. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_mcp_startup_cleanup.py +0 -0
  488. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm.py +0 -0
  489. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm_brownfield.py +0 -0
  490. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm_completion.py +0 -0
  491. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm_interactive_logging.py +0 -0
  492. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm_missing_litellm.py +0 -0
  493. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm_overwrite.py +0 -0
  494. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm_runtime_adapter.py +0 -0
  495. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm_select_repos.py +0 -0
  496. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_setup.py +0 -0
  497. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_uninstall.py +0 -0
  498. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/config/__init__.py +0 -0
  499. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/config/test_loader.py +0 -0
  500. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/config/test_models.py +0 -0
  501. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/__init__.py +0 -0
  502. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_ac_tree.py +0 -0
  503. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_context.py +0 -0
  504. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_errors.py +0 -0
  505. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_git_workflow.py +0 -0
  506. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_initial_context.py +0 -0
  507. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_ontology_aspect.py +0 -0
  508. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_ontology_questions.py +0 -0
  509. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_security.py +0 -0
  510. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_seed.py +0 -0
  511. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_types.py +0 -0
  512. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_worktree.py +0 -0
  513. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/__init__.py +0 -0
  514. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_artifact_collector_file_prefix.py +0 -0
  515. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_consensus.py +0 -0
  516. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_json_utils.py +0 -0
  517. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_languages.py +0 -0
  518. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_mechanical.py +0 -0
  519. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_models.py +0 -0
  520. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_pipeline_trigger_consensus.py +0 -0
  521. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_review_fixes.py +0 -0
  522. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_semantic.py +0 -0
  523. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_trigger.py +0 -0
  524. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_trigger_consensus.py +0 -0
  525. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_verification_artifacts.py +0 -0
  526. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/events/__init__.py +0 -0
  527. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/events/test_base.py +0 -0
  528. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/events/test_decomposition_events.py +0 -0
  529. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/execution/__init__.py +0 -0
  530. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/execution/test_atomicity.py +0 -0
  531. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/execution/test_decomposition.py +0 -0
  532. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/execution/test_double_diamond.py +0 -0
  533. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/execution/test_subagent_isolation.py +0 -0
  534. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/__init__.py +0 -0
  535. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/bridge/__init__.py +0 -0
  536. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/bridge/test_bridge.py +0 -0
  537. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/bridge/test_config.py +0 -0
  538. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/bridge/test_factory.py +0 -0
  539. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/bridge/test_handler_wiring.py +0 -0
  540. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/bridge/test_stability.py +0 -0
  541. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/client/__init__.py +0 -0
  542. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/client/test_adapter.py +0 -0
  543. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/client/test_adapter_transport_lifecycle.py +0 -0
  544. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/client/test_manager.py +0 -0
  545. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/conftest.py +0 -0
  546. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/server/__init__.py +0 -0
  547. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/server/test_security.py +0 -0
  548. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/test_errors.py +0 -0
  549. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/test_job_manager.py +0 -0
  550. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/test_types.py +0 -0
  551. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/__init__.py +0 -0
  552. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/conftest.py +0 -0
  553. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_brownfield_handler.py +0 -0
  554. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_evaluation_handler.py +0 -0
  555. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_interview_parallel_scoring.py +0 -0
  556. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_interview_scoring_guard.py +0 -0
  557. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_mcp_manager_wiring.py +0 -0
  558. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_pm_handler.py +0 -0
  559. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_pm_handler_generate.py +0 -0
  560. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_pm_handler_pending_reframe.py +0 -0
  561. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_qa_integration.py +0 -0
  562. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_qa_parser.py +0 -0
  563. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_registry.py +0 -0
  564. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_traceback_reporting.py +0 -0
  565. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/observability/__init__.py +0 -0
  566. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/observability/test_drift.py +0 -0
  567. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/observability/test_logging.py +0 -0
  568. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/observability/test_retrospective.py +0 -0
  569. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/__init__.py +0 -0
  570. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_codex_recursion_guard.py +0 -0
  571. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_command_dispatcher.py +0 -0
  572. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_dependency_analyzer.py +0 -0
  573. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_events.py +0 -0
  574. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_execution_runtime_scope.py +0 -0
  575. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_execution_strategy.py +0 -0
  576. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_inflight_cancellation.py +0 -0
  577. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_level_context.py +0 -0
  578. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_mcp_config.py +0 -0
  579. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_mcp_tools.py +0 -0
  580. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_parallel_executor_retry_resume.py +0 -0
  581. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_runner_cancellation.py +0 -0
  582. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_session.py +0 -0
  583. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_workflow_state.py +0 -0
  584. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/persistence/__init__.py +0 -0
  585. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/persistence/test_brownfield_store.py +0 -0
  586. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/persistence/test_checkpoint.py +0 -0
  587. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/persistence/test_event_store.py +0 -0
  588. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/persistence/test_schema.py +0 -0
  589. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/persistence/test_uow.py +0 -0
  590. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/__init__.py +0 -0
  591. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/agents/__init__.py +0 -0
  592. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/agents/test_registry.py +0 -0
  593. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/orchestration/__init__.py +0 -0
  594. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/orchestration/test_model_router.py +0 -0
  595. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/skills/__init__.py +0 -0
  596. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/skills/test_keywords.py +0 -0
  597. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/skills/test_registry.py +0 -0
  598. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/pm/__init__.py +0 -0
  599. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/pm/test_renderer.py +0 -0
  600. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/providers/__init__.py +0 -0
  601. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/providers/test_base.py +0 -0
  602. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/providers/test_codex_cli_adapter.py +0 -0
  603. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/providers/test_gemini_cli_adapter.py +0 -0
  604. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/resilience/__init__.py +0 -0
  605. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/resilience/test_lateral.py +0 -0
  606. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/resilience/test_stagnation.py +0 -0
  607. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/routing/__init__.py +0 -0
  608. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/routing/test_complexity.py +0 -0
  609. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/routing/test_downgrade.py +0 -0
  610. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/routing/test_escalation.py +0 -0
  611. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/routing/test_router.py +0 -0
  612. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/routing/test_tiers.py +0 -0
  613. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/scripts/test_keyword_detector.py +0 -0
  614. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/scripts/test_version_check.py +0 -0
  615. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/secondary/__init__.py +0 -0
  616. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/secondary/test_scheduler.py +0 -0
  617. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/secondary/test_todo_registry.py +0 -0
  618. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_artifact_collector.py +0 -0
  619. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_codex_artifacts.py +0 -0
  620. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_convergence.py +0 -0
  621. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_dashboard.py +0 -0
  622. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_evolve_rewind.py +0 -0
  623. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_graceful_shutdown.py +0 -0
  624. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_main_entry_point.py +0 -0
  625. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_module_structure.py +0 -0
  626. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_project_initialization.py +0 -0
  627. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_ralph_parser.py +0 -0
  628. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_ralph_rewind.py +0 -0
  629. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_regression.py +0 -0
  630. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_tooling_configuration.py +0 -0
  631. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_verification.py +0 -0
  632. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/__init__.py +0 -0
  633. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/test_app.py +0 -0
  634. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/test_cancelled_display.py +0 -0
  635. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/test_events.py +0 -0
  636. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/test_lineage_viewer.py +0 -0
  637. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/test_screens.py +0 -0
  638. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/test_session_selector_replay.py +0 -0
  639. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/test_widgets.py +0 -0
  640. {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tools/sync_github_project.py +0 -0
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "name": "ouroboros",
12
12
  "description": "Transform vague ideas into validated seed specifications through Socratic questioning and ontological analysis",
13
- "version": "0.27.0",
13
+ "version": "0.27.1",
14
14
  "author": {
15
15
  "name": "Q00",
16
16
  "email": "jqyu.lee@gmail.com"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ouroboros",
3
- "version": "0.27.0",
3
+ "version": "0.27.1",
4
4
  "description": "Self-improving AI workflow system. Crystallize requirements before execution with Socratic interview, ambiguity scoring, and 3-stage evaluation.",
5
5
  "author": {
6
6
  "name": "Q00",
@@ -0,0 +1,125 @@
1
+ goal: Refactor parallel_executor.py AC tree execution to support recursive decomposition
2
+ by making _execute_single_ac the sole recursive entry point, eliminating _execute_sub_acs,
3
+ scoping stall retry to atomic execution only, and adding decomposition depth warning
4
+ as evolutionary loop feedback canary
5
+ task_type: code
6
+ brownfield_context:
7
+ project_type: brownfield
8
+ context_references:
9
+ - path: parallel_executor.py
10
+ role: primary
11
+ summary: Contains _execute_sub_acs, _execute_single_ac, _execute_ac, _execute_atomic_ac
12
+ — the core execution methods being refactored
13
+ existing_patterns:
14
+ - anyio task groups for parallel AC execution
15
+ - _execute_single_ac as entry point for individual AC execution
16
+ - _execute_atomic_ac for leaf node execution
17
+ - ACExecutionResult as the result container
18
+ - Claude ATOMIC/COMPOSITE judgment for decomposition decisions
19
+ - Stall retry logic for atomic execution recovery
20
+ - EventStore-based event flow for state propagation
21
+ existing_dependencies:
22
+ - claude_agent_sdk
23
+ - anyio
24
+ - textual
25
+ constraints:
26
+ - Python >= 3.14
27
+ - Uses Claude Agent SDK
28
+ - Uses anyio task groups for parallel execution
29
+ - Maximum recursion depth is 3 (soft safety net, not hard stop)
30
+ - Claude's ATOMIC judgment is the real recursion termination condition
31
+ - Must preserve existing parallel execution semantics
32
+ - No new external dependencies
33
+ acceptance_criteria:
34
+ - _execute_single_ac is the sole recursive entry point handling both atomic and composite
35
+ ACs
36
+ - _execute_sub_acs is eliminated and its loop is inlined into _execute_ac
37
+ - Children ACs are dispatched via _execute_single_ac recursion
38
+ - Stall retry logic wraps only atomic execution at leaf nodes, not recursive dispatch
39
+ - At depth >= 3 execution is forced atomic with no further decomposition
40
+ - decomposition_depth_warning flag is set on ACExecutionResult when depth limit is
41
+ reached
42
+ - Depth warning flows through Evaluate stage to evolutionary loop as seed quality
43
+ feedback
44
+ - Recursive decomposition works beyond depth 1 up to depth limit
45
+ - ATOMIC judgment from Claude still terminates recursion at any depth
46
+ ontology_schema:
47
+ name: ACRecursiveExecution
48
+ description: Domain model for recursive acceptance criteria tree execution with
49
+ depth-aware decomposition and evolutionary feedback
50
+ fields:
51
+ - name: ac_id
52
+ type: string
53
+ description: Unique identifier for an acceptance criterion node
54
+ required: true
55
+ - name: ac_type
56
+ type: string
57
+ description: Whether AC is ATOMIC or COMPOSITE as judged by Claude
58
+ required: true
59
+ - name: execution_depth
60
+ type: number
61
+ description: Current recursion depth of this AC in the decomposition tree
62
+ required: true
63
+ - name: max_depth
64
+ type: number
65
+ description: Maximum allowed recursion depth before forcing atomic execution
66
+ required: true
67
+ - name: decomposition_depth_warning
68
+ type: boolean
69
+ description: Flag indicating depth limit was reached and atomic was forced
70
+ required: true
71
+ - name: children_ids
72
+ type: array
73
+ description: List of child AC IDs produced by decomposition
74
+ required: true
75
+ - name: execution_result
76
+ type: object
77
+ description: The ACExecutionResult containing output and metadata
78
+ required: true
79
+ - name: stall_retry_count
80
+ type: number
81
+ description: Number of stall retries attempted for atomic execution
82
+ required: true
83
+ - name: is_forced_atomic
84
+ type: boolean
85
+ description: Whether this AC was forced atomic due to depth limit rather than
86
+ Claude judgment
87
+ required: true
88
+ evaluation_principles:
89
+ - name: single_entry_point
90
+ description: _execute_single_ac is the only method that recurses into AC execution,
91
+ no alternate paths exist
92
+ weight: 0.3
93
+ - name: sub_acs_eliminated
94
+ description: _execute_sub_acs function is completely removed and its logic inlined
95
+ into _execute_ac
96
+ weight: 0.2
97
+ - name: stall_retry_scoping
98
+ description: Stall retry logic wraps only atomic leaf execution, never recursive
99
+ composite dispatch
100
+ weight: 0.2
101
+ - name: depth_canary_correctness
102
+ description: At depth >= 3 execution forces atomic and sets decomposition_depth_warning
103
+ on ACExecutionResult
104
+ weight: 0.2
105
+ - name: behavioral_preservation
106
+ description: Existing parallel execution behavior via anyio task groups is preserved
107
+ for non-depth-limited cases
108
+ weight: 0.1
109
+ exit_conditions:
110
+ - name: all_criteria_met
111
+ description: All four refactoring goals are implemented and passing
112
+ criteria: All acceptance criteria evaluate as satisfied
113
+ - name: recursive_depth_works
114
+ description: Recursive decomposition demonstrably works beyond depth 1
115
+ criteria: AC tree can recurse to depth 2 without forced atomic
116
+ - name: canary_signal_flows
117
+ description: Depth warning propagates to evaluation
118
+ criteria: decomposition_depth_warning is set and accessible in Evaluate stage
119
+ metadata:
120
+ seed_id: seed_73827177a2a3
121
+ version: 1.0.0
122
+ created_at: '2026-04-04T16:54:00.213513Z'
123
+ ambiguity_score: 0.1225
124
+ interview_id: interview_20260404_165002
125
+ parent_seed_id: null
@@ -0,0 +1,159 @@
1
+ goal: Build ouroboros_ac_tree_hud MCP tool that returns a render-ready, cursor-based
2
+ AC tree snapshot as compact markdown for live execution monitoring, supporting recursive
3
+ depth up to 3 levels, delta rendering (one-liner when unchanged), and graceful error
4
+ handling, replacing verbose job_wait polling for Codex/Claude Code environments
5
+ without TUI.
6
+ task_type: code
7
+ brownfield_context:
8
+ project_type: brownfield
9
+ context_references:
10
+ - path: src/ouroboros/events.py
11
+ role: primary
12
+ summary: EventStore with get_events_after pattern using last_row_id cursor, TUIState
13
+ dataclass, workflow.progress.updated event definitions
14
+ - path: src/ouroboros/app.py
15
+ role: reference
16
+ summary: Main app owning _state.ac_tree as SSOT, _merge_ac_progress for AC tree
17
+ state management
18
+ - path: src/ouroboros/tui/screens/dashboard_v3.py
19
+ role: reference
20
+ summary: Existing AC tree rendering logic in TUI with SelectableACTree widget
21
+ for visual reference
22
+ - path: src/ouroboros/workflow_state_tracker.py
23
+ role: reference
24
+ summary: Computes messages_count, tool_calls_count, estimated_tokens, estimated_cost_usd,
25
+ elapsed_display metrics emitted with progress events
26
+ existing_patterns:
27
+ - EventStore row ID cursor pattern from job_wait (get_events_after with last_row_id)
28
+ - workflow.progress.updated events carry full AC data including metrics
29
+ - _merge_ac_progress preserves children_ids when updating status
30
+ - AC tree owned as SSOT in app state
31
+ - MCP tool pattern for Codex/Claude Code integration
32
+ existing_dependencies:
33
+ - EventStore
34
+ - WorkflowStateTracker
35
+ - workflow.progress.updated event payload
36
+ - Existing AC tree data structures with recursive children_ids
37
+ constraints:
38
+ - Python 3.14+ with uv run
39
+ - Must integrate with existing EventStore and workflow.progress.updated events
40
+ - Cursor is EventStore row ID integer, consistent with existing job_wait cursor semantics
41
+ - Depth visualization up to 3 levels (matches MAX_DECOMPOSITION_DEPTH), collapse deeper
42
+ with "... (+N sub-tasks)"
43
+ - Footer metrics are best-effort decorations, omit missing/zero fields rather than
44
+ showing N/A
45
+ - Error cases return graceful markdown, not structured errors
46
+ - No TUI dependency — pure markdown string output
47
+ - max_nodes default 50 as hard cap
48
+ - Must not regress existing tests
49
+ acceptance_criteria:
50
+ - AC tree renders correctly for depth 1 trees
51
+ - AC tree renders correctly for depth 2 trees
52
+ - AC tree renders correctly for depth 3 trees
53
+ - Cursor returns delta one-liner when no new workflow.progress.updated events since
54
+ cursor row ID
55
+ - Full render returned when state has changed since cursor
56
+ - Truncation shows all ACs when total <= 12
57
+ - Truncation shows executing AC ± 2 neighbors + first + last + ellipsis when total
58
+ > 12
59
+ - max_nodes param caps output for pathological cases and is caller-overridable
60
+ - Invalid session_id returns graceful markdown warning
61
+ - No execution linked returns graceful markdown warning
62
+ - No AC tree yet returns waiting message
63
+ - Completed session shows final tree with all statuses and completion footer
64
+ - Footer line includes elapsed time, message count, tool call count, and cost from
65
+ workflow.progress.updated payload
66
+ - 'Status icons render correctly: done, executing, pending, failed'
67
+ - Current tool activity shown inline for executing ACs
68
+ - Run skill can use this tool instead of verbose job_wait polling
69
+ ontology_schema:
70
+ name: ACTreeHUD
71
+ description: Domain model for a cursor-based acceptance criteria tree HUD that renders
72
+ compact markdown snapshots of workflow execution progress
73
+ fields:
74
+ - name: session_id
75
+ type: string
76
+ description: Session identifier for the execution being monitored
77
+ required: true
78
+ - name: cursor
79
+ type: number
80
+ description: EventStore row ID integer, 0 or omitted for first call, returned
81
+ by tool for subsequent calls
82
+ required: true
83
+ - name: max_nodes
84
+ type: number
85
+ description: Hard cap on rendered tree nodes, default 50, caller-overridable
86
+ required: true
87
+ - name: ac_id
88
+ type: string
89
+ description: Unique identifier for an acceptance criterion node
90
+ required: true
91
+ - name: ac_label
92
+ type: string
93
+ description: Human-readable label for the AC
94
+ required: true
95
+ - name: ac_status
96
+ type: string
97
+ description: One of done, executing, pending, failed
98
+ required: true
99
+ - name: ac_depth
100
+ type: number
101
+ description: Nesting depth of the AC node in the tree (1-3+)
102
+ required: true
103
+ - name: children_ids
104
+ type: array
105
+ description: Ordered list of child AC IDs for recursive decomposition
106
+ required: true
107
+ - name: render_mode
108
+ type: string
109
+ description: Either full (tree changed) or delta (one-liner, unchanged)
110
+ required: true
111
+ evaluation_principles:
112
+ - name: visual_correctness
113
+ description: Rendered markdown matches the specified format with correct icons,
114
+ tree prefixes, indentation, and inline tool activity
115
+ weight: 0.25
116
+ - name: cursor_semantics
117
+ description: Cursor-based delta detection correctly distinguishes changed vs unchanged
118
+ state using EventStore row IDs
119
+ weight: 0.2
120
+ - name: truncation_logic
121
+ description: Smart focus truncation correctly handles small trees (show all), large
122
+ trees (executing ± 2 + first + last), and depth > 3 collapse
123
+ weight: 0.2
124
+ - name: error_graceful
125
+ description: All error cases return human-readable graceful markdown lines, never
126
+ structured errors or stack traces
127
+ weight: 0.15
128
+ - name: integration_fidelity
129
+ description: Correctly sources all data from existing EventStore workflow.progress.updated
130
+ events and WorkflowStateTracker metrics
131
+ weight: 0.1
132
+ - name: compactness
133
+ description: Output is compact enough to replace verbose job_wait polling, footer
134
+ omits zero/missing fields
135
+ weight: 0.1
136
+ exit_conditions:
137
+ - name: all_ac_rendered
138
+ description: All acceptance criteria pass and tool renders correctly at all depth
139
+ levels
140
+ criteria: AC tree renders for depth 1, 2, 3 with correct icons and tree structure
141
+ - name: delta_working
142
+ description: Cursor-based delta detection returns one-liner when unchanged and full
143
+ render when changed
144
+ criteria: Two consecutive calls with no intervening events produce one-liner on
145
+ second call
146
+ - name: errors_graceful
147
+ description: All four error cases produce correct graceful markdown
148
+ criteria: Invalid session, no execution, no AC tree yet, and completed session all
149
+ return specified markdown
150
+ - name: no_regression
151
+ description: Existing test suite passes without regression
152
+ criteria: All pre-existing tests pass after integration
153
+ metadata:
154
+ seed_id: seed_78c8e6e41813
155
+ version: 1.0.0
156
+ created_at: '2026-04-04T18:09:30.786879Z'
157
+ ambiguity_score: 0.1105
158
+ interview_id: interview_20260404_180516
159
+ parent_seed_id: null
@@ -1,41 +1,32 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ouroboros-ai
3
- Version: 0.27.1.dev10
3
+ Version: 0.27.2.dev2
4
4
  Summary: Specification-first workflow engine for AI coding agents. Works with Claude Code and Codex CLI.
5
5
  Author-email: Q00 <jqyu.lee@gmail.com>
6
6
  License-File: LICENSE
7
7
  Requires-Python: >=3.12
8
8
  Requires-Dist: aiosqlite>=0.20.0
9
- Requires-Dist: cachetools>=5.0.0
10
- Requires-Dist: filelock>=3.13.0
11
- Requires-Dist: httpx>=0.27.0
12
- Requires-Dist: mcp>=1.26.0
13
- Requires-Dist: prompt-toolkit>=3.0.0
14
9
  Requires-Dist: pydantic>=2.0.0
15
- Requires-Dist: python-dotenv>=1.2.1
16
10
  Requires-Dist: pyyaml>=6.0.0
17
11
  Requires-Dist: rich>=13.0.0
18
12
  Requires-Dist: sqlalchemy[asyncio]>=2.0.0
19
- Requires-Dist: stamina>=25.1.0
20
13
  Requires-Dist: structlog>=24.0.0
21
- Requires-Dist: textual>=1.0.0
22
14
  Requires-Dist: typer>=0.12.0
23
15
  Provides-Extra: all
24
16
  Requires-Dist: anthropic>=0.52.0; extra == 'all'
25
17
  Requires-Dist: claude-agent-sdk>=0.1.0; extra == 'all'
26
18
  Requires-Dist: litellm<=1.82.6,>=1.80.0; extra == 'all'
27
- Requires-Dist: pandas>=2.2.0; extra == 'all'
28
- Requires-Dist: plotly>=5.24.0; extra == 'all'
29
- Requires-Dist: streamlit>=1.40.0; extra == 'all'
19
+ Requires-Dist: mcp>=1.26.0; extra == 'all'
20
+ Requires-Dist: textual>=1.0.0; extra == 'all'
30
21
  Provides-Extra: claude
31
22
  Requires-Dist: anthropic>=0.52.0; extra == 'claude'
32
23
  Requires-Dist: claude-agent-sdk>=0.1.0; extra == 'claude'
33
- Provides-Extra: dashboard
34
- Requires-Dist: pandas>=2.2.0; extra == 'dashboard'
35
- Requires-Dist: plotly>=5.24.0; extra == 'dashboard'
36
- Requires-Dist: streamlit>=1.40.0; extra == 'dashboard'
37
24
  Provides-Extra: litellm
38
25
  Requires-Dist: litellm<=1.82.6,>=1.80.0; extra == 'litellm'
26
+ Provides-Extra: mcp
27
+ Requires-Dist: mcp>=1.26.0; extra == 'mcp'
28
+ Provides-Extra: tui
29
+ Requires-Dist: textual>=1.0.0; extra == 'tui'
39
30
  Description-Content-Type: text/markdown
40
31
 
41
32
  <p align="right">
@@ -135,6 +126,8 @@ Then run `ooo setup` inside a Claude Code session.
135
126
  pip install ouroboros-ai # base
136
127
  pip install ouroboros-ai[claude] # + Claude Code deps
137
128
  pip install ouroboros-ai[litellm] # + LiteLLM multi-provider
129
+ pip install ouroboros-ai[mcp] # + MCP server/client support
130
+ pip install ouroboros-ai[tui] # + Textual terminal UI
138
131
  pip install ouroboros-ai[all] # everything
139
132
  ouroboros setup # configure runtime
140
133
  ```
@@ -119,6 +119,8 @@ Claude Code 세션 안에서 `ooo setup` 실행.
119
119
  pip install ouroboros-ai # 기본
120
120
  pip install ouroboros-ai[claude] # + Claude Code 의존성
121
121
  pip install ouroboros-ai[litellm] # + LiteLLM 멀티 프로바이더
122
+ pip install ouroboros-ai[mcp] # + MCP 서버/클라이언트 지원
123
+ pip install ouroboros-ai[tui] # + Textual 터미널 UI
122
124
  pip install ouroboros-ai[all] # 전부
123
125
  ouroboros setup # 런타임 설정
124
126
  ```
@@ -95,6 +95,8 @@ Then run `ooo setup` inside a Claude Code session.
95
95
  pip install ouroboros-ai # base
96
96
  pip install ouroboros-ai[claude] # + Claude Code deps
97
97
  pip install ouroboros-ai[litellm] # + LiteLLM multi-provider
98
+ pip install ouroboros-ai[mcp] # + MCP server/client support
99
+ pip install ouroboros-ai[tui] # + Textual terminal UI
98
100
  pip install ouroboros-ai[all] # everything
99
101
  ouroboros setup # configure runtime
100
102
  ```
@@ -161,6 +161,10 @@ ouroboros init start --resume interview_20260116_120000
161
161
  ouroboros init
162
162
  ```
163
163
 
164
+ > **Interactive multiline input:** when `init` or other interview-style commands prompt for a
165
+ > longer response, press `Ctrl+D` (macOS/Linux) or `Ctrl+Z` then Enter (Windows) to submit the
166
+ > full response. Plain Enter inserts a newline.
167
+
164
168
  ### `init list`
165
169
 
166
170
  List all interview sessions.
@@ -80,8 +80,9 @@ No Python, pip, or API key configuration needed -- Claude Code handles the runti
80
80
  pip install ouroboros-ai # Base package (core engine)
81
81
  pip install ouroboros-ai[claude] # + Claude Code runtime deps (anthropic, claude-agent-sdk)
82
82
  pip install ouroboros-ai[litellm] # + LiteLLM multi-provider support (100+ models)
83
- pip install ouroboros-ai[dashboard] # + Streamlit analytics dashboard (streamlit, plotly, pandas)
84
- pip install ouroboros-ai[all] # Everything (claude + litellm + dashboard)
83
+ pip install ouroboros-ai[mcp] # + MCP server/client runtime support
84
+ pip install ouroboros-ai[tui] # + Textual terminal UI
85
+ pip install ouroboros-ai[all] # Everything (claude + litellm + mcp + tui)
85
86
 
86
87
  ouroboros --version # verify CLI
87
88
  ```
@@ -9,31 +9,20 @@ authors = [
9
9
  requires-python = ">=3.12"
10
10
  dependencies = [
11
11
  "aiosqlite>=0.20.0",
12
- "cachetools>=5.0.0",
13
- "filelock>=3.13.0",
14
- "httpx>=0.27.0",
15
- "mcp>=1.26.0",
16
- "prompt-toolkit>=3.0.0",
17
12
  "pydantic>=2.0.0",
18
- "python-dotenv>=1.2.1",
19
13
  "pyyaml>=6.0.0",
20
14
  "rich>=13.0.0",
21
15
  "sqlalchemy[asyncio]>=2.0.0",
22
- "stamina>=25.1.0",
23
16
  "structlog>=24.0.0",
24
- "textual>=1.0.0",
25
17
  "typer>=0.12.0",
26
18
  ]
27
19
 
28
20
  [project.optional-dependencies]
29
21
  claude = ["claude-agent-sdk>=0.1.0", "anthropic>=0.52.0"]
30
22
  litellm = ["litellm>=1.80.0,<=1.82.6"]
31
- all = ["ouroboros-ai[claude,litellm,dashboard]"]
32
- dashboard = [
33
- "streamlit>=1.40.0",
34
- "plotly>=5.24.0",
35
- "pandas>=2.2.0",
36
- ]
23
+ mcp = ["mcp>=1.26.0"]
24
+ tui = ["textual>=1.0.0"]
25
+ all = ["ouroboros-ai[claude,litellm,mcp,tui]"]
37
26
 
38
27
  [project.scripts]
39
28
  ouroboros = "ouroboros.cli.main:app"
@@ -65,7 +54,7 @@ packages = ["src/ouroboros"]
65
54
 
66
55
  [dependency-groups]
67
56
  dev = [
68
- "ouroboros-ai[claude,litellm]",
57
+ "ouroboros-ai[claude,litellm,mcp,tui]",
69
58
  "mypy>=1.19.1",
70
59
  "pre-commit>=4.5.1",
71
60
  "pytest>=9.0.2",
@@ -126,63 +126,69 @@ The Ouroboros MCP tools are often registered as **deferred tools** that must be
126
126
  ```
127
127
  Then **stop** — do NOT proceed to polling steps.
128
128
 
129
- 6. **Poll for progress** using `ouroboros_job_wait` (only if user chose to poll):
129
+ 6. **Poll for progress** using `ouroboros_ac_tree_hud` (only if user chose to poll):
130
130
 
131
- The polling behavior differs based on the user's interval choice:
131
+ The polling behavior differs based on the user's interval choice. In all cases,
132
+ the tool returns a compact markdown snapshot when state changed, or a one-line
133
+ delta ("No AC tree change since cursor <cursor>.") when nothing changed.
134
+ Keep the latest cursor from the tool's meta payload for the next call.
132
135
 
133
136
  **Option A: "Per level (Recommended)"**
134
137
  ```
135
138
  prev_completed = 0
136
139
 
137
140
  loop:
138
- Tool: ouroboros_job_wait
141
+ Tool: ouroboros_ac_tree_hud
139
142
  Arguments:
140
- job_id: <job_id from step 3>
143
+ session_id: <session_id from step 3>
141
144
  cursor: <cursor from previous response, starts at 0>
142
- timeout_seconds: 120 # 2-min long-poll
145
+ max_nodes: 50
143
146
 
144
- # Parse "AC Progress: X/Y" from the response text
145
- current_completed = <X from AC Progress>
146
- total = <Y from AC Progress>
147
- phase = <current phase from response>
147
+ # Parse completed/total from the snapshot or meta
148
+ current_completed = <completed count>
149
+ total = <total count>
148
150
 
149
151
  if current_completed > prev_completed:
150
- # A level completed — report to user
151
- print: [Level complete] AC: {current_completed}/{total} | Phase: {phase}
152
+ # A level completed — show the returned markdown snapshot as-is
153
+ print snapshot
152
154
  prev_completed = current_completed
153
155
  # else: continue silently (no output)
154
156
 
155
- # Continue until status is "completed", "failed", or "cancelled"
157
+ # Continue until meta.status is "completed", "failed", or "cancelled"
156
158
  ```
157
159
 
158
160
  **Option B: "Every 10 minutes"**
159
161
  ```
160
162
  loop:
161
- Tool: ouroboros_job_wait
163
+ Tool: ouroboros_ac_tree_hud
162
164
  Arguments:
163
- job_id: <job_id from step 3>
165
+ session_id: <session_id from step 3>
164
166
  cursor: <cursor from previous response, starts at 0>
165
- timeout_seconds: 600 # 10-min long-poll
167
+ max_nodes: 50
166
168
 
167
169
  # Report on every return regardless of change
168
- print: [10m check] AC: {completed}/{total} | Phase: {phase}
170
+ - If unchanged: echo the one-line delta only
171
+ - If changed: show the returned markdown snapshot as-is
172
+ sleep 600 # 10 min between polls
169
173
 
170
- # Continue until status is "completed", "failed", or "cancelled"
174
+ # Continue until meta.status is "completed", "failed", or "cancelled"
171
175
  ```
172
176
 
173
177
  **Option C: "Every 20 minutes"**
174
178
  ```
175
179
  loop:
176
- Tool: ouroboros_job_wait
180
+ Tool: ouroboros_ac_tree_hud
177
181
  Arguments:
178
- job_id: <job_id from step 3>
182
+ session_id: <session_id from step 3>
179
183
  cursor: <cursor from previous response, starts at 0>
180
- timeout_seconds: 1200 # 20-min long-poll
184
+ max_nodes: 50
181
185
 
182
186
  # Report on every return regardless of change
183
- print: [20m check] AC: {completed}/{total} | Phase: {phase}
187
+ - If unchanged: echo the one-line delta only
188
+ - If changed: show the returned markdown snapshot as-is
189
+ sleep 1200 # 20 min between polls
184
190
 
185
- # Continue until status is "completed", "failed", or "cancelled"
191
+ # Continue until meta.status is "completed", "failed", or "cancelled"
186
192
  ```
187
193
 
188
194
  7. **Fetch final result** with `ouroboros_job_result`:
@@ -234,9 +240,12 @@ Session ID: orch_x1y2z3
234
240
  Execution ID: exec_m1n2o3
235
241
 
236
242
  [Polling for progress...]
237
- Phase: Executing | AC Progress: 1/3
238
- Phase: Executing | AC Progress: 2/3
239
- Phase: Executing | AC Progress: 3/3
243
+ 🌳 AC Tree
244
+ ✅ Parse seed
245
+ ⏳ Implement workflow routing [Edit src/ouroboros/mcp/tools/ac_tree_hud_handler.py]
246
+ ⬜ Verify output
247
+
248
+ elapsed 45s | messages 12 | tools 4
240
249
 
241
250
  [Fetching final result...]
242
251
 
@@ -246,7 +246,7 @@ A backup will be created: CLAUDE.md.bak
246
246
  **If "Preview first", show:**
247
247
  ````markdown
248
248
  <!-- ooo:START -->
249
- <!-- ooo:VERSION:0.27.0 -->
249
+ <!-- ooo:VERSION:0.27.1 -->
250
250
  # Ouroboros — Specification-First AI Development
251
251
 
252
252
  > Before telling AI what to build, define what should be built.
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.27.1.dev10'
22
- __version_tuple__ = version_tuple = (0, 27, 1, 'dev10')
21
+ __version__ = version = '0.27.2.dev2'
22
+ __version_tuple__ = version_tuple = (0, 27, 2, 'dev2')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -58,7 +58,7 @@ def monitor_command(
58
58
  from ouroboros.tui import OuroborosTUI
59
59
  except ImportError as e:
60
60
  print_error(
61
- "TUI dependencies not installed. Install with: pip install 'ouroboros[tui]'",
61
+ "TUI dependencies not installed. Install with: pip install 'ouroboros-ai[tui]'",
62
62
  )
63
63
  raise typer.Exit(1) from e
64
64
 
@@ -0,0 +1,68 @@
1
+ """Prompt helpers for interactive CLI input."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ from contextlib import contextmanager
7
+ import sys
8
+ from typing import TextIO
9
+
10
+ from ouroboros.cli.formatters import console
11
+
12
+
13
+ async def multiline_prompt_async(prompt_text: str) -> str:
14
+ """Get multiline-safe input while allowing logs above the active prompt."""
15
+ console.print(
16
+ f"[bold green]{prompt_text}[/] [dim](Ctrl+D/Ctrl+Z then Enter: submit; "
17
+ "Enter inserts newline)[/]"
18
+ )
19
+ with _patched_stdio():
20
+ return await asyncio.to_thread(_read_multiline_from_stdin)
21
+
22
+
23
+ def _read_multiline_from_stdin() -> str:
24
+ lines: list[str] = []
25
+ prompt = "> "
26
+ continuation = " "
27
+
28
+ while True:
29
+ try:
30
+ line = input(prompt if not lines else continuation)
31
+ except EOFError:
32
+ print()
33
+ return "\n".join(lines)
34
+ lines.append(line)
35
+
36
+
37
+ @contextmanager
38
+ def _patched_stdio() -> TextIO:
39
+ stdout = sys.stdout
40
+ stderr = sys.stderr
41
+ sys.stdout = _StreamProxy(stdout)
42
+ sys.stderr = _StreamProxy(stderr)
43
+ try:
44
+ yield stdout
45
+ finally:
46
+ sys.stdout = stdout
47
+ sys.stderr = stderr
48
+
49
+
50
+ class _StreamProxy:
51
+ def __init__(self, target: TextIO) -> None:
52
+ self._target = target
53
+
54
+ def write(self, data: str) -> int:
55
+ return self._target.write(data)
56
+
57
+ def flush(self) -> None:
58
+ self._target.flush()
59
+
60
+ def isatty(self) -> bool:
61
+ return self._target.isatty()
62
+
63
+ @property
64
+ def encoding(self) -> str | None:
65
+ return getattr(self._target, "encoding", None)
66
+
67
+
68
+ __all__ = ["multiline_prompt_async"]