ouroboros-ai 0.25.3.dev1__tar.gz → 0.25.3.dev2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (470) hide show
  1. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/PKG-INFO +1 -1
  2. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/cli-reference.md +8 -8
  3. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/running-with-claude-code.md +1 -1
  4. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/_version.py +2 -2
  5. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/bigbang/ambiguity.py +31 -18
  6. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/init.py +8 -13
  7. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/e2e/test_cli_commands.py +3 -3
  8. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/bigbang/test_ambiguity.py +62 -0
  9. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/test_main.py +1 -1
  10. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.claude/settings.json +0 -0
  11. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.claude-plugin/.mcp.json +0 -0
  12. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.claude-plugin/marketplace.json +0 -0
  13. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.claude-plugin/plugin.json +0 -0
  14. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.env.example +0 -0
  15. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.github/workflows/dev-publish.yml +0 -0
  16. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.github/workflows/lint.yml +0 -0
  17. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.github/workflows/release.yml +0 -0
  18. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.github/workflows/test.yml +0 -0
  19. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.gitignore +0 -0
  20. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.mcp.json +0 -0
  21. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.pre-commit-config.yaml +0 -0
  22. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.python-version +0 -0
  23. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/CHANGELOG.md +0 -0
  24. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/CLAUDE.md +0 -0
  25. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/CONTRIBUTING.md +0 -0
  26. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/HANDOFF.md +0 -0
  27. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/LICENSE +0 -0
  28. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/README.ko.md +0 -0
  29. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/README.md +0 -0
  30. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/architect.md +0 -0
  31. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/contrarian.md +0 -0
  32. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/evaluator.md +0 -0
  33. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/hacker.md +0 -0
  34. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/ontologist.md +0 -0
  35. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/qa-judge.md +0 -0
  36. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/researcher.md +0 -0
  37. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/seed-architect.md +0 -0
  38. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/simplifier.md +0 -0
  39. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/socratic-interviewer.md +0 -0
  40. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/cancel.md +0 -0
  41. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/evaluate.md +0 -0
  42. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/evolve.md +0 -0
  43. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/help.md +0 -0
  44. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/interview.md +0 -0
  45. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/ralph.md +0 -0
  46. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/run.md +0 -0
  47. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/seed.md +0 -0
  48. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/setup.md +0 -0
  49. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/status.md +0 -0
  50. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/tutorial.md +0 -0
  51. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/unstuck.md +0 -0
  52. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/welcome.md +0 -0
  53. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/.gitignore +0 -0
  54. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/Cargo.lock +0 -0
  55. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/Cargo.toml +0 -0
  56. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/README.md +0 -0
  57. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/db.rs +0 -0
  58. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/main.rs +0 -0
  59. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/mock.rs +0 -0
  60. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/state.rs +0 -0
  61. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/dashboard.rs +0 -0
  62. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/execution.rs +0 -0
  63. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/lineage.rs +0 -0
  64. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/logs.rs +0 -0
  65. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/mod.rs +0 -0
  66. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/session_selector.rs +0 -0
  67. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/README.md +0 -0
  68. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/api/README.md +0 -0
  69. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/api/coordinator-agent-design.md +0 -0
  70. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/api/core.md +0 -0
  71. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/api/mcp.md +0 -0
  72. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/api/parallel-dx-design.md +0 -0
  73. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/api/parallel-execution.md +0 -0
  74. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/architecture.md +0 -0
  75. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/contributing/architecture-overview.md +0 -0
  76. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/contributing/key-patterns.md +0 -0
  77. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/contributing/testing-guide.md +0 -0
  78. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/examples/mcp-config.yaml +0 -0
  79. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/getting-started.md +0 -0
  80. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/guides/cli-usage.md +0 -0
  81. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/guides/common-workflows.md +0 -0
  82. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/guides/issue-176-subagent-mcp-inheritance.md +0 -0
  83. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/guides/language-support.md +0 -0
  84. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/guides/quick-start.md +0 -0
  85. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/guides/seed-authoring.md +0 -0
  86. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/guides/tui-usage.md +0 -0
  87. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/images/ouroboros.png +0 -0
  88. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/ontological-framework/HANDOFF.md +0 -0
  89. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/ontological-framework/aop-design.md +0 -0
  90. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/ontological-framework/architecture.md +0 -0
  91. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/ontological-framework/requirements.md +0 -0
  92. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/coordinator_test_seed.yaml +0 -0
  93. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/dummy_seed.yaml +0 -0
  94. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/parallel_subac_test_seed.yaml +0 -0
  95. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/subac_test_seed.yaml +0 -0
  96. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/task_manager/README.md +0 -0
  97. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/task_manager/__init__.py +0 -0
  98. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/task_manager/__main__.py +0 -0
  99. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/task_manager/cli.py +0 -0
  100. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/task_manager/models.py +0 -0
  101. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/task_manager/storage.py +0 -0
  102. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/test_display.py +0 -0
  103. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/hooks/hooks.json +0 -0
  104. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/playground/src/__init__.py +0 -0
  105. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/playground/src/config.py +0 -0
  106. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/playground/src/models.py +0 -0
  107. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/project-context.md +0 -0
  108. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/pyproject.toml +0 -0
  109. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/scripts/drift-monitor.py +0 -0
  110. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/scripts/keyword-detector.py +0 -0
  111. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/scripts/ralph-rewind.py +0 -0
  112. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/scripts/ralph.py +0 -0
  113. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/scripts/ralph.sh +0 -0
  114. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/scripts/session-start.py +0 -0
  115. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/scripts/version-check.py +0 -0
  116. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/cancel/SKILL.md +0 -0
  117. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/evaluate/SKILL.md +0 -0
  118. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/evolve/SKILL.md +0 -0
  119. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/help/SKILL.md +0 -0
  120. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/interview/SKILL.md +0 -0
  121. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/qa/SKILL.md +0 -0
  122. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/ralph/SKILL.md +0 -0
  123. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/run/SKILL.md +0 -0
  124. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/seed/SKILL.md +0 -0
  125. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/setup/SKILL.md +0 -0
  126. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/status/SKILL.md +0 -0
  127. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/tutorial/SKILL.md +0 -0
  128. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/unstuck/SKILL.md +0 -0
  129. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/update/SKILL.md +0 -0
  130. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/welcome/SKILL.md +0 -0
  131. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/__init__.py +0 -0
  132. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/__main__.py +0 -0
  133. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/__init__.py +0 -0
  134. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/advocate.md +0 -0
  135. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/analysis-agent.md +0 -0
  136. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/architect.md +0 -0
  137. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/code-executor.md +0 -0
  138. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/codebase-explorer.md +0 -0
  139. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/consensus-reviewer.md +0 -0
  140. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/contrarian.md +0 -0
  141. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/evaluator.md +0 -0
  142. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/hacker.md +0 -0
  143. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/judge.md +0 -0
  144. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/loader.py +0 -0
  145. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/ontologist.md +0 -0
  146. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/ontology-analyst.md +0 -0
  147. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/qa-judge.md +0 -0
  148. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/research-agent.md +0 -0
  149. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/researcher.md +0 -0
  150. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/seed-architect.md +0 -0
  151. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/semantic-evaluator.md +0 -0
  152. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/simplifier.md +0 -0
  153. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/socratic-interviewer.md +0 -0
  154. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/bigbang/__init__.py +0 -0
  155. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/bigbang/explore.py +0 -0
  156. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/bigbang/interview.py +0 -0
  157. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/bigbang/seed_generator.py +0 -0
  158. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/__init__.py +0 -0
  159. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/__init__.py +0 -0
  160. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/cancel.py +0 -0
  161. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/config.py +0 -0
  162. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/mcp.py +0 -0
  163. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/run.py +0 -0
  164. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/status.py +0 -0
  165. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/tui.py +0 -0
  166. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/formatters/__init__.py +0 -0
  167. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/formatters/panels.py +0 -0
  168. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/formatters/progress.py +0 -0
  169. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/formatters/tables.py +0 -0
  170. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/formatters/workflow_display.py +0 -0
  171. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/main.py +0 -0
  172. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/config/__init__.py +0 -0
  173. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/config/loader.py +0 -0
  174. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/config/models.py +0 -0
  175. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/__init__.py +0 -0
  176. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/ac_tree.py +0 -0
  177. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/context.py +0 -0
  178. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/errors.py +0 -0
  179. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/file_lock.py +0 -0
  180. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/git_workflow.py +0 -0
  181. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/lineage.py +0 -0
  182. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/ontology_aspect.py +0 -0
  183. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/ontology_questions.py +0 -0
  184. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/security.py +0 -0
  185. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/seed.py +0 -0
  186. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/text.py +0 -0
  187. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/types.py +0 -0
  188. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/__init__.py +0 -0
  189. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/artifact_collector.py +0 -0
  190. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/consensus.py +0 -0
  191. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/json_utils.py +0 -0
  192. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/languages.py +0 -0
  193. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/mechanical.py +0 -0
  194. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/models.py +0 -0
  195. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/pipeline.py +0 -0
  196. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/semantic.py +0 -0
  197. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/trigger.py +0 -0
  198. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/events/__init__.py +0 -0
  199. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/events/base.py +0 -0
  200. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/events/decomposition.py +0 -0
  201. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/events/evaluation.py +0 -0
  202. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/events/interview.py +0 -0
  203. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/events/lineage.py +0 -0
  204. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/events/ontology.py +0 -0
  205. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evolution/__init__.py +0 -0
  206. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evolution/convergence.py +0 -0
  207. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evolution/loop.py +0 -0
  208. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evolution/projector.py +0 -0
  209. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evolution/reflect.py +0 -0
  210. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evolution/regression.py +0 -0
  211. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evolution/wonder.py +0 -0
  212. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/execution/__init__.py +0 -0
  213. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/execution/atomicity.py +0 -0
  214. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/execution/decomposition.py +0 -0
  215. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/execution/double_diamond.py +0 -0
  216. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/execution/subagent.py +0 -0
  217. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/__init__.py +0 -0
  218. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/client/__init__.py +0 -0
  219. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/client/adapter.py +0 -0
  220. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/client/manager.py +0 -0
  221. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/client/protocol.py +0 -0
  222. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/errors.py +0 -0
  223. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/job_manager.py +0 -0
  224. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/resources/__init__.py +0 -0
  225. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/resources/handlers.py +0 -0
  226. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/server/__init__.py +0 -0
  227. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/server/adapter.py +0 -0
  228. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/server/protocol.py +0 -0
  229. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/server/security.py +0 -0
  230. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/tools/__init__.py +0 -0
  231. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/tools/dashboard.py +0 -0
  232. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/tools/definitions.py +0 -0
  233. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/tools/qa.py +0 -0
  234. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/tools/registry.py +0 -0
  235. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/types.py +0 -0
  236. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/observability/__init__.py +0 -0
  237. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/observability/drift.py +0 -0
  238. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/observability/logging.py +0 -0
  239. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/observability/retrospective.py +0 -0
  240. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/__init__.py +0 -0
  241. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/adapter.py +0 -0
  242. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/coordinator.py +0 -0
  243. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/dependency_analyzer.py +0 -0
  244. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/events.py +0 -0
  245. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/execution_strategy.py +0 -0
  246. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/level_context.py +0 -0
  247. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/mcp_config.py +0 -0
  248. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/mcp_tools.py +0 -0
  249. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/parallel_executor.py +0 -0
  250. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/runner.py +0 -0
  251. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/session.py +0 -0
  252. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/workflow_state.py +0 -0
  253. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/__init__.py +0 -0
  254. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/checkpoint.py +0 -0
  255. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/event_store.py +0 -0
  256. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/migrations/__init__.py +0 -0
  257. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/migrations/runner.py +0 -0
  258. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
  259. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/schema.py +0 -0
  260. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/uow.py +0 -0
  261. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/__init__.py +0 -0
  262. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/agents/__init__.py +0 -0
  263. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/agents/pool.py +0 -0
  264. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/agents/registry.py +0 -0
  265. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/orchestration/__init__.py +0 -0
  266. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/orchestration/router.py +0 -0
  267. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/orchestration/scheduler.py +0 -0
  268. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/skills/__init__.py +0 -0
  269. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/skills/docs.py +0 -0
  270. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/skills/executor.py +0 -0
  271. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/skills/keywords.py +0 -0
  272. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/skills/registry.py +0 -0
  273. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/providers/__init__.py +0 -0
  274. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/providers/anthropic_adapter.py +0 -0
  275. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/providers/base.py +0 -0
  276. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/providers/claude_code_adapter.py +0 -0
  277. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/providers/litellm_adapter.py +0 -0
  278. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/py.typed +0 -0
  279. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/resilience/__init__.py +0 -0
  280. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/resilience/lateral.py +0 -0
  281. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/resilience/stagnation.py +0 -0
  282. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/routing/__init__.py +0 -0
  283. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/routing/complexity.py +0 -0
  284. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/routing/downgrade.py +0 -0
  285. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/routing/escalation.py +0 -0
  286. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/routing/router.py +0 -0
  287. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/routing/tiers.py +0 -0
  288. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/secondary/__init__.py +0 -0
  289. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/secondary/scheduler.py +0 -0
  290. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/secondary/todo_registry.py +0 -0
  291. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/strategies/__init__.py +0 -0
  292. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/strategies/devil_advocate.py +0 -0
  293. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/__init__.py +0 -0
  294. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/app.py +0 -0
  295. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/components/__init__.py +0 -0
  296. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/components/agents_panel.py +0 -0
  297. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/components/event_log.py +0 -0
  298. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/components/progress.py +0 -0
  299. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/components/token_tracker.py +0 -0
  300. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/events.py +0 -0
  301. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/__init__.py +0 -0
  302. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/confirm_rewind.py +0 -0
  303. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/dashboard.py +0 -0
  304. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/dashboard_v2.py +0 -0
  305. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/dashboard_v3.py +0 -0
  306. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/debug.py +0 -0
  307. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/execution.py +0 -0
  308. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/hud_dashboard.py +0 -0
  309. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/lineage_detail.py +0 -0
  310. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/lineage_selector.py +0 -0
  311. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/logs.py +0 -0
  312. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/session_selector.py +0 -0
  313. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/__init__.py +0 -0
  314. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/ac_progress.py +0 -0
  315. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/ac_tree.py +0 -0
  316. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/agent_activity.py +0 -0
  317. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/cost_tracker.py +0 -0
  318. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/drift_meter.py +0 -0
  319. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/lineage_tree.py +0 -0
  320. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/parallel_graph.py +0 -0
  321. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/phase_progress.py +0 -0
  322. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/verification/__init__.py +0 -0
  323. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/verification/extractor.py +0 -0
  324. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/verification/models.py +0 -0
  325. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/verification/verifier.py +0 -0
  326. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/__init__.py +0 -0
  327. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/conftest.py +0 -0
  328. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/e2e/__init__.py +0 -0
  329. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/e2e/conftest.py +0 -0
  330. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/e2e/test_full_workflow.py +0 -0
  331. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/e2e/test_session_persistence.py +0 -0
  332. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/fixtures/test_atomicity_seed.yml +0 -0
  333. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/__init__.py +0 -0
  334. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/mcp/__init__.py +0 -0
  335. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/mcp/conftest.py +0 -0
  336. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/mcp/test_client_adapter.py +0 -0
  337. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/mcp/test_client_manager.py +0 -0
  338. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/mcp/test_server_adapter.py +0 -0
  339. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/plugin/test_orchestration.py +0 -0
  340. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/test_entry_point.py +0 -0
  341. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/__init__.py +0 -0
  342. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/agents/__init__.py +0 -0
  343. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/agents/test_loader.py +0 -0
  344. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/bigbang/__init__.py +0 -0
  345. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/bigbang/test_explore.py +0 -0
  346. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/bigbang/test_interview.py +0 -0
  347. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/bigbang/test_seed_generator.py +0 -0
  348. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/__init__.py +0 -0
  349. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/formatters/__init__.py +0 -0
  350. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/formatters/test_console.py +0 -0
  351. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/formatters/test_panels.py +0 -0
  352. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/formatters/test_progress.py +0 -0
  353. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/formatters/test_tables.py +0 -0
  354. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/formatters/test_workflow_display.py +0 -0
  355. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/test_cancel.py +0 -0
  356. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/test_mcp_startup_cleanup.py +0 -0
  357. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/config/__init__.py +0 -0
  358. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/config/test_loader.py +0 -0
  359. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/config/test_models.py +0 -0
  360. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/__init__.py +0 -0
  361. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_ac_tree.py +0 -0
  362. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_context.py +0 -0
  363. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_errors.py +0 -0
  364. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_git_workflow.py +0 -0
  365. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_ontology_aspect.py +0 -0
  366. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_ontology_questions.py +0 -0
  367. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_security.py +0 -0
  368. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_seed.py +0 -0
  369. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_types.py +0 -0
  370. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/evaluation/__init__.py +0 -0
  371. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/evaluation/test_consensus.py +0 -0
  372. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/evaluation/test_languages.py +0 -0
  373. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/evaluation/test_mechanical.py +0 -0
  374. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/evaluation/test_models.py +0 -0
  375. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/evaluation/test_semantic.py +0 -0
  376. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/evaluation/test_trigger.py +0 -0
  377. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/events/__init__.py +0 -0
  378. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/events/test_base.py +0 -0
  379. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/events/test_decomposition_events.py +0 -0
  380. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/execution/__init__.py +0 -0
  381. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/execution/test_atomicity.py +0 -0
  382. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/execution/test_decomposition.py +0 -0
  383. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/execution/test_double_diamond.py +0 -0
  384. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/execution/test_subagent_isolation.py +0 -0
  385. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/__init__.py +0 -0
  386. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/client/__init__.py +0 -0
  387. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/client/test_adapter.py +0 -0
  388. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/client/test_manager.py +0 -0
  389. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/conftest.py +0 -0
  390. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/server/__init__.py +0 -0
  391. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/server/test_adapter.py +0 -0
  392. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/server/test_security.py +0 -0
  393. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/test_errors.py +0 -0
  394. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/test_job_manager.py +0 -0
  395. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/test_types.py +0 -0
  396. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/tools/__init__.py +0 -0
  397. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/tools/test_definitions.py +0 -0
  398. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/tools/test_qa_integration.py +0 -0
  399. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/tools/test_registry.py +0 -0
  400. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/observability/__init__.py +0 -0
  401. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/observability/test_drift.py +0 -0
  402. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/observability/test_logging.py +0 -0
  403. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/observability/test_retrospective.py +0 -0
  404. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/__init__.py +0 -0
  405. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_adapter.py +0 -0
  406. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_coordinator.py +0 -0
  407. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_events.py +0 -0
  408. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_execution_strategy.py +0 -0
  409. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_inflight_cancellation.py +0 -0
  410. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_level_context.py +0 -0
  411. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_mcp_config.py +0 -0
  412. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_mcp_tools.py +0 -0
  413. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_runner.py +0 -0
  414. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_runner_cancellation.py +0 -0
  415. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_session.py +0 -0
  416. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_workflow_state.py +0 -0
  417. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/persistence/__init__.py +0 -0
  418. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/persistence/test_checkpoint.py +0 -0
  419. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/persistence/test_event_store.py +0 -0
  420. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/persistence/test_schema.py +0 -0
  421. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/persistence/test_uow.py +0 -0
  422. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/plugin/__init__.py +0 -0
  423. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/plugin/agents/__init__.py +0 -0
  424. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/plugin/agents/test_registry.py +0 -0
  425. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/plugin/orchestration/__init__.py +0 -0
  426. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/plugin/orchestration/test_model_router.py +0 -0
  427. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/plugin/skills/__init__.py +0 -0
  428. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/plugin/skills/test_registry.py +0 -0
  429. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/providers/__init__.py +0 -0
  430. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/providers/test_base.py +0 -0
  431. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/providers/test_claude_code_adapter.py +0 -0
  432. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/providers/test_litellm_adapter.py +0 -0
  433. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/resilience/__init__.py +0 -0
  434. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/resilience/test_lateral.py +0 -0
  435. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/resilience/test_stagnation.py +0 -0
  436. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/routing/__init__.py +0 -0
  437. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/routing/test_complexity.py +0 -0
  438. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/routing/test_downgrade.py +0 -0
  439. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/routing/test_escalation.py +0 -0
  440. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/routing/test_router.py +0 -0
  441. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/routing/test_tiers.py +0 -0
  442. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/scripts/test_keyword_detector.py +0 -0
  443. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/scripts/test_version_check.py +0 -0
  444. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/secondary/__init__.py +0 -0
  445. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/secondary/test_scheduler.py +0 -0
  446. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/secondary/test_todo_registry.py +0 -0
  447. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_artifact_collector.py +0 -0
  448. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_convergence.py +0 -0
  449. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_dashboard.py +0 -0
  450. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_dependencies_configured.py +0 -0
  451. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_evolve_rewind.py +0 -0
  452. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_evolve_step.py +0 -0
  453. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_main_entry_point.py +0 -0
  454. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_module_structure.py +0 -0
  455. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_project_initialization.py +0 -0
  456. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_projector_rewind.py +0 -0
  457. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_ralph_parser.py +0 -0
  458. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_ralph_rewind.py +0 -0
  459. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_regression.py +0 -0
  460. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_tooling_configuration.py +0 -0
  461. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_verification.py +0 -0
  462. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/tui/__init__.py +0 -0
  463. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/tui/test_app.py +0 -0
  464. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/tui/test_cancelled_display.py +0 -0
  465. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/tui/test_events.py +0 -0
  466. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/tui/test_lineage_viewer.py +0 -0
  467. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/tui/test_screens.py +0 -0
  468. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/tui/test_widgets.py +0 -0
  469. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tools/sync_github_project.py +0 -0
  470. {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ouroboros-ai
3
- Version: 0.25.3.dev1
3
+ Version: 0.25.3.dev2
4
4
  Summary: Self-Improving AI Workflow System
5
5
  Author-email: Q00 <jqyu.lee@gmail.com>
6
6
  License-File: LICENSE
@@ -83,7 +83,7 @@ ouroboros init [start] [OPTIONS] [CONTEXT]
83
83
  |--------|-------------|
84
84
  | `-r, --resume TEXT` | Resume an existing interview by ID |
85
85
  | `--state-dir DIRECTORY` | Custom directory for interview state files |
86
- | `-o, --orchestrator` | Use Claude Code (Max Plan) instead of LiteLLM. No API key required |
86
+ | `-o, --orchestrator` | Use Claude Code (Max Plan) instead of Anthropic API. No API key required |
87
87
  | `-d, --debug` | Show verbose logs including debug messages |
88
88
 
89
89
  **Examples:**
@@ -493,21 +493,21 @@ ouroboros run seed.yaml
493
493
  ouroboros monitor
494
494
  ```
495
495
 
496
- ### Using LiteLLM (External API)
496
+ ### Using Anthropic API (Default Non-Orchestrator Path)
497
497
 
498
- Requires API key (OPENROUTER_API_KEY, ANTHROPIC_API_KEY, etc.)
498
+ Requires `ANTHROPIC_API_KEY`.
499
499
 
500
500
  ```bash
501
501
  # 1. Initialize configuration
502
502
  ouroboros config init
503
503
 
504
- # 2. Set your API key
505
- ouroboros config set providers.openrouter.api_key $OPENROUTER_API_KEY
504
+ # 2. Export your API key
505
+ export ANTHROPIC_API_KEY=your-key-here
506
506
 
507
507
  # 3. Start interview
508
508
  ouroboros init "Build a REST API for task management"
509
509
 
510
- # 4. Execute workflow (use --no-orchestrator for LiteLLM path)
510
+ # 4. Execute workflow (use --no-orchestrator for the standard path)
511
511
  ouroboros run seed.yaml --no-orchestrator
512
512
  ```
513
513
 
@@ -517,8 +517,8 @@ ouroboros run seed.yaml --no-orchestrator
517
517
 
518
518
  | Variable | Description |
519
519
  |----------|-------------|
520
- | `OPENROUTER_API_KEY` | OpenRouter API key for LiteLLM |
521
- | `ANTHROPIC_API_KEY` | Anthropic API key for LiteLLM |
520
+ | `OPENROUTER_API_KEY` | OpenRouter API key for optional LiteLLM-based integrations |
521
+ | `ANTHROPIC_API_KEY` | Anthropic API key for direct Anthropic-backed interview mode |
522
522
  | `OPENAI_API_KEY` | OpenAI API key for LiteLLM |
523
523
 
524
524
  ---
@@ -136,7 +136,7 @@ The orchestrator uses `claude-agent-sdk` which connects directly to your authent
136
136
  # Start interactive interview (Claude Code)
137
137
  uv run ouroboros init start --orchestrator "Your idea here"
138
138
 
139
- # Start interactive interview (LiteLLM - needs API key)
139
+ # Start interactive interview (Anthropic API - needs ANTHROPIC_API_KEY)
140
140
  uv run ouroboros init start "Your idea here"
141
141
 
142
142
  # Resume an interrupted interview
@@ -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.dev1'
32
- __version_tuple__ = version_tuple = (0, 25, 3, 'dev1')
31
+ __version__ = version = '0.25.3.dev2'
32
+ __version_tuple__ = version_tuple = (0, 25, 3, 'dev2')
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -20,12 +20,7 @@ import structlog
20
20
  from ouroboros.bigbang.interview import InterviewState
21
21
  from ouroboros.core.errors import ProviderError
22
22
  from ouroboros.core.types import Result
23
- from ouroboros.providers.base import CompletionConfig, Message, MessageRole
24
-
25
- try:
26
- from ouroboros.providers.litellm_adapter import LiteLLMAdapter
27
- except ImportError:
28
- LiteLLMAdapter = None # type: ignore[assignment,misc]
23
+ from ouroboros.providers.base import CompletionConfig, LLMAdapter, Message, MessageRole
29
24
 
30
25
  log = structlog.get_logger()
31
26
 
@@ -138,7 +133,7 @@ class AmbiguityScorer:
138
133
  max_retries: Maximum retry attempts, or None for unlimited (default).
139
134
 
140
135
  Example:
141
- scorer = AmbiguityScorer(llm_adapter=LiteLLMAdapter())
136
+ scorer = AmbiguityScorer(llm_adapter=some_adapter)
142
137
 
143
138
  result = await scorer.score(interview_state)
144
139
  if result.is_ok:
@@ -151,7 +146,7 @@ class AmbiguityScorer:
151
146
  questions = scorer.generate_clarification_questions(ambiguity.breakdown)
152
147
  """
153
148
 
154
- llm_adapter: LiteLLMAdapter
149
+ llm_adapter: LLMAdapter
155
150
  model: str = DEFAULT_MODEL
156
151
  temperature: float = SCORING_TEMPERATURE
157
152
  initial_max_tokens: int = 2048
@@ -414,17 +409,14 @@ Analyze each component and provide scores with justifications."""
414
409
  except json.JSONDecodeError as e:
415
410
  raise ValueError(f"Invalid JSON response: {e}") from e
416
411
 
417
- # Validate all required fields are present
418
- required_fields = [
412
+ # Numeric score fields must be present. Missing justifications are recoverable.
413
+ required_score_fields = [
419
414
  "goal_clarity_score",
420
- "goal_clarity_justification",
421
415
  "constraint_clarity_score",
422
- "constraint_clarity_justification",
423
416
  "success_criteria_clarity_score",
424
- "success_criteria_clarity_justification",
425
417
  ]
426
418
 
427
- for field_name in required_fields:
419
+ for field_name in required_score_fields:
428
420
  if field_name not in data:
429
421
  raise ValueError(f"Missing required field: {field_name}")
430
422
 
@@ -433,6 +425,15 @@ Analyze each component and provide scores with justifications."""
433
425
  score = float(value)
434
426
  return max(0.0, min(1.0, score))
435
427
 
428
+ def justification_for(field_name: str, component_name: str) -> str:
429
+ value = data.get(field_name)
430
+ if value is None:
431
+ return f"{component_name} justification not provided by model."
432
+ text = str(value).strip()
433
+ if not text:
434
+ return f"{component_name} justification not provided by model."
435
+ return text
436
+
436
437
  # Select weights based on project type
437
438
  if is_brownfield:
438
439
  goal_weight = BROWNFIELD_GOAL_CLARITY_WEIGHT
@@ -450,7 +451,10 @@ Analyze each component and provide scores with justifications."""
450
451
  name="Context Clarity",
451
452
  clarity_score=clamp_score(data["context_clarity_score"]),
452
453
  weight=BROWNFIELD_CONTEXT_CLARITY_WEIGHT,
453
- justification=str(data.get("context_clarity_justification", "")),
454
+ justification=justification_for(
455
+ "context_clarity_justification",
456
+ "Context Clarity",
457
+ ),
454
458
  )
455
459
 
456
460
  return ScoreBreakdown(
@@ -458,19 +462,28 @@ Analyze each component and provide scores with justifications."""
458
462
  name="Goal Clarity",
459
463
  clarity_score=clamp_score(data["goal_clarity_score"]),
460
464
  weight=goal_weight,
461
- justification=str(data["goal_clarity_justification"]),
465
+ justification=justification_for(
466
+ "goal_clarity_justification",
467
+ "Goal Clarity",
468
+ ),
462
469
  ),
463
470
  constraint_clarity=ComponentScore(
464
471
  name="Constraint Clarity",
465
472
  clarity_score=clamp_score(data["constraint_clarity_score"]),
466
473
  weight=constraint_weight,
467
- justification=str(data["constraint_clarity_justification"]),
474
+ justification=justification_for(
475
+ "constraint_clarity_justification",
476
+ "Constraint Clarity",
477
+ ),
468
478
  ),
469
479
  success_criteria_clarity=ComponentScore(
470
480
  name="Success Criteria Clarity",
471
481
  clarity_score=clamp_score(data["success_criteria_clarity_score"]),
472
482
  weight=criteria_weight,
473
- justification=str(data["success_criteria_clarity_justification"]),
483
+ justification=justification_for(
484
+ "success_criteria_clarity_justification",
485
+ "Success Criteria Clarity",
486
+ ),
474
487
  ),
475
488
  context_clarity=context_clarity,
476
489
  )
@@ -1,7 +1,7 @@
1
1
  """Init command for starting interactive interview.
2
2
 
3
3
  This command initiates the Big Bang phase interview process.
4
- Supports both LiteLLM (external API) and Claude Code (Max Plan) modes.
4
+ Supports both direct Anthropic API and Claude Code (Max Plan) modes.
5
5
  """
6
6
 
7
7
  import asyncio
@@ -27,13 +27,9 @@ 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
29
  from ouroboros.observability import LoggingConfig, configure_logging
30
+ from ouroboros.providers.anthropic_adapter import AnthropicAdapter
30
31
  from ouroboros.providers.base import LLMAdapter
31
32
 
32
- try:
33
- from ouroboros.providers.litellm_adapter import LiteLLMAdapter
34
- except ImportError:
35
- LiteLLMAdapter = None # type: ignore[assignment,misc]
36
-
37
33
 
38
34
  class SeedGenerationResult(Enum):
39
35
  """Result of seed generation attempt."""
@@ -140,7 +136,7 @@ def _get_adapter(
140
136
  """Get the appropriate LLM adapter.
141
137
 
142
138
  Args:
143
- use_orchestrator: If True, use Claude Code (Max Plan). Otherwise LiteLLM.
139
+ use_orchestrator: If True, use Claude Code (Max Plan). Otherwise Anthropic API.
144
140
  for_interview: If True, enable Read/Glob/Grep tools for codebase exploration.
145
141
  debug: If True, show streaming messages (thinking, tool use).
146
142
 
@@ -160,8 +156,7 @@ def _get_adapter(
160
156
  on_message=_make_message_callback(debug),
161
157
  )
162
158
  return ClaudeCodeAdapter()
163
- else:
164
- return LiteLLMAdapter()
159
+ return AnthropicAdapter()
165
160
 
166
161
 
167
162
  async def _run_interview_loop(
@@ -262,7 +257,7 @@ async def _run_interview(
262
257
  initial_context: Initial context or idea for the interview.
263
258
  resume_id: Optional interview ID to resume.
264
259
  state_dir: Optional custom state directory.
265
- use_orchestrator: If True, use Claude Code (Max Plan) instead of LiteLLM.
260
+ use_orchestrator: If True, use Claude Code (Max Plan) instead of Anthropic API.
266
261
  """
267
262
  # Initialize components
268
263
  llm_adapter = _get_adapter(use_orchestrator, for_interview=True, debug=debug)
@@ -500,7 +495,7 @@ def start(
500
495
  typer.Option(
501
496
  "--orchestrator",
502
497
  "-o",
503
- help="Use Claude Code (Max Plan) instead of LiteLLM. No API key required.",
498
+ help="Use Claude Code (Max Plan) instead of Anthropic API. No API key required.",
504
499
  ),
505
500
  ] = False,
506
501
  debug: Annotated[
@@ -553,7 +548,7 @@ def start(
553
548
  if orchestrator:
554
549
  print_info("Using Claude Code (Max Plan) - no API key required")
555
550
  else:
556
- print_info("Using LiteLLM - API key required")
551
+ print_info("Using Anthropic API - ANTHROPIC_API_KEY required")
557
552
 
558
553
  # Run interview
559
554
  try:
@@ -581,7 +576,7 @@ def list_interviews(
581
576
  ] = None,
582
577
  ) -> None:
583
578
  """List all interview sessions."""
584
- llm_adapter = LiteLLMAdapter()
579
+ llm_adapter = AnthropicAdapter()
585
580
  engine = InterviewEngine(
586
581
  llm_adapter=llm_adapter,
587
582
  state_dir=state_dir or Path.home() / ".ouroboros" / "data",
@@ -74,7 +74,7 @@ class TestInitCommand:
74
74
  ) -> None:
75
75
  """Test init start with context argument."""
76
76
  # Mock the LLM adapter and asyncio.run
77
- with patch("ouroboros.cli.commands.init.LiteLLMAdapter") as mock_adapter_class:
77
+ with patch("ouroboros.cli.commands.init.AnthropicAdapter") as mock_adapter_class:
78
78
  mock_adapter = MagicMock()
79
79
  mock_adapter.complete = mock_interview_llm_provider.complete
80
80
  mock_adapter_class.return_value = mock_adapter
@@ -107,7 +107,7 @@ class TestInitCommand:
107
107
 
108
108
  def test_init_list_no_interviews(self, temp_state_dir: Path) -> None:
109
109
  """Test init list when no interviews exist."""
110
- with patch("ouroboros.cli.commands.init.LiteLLMAdapter"):
110
+ with patch("ouroboros.cli.commands.init.AnthropicAdapter"):
111
111
  with patch("ouroboros.cli.commands.init.asyncio.run") as mock_run:
112
112
  mock_run.return_value = []
113
113
 
@@ -121,7 +121,7 @@ class TestInitCommand:
121
121
 
122
122
  def test_init_resume_missing_interview(self, temp_state_dir: Path) -> None:
123
123
  """Test init resume with non-existent interview ID."""
124
- with patch("ouroboros.cli.commands.init.LiteLLMAdapter") as mock_adapter_class:
124
+ with patch("ouroboros.cli.commands.init.AnthropicAdapter") as mock_adapter_class:
125
125
  mock_adapter = MagicMock()
126
126
  mock_adapter_class.return_value = mock_adapter
127
127
 
@@ -665,6 +665,68 @@ class TestAmbiguityScorerParseResponse:
665
665
  with pytest.raises(ValueError, match="Missing required field"):
666
666
  scorer._parse_scoring_response(response)
667
667
 
668
+ def test_parse_response_missing_success_justification_uses_fallback(self) -> None:
669
+ """_parse_scoring_response tolerates missing success justification."""
670
+ mock_adapter = MagicMock()
671
+ scorer = AmbiguityScorer(llm_adapter=mock_adapter)
672
+
673
+ response = (
674
+ '{"goal_clarity_score": 0.9, "goal_clarity_justification": "Good goal.", '
675
+ '"constraint_clarity_score": 0.8, "constraint_clarity_justification": '
676
+ '"Clear constraints.", "success_criteria_clarity_score": 0.7}'
677
+ )
678
+
679
+ breakdown = scorer._parse_scoring_response(response)
680
+
681
+ assert breakdown.success_criteria_clarity.clarity_score == 0.7
682
+ assert (
683
+ breakdown.success_criteria_clarity.justification
684
+ == "Success Criteria Clarity justification not provided by model."
685
+ )
686
+
687
+ def test_parse_response_missing_goal_justification_uses_fallback(self) -> None:
688
+ """_parse_scoring_response tolerates missing goal justification."""
689
+ mock_adapter = MagicMock()
690
+ scorer = AmbiguityScorer(llm_adapter=mock_adapter)
691
+
692
+ response = (
693
+ '{"goal_clarity_score": 0.85, "constraint_clarity_score": 0.75, '
694
+ '"constraint_clarity_justification": "Good constraints.", '
695
+ '"success_criteria_clarity_score": 0.65, '
696
+ '"success_criteria_clarity_justification": "Clear criteria."}'
697
+ )
698
+
699
+ breakdown = scorer._parse_scoring_response(response)
700
+
701
+ assert breakdown.goal_clarity.clarity_score == 0.85
702
+ assert (
703
+ breakdown.goal_clarity.justification
704
+ == "Goal Clarity justification not provided by model."
705
+ )
706
+
707
+ def test_parse_brownfield_response_missing_context_justification_uses_fallback(self) -> None:
708
+ """_parse_scoring_response tolerates missing brownfield context justification."""
709
+ mock_adapter = MagicMock()
710
+ scorer = AmbiguityScorer(llm_adapter=mock_adapter)
711
+
712
+ response = (
713
+ '{"goal_clarity_score": 0.9, "goal_clarity_justification": "Good goal.", '
714
+ '"constraint_clarity_score": 0.8, "constraint_clarity_justification": '
715
+ '"Clear constraints.", "success_criteria_clarity_score": 0.7, '
716
+ '"success_criteria_clarity_justification": "Clear criteria.", '
717
+ '"context_clarity_score": 0.6}'
718
+ )
719
+
720
+ breakdown = scorer._parse_scoring_response(response, is_brownfield=True)
721
+
722
+ assert breakdown.context_clarity is not None
723
+ assert breakdown.context_clarity.clarity_score == 0.6
724
+ assert breakdown.context_clarity.weight == 0.15
725
+ assert (
726
+ breakdown.context_clarity.justification
727
+ == "Context Clarity justification not provided by model."
728
+ )
729
+
668
730
  def test_parse_response_invalid_json(self) -> None:
669
731
  """_parse_scoring_response raises error for invalid JSON."""
670
732
  mock_adapter = MagicMock()
@@ -240,7 +240,7 @@ class TestShorthandCommands:
240
240
 
241
241
  def test_init_list_subcommand_still_works(self) -> None:
242
242
  """Test backward compat: 'ouroboros init list' still routes to list."""
243
- with patch("ouroboros.cli.commands.init.LiteLLMAdapter"):
243
+ with patch("ouroboros.cli.commands.init.AnthropicAdapter"):
244
244
  with patch("ouroboros.cli.commands.init.asyncio.run") as mock_run:
245
245
  mock_run.return_value = []
246
246
  result = runner.invoke(app, ["init", "list"])