ouroboros-ai 0.25.3.dev89__tar.gz → 0.25.3.dev91__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.dev89 → ouroboros_ai-0.25.3.dev91}/CONTRIBUTING.md +2 -2
  2. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/PKG-INFO +1 -24
  3. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/README.md +0 -23
  4. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/cli-reference.md +5 -9
  5. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/guides/seed-authoring.md +11 -15
  6. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/runtime-guides/claude-code.md +9 -9
  7. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/_version.py +2 -2
  8. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/commands/init.py +35 -51
  9. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/__init__.py +4 -5
  10. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/persistence/event_store.py +7 -7
  11. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/screens/session_selector.py +9 -1
  12. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/test_init_runtime.py +3 -6
  13. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/test_main.py +1 -1
  14. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/persistence/test_event_store.py +64 -0
  15. ouroboros_ai-0.25.3.dev91/tests/unit/tui/test_session_selector_replay.py +177 -0
  16. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/.claude/settings.json +0 -0
  17. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/.claude-plugin/.mcp.json +0 -0
  18. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/.claude-plugin/marketplace.json +0 -0
  19. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/.claude-plugin/plugin.json +0 -0
  20. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/.env.example +0 -0
  21. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/.github/workflows/dev-publish.yml +0 -0
  22. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/.github/workflows/lint.yml +0 -0
  23. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/.github/workflows/release.yml +0 -0
  24. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/.github/workflows/test.yml +0 -0
  25. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/.gitignore +0 -0
  26. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/.mcp.json +0 -0
  27. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/.ouroboros/mechanical.toml +0 -0
  28. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/.pre-commit-config.yaml +0 -0
  29. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/.python-version +0 -0
  30. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/CHANGELOG.md +0 -0
  31. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/CLAUDE.md +0 -0
  32. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/HANDOFF.md +0 -0
  33. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/LICENSE +0 -0
  34. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/README.ko.md +0 -0
  35. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/SECURITY.md +0 -0
  36. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/commands/cancel.md +0 -0
  37. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/commands/evaluate.md +0 -0
  38. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/commands/evolve.md +0 -0
  39. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/commands/help.md +0 -0
  40. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/commands/interview.md +0 -0
  41. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/commands/ralph.md +0 -0
  42. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/commands/run.md +0 -0
  43. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/commands/seed.md +0 -0
  44. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/commands/setup.md +0 -0
  45. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/commands/status.md +0 -0
  46. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/commands/tutorial.md +0 -0
  47. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/commands/unstuck.md +0 -0
  48. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/commands/welcome.md +0 -0
  49. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/crates/ouroboros-tui/.gitignore +0 -0
  50. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/crates/ouroboros-tui/Cargo.lock +0 -0
  51. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/crates/ouroboros-tui/Cargo.toml +0 -0
  52. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/crates/ouroboros-tui/README.md +0 -0
  53. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/crates/ouroboros-tui/src/db.rs +0 -0
  54. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/crates/ouroboros-tui/src/main.rs +0 -0
  55. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/crates/ouroboros-tui/src/mock.rs +0 -0
  56. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/crates/ouroboros-tui/src/state.rs +0 -0
  57. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/crates/ouroboros-tui/src/views/dashboard.rs +0 -0
  58. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/crates/ouroboros-tui/src/views/execution.rs +0 -0
  59. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/crates/ouroboros-tui/src/views/lineage.rs +0 -0
  60. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/crates/ouroboros-tui/src/views/logs.rs +0 -0
  61. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/crates/ouroboros-tui/src/views/mod.rs +0 -0
  62. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/crates/ouroboros-tui/src/views/session_selector.rs +0 -0
  63. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/README.md +0 -0
  64. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/api/README.md +0 -0
  65. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/api/core.md +0 -0
  66. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/api/mcp.md +0 -0
  67. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/architecture.md +0 -0
  68. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/config-reference.md +0 -0
  69. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/contributing/architecture-overview.md +0 -0
  70. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/contributing/findings-registry.md +0 -0
  71. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/contributing/key-patterns.md +0 -0
  72. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/contributing/testing-guide.md +0 -0
  73. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/examples/mcp-config.yaml +0 -0
  74. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/getting-started.md +0 -0
  75. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/guides/evaluation-pipeline.md +0 -0
  76. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/guides/evolution-loop.md +0 -0
  77. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/guides/issue-176-subagent-mcp-inheritance.md +0 -0
  78. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/guides/tui-usage.md +0 -0
  79. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/images/PLACEHOLDER_README.md +0 -0
  80. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/images/demo-evaluation.png +0 -0
  81. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/images/demo-interview.png +0 -0
  82. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/images/demo-seed.png +0 -0
  83. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/images/demo-tui-dashboard.png +0 -0
  84. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/images/ouroboros.png +0 -0
  85. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/platform-support.md +0 -0
  86. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/runtime-capability-matrix.md +0 -0
  87. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/docs/runtime-guides/codex.md +0 -0
  88. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/examples/coordinator_test_seed.yaml +0 -0
  89. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/examples/dummy_seed.yaml +0 -0
  90. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/examples/parallel_subac_test_seed.yaml +0 -0
  91. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/examples/subac_test_seed.yaml +0 -0
  92. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/examples/task_manager/README.md +0 -0
  93. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/examples/task_manager/__init__.py +0 -0
  94. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/examples/task_manager/__main__.py +0 -0
  95. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/examples/task_manager/cli.py +0 -0
  96. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/examples/task_manager/models.py +0 -0
  97. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/examples/task_manager/storage.py +0 -0
  98. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/examples/test_display.py +0 -0
  99. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/hooks/hooks.json +0 -0
  100. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/llms-full.txt +0 -0
  101. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/llms.txt +0 -0
  102. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/project-context.md +0 -0
  103. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/pyproject.toml +0 -0
  104. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/scripts/drift-monitor.py +0 -0
  105. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/scripts/install.sh +0 -0
  106. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/scripts/keyword-detector.py +0 -0
  107. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/scripts/mcp-serve.sh +0 -0
  108. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/scripts/ralph-rewind.py +0 -0
  109. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/scripts/ralph.py +0 -0
  110. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/scripts/ralph.sh +0 -0
  111. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/scripts/session-start.py +0 -0
  112. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/scripts/sync-plugin-version.py +0 -0
  113. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/scripts/version-check.py +0 -0
  114. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/brownfield/SKILL.md +0 -0
  115. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/cancel/SKILL.md +0 -0
  116. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/evaluate/SKILL.md +0 -0
  117. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/evolve/SKILL.md +0 -0
  118. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/help/SKILL.md +0 -0
  119. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/interview/SKILL.md +0 -0
  120. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/pm/SKILL.md +0 -0
  121. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/qa/SKILL.md +0 -0
  122. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/ralph/SKILL.md +0 -0
  123. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/run/SKILL.md +0 -0
  124. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/seed/SKILL.md +0 -0
  125. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/setup/SKILL.md +0 -0
  126. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/status/SKILL.md +0 -0
  127. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/tutorial/SKILL.md +0 -0
  128. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/unstuck/SKILL.md +0 -0
  129. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/update/SKILL.md +0 -0
  130. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/skills/welcome/SKILL.md +0 -0
  131. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/__init__.py +0 -0
  132. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/__main__.py +0 -0
  133. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/__init__.py +0 -0
  134. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/advocate.md +0 -0
  135. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/analysis-agent.md +0 -0
  136. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/architect.md +0 -0
  137. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/breadth-keeper.md +0 -0
  138. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/code-executor.md +0 -0
  139. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/codebase-explorer.md +0 -0
  140. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/consensus-reviewer.md +0 -0
  141. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/contrarian.md +0 -0
  142. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/evaluator.md +0 -0
  143. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/hacker.md +0 -0
  144. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/judge.md +0 -0
  145. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/loader.py +0 -0
  146. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/ontologist.md +0 -0
  147. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/ontology-analyst.md +0 -0
  148. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/qa-judge.md +0 -0
  149. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/research-agent.md +0 -0
  150. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/researcher.md +0 -0
  151. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/seed-architect.md +0 -0
  152. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/seed-closer.md +0 -0
  153. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/semantic-evaluator.md +0 -0
  154. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/simplifier.md +0 -0
  155. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/agents/socratic-interviewer.md +0 -0
  156. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/bigbang/__init__.py +0 -0
  157. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/bigbang/ambiguity.py +0 -0
  158. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/bigbang/brownfield.py +0 -0
  159. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/bigbang/explore.py +0 -0
  160. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/bigbang/interview.py +0 -0
  161. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/bigbang/pm_document.py +0 -0
  162. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/bigbang/pm_interview.py +0 -0
  163. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/bigbang/pm_seed.py +0 -0
  164. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/bigbang/question_classifier.py +0 -0
  165. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/bigbang/seed_generator.py +0 -0
  166. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/__init__.py +0 -0
  167. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/commands/__init__.py +0 -0
  168. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/commands/cancel.py +0 -0
  169. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/commands/config.py +0 -0
  170. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/commands/mcp.py +0 -0
  171. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/commands/pm.py +0 -0
  172. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/commands/run.py +0 -0
  173. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/commands/setup.py +0 -0
  174. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/commands/status.py +0 -0
  175. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/commands/tui.py +0 -0
  176. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/formatters/__init__.py +0 -0
  177. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/formatters/panels.py +0 -0
  178. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/formatters/progress.py +0 -0
  179. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/formatters/tables.py +0 -0
  180. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/formatters/workflow_display.py +0 -0
  181. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/cli/main.py +0 -0
  182. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/codex/__init__.py +0 -0
  183. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/codex/artifacts.py +0 -0
  184. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/codex/ouroboros.md +0 -0
  185. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/codex_permissions.py +0 -0
  186. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/config/__init__.py +0 -0
  187. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/config/loader.py +0 -0
  188. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/config/models.py +0 -0
  189. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/core/__init__.py +0 -0
  190. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/core/ac_tree.py +0 -0
  191. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/core/context.py +0 -0
  192. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/core/errors.py +0 -0
  193. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/core/file_lock.py +0 -0
  194. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/core/git_workflow.py +0 -0
  195. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/core/lineage.py +0 -0
  196. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/core/ontology_aspect.py +0 -0
  197. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/core/ontology_questions.py +0 -0
  198. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/core/security.py +0 -0
  199. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/core/seed.py +0 -0
  200. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/core/text.py +0 -0
  201. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/core/types.py +0 -0
  202. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evaluation/__init__.py +0 -0
  203. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evaluation/artifact_collector.py +0 -0
  204. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evaluation/consensus.py +0 -0
  205. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evaluation/json_utils.py +0 -0
  206. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evaluation/languages.py +0 -0
  207. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evaluation/mechanical.py +0 -0
  208. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evaluation/models.py +0 -0
  209. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evaluation/pipeline.py +0 -0
  210. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evaluation/semantic.py +0 -0
  211. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evaluation/trigger.py +0 -0
  212. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/events/__init__.py +0 -0
  213. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/events/base.py +0 -0
  214. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/events/decomposition.py +0 -0
  215. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/events/evaluation.py +0 -0
  216. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/events/interview.py +0 -0
  217. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/events/lineage.py +0 -0
  218. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/events/ontology.py +0 -0
  219. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evolution/__init__.py +0 -0
  220. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evolution/convergence.py +0 -0
  221. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evolution/loop.py +0 -0
  222. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evolution/projector.py +0 -0
  223. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evolution/reflect.py +0 -0
  224. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evolution/regression.py +0 -0
  225. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/evolution/wonder.py +0 -0
  226. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/execution/__init__.py +0 -0
  227. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/execution/atomicity.py +0 -0
  228. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/execution/decomposition.py +0 -0
  229. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/execution/double_diamond.py +0 -0
  230. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/execution/subagent.py +0 -0
  231. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/__init__.py +0 -0
  232. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/client/__init__.py +0 -0
  233. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/client/adapter.py +0 -0
  234. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/client/manager.py +0 -0
  235. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/client/protocol.py +0 -0
  236. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/errors.py +0 -0
  237. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/job_manager.py +0 -0
  238. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/resources/__init__.py +0 -0
  239. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/resources/handlers.py +0 -0
  240. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/server/__init__.py +0 -0
  241. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/server/adapter.py +0 -0
  242. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/server/protocol.py +0 -0
  243. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/server/security.py +0 -0
  244. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/tools/__init__.py +0 -0
  245. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/tools/authoring_handlers.py +0 -0
  246. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/tools/brownfield_handler.py +0 -0
  247. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/tools/dashboard.py +0 -0
  248. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/tools/definitions.py +0 -0
  249. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/tools/evaluation_handlers.py +0 -0
  250. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/tools/evolution_handlers.py +0 -0
  251. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/tools/execution_handlers.py +0 -0
  252. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/tools/job_handlers.py +0 -0
  253. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/tools/pm_handler.py +0 -0
  254. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/tools/qa.py +0 -0
  255. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/tools/query_handlers.py +0 -0
  256. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/tools/registry.py +0 -0
  257. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/mcp/types.py +0 -0
  258. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/observability/__init__.py +0 -0
  259. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/observability/drift.py +0 -0
  260. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/observability/logging.py +0 -0
  261. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/observability/retrospective.py +0 -0
  262. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/adapter.py +0 -0
  263. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/codex_cli_runtime.py +0 -0
  264. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/command_dispatcher.py +0 -0
  265. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/coordinator.py +0 -0
  266. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/dependency_analyzer.py +0 -0
  267. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/events.py +0 -0
  268. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/execution_runtime_scope.py +0 -0
  269. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/execution_strategy.py +0 -0
  270. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/heartbeat.py +0 -0
  271. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/level_context.py +0 -0
  272. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/mcp_config.py +0 -0
  273. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/mcp_tools.py +0 -0
  274. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/parallel_executor.py +0 -0
  275. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/parallel_executor_models.py +0 -0
  276. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/runner.py +0 -0
  277. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/runtime_factory.py +0 -0
  278. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/runtime_message_projection.py +0 -0
  279. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/session.py +0 -0
  280. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/orchestrator/workflow_state.py +0 -0
  281. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/persistence/__init__.py +0 -0
  282. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/persistence/brownfield.py +0 -0
  283. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/persistence/checkpoint.py +0 -0
  284. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/persistence/migrations/__init__.py +0 -0
  285. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/persistence/migrations/runner.py +0 -0
  286. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
  287. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/persistence/migrations/scripts/002_brownfield.sql +0 -0
  288. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/persistence/schema.py +0 -0
  289. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/persistence/uow.py +0 -0
  290. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/plugin/__init__.py +0 -0
  291. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/plugin/agents/__init__.py +0 -0
  292. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/plugin/agents/pool.py +0 -0
  293. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/plugin/agents/registry.py +0 -0
  294. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/plugin/orchestration/__init__.py +0 -0
  295. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/plugin/orchestration/router.py +0 -0
  296. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/plugin/orchestration/scheduler.py +0 -0
  297. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/plugin/skills/__init__.py +0 -0
  298. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/plugin/skills/docs.py +0 -0
  299. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/plugin/skills/executor.py +0 -0
  300. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/plugin/skills/keywords.py +0 -0
  301. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/plugin/skills/registry.py +0 -0
  302. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/pm/__init__.py +0 -0
  303. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/pm/renderer.py +0 -0
  304. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/providers/__init__.py +0 -0
  305. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/providers/anthropic_adapter.py +0 -0
  306. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/providers/base.py +0 -0
  307. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/providers/claude_code_adapter.py +0 -0
  308. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/providers/codex_cli_adapter.py +0 -0
  309. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/providers/codex_cli_stream.py +0 -0
  310. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/providers/factory.py +0 -0
  311. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/providers/litellm_adapter.py +0 -0
  312. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/py.typed +0 -0
  313. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/resilience/__init__.py +0 -0
  314. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/resilience/lateral.py +0 -0
  315. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/resilience/stagnation.py +0 -0
  316. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/routing/__init__.py +0 -0
  317. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/routing/complexity.py +0 -0
  318. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/routing/downgrade.py +0 -0
  319. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/routing/escalation.py +0 -0
  320. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/routing/router.py +0 -0
  321. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/routing/tiers.py +0 -0
  322. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/secondary/__init__.py +0 -0
  323. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/secondary/scheduler.py +0 -0
  324. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/secondary/todo_registry.py +0 -0
  325. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/strategies/__init__.py +0 -0
  326. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/strategies/devil_advocate.py +0 -0
  327. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/__init__.py +0 -0
  328. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/app.py +0 -0
  329. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/components/__init__.py +0 -0
  330. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/components/agents_panel.py +0 -0
  331. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/components/event_log.py +0 -0
  332. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/components/progress.py +0 -0
  333. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/components/token_tracker.py +0 -0
  334. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/events.py +0 -0
  335. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/screens/__init__.py +0 -0
  336. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/screens/confirm_rewind.py +0 -0
  337. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/screens/dashboard.py +0 -0
  338. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/screens/dashboard_v2.py +0 -0
  339. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/screens/dashboard_v3.py +0 -0
  340. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/screens/debug.py +0 -0
  341. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/screens/execution.py +0 -0
  342. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/screens/hud_dashboard.py +0 -0
  343. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/screens/lineage_detail.py +0 -0
  344. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/screens/lineage_selector.py +0 -0
  345. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/screens/logs.py +0 -0
  346. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/widgets/__init__.py +0 -0
  347. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/widgets/ac_progress.py +0 -0
  348. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/widgets/ac_tree.py +0 -0
  349. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/widgets/agent_activity.py +0 -0
  350. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/widgets/cost_tracker.py +0 -0
  351. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/widgets/drift_meter.py +0 -0
  352. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/widgets/lineage_tree.py +0 -0
  353. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/widgets/parallel_graph.py +0 -0
  354. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/tui/widgets/phase_progress.py +0 -0
  355. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/verification/__init__.py +0 -0
  356. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/verification/extractor.py +0 -0
  357. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/verification/models.py +0 -0
  358. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/src/ouroboros/verification/verifier.py +0 -0
  359. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/__init__.py +0 -0
  360. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/conftest.py +0 -0
  361. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/e2e/__init__.py +0 -0
  362. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/e2e/conftest.py +0 -0
  363. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/e2e/test_cli_commands.py +0 -0
  364. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/e2e/test_full_workflow.py +0 -0
  365. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/e2e/test_session_persistence.py +0 -0
  366. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/fixtures/test_atomicity_seed.yml +0 -0
  367. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/integration/__init__.py +0 -0
  368. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/integration/conftest.py +0 -0
  369. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/integration/mcp/__init__.py +0 -0
  370. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/integration/mcp/conftest.py +0 -0
  371. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/integration/mcp/test_client_adapter.py +0 -0
  372. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/integration/mcp/test_client_manager.py +0 -0
  373. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/integration/mcp/test_server_adapter.py +0 -0
  374. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/integration/plugin/test_orchestration.py +0 -0
  375. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/integration/test_codex_cli_passthrough_smoke.py +0 -0
  376. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/integration/test_codex_skill_fallback.py +0 -0
  377. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/integration/test_codex_skill_smoke.py +0 -0
  378. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/integration/test_entry_point.py +0 -0
  379. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/__init__.py +0 -0
  380. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/agents/__init__.py +0 -0
  381. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/agents/test_loader.py +0 -0
  382. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/bigbang/__init__.py +0 -0
  383. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/bigbang/test_ambiguity.py +0 -0
  384. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/bigbang/test_brownfield.py +0 -0
  385. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/bigbang/test_classifier_context.py +0 -0
  386. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/bigbang/test_decide_later_items.py +0 -0
  387. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/bigbang/test_explore.py +0 -0
  388. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/bigbang/test_interview.py +0 -0
  389. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/bigbang/test_pm_document_generator.py +0 -0
  390. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/bigbang/test_pm_document_writer.py +0 -0
  391. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/bigbang/test_pm_interview.py +0 -0
  392. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/bigbang/test_pm_interview_brownfield_db.py +0 -0
  393. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/bigbang/test_pm_seed_ac12.py +0 -0
  394. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/bigbang/test_pm_seed_save.py +0 -0
  395. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/bigbang/test_question_classifier.py +0 -0
  396. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/bigbang/test_seed_generator.py +0 -0
  397. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/__init__.py +0 -0
  398. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/formatters/__init__.py +0 -0
  399. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/formatters/test_console.py +0 -0
  400. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/formatters/test_panels.py +0 -0
  401. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/formatters/test_progress.py +0 -0
  402. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/formatters/test_tables.py +0 -0
  403. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/formatters/test_workflow_display.py +0 -0
  404. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/test_cancel.py +0 -0
  405. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/test_init_pm_seed_detection.py +0 -0
  406. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/test_mcp_nested_guard.py +0 -0
  407. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/test_mcp_startup_cleanup.py +0 -0
  408. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/test_pm_brownfield.py +0 -0
  409. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/test_pm_overwrite.py +0 -0
  410. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/test_pm_select_repos.py +0 -0
  411. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/cli/test_setup.py +0 -0
  412. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/config/__init__.py +0 -0
  413. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/config/test_loader.py +0 -0
  414. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/config/test_models.py +0 -0
  415. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/core/__init__.py +0 -0
  416. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/core/test_ac_tree.py +0 -0
  417. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/core/test_context.py +0 -0
  418. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/core/test_errors.py +0 -0
  419. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/core/test_git_workflow.py +0 -0
  420. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/core/test_lineage.py +0 -0
  421. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/core/test_ontology_aspect.py +0 -0
  422. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/core/test_ontology_questions.py +0 -0
  423. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/core/test_security.py +0 -0
  424. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/core/test_seed.py +0 -0
  425. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/core/test_types.py +0 -0
  426. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/evaluation/__init__.py +0 -0
  427. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/evaluation/test_consensus.py +0 -0
  428. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/evaluation/test_json_utils.py +0 -0
  429. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/evaluation/test_languages.py +0 -0
  430. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/evaluation/test_mechanical.py +0 -0
  431. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/evaluation/test_models.py +0 -0
  432. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/evaluation/test_semantic.py +0 -0
  433. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/evaluation/test_trigger.py +0 -0
  434. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/events/__init__.py +0 -0
  435. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/events/test_base.py +0 -0
  436. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/events/test_decomposition_events.py +0 -0
  437. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/evolution/test_wonder_scope.py +0 -0
  438. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/execution/__init__.py +0 -0
  439. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/execution/test_atomicity.py +0 -0
  440. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/execution/test_decomposition.py +0 -0
  441. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/execution/test_double_diamond.py +0 -0
  442. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/execution/test_subagent_isolation.py +0 -0
  443. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/__init__.py +0 -0
  444. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/client/__init__.py +0 -0
  445. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/client/test_adapter.py +0 -0
  446. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/client/test_manager.py +0 -0
  447. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/conftest.py +0 -0
  448. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/server/__init__.py +0 -0
  449. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/server/test_adapter.py +0 -0
  450. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/server/test_security.py +0 -0
  451. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/test_errors.py +0 -0
  452. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/test_job_manager.py +0 -0
  453. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/test_types.py +0 -0
  454. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/tools/__init__.py +0 -0
  455. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/tools/conftest.py +0 -0
  456. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/tools/test_brownfield_handler.py +0 -0
  457. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/tools/test_definitions.py +0 -0
  458. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/tools/test_pm_handler.py +0 -0
  459. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/tools/test_pm_handler_generate.py +0 -0
  460. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/tools/test_pm_handler_pending_reframe.py +0 -0
  461. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/tools/test_qa_integration.py +0 -0
  462. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/mcp/tools/test_registry.py +0 -0
  463. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/observability/__init__.py +0 -0
  464. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/observability/test_drift.py +0 -0
  465. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/observability/test_logging.py +0 -0
  466. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/observability/test_retrospective.py +0 -0
  467. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/__init__.py +0 -0
  468. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_adapter.py +0 -0
  469. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_codex_cli_runtime.py +0 -0
  470. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_codex_recursion_guard.py +0 -0
  471. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_command_dispatcher.py +0 -0
  472. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_coordinator.py +0 -0
  473. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_dependency_analyzer.py +0 -0
  474. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_events.py +0 -0
  475. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_execution_runtime_scope.py +0 -0
  476. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_execution_strategy.py +0 -0
  477. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_inflight_cancellation.py +0 -0
  478. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_level_context.py +0 -0
  479. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_mcp_config.py +0 -0
  480. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_mcp_tools.py +0 -0
  481. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_parallel_executor.py +0 -0
  482. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_parallel_executor_retry_resume.py +0 -0
  483. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_runner.py +0 -0
  484. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_runner_cancellation.py +0 -0
  485. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_runtime_factory.py +0 -0
  486. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_runtime_message_projection.py +0 -0
  487. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_session.py +0 -0
  488. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/orchestrator/test_workflow_state.py +0 -0
  489. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/persistence/__init__.py +0 -0
  490. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/persistence/test_brownfield_store.py +0 -0
  491. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/persistence/test_checkpoint.py +0 -0
  492. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/persistence/test_schema.py +0 -0
  493. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/persistence/test_uow.py +0 -0
  494. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/plugin/__init__.py +0 -0
  495. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/plugin/agents/__init__.py +0 -0
  496. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/plugin/agents/test_registry.py +0 -0
  497. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/plugin/orchestration/__init__.py +0 -0
  498. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/plugin/orchestration/test_model_router.py +0 -0
  499. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/plugin/skills/__init__.py +0 -0
  500. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/plugin/skills/test_keywords.py +0 -0
  501. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/plugin/skills/test_registry.py +0 -0
  502. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/pm/__init__.py +0 -0
  503. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/pm/test_renderer.py +0 -0
  504. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/providers/__init__.py +0 -0
  505. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/providers/test_base.py +0 -0
  506. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/providers/test_claude_code_adapter.py +0 -0
  507. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/providers/test_codex_cli_adapter.py +0 -0
  508. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/providers/test_factory.py +0 -0
  509. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/providers/test_litellm_adapter.py +0 -0
  510. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/resilience/__init__.py +0 -0
  511. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/resilience/test_lateral.py +0 -0
  512. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/resilience/test_stagnation.py +0 -0
  513. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/routing/__init__.py +0 -0
  514. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/routing/test_complexity.py +0 -0
  515. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/routing/test_downgrade.py +0 -0
  516. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/routing/test_escalation.py +0 -0
  517. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/routing/test_router.py +0 -0
  518. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/routing/test_tiers.py +0 -0
  519. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/scripts/test_keyword_detector.py +0 -0
  520. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/scripts/test_version_check.py +0 -0
  521. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/secondary/__init__.py +0 -0
  522. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/secondary/test_scheduler.py +0 -0
  523. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/secondary/test_todo_registry.py +0 -0
  524. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_artifact_collector.py +0 -0
  525. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_codex_artifacts.py +0 -0
  526. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_convergence.py +0 -0
  527. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_dashboard.py +0 -0
  528. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_dependencies_configured.py +0 -0
  529. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_evolve_rewind.py +0 -0
  530. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_evolve_step.py +0 -0
  531. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_main_entry_point.py +0 -0
  532. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_module_structure.py +0 -0
  533. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_project_initialization.py +0 -0
  534. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_projector_rewind.py +0 -0
  535. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_ralph_parser.py +0 -0
  536. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_ralph_rewind.py +0 -0
  537. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_regression.py +0 -0
  538. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_tooling_configuration.py +0 -0
  539. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/test_verification.py +0 -0
  540. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/tui/__init__.py +0 -0
  541. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/tui/test_app.py +0 -0
  542. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/tui/test_cancelled_display.py +0 -0
  543. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/tui/test_events.py +0 -0
  544. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/tui/test_lineage_viewer.py +0 -0
  545. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/tui/test_screens.py +0 -0
  546. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tests/unit/tui/test_widgets.py +0 -0
  547. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/tools/sync_github_project.py +0 -0
  548. {ouroboros_ai-0.25.3.dev89 → ouroboros_ai-0.25.3.dev91}/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`, `--orchestrator`, `--runtime`, `--llm-backend`, `--debug`
455
+ Flags covered: `--resume`, `--state-dir`, `--runtime`, `--llm-backend`, `--debug` (`--orchestrator` is deprecated/hidden)
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`, `--orchestrator`, `--runtime`, `--llm-
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 `--orchestrator` or `--runtime` behavior changes
464
+ - `docs/runtime-guides/claude-code.md` and `docs/runtime-guides/codex.md` — if `--runtime` or `--llm-backend` 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.dev89
3
+ Version: 0.25.3.dev91
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,11 +105,6 @@ 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
-
113
108
  ---
114
109
 
115
110
  ## Why Ouroboros?
@@ -175,24 +170,6 @@ After one loop of the Ouroboros cycle, a vague idea becomes a verified codebase:
175
170
  | **Seed** | No spec | Immutable specification with acceptance criteria, ontology, constraints |
176
171
  | **Evaluate** | Manual review | 3-stage gate: Mechanical (free) -> Semantic -> Multi-Model Consensus |
177
172
 
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>
196
173
 
197
174
  <details>
198
175
  <summary><strong>What just happened?</strong></summary>
@@ -65,11 +65,6 @@
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
-
73
68
  ---
74
69
 
75
70
  ## Why Ouroboros?
@@ -135,24 +130,6 @@ After one loop of the Ouroboros cycle, a vague idea becomes a verified codebase:
135
130
  | **Seed** | No spec | Immutable specification with acceptance criteria, ontology, constraints |
136
131
  | **Evaluate** | Manual review | 3-stage gate: Mechanical (free) -> Semantic -> Multi-Model Consensus |
137
132
 
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>
156
133
 
157
134
  <details>
158
135
  <summary><strong>What just happened?</strong></summary>
@@ -130,9 +130,8 @@ 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
- | `-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 |
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. |
136
135
  | `-d, --debug` | Show verbose logs including debug messages |
137
136
 
138
137
  **Examples:**
@@ -144,13 +143,10 @@ ouroboros init "I want to build a task management CLI tool"
144
143
  # Explicit subcommand (equivalent)
145
144
  ouroboros init start "I want to build a task management CLI tool"
146
145
 
147
- # Start with Claude Code (no API key needed)
148
- ouroboros init --orchestrator "Build a REST API"
149
-
150
146
  # Specify runtime backend for the workflow step
151
- ouroboros init --orchestrator --runtime codex "Build a REST API"
147
+ ouroboros init --runtime codex "Build a REST API"
152
148
 
153
- # Use Codex as the LLM backend for interview and seed generation
149
+ # Override LLM backend for interview and seed generation
154
150
  ouroboros init --llm-backend codex "Build a REST API"
155
151
 
156
152
  # Resume an interrupted interview
@@ -203,7 +199,7 @@ ouroboros run [workflow] [OPTIONS] SEED_FILE
203
199
 
204
200
  | Option | Description |
205
201
  |--------|-------------|
206
- | `-o/-O, --orchestrator/--no-orchestrator` | Use the agent-runtime orchestrator for execution (default: enabled) |
202
+ | `-o/-O, --orchestrator/--no-orchestrator` | Orchestrator mode (default: enabled). `--no-orchestrator` falls back to legacy placeholder mode. |
207
203
  | `--runtime TEXT` | Agent runtime backend override (`claude`, `codex`). Uses configured default if omitted. (`opencode` is in the CLI enum but out of scope) |
208
204
  | `-r, --resume TEXT` | Resume a previous orchestrator session by ID |
209
205
  | `--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 (`--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.
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.
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 (Max Plan):
397
+ # To avoid needing an API key, use Claude Code or Codex CLI (configured in llm.backend):
398
398
  ooo interview "Build a REST API"
399
399
  # or standalone:
400
- ouroboros init start --orchestrator "Build a REST API"
400
+ ouroboros init start "Build a REST API"
401
401
  ```
402
402
 
403
403
  #### LLM rate-limit or transient API error during questioning
@@ -708,22 +708,18 @@ ouroboros run minimal_seed.yaml
708
708
 
709
709
  ---
710
710
 
711
- ### CLI Flag Warnings
711
+ ### CLI Flag Notes
712
712
 
713
- #### `--runtime` without `--orchestrator` (init command)
713
+ #### `--orchestrator` (init command)
714
714
 
715
- **Symptom:**
716
- ```
717
- Warning: --runtime only affects the workflow execution step when --orchestrator is enabled.
718
- ```
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.
719
716
 
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.
723
-
724
- **Fix:** Add `--orchestrator` if you want to use the specified runtime backend for the post-generation workflow step:
725
717
  ```bash
726
- ouroboros init start --orchestrator --runtime codex "Build a REST API"
718
+ # Just use:
719
+ ouroboros init start "Build a REST API"
720
+
721
+ # Override backend explicitly if needed:
722
+ ouroboros init start --llm-backend codex "Build a REST API"
727
723
  ```
728
724
 
729
725
  ---
@@ -32,7 +32,7 @@ orchestrator:
32
32
  runtime_backend: claude
33
33
  ```
34
34
 
35
- When using the `--orchestrator` CLI flag, Claude Code is the default runtime backend.
35
+ When `orchestrator.runtime_backend` is set to `claude`, Claude Code is used as the 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 (Claude Code runtime)
76
- uv run ouroboros init start --orchestrator "Your idea here"
75
+ # Start interactive interview
76
+ uv run ouroboros init start "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 (Claude Code runtime)
90
- uv run ouroboros run workflow --orchestrator seed.yaml
89
+ # Execute workflow
90
+ uv run ouroboros run workflow 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 --orchestrator --debug seed.yaml
96
+ uv run ouroboros run workflow --debug seed.yaml
97
97
 
98
98
  # Resume a previous session
99
- uv run ouroboros run workflow --orchestrator --resume <session_id> seed.yaml
99
+ uv run ouroboros run workflow --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 Claude Code directly.
106
+ This is normal when not using LiteLLM providers. The orchestrator mode uses the configured runtime backend 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 --orchestrator seed.yaml
115
+ uv run ouroboros run workflow 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.dev89'
32
- __version_tuple__ = version_tuple = (0, 25, 3, 'dev89')
31
+ __version__ = version = '0.25.3.dev91'
32
+ __version_tuple__ = version_tuple = (0, 25, 3, 'dev91')
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -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
29
+ from ouroboros.config import get_clarification_model, get_llm_backend
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,
149
148
  backend: str | None = None,
150
149
  for_interview: bool = False,
151
150
  debug: bool = False,
152
151
  ) -> LLMAdapter:
153
152
  """Get the appropriate LLM adapter.
154
153
 
154
+ Resolution order: explicit backend arg > config llm.backend > "claude_code".
155
+
155
156
  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 ("claude_code" if use_orchestrator else "litellm")
164
+ resolved_backend = backend or get_llm_backend()
165
165
 
166
166
  if for_interview:
167
167
  # Interview mode: request the interview-specific permission policy and
@@ -260,7 +260,6 @@ 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,
264
263
  debug: bool = False,
265
264
  workflow_runtime_backend: str | None = None,
266
265
  llm_backend: str | None = None,
@@ -271,13 +270,11 @@ async def _run_interview(
271
270
  initial_context: Initial context or idea for the interview.
272
271
  resume_id: Optional interview ID to resume.
273
272
  state_dir: Optional custom state directory.
274
- use_orchestrator: If True, use Claude Code (Max Plan) instead of LiteLLM.
275
273
  workflow_runtime_backend: Optional agent runtime backend for the workflow handoff.
276
274
  llm_backend: Optional LLM backend override for interview and seed generation.
277
275
  """
278
276
  # Initialize components
279
277
  llm_adapter = _get_adapter(
280
- use_orchestrator,
281
278
  backend=llm_backend,
282
279
  for_interview=True,
283
280
  debug=debug,
@@ -370,7 +367,6 @@ async def _run_interview(
370
367
  if should_start_workflow:
371
368
  await _start_workflow(
372
369
  seed_path,
373
- use_orchestrator,
374
370
  runtime_backend=workflow_runtime_backend,
375
371
  )
376
372
 
@@ -472,40 +468,32 @@ async def _generate_seed_from_interview(
472
468
 
473
469
  async def _start_workflow(
474
470
  seed_path: Path,
475
- use_orchestrator: bool = False,
476
471
  parallel: bool = True,
477
472
  runtime_backend: str | None = None,
478
473
  ) -> None:
479
- """Start workflow from generated seed.
474
+ """Start workflow from generated seed (always orchestrator mode).
480
475
 
481
476
  Args:
482
477
  seed_path: Path to the seed YAML file.
483
- use_orchestrator: Whether to use Claude Code orchestrator.
484
478
  parallel: Execute independent ACs in parallel. Default: True.
485
479
  runtime_backend: Optional runtime backend for orchestrator execution.
486
480
  """
487
481
  console.print()
488
482
  console.print("[bold cyan]Starting workflow...[/]")
489
483
 
490
- if use_orchestrator:
491
- # Direct function call instead of subprocess
492
- from ouroboros.cli.commands.run import _run_orchestrator
484
+ from ouroboros.cli.commands.run import _run_orchestrator
493
485
 
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.")
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.")
509
497
 
510
498
 
511
499
  def _find_pm_seeds(seeds_dir: Path | None = None) -> list[Path]:
@@ -693,12 +681,13 @@ def start(
693
681
  dir_okay=True,
694
682
  ),
695
683
  ] = None,
696
- orchestrator: Annotated[
684
+ orchestrator: Annotated[ # noqa: ARG001 — kept for backward compat
697
685
  bool,
698
686
  typer.Option(
699
687
  "--orchestrator",
700
688
  "-o",
701
- help="Use Claude Code (Max Plan) instead of LiteLLM. No API key required.",
689
+ help="Deprecated: no longer needed. Backend is resolved from config (llm.backend).",
690
+ hidden=True,
702
691
  ),
703
692
  ] = False,
704
693
  runtime: Annotated[
@@ -737,12 +726,13 @@ def start(
737
726
  This command initiates the Big Bang phase, which transforms vague ideas
738
727
  into clear, executable requirements through iterative questioning.
739
728
 
729
+ The LLM backend is resolved from config (llm.backend) by default.
730
+ Override with --llm-backend if needed.
731
+
740
732
  Example:
741
733
  ouroboros init start "I want to build a task management CLI tool"
742
734
 
743
- ouroboros init start --orchestrator "Build a REST API"
744
-
745
- ouroboros init start --orchestrator --runtime codex "Build a REST API"
735
+ ouroboros init start --runtime codex "Build a REST API"
746
736
 
747
737
  ouroboros init start --llm-backend codex "Build a REST API"
748
738
 
@@ -802,21 +792,16 @@ def start(
802
792
  configure_logging(LoggingConfig(log_level="DEBUG"))
803
793
  print_info("Debug mode enabled - showing verbose logs")
804
794
 
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}")
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}")
820
805
 
821
806
  # Run interview
822
807
  try:
@@ -825,7 +810,6 @@ def start(
825
810
  context or "",
826
811
  resume,
827
812
  state_dir,
828
- orchestrator,
829
813
  debug,
830
814
  runtime.value if runtime else None,
831
815
  llm_backend.value if llm_backend else None,
@@ -854,7 +838,7 @@ def list_interviews(
854
838
  ] = None,
855
839
  ) -> None:
856
840
  """List all interview sessions."""
857
- llm_adapter = create_llm_adapter(backend="litellm")
841
+ llm_adapter = create_llm_adapter(backend=get_llm_backend())
858
842
  engine = InterviewEngine(
859
843
  llm_adapter=llm_adapter,
860
844
  state_dir=state_dir or Path.home() / ".ouroboros" / "data",
@@ -25,11 +25,10 @@ Usage:
25
25
  runner = OrchestratorRunner(adapter, event_store, mcp_manager=mcp_manager)
26
26
 
27
27
  CLI Usage:
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
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
33
32
  """
34
33
 
35
34
  from ouroboros.orchestrator.adapter import (
@@ -403,13 +403,13 @@ class EventStore:
403
403
  ) from e
404
404
 
405
405
  async def get_all_sessions(self) -> list[BaseEvent]:
406
- """Get all session start events.
406
+ """Get all session lifecycle events.
407
407
 
408
- This method retrieves all events of type 'orchestrator.session.started'
409
- to identify every session recorded in the event store.
408
+ Returns all ``orchestrator.session.*`` events ordered by timestamp
409
+ ascending so callers can replay them to reconstruct current status.
410
410
 
411
411
  Returns:
412
- List of session start events, ordered by timestamp descending.
412
+ List of session events, ordered by timestamp ascending.
413
413
 
414
414
  Raises:
415
415
  PersistenceError: If the query fails.
@@ -424,8 +424,8 @@ class EventStore:
424
424
  async with self._engine.begin() as conn:
425
425
  query = (
426
426
  select(events_table)
427
- .where(events_table.c.event_type == "orchestrator.session.started")
428
- .order_by(events_table.c.timestamp.desc())
427
+ .where(events_table.c.event_type.like("orchestrator.session.%"))
428
+ .order_by(events_table.c.timestamp.asc())
429
429
  )
430
430
 
431
431
  result = await conn.execute(query)
@@ -436,7 +436,7 @@ class EventStore:
436
436
  f"Failed to get all sessions: {e}",
437
437
  operation="select",
438
438
  table="events",
439
- details={"event_type": "orchestrator.session.started"},
439
+ details={"event_type": "orchestrator.session.%"},
440
440
  ) from e
441
441
 
442
442
  async def query_events(
@@ -83,7 +83,8 @@ class SessionSelectorScreen(Screen[None]):
83
83
  table.add_row("[dim]No sessions found in the database.[/dim]")
84
84
  return
85
85
 
86
- # Deduplicate and collect session info
86
+ # Replay events chronologically to reconstruct session state.
87
+ # Events arrive ASC so later events naturally overwrite status.
87
88
  self._session_info = {}
88
89
  for event in sessions:
89
90
  agg_id = event.aggregate_id
@@ -95,6 +96,13 @@ class SessionSelectorScreen(Screen[None]):
95
96
  "timestamp": event.timestamp,
96
97
  "status": "started",
97
98
  }
99
+ # Always update seed_goal/execution_id when present
100
+ if event.data.get("seed_goal"):
101
+ self._session_info[agg_id]["seed_goal"] = event.data["seed_goal"]
102
+ if event.data.get("execution_id"):
103
+ self._session_info[agg_id]["execution_id"] = event.data["execution_id"]
104
+ # Track latest activity time for sorting
105
+ self._session_info[agg_id]["timestamp"] = event.timestamp
98
106
  # Update status based on event type
99
107
  if "completed" in event.type:
100
108
  self._session_info[agg_id]["status"] = "completed"
@@ -26,7 +26,6 @@ class TestInitWorkflowRuntimeHandoff:
26
26
  ):
27
27
  await _start_workflow(
28
28
  Path("/tmp/generated-seed.yaml"),
29
- use_orchestrator=True,
30
29
  runtime_backend="codex",
31
30
  )
32
31
 
@@ -49,7 +48,6 @@ class TestInitWorkflowRuntimeHandoff:
49
48
  "init",
50
49
  "start",
51
50
  "Build a REST API",
52
- "--orchestrator",
53
51
  "--runtime",
54
52
  "codex",
55
53
  "--llm-backend",
@@ -58,8 +56,9 @@ class TestInitWorkflowRuntimeHandoff:
58
56
  )
59
57
 
60
58
  assert result.exit_code == 0
61
- assert mock_run_interview.call_args.args[6] == "codex"
62
- assert mock_run_interview.call_args.args[5] == "codex"
59
+ # _run_interview(context, resume, state_dir, debug, runtime, llm_backend)
60
+ assert mock_run_interview.call_args.args[5] == "codex" # llm_backend
61
+ assert mock_run_interview.call_args.args[4] == "codex" # runtime
63
62
 
64
63
  def test_get_adapter_uses_interview_use_case_for_codex(self) -> None:
65
64
  """Interview adapter creation stays backend-neutral for Codex."""
@@ -70,7 +69,6 @@ class TestInitWorkflowRuntimeHandoff:
70
69
  return_value=mock_adapter,
71
70
  ) as mock_create_adapter:
72
71
  adapter = _get_adapter(
73
- use_orchestrator=True,
74
72
  backend="codex",
75
73
  for_interview=True,
76
74
  debug=True,
@@ -90,7 +88,6 @@ class TestInitWorkflowRuntimeHandoff:
90
88
  return_value=mock_adapter,
91
89
  ) as mock_create_adapter:
92
90
  adapter = _get_adapter(
93
- use_orchestrator=True,
94
91
  backend="opencode",
95
92
  for_interview=True,
96
93
  debug=False,
@@ -255,7 +255,7 @@ class TestShorthandCommands:
255
255
 
256
256
  def test_init_list_subcommand_still_works(self) -> None:
257
257
  """Test backward compat: 'ouroboros init list' still routes to list."""
258
- with patch("ouroboros.cli.commands.init.LiteLLMAdapter"):
258
+ with patch("ouroboros.cli.commands.init.create_llm_adapter"):
259
259
  with patch("ouroboros.cli.commands.init.asyncio.run") as mock_run:
260
260
  mock_run.return_value = []
261
261
  result = runner.invoke(app, ["init", "list"])