ouroboros-ai 0.25.3.dev91__tar.gz → 0.25.3.dev93__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 (548) hide show
  1. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/CONTRIBUTING.md +2 -2
  2. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/PKG-INFO +24 -1
  3. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/README.md +23 -0
  4. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/cli-reference.md +9 -5
  5. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/guides/seed-authoring.md +15 -11
  6. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/runtime-guides/claude-code.md +9 -9
  7. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/_version.py +2 -2
  8. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/bigbang/ambiguity.py +28 -10
  9. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/commands/init.py +51 -35
  10. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/commands/run.py +9 -1
  11. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evolution/loop.py +9 -1
  12. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/tools/execution_handlers.py +12 -1
  13. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/__init__.py +5 -4
  14. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/parallel_executor.py +164 -1
  15. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/runner.py +25 -72
  16. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/bigbang/test_ambiguity.py +62 -0
  17. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/test_init_runtime.py +6 -3
  18. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/tools/test_qa_integration.py +6 -1
  19. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_runner.py +119 -0
  20. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_artifact_collector.py +19 -0
  21. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/.claude/settings.json +0 -0
  22. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/.claude-plugin/.mcp.json +0 -0
  23. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/.claude-plugin/marketplace.json +0 -0
  24. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/.claude-plugin/plugin.json +0 -0
  25. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/.env.example +0 -0
  26. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/.github/workflows/dev-publish.yml +0 -0
  27. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/.github/workflows/lint.yml +0 -0
  28. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/.github/workflows/release.yml +0 -0
  29. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/.github/workflows/test.yml +0 -0
  30. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/.gitignore +0 -0
  31. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/.mcp.json +0 -0
  32. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/.ouroboros/mechanical.toml +0 -0
  33. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/.pre-commit-config.yaml +0 -0
  34. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/.python-version +0 -0
  35. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/CHANGELOG.md +0 -0
  36. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/CLAUDE.md +0 -0
  37. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/HANDOFF.md +0 -0
  38. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/LICENSE +0 -0
  39. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/README.ko.md +0 -0
  40. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/SECURITY.md +0 -0
  41. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/commands/cancel.md +0 -0
  42. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/commands/evaluate.md +0 -0
  43. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/commands/evolve.md +0 -0
  44. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/commands/help.md +0 -0
  45. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/commands/interview.md +0 -0
  46. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/commands/ralph.md +0 -0
  47. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/commands/run.md +0 -0
  48. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/commands/seed.md +0 -0
  49. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/commands/setup.md +0 -0
  50. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/commands/status.md +0 -0
  51. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/commands/tutorial.md +0 -0
  52. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/commands/unstuck.md +0 -0
  53. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/commands/welcome.md +0 -0
  54. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/crates/ouroboros-tui/.gitignore +0 -0
  55. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/crates/ouroboros-tui/Cargo.lock +0 -0
  56. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/crates/ouroboros-tui/Cargo.toml +0 -0
  57. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/crates/ouroboros-tui/README.md +0 -0
  58. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/crates/ouroboros-tui/src/db.rs +0 -0
  59. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/crates/ouroboros-tui/src/main.rs +0 -0
  60. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/crates/ouroboros-tui/src/mock.rs +0 -0
  61. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/crates/ouroboros-tui/src/state.rs +0 -0
  62. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/crates/ouroboros-tui/src/views/dashboard.rs +0 -0
  63. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/crates/ouroboros-tui/src/views/execution.rs +0 -0
  64. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/crates/ouroboros-tui/src/views/lineage.rs +0 -0
  65. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/crates/ouroboros-tui/src/views/logs.rs +0 -0
  66. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/crates/ouroboros-tui/src/views/mod.rs +0 -0
  67. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/crates/ouroboros-tui/src/views/session_selector.rs +0 -0
  68. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/README.md +0 -0
  69. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/api/README.md +0 -0
  70. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/api/core.md +0 -0
  71. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/api/mcp.md +0 -0
  72. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/architecture.md +0 -0
  73. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/config-reference.md +0 -0
  74. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/contributing/architecture-overview.md +0 -0
  75. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/contributing/findings-registry.md +0 -0
  76. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/contributing/key-patterns.md +0 -0
  77. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/contributing/testing-guide.md +0 -0
  78. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/examples/mcp-config.yaml +0 -0
  79. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/getting-started.md +0 -0
  80. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/guides/evaluation-pipeline.md +0 -0
  81. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/guides/evolution-loop.md +0 -0
  82. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/guides/issue-176-subagent-mcp-inheritance.md +0 -0
  83. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/guides/tui-usage.md +0 -0
  84. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/images/PLACEHOLDER_README.md +0 -0
  85. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/images/demo-evaluation.png +0 -0
  86. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/images/demo-interview.png +0 -0
  87. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/images/demo-seed.png +0 -0
  88. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/images/demo-tui-dashboard.png +0 -0
  89. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/images/ouroboros.png +0 -0
  90. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/platform-support.md +0 -0
  91. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/runtime-capability-matrix.md +0 -0
  92. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/docs/runtime-guides/codex.md +0 -0
  93. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/examples/coordinator_test_seed.yaml +0 -0
  94. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/examples/dummy_seed.yaml +0 -0
  95. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/examples/parallel_subac_test_seed.yaml +0 -0
  96. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/examples/subac_test_seed.yaml +0 -0
  97. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/examples/task_manager/README.md +0 -0
  98. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/examples/task_manager/__init__.py +0 -0
  99. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/examples/task_manager/__main__.py +0 -0
  100. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/examples/task_manager/cli.py +0 -0
  101. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/examples/task_manager/models.py +0 -0
  102. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/examples/task_manager/storage.py +0 -0
  103. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/examples/test_display.py +0 -0
  104. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/hooks/hooks.json +0 -0
  105. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/llms-full.txt +0 -0
  106. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/llms.txt +0 -0
  107. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/project-context.md +0 -0
  108. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/pyproject.toml +0 -0
  109. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/scripts/drift-monitor.py +0 -0
  110. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/scripts/install.sh +0 -0
  111. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/scripts/keyword-detector.py +0 -0
  112. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/scripts/mcp-serve.sh +0 -0
  113. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/scripts/ralph-rewind.py +0 -0
  114. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/scripts/ralph.py +0 -0
  115. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/scripts/ralph.sh +0 -0
  116. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/scripts/session-start.py +0 -0
  117. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/scripts/sync-plugin-version.py +0 -0
  118. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/scripts/version-check.py +0 -0
  119. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/brownfield/SKILL.md +0 -0
  120. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/cancel/SKILL.md +0 -0
  121. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/evaluate/SKILL.md +0 -0
  122. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/evolve/SKILL.md +0 -0
  123. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/help/SKILL.md +0 -0
  124. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/interview/SKILL.md +0 -0
  125. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/pm/SKILL.md +0 -0
  126. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/qa/SKILL.md +0 -0
  127. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/ralph/SKILL.md +0 -0
  128. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/run/SKILL.md +0 -0
  129. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/seed/SKILL.md +0 -0
  130. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/setup/SKILL.md +0 -0
  131. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/status/SKILL.md +0 -0
  132. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/tutorial/SKILL.md +0 -0
  133. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/unstuck/SKILL.md +0 -0
  134. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/update/SKILL.md +0 -0
  135. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/skills/welcome/SKILL.md +0 -0
  136. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/__init__.py +0 -0
  137. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/__main__.py +0 -0
  138. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/__init__.py +0 -0
  139. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/advocate.md +0 -0
  140. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/analysis-agent.md +0 -0
  141. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/architect.md +0 -0
  142. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/breadth-keeper.md +0 -0
  143. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/code-executor.md +0 -0
  144. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/codebase-explorer.md +0 -0
  145. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/consensus-reviewer.md +0 -0
  146. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/contrarian.md +0 -0
  147. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/evaluator.md +0 -0
  148. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/hacker.md +0 -0
  149. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/judge.md +0 -0
  150. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/loader.py +0 -0
  151. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/ontologist.md +0 -0
  152. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/ontology-analyst.md +0 -0
  153. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/qa-judge.md +0 -0
  154. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/research-agent.md +0 -0
  155. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/researcher.md +0 -0
  156. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/seed-architect.md +0 -0
  157. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/seed-closer.md +0 -0
  158. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/semantic-evaluator.md +0 -0
  159. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/simplifier.md +0 -0
  160. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/agents/socratic-interviewer.md +0 -0
  161. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/bigbang/__init__.py +0 -0
  162. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/bigbang/brownfield.py +0 -0
  163. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/bigbang/explore.py +0 -0
  164. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/bigbang/interview.py +0 -0
  165. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/bigbang/pm_document.py +0 -0
  166. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/bigbang/pm_interview.py +0 -0
  167. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/bigbang/pm_seed.py +0 -0
  168. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/bigbang/question_classifier.py +0 -0
  169. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/bigbang/seed_generator.py +0 -0
  170. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/__init__.py +0 -0
  171. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/commands/__init__.py +0 -0
  172. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/commands/cancel.py +0 -0
  173. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/commands/config.py +0 -0
  174. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/commands/mcp.py +0 -0
  175. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/commands/pm.py +0 -0
  176. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/commands/setup.py +0 -0
  177. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/commands/status.py +0 -0
  178. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/commands/tui.py +0 -0
  179. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/formatters/__init__.py +0 -0
  180. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/formatters/panels.py +0 -0
  181. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/formatters/progress.py +0 -0
  182. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/formatters/tables.py +0 -0
  183. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/formatters/workflow_display.py +0 -0
  184. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/cli/main.py +0 -0
  185. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/codex/__init__.py +0 -0
  186. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/codex/artifacts.py +0 -0
  187. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/codex/ouroboros.md +0 -0
  188. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/codex_permissions.py +0 -0
  189. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/config/__init__.py +0 -0
  190. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/config/loader.py +0 -0
  191. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/config/models.py +0 -0
  192. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/core/__init__.py +0 -0
  193. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/core/ac_tree.py +0 -0
  194. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/core/context.py +0 -0
  195. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/core/errors.py +0 -0
  196. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/core/file_lock.py +0 -0
  197. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/core/git_workflow.py +0 -0
  198. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/core/lineage.py +0 -0
  199. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/core/ontology_aspect.py +0 -0
  200. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/core/ontology_questions.py +0 -0
  201. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/core/security.py +0 -0
  202. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/core/seed.py +0 -0
  203. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/core/text.py +0 -0
  204. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/core/types.py +0 -0
  205. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evaluation/__init__.py +0 -0
  206. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evaluation/artifact_collector.py +0 -0
  207. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evaluation/consensus.py +0 -0
  208. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evaluation/json_utils.py +0 -0
  209. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evaluation/languages.py +0 -0
  210. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evaluation/mechanical.py +0 -0
  211. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evaluation/models.py +0 -0
  212. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evaluation/pipeline.py +0 -0
  213. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evaluation/semantic.py +0 -0
  214. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evaluation/trigger.py +0 -0
  215. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/events/__init__.py +0 -0
  216. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/events/base.py +0 -0
  217. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/events/decomposition.py +0 -0
  218. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/events/evaluation.py +0 -0
  219. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/events/interview.py +0 -0
  220. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/events/lineage.py +0 -0
  221. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/events/ontology.py +0 -0
  222. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evolution/__init__.py +0 -0
  223. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evolution/convergence.py +0 -0
  224. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evolution/projector.py +0 -0
  225. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evolution/reflect.py +0 -0
  226. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evolution/regression.py +0 -0
  227. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/evolution/wonder.py +0 -0
  228. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/execution/__init__.py +0 -0
  229. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/execution/atomicity.py +0 -0
  230. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/execution/decomposition.py +0 -0
  231. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/execution/double_diamond.py +0 -0
  232. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/execution/subagent.py +0 -0
  233. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/__init__.py +0 -0
  234. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/client/__init__.py +0 -0
  235. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/client/adapter.py +0 -0
  236. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/client/manager.py +0 -0
  237. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/client/protocol.py +0 -0
  238. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/errors.py +0 -0
  239. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/job_manager.py +0 -0
  240. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/resources/__init__.py +0 -0
  241. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/resources/handlers.py +0 -0
  242. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/server/__init__.py +0 -0
  243. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/server/adapter.py +0 -0
  244. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/server/protocol.py +0 -0
  245. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/server/security.py +0 -0
  246. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/tools/__init__.py +0 -0
  247. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/tools/authoring_handlers.py +0 -0
  248. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/tools/brownfield_handler.py +0 -0
  249. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/tools/dashboard.py +0 -0
  250. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/tools/definitions.py +0 -0
  251. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/tools/evaluation_handlers.py +0 -0
  252. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/tools/evolution_handlers.py +0 -0
  253. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/tools/job_handlers.py +0 -0
  254. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/tools/pm_handler.py +0 -0
  255. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/tools/qa.py +0 -0
  256. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/tools/query_handlers.py +0 -0
  257. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/tools/registry.py +0 -0
  258. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/mcp/types.py +0 -0
  259. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/observability/__init__.py +0 -0
  260. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/observability/drift.py +0 -0
  261. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/observability/logging.py +0 -0
  262. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/observability/retrospective.py +0 -0
  263. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/adapter.py +0 -0
  264. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/codex_cli_runtime.py +0 -0
  265. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/command_dispatcher.py +0 -0
  266. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/coordinator.py +0 -0
  267. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/dependency_analyzer.py +0 -0
  268. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/events.py +0 -0
  269. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/execution_runtime_scope.py +0 -0
  270. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/execution_strategy.py +0 -0
  271. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/heartbeat.py +0 -0
  272. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/level_context.py +0 -0
  273. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/mcp_config.py +0 -0
  274. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/mcp_tools.py +0 -0
  275. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/parallel_executor_models.py +0 -0
  276. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/runtime_factory.py +0 -0
  277. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/runtime_message_projection.py +0 -0
  278. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/session.py +0 -0
  279. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/orchestrator/workflow_state.py +0 -0
  280. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/persistence/__init__.py +0 -0
  281. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/persistence/brownfield.py +0 -0
  282. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/persistence/checkpoint.py +0 -0
  283. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/persistence/event_store.py +0 -0
  284. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/persistence/migrations/__init__.py +0 -0
  285. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/persistence/migrations/runner.py +0 -0
  286. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
  287. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/persistence/migrations/scripts/002_brownfield.sql +0 -0
  288. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/persistence/schema.py +0 -0
  289. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/persistence/uow.py +0 -0
  290. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/plugin/__init__.py +0 -0
  291. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/plugin/agents/__init__.py +0 -0
  292. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/plugin/agents/pool.py +0 -0
  293. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/plugin/agents/registry.py +0 -0
  294. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/plugin/orchestration/__init__.py +0 -0
  295. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/plugin/orchestration/router.py +0 -0
  296. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/plugin/orchestration/scheduler.py +0 -0
  297. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/plugin/skills/__init__.py +0 -0
  298. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/plugin/skills/docs.py +0 -0
  299. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/plugin/skills/executor.py +0 -0
  300. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/plugin/skills/keywords.py +0 -0
  301. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/plugin/skills/registry.py +0 -0
  302. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/pm/__init__.py +0 -0
  303. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/pm/renderer.py +0 -0
  304. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/providers/__init__.py +0 -0
  305. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/providers/anthropic_adapter.py +0 -0
  306. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/providers/base.py +0 -0
  307. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/providers/claude_code_adapter.py +0 -0
  308. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/providers/codex_cli_adapter.py +0 -0
  309. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/providers/codex_cli_stream.py +0 -0
  310. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/providers/factory.py +0 -0
  311. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/providers/litellm_adapter.py +0 -0
  312. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/py.typed +0 -0
  313. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/resilience/__init__.py +0 -0
  314. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/resilience/lateral.py +0 -0
  315. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/resilience/stagnation.py +0 -0
  316. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/routing/__init__.py +0 -0
  317. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/routing/complexity.py +0 -0
  318. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/routing/downgrade.py +0 -0
  319. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/routing/escalation.py +0 -0
  320. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/routing/router.py +0 -0
  321. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/routing/tiers.py +0 -0
  322. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/secondary/__init__.py +0 -0
  323. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/secondary/scheduler.py +0 -0
  324. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/secondary/todo_registry.py +0 -0
  325. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/strategies/__init__.py +0 -0
  326. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/strategies/devil_advocate.py +0 -0
  327. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/__init__.py +0 -0
  328. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/app.py +0 -0
  329. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/components/__init__.py +0 -0
  330. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/components/agents_panel.py +0 -0
  331. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/components/event_log.py +0 -0
  332. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/components/progress.py +0 -0
  333. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/components/token_tracker.py +0 -0
  334. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/events.py +0 -0
  335. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/screens/__init__.py +0 -0
  336. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/screens/confirm_rewind.py +0 -0
  337. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/screens/dashboard.py +0 -0
  338. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/screens/dashboard_v2.py +0 -0
  339. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/screens/dashboard_v3.py +0 -0
  340. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/screens/debug.py +0 -0
  341. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/screens/execution.py +0 -0
  342. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/screens/hud_dashboard.py +0 -0
  343. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/screens/lineage_detail.py +0 -0
  344. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/screens/lineage_selector.py +0 -0
  345. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/screens/logs.py +0 -0
  346. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/screens/session_selector.py +0 -0
  347. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/widgets/__init__.py +0 -0
  348. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/widgets/ac_progress.py +0 -0
  349. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/widgets/ac_tree.py +0 -0
  350. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/widgets/agent_activity.py +0 -0
  351. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/widgets/cost_tracker.py +0 -0
  352. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/widgets/drift_meter.py +0 -0
  353. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/widgets/lineage_tree.py +0 -0
  354. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/widgets/parallel_graph.py +0 -0
  355. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/tui/widgets/phase_progress.py +0 -0
  356. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/verification/__init__.py +0 -0
  357. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/verification/extractor.py +0 -0
  358. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/verification/models.py +0 -0
  359. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/src/ouroboros/verification/verifier.py +0 -0
  360. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/__init__.py +0 -0
  361. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/conftest.py +0 -0
  362. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/e2e/__init__.py +0 -0
  363. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/e2e/conftest.py +0 -0
  364. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/e2e/test_cli_commands.py +0 -0
  365. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/e2e/test_full_workflow.py +0 -0
  366. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/e2e/test_session_persistence.py +0 -0
  367. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/fixtures/test_atomicity_seed.yml +0 -0
  368. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/integration/__init__.py +0 -0
  369. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/integration/conftest.py +0 -0
  370. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/integration/mcp/__init__.py +0 -0
  371. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/integration/mcp/conftest.py +0 -0
  372. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/integration/mcp/test_client_adapter.py +0 -0
  373. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/integration/mcp/test_client_manager.py +0 -0
  374. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/integration/mcp/test_server_adapter.py +0 -0
  375. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/integration/plugin/test_orchestration.py +0 -0
  376. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/integration/test_codex_cli_passthrough_smoke.py +0 -0
  377. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/integration/test_codex_skill_fallback.py +0 -0
  378. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/integration/test_codex_skill_smoke.py +0 -0
  379. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/integration/test_entry_point.py +0 -0
  380. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/__init__.py +0 -0
  381. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/agents/__init__.py +0 -0
  382. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/agents/test_loader.py +0 -0
  383. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/bigbang/__init__.py +0 -0
  384. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/bigbang/test_brownfield.py +0 -0
  385. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/bigbang/test_classifier_context.py +0 -0
  386. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/bigbang/test_decide_later_items.py +0 -0
  387. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/bigbang/test_explore.py +0 -0
  388. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/bigbang/test_interview.py +0 -0
  389. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/bigbang/test_pm_document_generator.py +0 -0
  390. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/bigbang/test_pm_document_writer.py +0 -0
  391. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/bigbang/test_pm_interview.py +0 -0
  392. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/bigbang/test_pm_interview_brownfield_db.py +0 -0
  393. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/bigbang/test_pm_seed_ac12.py +0 -0
  394. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/bigbang/test_pm_seed_save.py +0 -0
  395. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/bigbang/test_question_classifier.py +0 -0
  396. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/bigbang/test_seed_generator.py +0 -0
  397. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/__init__.py +0 -0
  398. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/formatters/__init__.py +0 -0
  399. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/formatters/test_console.py +0 -0
  400. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/formatters/test_panels.py +0 -0
  401. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/formatters/test_progress.py +0 -0
  402. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/formatters/test_tables.py +0 -0
  403. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/formatters/test_workflow_display.py +0 -0
  404. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/test_cancel.py +0 -0
  405. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/test_init_pm_seed_detection.py +0 -0
  406. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/test_main.py +0 -0
  407. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/test_mcp_nested_guard.py +0 -0
  408. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/test_mcp_startup_cleanup.py +0 -0
  409. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/test_pm_brownfield.py +0 -0
  410. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/test_pm_overwrite.py +0 -0
  411. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/test_pm_select_repos.py +0 -0
  412. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/cli/test_setup.py +0 -0
  413. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/config/__init__.py +0 -0
  414. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/config/test_loader.py +0 -0
  415. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/config/test_models.py +0 -0
  416. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/core/__init__.py +0 -0
  417. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/core/test_ac_tree.py +0 -0
  418. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/core/test_context.py +0 -0
  419. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/core/test_errors.py +0 -0
  420. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/core/test_git_workflow.py +0 -0
  421. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/core/test_lineage.py +0 -0
  422. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/core/test_ontology_aspect.py +0 -0
  423. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/core/test_ontology_questions.py +0 -0
  424. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/core/test_security.py +0 -0
  425. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/core/test_seed.py +0 -0
  426. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/core/test_types.py +0 -0
  427. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/evaluation/__init__.py +0 -0
  428. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/evaluation/test_consensus.py +0 -0
  429. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/evaluation/test_json_utils.py +0 -0
  430. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/evaluation/test_languages.py +0 -0
  431. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/evaluation/test_mechanical.py +0 -0
  432. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/evaluation/test_models.py +0 -0
  433. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/evaluation/test_semantic.py +0 -0
  434. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/evaluation/test_trigger.py +0 -0
  435. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/events/__init__.py +0 -0
  436. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/events/test_base.py +0 -0
  437. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/events/test_decomposition_events.py +0 -0
  438. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/evolution/test_wonder_scope.py +0 -0
  439. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/execution/__init__.py +0 -0
  440. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/execution/test_atomicity.py +0 -0
  441. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/execution/test_decomposition.py +0 -0
  442. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/execution/test_double_diamond.py +0 -0
  443. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/execution/test_subagent_isolation.py +0 -0
  444. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/__init__.py +0 -0
  445. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/client/__init__.py +0 -0
  446. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/client/test_adapter.py +0 -0
  447. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/client/test_manager.py +0 -0
  448. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/conftest.py +0 -0
  449. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/server/__init__.py +0 -0
  450. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/server/test_adapter.py +0 -0
  451. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/server/test_security.py +0 -0
  452. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/test_errors.py +0 -0
  453. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/test_job_manager.py +0 -0
  454. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/test_types.py +0 -0
  455. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/tools/__init__.py +0 -0
  456. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/tools/conftest.py +0 -0
  457. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/tools/test_brownfield_handler.py +0 -0
  458. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/tools/test_definitions.py +0 -0
  459. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/tools/test_pm_handler.py +0 -0
  460. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/tools/test_pm_handler_generate.py +0 -0
  461. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/tools/test_pm_handler_pending_reframe.py +0 -0
  462. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/mcp/tools/test_registry.py +0 -0
  463. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/observability/__init__.py +0 -0
  464. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/observability/test_drift.py +0 -0
  465. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/observability/test_logging.py +0 -0
  466. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/observability/test_retrospective.py +0 -0
  467. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/__init__.py +0 -0
  468. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_adapter.py +0 -0
  469. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_codex_cli_runtime.py +0 -0
  470. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_codex_recursion_guard.py +0 -0
  471. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_command_dispatcher.py +0 -0
  472. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_coordinator.py +0 -0
  473. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_dependency_analyzer.py +0 -0
  474. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_events.py +0 -0
  475. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_execution_runtime_scope.py +0 -0
  476. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_execution_strategy.py +0 -0
  477. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_inflight_cancellation.py +0 -0
  478. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_level_context.py +0 -0
  479. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_mcp_config.py +0 -0
  480. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_mcp_tools.py +0 -0
  481. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_parallel_executor.py +0 -0
  482. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_parallel_executor_retry_resume.py +0 -0
  483. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_runner_cancellation.py +0 -0
  484. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_runtime_factory.py +0 -0
  485. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_runtime_message_projection.py +0 -0
  486. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_session.py +0 -0
  487. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/orchestrator/test_workflow_state.py +0 -0
  488. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/persistence/__init__.py +0 -0
  489. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/persistence/test_brownfield_store.py +0 -0
  490. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/persistence/test_checkpoint.py +0 -0
  491. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/persistence/test_event_store.py +0 -0
  492. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/persistence/test_schema.py +0 -0
  493. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/persistence/test_uow.py +0 -0
  494. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/plugin/__init__.py +0 -0
  495. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/plugin/agents/__init__.py +0 -0
  496. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/plugin/agents/test_registry.py +0 -0
  497. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/plugin/orchestration/__init__.py +0 -0
  498. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/plugin/orchestration/test_model_router.py +0 -0
  499. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/plugin/skills/__init__.py +0 -0
  500. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/plugin/skills/test_keywords.py +0 -0
  501. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/plugin/skills/test_registry.py +0 -0
  502. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/pm/__init__.py +0 -0
  503. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/pm/test_renderer.py +0 -0
  504. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/providers/__init__.py +0 -0
  505. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/providers/test_base.py +0 -0
  506. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/providers/test_claude_code_adapter.py +0 -0
  507. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/providers/test_codex_cli_adapter.py +0 -0
  508. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/providers/test_factory.py +0 -0
  509. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/providers/test_litellm_adapter.py +0 -0
  510. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/resilience/__init__.py +0 -0
  511. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/resilience/test_lateral.py +0 -0
  512. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/resilience/test_stagnation.py +0 -0
  513. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/routing/__init__.py +0 -0
  514. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/routing/test_complexity.py +0 -0
  515. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/routing/test_downgrade.py +0 -0
  516. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/routing/test_escalation.py +0 -0
  517. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/routing/test_router.py +0 -0
  518. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/routing/test_tiers.py +0 -0
  519. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/scripts/test_keyword_detector.py +0 -0
  520. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/scripts/test_version_check.py +0 -0
  521. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/secondary/__init__.py +0 -0
  522. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/secondary/test_scheduler.py +0 -0
  523. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/secondary/test_todo_registry.py +0 -0
  524. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_codex_artifacts.py +0 -0
  525. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_convergence.py +0 -0
  526. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_dashboard.py +0 -0
  527. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_dependencies_configured.py +0 -0
  528. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_evolve_rewind.py +0 -0
  529. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_evolve_step.py +0 -0
  530. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_main_entry_point.py +0 -0
  531. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_module_structure.py +0 -0
  532. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_project_initialization.py +0 -0
  533. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_projector_rewind.py +0 -0
  534. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_ralph_parser.py +0 -0
  535. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_ralph_rewind.py +0 -0
  536. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_regression.py +0 -0
  537. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_tooling_configuration.py +0 -0
  538. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/test_verification.py +0 -0
  539. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/tui/__init__.py +0 -0
  540. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/tui/test_app.py +0 -0
  541. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/tui/test_cancelled_display.py +0 -0
  542. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/tui/test_events.py +0 -0
  543. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/tui/test_lineage_viewer.py +0 -0
  544. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/tui/test_screens.py +0 -0
  545. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/tui/test_session_selector_replay.py +0 -0
  546. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tests/unit/tui/test_widgets.py +0 -0
  547. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/tools/sync_github_project.py +0 -0
  548. {ouroboros_ai-0.25.3.dev91 → ouroboros_ai-0.25.3.dev93}/uv.lock +0 -0
@@ -452,7 +452,7 @@ Any change to a file under `src/ouroboros/cli/commands/` requires reviewing and
452
452
 
453
453
  #### `init.py` — `ouroboros init` / `ouroboros init start`
454
454
 
455
- Flags covered: `--resume`, `--state-dir`, `--runtime`, `--llm-backend`, `--debug` (`--orchestrator` is deprecated/hidden)
455
+ Flags covered: `--resume`, `--state-dir`, `--orchestrator`, `--runtime`, `--llm-backend`, `--debug`
456
456
 
457
457
  **Must update:**
458
458
  - `docs/cli-reference.md` — `init` command section (flags, examples)
@@ -461,7 +461,7 @@ Flags covered: `--resume`, `--state-dir`, `--runtime`, `--llm-backend`, `--debug
461
461
  - `docs/getting-started.md` — onboarding flow
462
462
 
463
463
  **Also check:**
464
- - `docs/runtime-guides/claude-code.md` and `docs/runtime-guides/codex.md` — if `--runtime` or `--llm-backend` behavior changes
464
+ - `docs/runtime-guides/claude-code.md` and `docs/runtime-guides/codex.md` — if `--orchestrator` or `--runtime` behavior changes
465
465
 
466
466
  #### `run.py` — `ouroboros run workflow`
467
467
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ouroboros-ai
3
- Version: 0.25.3.dev91
3
+ Version: 0.25.3.dev93
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
@@ -105,6 +105,11 @@ Description-Content-Type: text/markdown
105
105
 
106
106
  Ouroboros sits between you and your AI runtime (Claude Code, Codex CLI, or others). It replaces ad-hoc prompting with a structured specification-first workflow: interview, crystallize, execute, evaluate, evolve.
107
107
 
108
+ <!-- TODO: Replace with demo GIF or asciicast -->
109
+ <p align="center">
110
+ <em>[Demo: 2-minute walkthrough from vague idea to verified code -- coming soon]</em>
111
+ </p>
112
+
108
113
  ---
109
114
 
110
115
  ## Why Ouroboros?
@@ -170,6 +175,24 @@ After one loop of the Ouroboros cycle, a vague idea becomes a verified codebase:
170
175
  | **Seed** | No spec | Immutable specification with acceptance criteria, ontology, constraints |
171
176
  | **Evaluate** | Manual review | 3-stage gate: Mechanical (free) -> Semantic -> Multi-Model Consensus |
172
177
 
178
+ <!-- Screenshots: replace placeholder paths with actual images after recording -->
179
+ <p align="center">
180
+ <strong>Interview Transcript</strong><br/>
181
+ <img src="./docs/images/demo-interview.png" width="720" alt="Ouroboros Socratic interview exposing hidden assumptions from a vague prompt"/><br/>
182
+ <sub>The Socratic Interviewer turns "build me a task CLI" into 12 clarified decisions.</sub>
183
+ </p>
184
+
185
+ <p align="center">
186
+ <strong>Seed Artifact</strong><br/>
187
+ <img src="./docs/images/demo-seed.png" width="720" alt="Ouroboros seed specification with acceptance criteria, ontology, and constraints"/><br/>
188
+ <sub>Immutable seed spec locks intent -- acceptance criteria, ontology, and constraints -- before a line of code is written.</sub>
189
+ </p>
190
+
191
+ <p align="center">
192
+ <strong>Evaluation Verdict</strong><br/>
193
+ <img src="./docs/images/demo-evaluation.png" width="720" alt="Ouroboros 3-stage evaluation gate showing mechanical, semantic, and consensus results"/><br/>
194
+ <sub>3-stage verification gate: Mechanical (free) -> Semantic -> Multi-Model Consensus.</sub>
195
+ </p>
173
196
 
174
197
  <details>
175
198
  <summary><strong>What just happened?</strong></summary>
@@ -65,6 +65,11 @@
65
65
 
66
66
  Ouroboros sits between you and your AI runtime (Claude Code, Codex CLI, or others). It replaces ad-hoc prompting with a structured specification-first workflow: interview, crystallize, execute, evaluate, evolve.
67
67
 
68
+ <!-- TODO: Replace with demo GIF or asciicast -->
69
+ <p align="center">
70
+ <em>[Demo: 2-minute walkthrough from vague idea to verified code -- coming soon]</em>
71
+ </p>
72
+
68
73
  ---
69
74
 
70
75
  ## Why Ouroboros?
@@ -130,6 +135,24 @@ After one loop of the Ouroboros cycle, a vague idea becomes a verified codebase:
130
135
  | **Seed** | No spec | Immutable specification with acceptance criteria, ontology, constraints |
131
136
  | **Evaluate** | Manual review | 3-stage gate: Mechanical (free) -> Semantic -> Multi-Model Consensus |
132
137
 
138
+ <!-- Screenshots: replace placeholder paths with actual images after recording -->
139
+ <p align="center">
140
+ <strong>Interview Transcript</strong><br/>
141
+ <img src="./docs/images/demo-interview.png" width="720" alt="Ouroboros Socratic interview exposing hidden assumptions from a vague prompt"/><br/>
142
+ <sub>The Socratic Interviewer turns "build me a task CLI" into 12 clarified decisions.</sub>
143
+ </p>
144
+
145
+ <p align="center">
146
+ <strong>Seed Artifact</strong><br/>
147
+ <img src="./docs/images/demo-seed.png" width="720" alt="Ouroboros seed specification with acceptance criteria, ontology, and constraints"/><br/>
148
+ <sub>Immutable seed spec locks intent -- acceptance criteria, ontology, and constraints -- before a line of code is written.</sub>
149
+ </p>
150
+
151
+ <p align="center">
152
+ <strong>Evaluation Verdict</strong><br/>
153
+ <img src="./docs/images/demo-evaluation.png" width="720" alt="Ouroboros 3-stage evaluation gate showing mechanical, semantic, and consensus results"/><br/>
154
+ <sub>3-stage verification gate: Mechanical (free) -> Semantic -> Multi-Model Consensus.</sub>
155
+ </p>
133
156
 
134
157
  <details>
135
158
  <summary><strong>What just happened?</strong></summary>
@@ -130,8 +130,9 @@ ouroboros init [start] [OPTIONS] [CONTEXT]
130
130
  |--------|-------------|
131
131
  | `-r, --resume TEXT` | Resume an existing interview by ID |
132
132
  | `--state-dir DIRECTORY` | Custom directory for interview state files |
133
- | `--runtime TEXT` | Agent runtime backend for the workflow execution step after seed generation (`claude`, `codex`). |
134
- | `--llm-backend TEXT` | LLM backend override for interview, ambiguity scoring, and seed generation (`claude_code`, `litellm`, `codex`). Resolved from config (`llm.backend`) by default. |
133
+ | `-o, --orchestrator` | Use Claude Code for the interview/seed flow; combine with `--runtime` to choose the workflow handoff backend |
134
+ | `--runtime TEXT` | Agent runtime backend for the workflow execution step after seed generation. Shipped values: `claude`, `codex`. `opencode` appears in the CLI enum but is out of scope. Custom adapters registered in `runtime_factory.py` are also accepted. |
135
+ | `--llm-backend TEXT` | LLM backend for interview, ambiguity scoring, and seed generation (`claude_code`, `litellm`, `codex`). `opencode` appears in the CLI enum but is out of scope |
135
136
  | `-d, --debug` | Show verbose logs including debug messages |
136
137
 
137
138
  **Examples:**
@@ -143,10 +144,13 @@ ouroboros init "I want to build a task management CLI tool"
143
144
  # Explicit subcommand (equivalent)
144
145
  ouroboros init start "I want to build a task management CLI tool"
145
146
 
147
+ # Start with Claude Code (no API key needed)
148
+ ouroboros init --orchestrator "Build a REST API"
149
+
146
150
  # Specify runtime backend for the workflow step
147
- ouroboros init --runtime codex "Build a REST API"
151
+ ouroboros init --orchestrator --runtime codex "Build a REST API"
148
152
 
149
- # Override LLM backend for interview and seed generation
153
+ # Use Codex as the LLM backend for interview and seed generation
150
154
  ouroboros init --llm-backend codex "Build a REST API"
151
155
 
152
156
  # Resume an interrupted interview
@@ -199,7 +203,7 @@ ouroboros run [workflow] [OPTIONS] SEED_FILE
199
203
 
200
204
  | Option | Description |
201
205
  |--------|-------------|
202
- | `-o/-O, --orchestrator/--no-orchestrator` | Orchestrator mode (default: enabled). `--no-orchestrator` falls back to legacy placeholder mode. |
206
+ | `-o/-O, --orchestrator/--no-orchestrator` | Use the agent-runtime orchestrator for execution (default: enabled) |
203
207
  | `--runtime TEXT` | Agent runtime backend override (`claude`, `codex`). Uses configured default if omitted. (`opencode` is in the CLI enum but out of scope) |
204
208
  | `-r, --resume TEXT` | Resume a previous orchestrator session by ID |
205
209
  | `--mcp-config PATH` | Path to MCP client configuration YAML file |
@@ -335,7 +335,7 @@ acceptance_criteria:
335
335
 
336
336
  ## Validation
337
337
 
338
- > **Note — `--dry-run` is not functional in the current implementation.** In the default orchestrator mode, the `--dry-run` flag is silently ignored and execution proceeds normally. In legacy non-orchestrator mode (`--no-orchestrator`), `--dry-run` prints a placeholder message without performing any YAML or schema checks. This limitation is tracked for a future release.
338
+ > **Note — `--dry-run` is not functional in the current implementation.** In the default orchestrator mode (`--orchestrator` is `True` by default), the `--dry-run` flag is silently ignored and execution proceeds normally. In non-orchestrator mode (`--no-orchestrator`), `--dry-run` prints a placeholder message without performing any YAML or schema checks. This limitation is tracked for a future release.
339
339
 
340
340
  **Current approach to pre-run validation:** Run the workflow normally. Schema validation errors surface *before* any agent sessions start, so an invalid seed will print an error and exit without executing:
341
341
 
@@ -394,10 +394,10 @@ export ANTHROPIC_API_KEY="sk-ant-..."
394
394
  # or
395
395
  export OPENAI_API_KEY="sk-..."
396
396
 
397
- # To avoid needing an API key, use Claude Code or Codex CLI (configured in llm.backend):
397
+ # To avoid needing an API key, use Claude Code (Max Plan):
398
398
  ooo interview "Build a REST API"
399
399
  # or standalone:
400
- ouroboros init start "Build a REST API"
400
+ ouroboros init start --orchestrator "Build a REST API"
401
401
  ```
402
402
 
403
403
  #### LLM rate-limit or transient API error during questioning
@@ -708,18 +708,22 @@ ouroboros run minimal_seed.yaml
708
708
 
709
709
  ---
710
710
 
711
- ### CLI Flag Notes
711
+ ### CLI Flag Warnings
712
712
 
713
- #### `--orchestrator` (init command)
713
+ #### `--runtime` without `--orchestrator` (init command)
714
714
 
715
- The `--orchestrator` flag on `ouroboros init` is **deprecated** and no longer needed. The LLM backend is resolved from config (`llm.backend`) automatically. The flag is accepted for backward compatibility but has no effect.
715
+ **Symptom:**
716
+ ```
717
+ Warning: --runtime only affects the workflow execution step when --orchestrator is enabled.
718
+ ```
716
719
 
717
- ```bash
718
- # Just use:
719
- ouroboros init start "Build a REST API"
720
+ **Cause:** `--runtime` (e.g., `--runtime codex`) was passed to `ouroboros init` without `--orchestrator`. The `--runtime` flag only controls which agent runtime backend is used when the generated seed is immediately handed off to workflow execution. Without `--orchestrator`, the workflow handoff step uses a placeholder.
721
+
722
+ **Behavior:** This is a **warning only** — the interview and seed generation proceed normally. The runtime flag has no effect.
720
723
 
721
- # Override backend explicitly if needed:
722
- ouroboros init start --llm-backend codex "Build a REST API"
724
+ **Fix:** Add `--orchestrator` if you want to use the specified runtime backend for the post-generation workflow step:
725
+ ```bash
726
+ ouroboros init start --orchestrator --runtime codex "Build a REST API"
723
727
  ```
724
728
 
725
729
  ---
@@ -32,7 +32,7 @@ orchestrator:
32
32
  runtime_backend: claude
33
33
  ```
34
34
 
35
- When `orchestrator.runtime_backend` is set to `claude`, Claude Code is used as the runtime backend.
35
+ When using the `--orchestrator` CLI flag, Claude Code is the default runtime backend.
36
36
 
37
37
  ## How It Works
38
38
 
@@ -72,8 +72,8 @@ All commands in this section run in your **regular terminal** (shell), not insid
72
72
 
73
73
  **Terminal:**
74
74
  ```bash
75
- # Start interactive interview
76
- uv run ouroboros init start "Your idea here"
75
+ # Start interactive interview (Claude Code runtime)
76
+ uv run ouroboros init start --orchestrator "Your idea here"
77
77
 
78
78
  # Resume an interrupted interview
79
79
  uv run ouroboros init start --resume interview_20260127_120000
@@ -86,24 +86,24 @@ uv run ouroboros init list
86
86
 
87
87
  **Terminal:**
88
88
  ```bash
89
- # Execute workflow
90
- uv run ouroboros run workflow seed.yaml
89
+ # Execute workflow (Claude Code runtime)
90
+ uv run ouroboros run workflow --orchestrator seed.yaml
91
91
 
92
92
  # Dry run (validate seed without executing)
93
93
  uv run ouroboros run workflow --dry-run seed.yaml
94
94
 
95
95
  # Debug output (show logs and agent thinking)
96
- uv run ouroboros run workflow --debug seed.yaml
96
+ uv run ouroboros run workflow --orchestrator --debug seed.yaml
97
97
 
98
98
  # Resume a previous session
99
- uv run ouroboros run workflow --resume <session_id> seed.yaml
99
+ uv run ouroboros run workflow --orchestrator --resume <session_id> seed.yaml
100
100
  ```
101
101
 
102
102
  ## Troubleshooting
103
103
 
104
104
  ### "Providers: warning" in health check
105
105
 
106
- This is normal when not using LiteLLM providers. The orchestrator mode uses the configured runtime backend directly.
106
+ This is normal when not using LiteLLM providers. The orchestrator mode uses Claude Code directly.
107
107
 
108
108
  ### Session fails with empty error
109
109
 
@@ -112,7 +112,7 @@ Ensure you're running from the project directory:
112
112
  **Terminal:**
113
113
  ```bash
114
114
  cd /path/to/ouroboros
115
- uv run ouroboros run workflow seed.yaml
115
+ uv run ouroboros run workflow --orchestrator seed.yaml
116
116
  ```
117
117
 
118
118
  ### "EventStore not initialized"
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.25.3.dev91'
32
- __version_tuple__ = version_tuple = (0, 25, 3, 'dev91')
31
+ __version__ = version = '0.25.3.dev93'
32
+ __version_tuple__ = version_tuple = (0, 25, 3, 'dev93')
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -448,17 +448,14 @@ Additional context (intentional deferrals — do not penalise):
448
448
  except json.JSONDecodeError as e:
449
449
  raise ValueError(f"Invalid JSON response: {e}") from e
450
450
 
451
- # Validate all required fields are present
452
- required_fields = [
451
+ # Numeric score fields must be present. Missing justifications are recoverable.
452
+ required_score_fields = [
453
453
  "goal_clarity_score",
454
- "goal_clarity_justification",
455
454
  "constraint_clarity_score",
456
- "constraint_clarity_justification",
457
455
  "success_criteria_clarity_score",
458
- "success_criteria_clarity_justification",
459
456
  ]
460
457
 
461
- for field_name in required_fields:
458
+ for field_name in required_score_fields:
462
459
  if field_name not in data:
463
460
  raise ValueError(f"Missing required field: {field_name}")
464
461
 
@@ -467,6 +464,15 @@ Additional context (intentional deferrals — do not penalise):
467
464
  score = float(value)
468
465
  return max(0.0, min(1.0, score))
469
466
 
467
+ def justification_for(field_name: str, component_name: str) -> str:
468
+ value = data.get(field_name)
469
+ if value is None:
470
+ return f"{component_name} justification not provided by model."
471
+ text = str(value).strip()
472
+ if not text:
473
+ return f"{component_name} justification not provided by model."
474
+ return text
475
+
470
476
  # Select weights based on project type
471
477
  if is_brownfield:
472
478
  goal_weight = BROWNFIELD_GOAL_CLARITY_WEIGHT
@@ -484,7 +490,10 @@ Additional context (intentional deferrals — do not penalise):
484
490
  name="Context Clarity",
485
491
  clarity_score=clamp_score(data["context_clarity_score"]),
486
492
  weight=BROWNFIELD_CONTEXT_CLARITY_WEIGHT,
487
- justification=str(data.get("context_clarity_justification", "")),
493
+ justification=justification_for(
494
+ "context_clarity_justification",
495
+ "Context Clarity",
496
+ ),
488
497
  )
489
498
 
490
499
  return ScoreBreakdown(
@@ -492,19 +501,28 @@ Additional context (intentional deferrals — do not penalise):
492
501
  name="Goal Clarity",
493
502
  clarity_score=clamp_score(data["goal_clarity_score"]),
494
503
  weight=goal_weight,
495
- justification=str(data["goal_clarity_justification"]),
504
+ justification=justification_for(
505
+ "goal_clarity_justification",
506
+ "Goal Clarity",
507
+ ),
496
508
  ),
497
509
  constraint_clarity=ComponentScore(
498
510
  name="Constraint Clarity",
499
511
  clarity_score=clamp_score(data["constraint_clarity_score"]),
500
512
  weight=constraint_weight,
501
- justification=str(data["constraint_clarity_justification"]),
513
+ justification=justification_for(
514
+ "constraint_clarity_justification",
515
+ "Constraint Clarity",
516
+ ),
502
517
  ),
503
518
  success_criteria_clarity=ComponentScore(
504
519
  name="Success Criteria Clarity",
505
520
  clarity_score=clamp_score(data["success_criteria_clarity_score"]),
506
521
  weight=criteria_weight,
507
- justification=str(data["success_criteria_clarity_justification"]),
522
+ justification=justification_for(
523
+ "success_criteria_clarity_justification",
524
+ "Success Criteria Clarity",
525
+ ),
508
526
  ),
509
527
  context_clarity=context_clarity,
510
528
  )
@@ -26,7 +26,7 @@ from ouroboros.bigbang.interview import (
26
26
  from ouroboros.bigbang.seed_generator import SeedGenerator
27
27
  from ouroboros.cli.formatters import console
28
28
  from ouroboros.cli.formatters.panels import print_error, print_info, print_success, print_warning
29
- from ouroboros.config import get_clarification_model, get_llm_backend
29
+ from ouroboros.config import get_clarification_model
30
30
  from ouroboros.observability import LoggingConfig, configure_logging
31
31
  from ouroboros.providers import create_llm_adapter
32
32
  from ouroboros.providers.base import LLMAdapter
@@ -145,15 +145,15 @@ async def _multiline_prompt_async(prompt_text: str) -> str:
145
145
 
146
146
 
147
147
  def _get_adapter(
148
+ use_orchestrator: bool,
148
149
  backend: str | None = None,
149
150
  for_interview: bool = False,
150
151
  debug: bool = False,
151
152
  ) -> LLMAdapter:
152
153
  """Get the appropriate LLM adapter.
153
154
 
154
- Resolution order: explicit backend arg > config llm.backend > "claude_code".
155
-
156
155
  Args:
156
+ use_orchestrator: If True, default to Claude Code for compatibility.
157
157
  backend: Optional explicit LLM backend override.
158
158
  for_interview: If True, enable Read/Glob/Grep tools for codebase exploration.
159
159
  debug: If True, show streaming messages (thinking, tool use).
@@ -161,7 +161,7 @@ def _get_adapter(
161
161
  Returns:
162
162
  LLM adapter instance.
163
163
  """
164
- resolved_backend = backend or get_llm_backend()
164
+ resolved_backend = backend or ("claude_code" if use_orchestrator else "litellm")
165
165
 
166
166
  if for_interview:
167
167
  # Interview mode: request the interview-specific permission policy and
@@ -260,6 +260,7 @@ async def _run_interview(
260
260
  initial_context: str,
261
261
  resume_id: str | None = None,
262
262
  state_dir: Path | None = None,
263
+ use_orchestrator: bool = False,
263
264
  debug: bool = False,
264
265
  workflow_runtime_backend: str | None = None,
265
266
  llm_backend: str | None = None,
@@ -270,11 +271,13 @@ async def _run_interview(
270
271
  initial_context: Initial context or idea for the interview.
271
272
  resume_id: Optional interview ID to resume.
272
273
  state_dir: Optional custom state directory.
274
+ use_orchestrator: If True, use Claude Code (Max Plan) instead of LiteLLM.
273
275
  workflow_runtime_backend: Optional agent runtime backend for the workflow handoff.
274
276
  llm_backend: Optional LLM backend override for interview and seed generation.
275
277
  """
276
278
  # Initialize components
277
279
  llm_adapter = _get_adapter(
280
+ use_orchestrator,
278
281
  backend=llm_backend,
279
282
  for_interview=True,
280
283
  debug=debug,
@@ -367,6 +370,7 @@ async def _run_interview(
367
370
  if should_start_workflow:
368
371
  await _start_workflow(
369
372
  seed_path,
373
+ use_orchestrator,
370
374
  runtime_backend=workflow_runtime_backend,
371
375
  )
372
376
 
@@ -468,32 +472,40 @@ async def _generate_seed_from_interview(
468
472
 
469
473
  async def _start_workflow(
470
474
  seed_path: Path,
475
+ use_orchestrator: bool = False,
471
476
  parallel: bool = True,
472
477
  runtime_backend: str | None = None,
473
478
  ) -> None:
474
- """Start workflow from generated seed (always orchestrator mode).
479
+ """Start workflow from generated seed.
475
480
 
476
481
  Args:
477
482
  seed_path: Path to the seed YAML file.
483
+ use_orchestrator: Whether to use Claude Code orchestrator.
478
484
  parallel: Execute independent ACs in parallel. Default: True.
479
485
  runtime_backend: Optional runtime backend for orchestrator execution.
480
486
  """
481
487
  console.print()
482
488
  console.print("[bold cyan]Starting workflow...[/]")
483
489
 
484
- from ouroboros.cli.commands.run import _run_orchestrator
490
+ if use_orchestrator:
491
+ # Direct function call instead of subprocess
492
+ from ouroboros.cli.commands.run import _run_orchestrator
485
493
 
486
- try:
487
- await _run_orchestrator(
488
- seed_path,
489
- resume_session=None,
490
- parallel=parallel,
491
- runtime_backend=runtime_backend,
492
- )
493
- except typer.Exit:
494
- pass # Normal exit
495
- except KeyboardInterrupt:
496
- print_info("Workflow interrupted.")
494
+ try:
495
+ await _run_orchestrator(
496
+ seed_path,
497
+ resume_session=None,
498
+ parallel=parallel,
499
+ runtime_backend=runtime_backend,
500
+ )
501
+ except typer.Exit:
502
+ pass # Normal exit
503
+ except KeyboardInterrupt:
504
+ print_info("Workflow interrupted.")
505
+ else:
506
+ # Standard workflow (placeholder for now)
507
+ print_info(f"Would execute workflow from: {seed_path}")
508
+ print_info("Standard workflow execution not yet implemented.")
497
509
 
498
510
 
499
511
  def _find_pm_seeds(seeds_dir: Path | None = None) -> list[Path]:
@@ -681,13 +693,12 @@ def start(
681
693
  dir_okay=True,
682
694
  ),
683
695
  ] = None,
684
- orchestrator: Annotated[ # noqa: ARG001 — kept for backward compat
696
+ orchestrator: Annotated[
685
697
  bool,
686
698
  typer.Option(
687
699
  "--orchestrator",
688
700
  "-o",
689
- help="Deprecated: no longer needed. Backend is resolved from config (llm.backend).",
690
- hidden=True,
701
+ help="Use Claude Code (Max Plan) instead of LiteLLM. No API key required.",
691
702
  ),
692
703
  ] = False,
693
704
  runtime: Annotated[
@@ -726,13 +737,12 @@ def start(
726
737
  This command initiates the Big Bang phase, which transforms vague ideas
727
738
  into clear, executable requirements through iterative questioning.
728
739
 
729
- The LLM backend is resolved from config (llm.backend) by default.
730
- Override with --llm-backend if needed.
731
-
732
740
  Example:
733
741
  ouroboros init start "I want to build a task management CLI tool"
734
742
 
735
- ouroboros init start --runtime codex "Build a REST API"
743
+ ouroboros init start --orchestrator "Build a REST API"
744
+
745
+ ouroboros init start --orchestrator --runtime codex "Build a REST API"
736
746
 
737
747
  ouroboros init start --llm-backend codex "Build a REST API"
738
748
 
@@ -792,16 +802,21 @@ def start(
792
802
  configure_logging(LoggingConfig(log_level="DEBUG"))
793
803
  print_info("Debug mode enabled - showing verbose logs")
794
804
 
795
- # Show mode info — resolve actual backend used
796
- resolved_display = llm_backend.value if llm_backend else get_llm_backend()
797
- backend_labels = {
798
- "claude_code": "Claude Code - no API key required",
799
- "codex": "Codex CLI - no API key required",
800
- "litellm": "LiteLLM - API key required",
801
- }
802
- print_info(f"Using {backend_labels.get(resolved_display, resolved_display)}")
803
- if runtime:
804
- print_info(f"Workflow runtime backend: {runtime.value}")
805
+ if runtime and not orchestrator:
806
+ print_warning(
807
+ "--runtime only affects the workflow execution step when --orchestrator is enabled."
808
+ )
809
+
810
+ # Show mode info
811
+ if orchestrator:
812
+ print_info("Using Claude Code (Max Plan) - no API key required")
813
+ if runtime:
814
+ print_info(f"Workflow runtime backend: {runtime.value}")
815
+ else:
816
+ print_info("Using LiteLLM - API key required")
817
+
818
+ if llm_backend:
819
+ print_info(f"Interview LLM backend: {llm_backend.value}")
805
820
 
806
821
  # Run interview
807
822
  try:
@@ -810,6 +825,7 @@ def start(
810
825
  context or "",
811
826
  resume,
812
827
  state_dir,
828
+ orchestrator,
813
829
  debug,
814
830
  runtime.value if runtime else None,
815
831
  llm_backend.value if llm_backend else None,
@@ -838,7 +854,7 @@ def list_interviews(
838
854
  ] = None,
839
855
  ) -> None:
840
856
  """List all interview sessions."""
841
- llm_adapter = create_llm_adapter(backend=get_llm_backend())
857
+ llm_adapter = create_llm_adapter(backend="litellm")
842
858
  engine = InterviewEngine(
843
859
  llm_adapter=llm_adapter,
844
860
  state_dir=state_dir or Path.home() / ".ouroboros" / "data",
@@ -58,6 +58,14 @@ def _derive_quality_bar(seed: "Seed") -> str:
58
58
  return "The execution must satisfy all acceptance criteria:\n" + "\n".join(ac_lines)
59
59
 
60
60
 
61
+ def _get_verification_artifact(summary: dict[str, Any], final_message: str) -> str:
62
+ """Prefer the structured verification report when present."""
63
+ verification_report = summary.get("verification_report")
64
+ if isinstance(verification_report, str) and verification_report:
65
+ return verification_report
66
+ return final_message or ""
67
+
68
+
61
69
  def _load_seed_from_yaml(seed_file: Path) -> dict[str, Any]:
62
70
  """Load seed configuration from YAML file.
63
71
 
@@ -249,7 +257,7 @@ async def _run_orchestrator(
249
257
 
250
258
  qa_result = await qa_handler.handle(
251
259
  {
252
- "artifact": res.final_message or "",
260
+ "artifact": _get_verification_artifact(res.summary, res.final_message),
253
261
  "artifact_type": "test_output",
254
262
  "quality_bar": quality_bar,
255
263
  "seed_content": yaml.dump(seed_data, default_flow_style=False),
@@ -889,7 +889,15 @@ class EvolutionaryLoop:
889
889
  exec_result = await self.executor(current_seed, parallel=parallel)
890
890
  if hasattr(exec_result, "is_ok") and exec_result.is_ok:
891
891
  orch_result = exec_result.value
892
- execution_output = getattr(orch_result, "final_message", str(orch_result))
892
+ summary = getattr(orch_result, "summary", {})
893
+ verification_report = (
894
+ summary.get("verification_report") if isinstance(summary, dict) else None
895
+ )
896
+ execution_output = (
897
+ verification_report
898
+ if isinstance(verification_report, str) and verification_report
899
+ else getattr(orch_result, "final_message", str(orch_result))
900
+ )
893
901
  # Log structured metadata for observability
894
902
  logger.info(
895
903
  "evolution.generation.executed",
@@ -409,7 +409,10 @@ class ExecuteSeedHandler:
409
409
  quality_bar = self._derive_quality_bar(_seed)
410
410
  await qa_handler.handle(
411
411
  {
412
- "artifact": result.value.final_message or "",
412
+ "artifact": self._get_verification_artifact(
413
+ result.value.summary,
414
+ result.value.final_message,
415
+ ),
413
416
  "artifact_type": "test_output",
414
417
  "quality_bar": quality_bar,
415
418
  "seed_content": _seed_content,
@@ -500,6 +503,14 @@ class ExecuteSeedHandler:
500
503
  ac_lines = [f"- {ac}" for ac in seed.acceptance_criteria]
501
504
  return "The execution must satisfy all acceptance criteria:\n" + "\n".join(ac_lines)
502
505
 
506
+ @staticmethod
507
+ def _get_verification_artifact(summary: dict[str, Any], final_message: str) -> str:
508
+ """Prefer the structured verification report when present."""
509
+ verification_report = summary.get("verification_report")
510
+ if isinstance(verification_report, str) and verification_report:
511
+ return verification_report
512
+ return final_message or ""
513
+
503
514
  @staticmethod
504
515
  def _format_execution_result(exec_result, seed: Seed) -> str:
505
516
  """Format execution result as human-readable text.
@@ -25,10 +25,11 @@ Usage:
25
25
  runner = OrchestratorRunner(adapter, event_store, mcp_manager=mcp_manager)
26
26
 
27
27
  CLI Usage:
28
- ouroboros run seed.yaml
29
- ouroboros run seed.yaml --runtime codex
30
- ouroboros run seed.yaml --resume <session_id>
31
- ouroboros run seed.yaml --mcp-config mcp.yaml
28
+ ouroboros run --orchestrator seed.yaml
29
+ ouroboros run --orchestrator seed.yaml --parallel # Parallel AC execution
30
+ ouroboros run --orchestrator seed.yaml --resume <session_id>
31
+ ouroboros run --orchestrator seed.yaml --runtime codex
32
+ ouroboros run --orchestrator seed.yaml --mcp-config mcp.yaml
32
33
  """
33
34
 
34
35
  from ouroboros.orchestrator.adapter import (