ouroboros-ai 0.27.2.dev2__tar.gz → 0.27.3.dev1__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 (645) hide show
  1. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.claude-plugin/marketplace.json +1 -1
  2. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.claude-plugin/plugin.json +1 -1
  3. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/PKG-INFO +1 -1
  4. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/cli-reference.md +17 -17
  5. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/config-reference.md +1 -3
  6. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/getting-started.md +13 -10
  7. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/runtime-capability-matrix.md +32 -29
  8. ouroboros_ai-0.27.3.dev1/docs/runtime-guides/opencode.md +165 -0
  9. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/setup/SKILL.md +1 -1
  10. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/_version.py +2 -2
  11. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/commands/init.py +4 -2
  12. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/commands/mcp.py +8 -6
  13. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/commands/run.py +2 -1
  14. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/commands/setup.py +213 -6
  15. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/commands/uninstall.py +54 -0
  16. ouroboros_ai-0.27.3.dev1/src/ouroboros/cli/jsonc.py +93 -0
  17. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/__init__.py +12 -18
  18. ouroboros_ai-0.27.3.dev1/src/ouroboros/orchestrator/opencode_event_normalizer.py +414 -0
  19. ouroboros_ai-0.27.3.dev1/src/ouroboros/orchestrator/opencode_runtime.py +1547 -0
  20. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/runtime_factory.py +10 -6
  21. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/providers/__init__.py +5 -5
  22. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/providers/factory.py +15 -10
  23. ouroboros_ai-0.27.3.dev1/src/ouroboros/providers/opencode_adapter.py +660 -0
  24. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/integration/mcp/test_server_adapter.py +14 -3
  25. ouroboros_ai-0.27.3.dev1/tests/unit/cli/test_jsonc.py +141 -0
  26. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_pm_runtime_adapter.py +2 -4
  27. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_setup.py +451 -0
  28. ouroboros_ai-0.27.3.dev1/tests/unit/orchestrator/test_opencode_runtime.py +781 -0
  29. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_runtime_factory.py +16 -53
  30. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/providers/test_factory.py +15 -25
  31. ouroboros_ai-0.27.3.dev1/tests/unit/providers/test_opencode_adapter.py +515 -0
  32. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.claude/settings.json +0 -0
  33. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.claude-plugin/.mcp.json +0 -0
  34. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.env.example +0 -0
  35. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  36. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  37. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  38. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  39. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.github/workflows/dev-publish.yml +0 -0
  40. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.github/workflows/lint.yml +0 -0
  41. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.github/workflows/release.yml +0 -0
  42. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.github/workflows/test.yml +0 -0
  43. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.gitignore +0 -0
  44. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.mcp.json +0 -0
  45. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.ouroboros/mechanical.toml +0 -0
  46. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.ouroboros/seeds/seed_73827177a2a3.yaml +0 -0
  47. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.ouroboros/seeds/seed_78c8e6e41813.yaml +0 -0
  48. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.pre-commit-config.yaml +0 -0
  49. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/.python-version +0 -0
  50. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/CHANGELOG.md +0 -0
  51. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/CLAUDE.md +0 -0
  52. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/CODE_OF_CONDUCT.md +0 -0
  53. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/CONTRIBUTING.md +0 -0
  54. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/HANDOFF.md +0 -0
  55. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/LICENSE +0 -0
  56. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/README.ko.md +0 -0
  57. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/README.md +0 -0
  58. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/SECURITY.md +0 -0
  59. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/UNINSTALL.md +0 -0
  60. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/commands/cancel.md +0 -0
  61. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/commands/evaluate.md +0 -0
  62. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/commands/evolve.md +0 -0
  63. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/commands/help.md +0 -0
  64. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/commands/interview.md +0 -0
  65. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/commands/ralph.md +0 -0
  66. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/commands/run.md +0 -0
  67. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/commands/seed.md +0 -0
  68. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/commands/setup.md +0 -0
  69. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/commands/status.md +0 -0
  70. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/commands/tutorial.md +0 -0
  71. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/commands/unstuck.md +0 -0
  72. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/commands/welcome.md +0 -0
  73. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/crates/ouroboros-tui/.gitignore +0 -0
  74. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/crates/ouroboros-tui/Cargo.lock +0 -0
  75. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/crates/ouroboros-tui/Cargo.toml +0 -0
  76. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/crates/ouroboros-tui/README.md +0 -0
  77. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/crates/ouroboros-tui/src/db.rs +0 -0
  78. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/crates/ouroboros-tui/src/main.rs +0 -0
  79. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/crates/ouroboros-tui/src/mock.rs +0 -0
  80. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/crates/ouroboros-tui/src/state.rs +0 -0
  81. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/crates/ouroboros-tui/src/views/dashboard.rs +0 -0
  82. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/crates/ouroboros-tui/src/views/execution.rs +0 -0
  83. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/crates/ouroboros-tui/src/views/lineage.rs +0 -0
  84. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/crates/ouroboros-tui/src/views/logs.rs +0 -0
  85. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/crates/ouroboros-tui/src/views/mod.rs +0 -0
  86. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/crates/ouroboros-tui/src/views/session_selector.rs +0 -0
  87. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/README.md +0 -0
  88. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/api/README.md +0 -0
  89. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/api/core.md +0 -0
  90. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/api/mcp.md +0 -0
  91. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/architecture.md +0 -0
  92. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/contributing/architecture-overview.md +0 -0
  93. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/contributing/findings-registry.md +0 -0
  94. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/contributing/issue-quality-policy.md +0 -0
  95. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/contributing/key-patterns.md +0 -0
  96. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/contributing/testing-guide.md +0 -0
  97. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/examples/mcp-config.yaml +0 -0
  98. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/guides/evaluation-pipeline.md +0 -0
  99. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/guides/evolution-loop.md +0 -0
  100. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/guides/issue-176-subagent-mcp-inheritance.md +0 -0
  101. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/guides/mcp-bridge.md +0 -0
  102. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/guides/seed-authoring.md +0 -0
  103. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/guides/tui-usage.md +0 -0
  104. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/images/PLACEHOLDER_README.md +0 -0
  105. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/images/ouroboros.png +0 -0
  106. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/platform-support.md +0 -0
  107. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/runtime-guides/claude-code.md +0 -0
  108. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/docs/runtime-guides/codex.md +0 -0
  109. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/examples/coordinator_test_seed.yaml +0 -0
  110. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/examples/dummy_seed.yaml +0 -0
  111. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/examples/parallel_subac_test_seed.yaml +0 -0
  112. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/examples/subac_test_seed.yaml +0 -0
  113. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/examples/task_manager/README.md +0 -0
  114. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/examples/task_manager/__init__.py +0 -0
  115. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/examples/task_manager/__main__.py +0 -0
  116. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/examples/task_manager/cli.py +0 -0
  117. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/examples/task_manager/models.py +0 -0
  118. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/examples/task_manager/storage.py +0 -0
  119. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/examples/test_display.py +0 -0
  120. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/hooks/hooks.json +0 -0
  121. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/llms-full.txt +0 -0
  122. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/llms.txt +0 -0
  123. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/project-context.md +0 -0
  124. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/pyproject.toml +0 -0
  125. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/scripts/drift-monitor.py +0 -0
  126. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/scripts/install.sh +0 -0
  127. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/scripts/keyword-detector.py +0 -0
  128. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/scripts/mcp-serve.sh +0 -0
  129. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/scripts/ralph-rewind.py +0 -0
  130. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/scripts/ralph.py +0 -0
  131. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/scripts/ralph.sh +0 -0
  132. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/scripts/session-start.py +0 -0
  133. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/scripts/sync-plugin-version.py +0 -0
  134. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/scripts/version-check.py +0 -0
  135. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/brownfield/SKILL.md +0 -0
  136. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/cancel/SKILL.md +0 -0
  137. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/evaluate/SKILL.md +0 -0
  138. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/evolve/SKILL.md +0 -0
  139. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/help/SKILL.md +0 -0
  140. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/interview/SKILL.md +0 -0
  141. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/pm/SKILL.md +0 -0
  142. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/publish/SKILL.md +0 -0
  143. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/qa/SKILL.md +0 -0
  144. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/ralph/SKILL.md +0 -0
  145. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/run/SKILL.md +0 -0
  146. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/seed/SKILL.md +0 -0
  147. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/status/SKILL.md +0 -0
  148. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/tutorial/SKILL.md +0 -0
  149. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/unstuck/SKILL.md +0 -0
  150. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/update/SKILL.md +0 -0
  151. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/skills/welcome/SKILL.md +0 -0
  152. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/__init__.py +0 -0
  153. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/__main__.py +0 -0
  154. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/__init__.py +0 -0
  155. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/advocate.md +0 -0
  156. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/analysis-agent.md +0 -0
  157. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/architect.md +0 -0
  158. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/breadth-keeper.md +0 -0
  159. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/code-executor.md +0 -0
  160. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/codebase-explorer.md +0 -0
  161. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/consensus-reviewer.md +0 -0
  162. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/contrarian.md +0 -0
  163. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/evaluator.md +0 -0
  164. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/hacker.md +0 -0
  165. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/judge.md +0 -0
  166. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/loader.py +0 -0
  167. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/ontologist.md +0 -0
  168. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/ontology-analyst.md +0 -0
  169. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/qa-judge.md +0 -0
  170. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/research-agent.md +0 -0
  171. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/researcher.md +0 -0
  172. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/seed-architect.md +0 -0
  173. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/seed-closer.md +0 -0
  174. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/semantic-evaluator.md +0 -0
  175. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/simplifier.md +0 -0
  176. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/agents/socratic-interviewer.md +0 -0
  177. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/bigbang/__init__.py +0 -0
  178. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/bigbang/ambiguity.py +0 -0
  179. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/bigbang/brownfield.py +0 -0
  180. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/bigbang/explore.py +0 -0
  181. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/bigbang/interview.py +0 -0
  182. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/bigbang/pm_completion.py +0 -0
  183. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/bigbang/pm_document.py +0 -0
  184. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/bigbang/pm_interview.py +0 -0
  185. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/bigbang/pm_seed.py +0 -0
  186. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/bigbang/question_classifier.py +0 -0
  187. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/bigbang/seed_generator.py +0 -0
  188. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/__init__.py +0 -0
  189. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/commands/__init__.py +0 -0
  190. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/commands/cancel.py +0 -0
  191. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/commands/config.py +0 -0
  192. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/commands/pm.py +0 -0
  193. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/commands/status.py +0 -0
  194. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/commands/tui.py +0 -0
  195. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/formatters/__init__.py +0 -0
  196. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/formatters/panels.py +0 -0
  197. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/formatters/progress.py +0 -0
  198. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/formatters/prompting.py +0 -0
  199. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/formatters/tables.py +0 -0
  200. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/formatters/workflow_display.py +0 -0
  201. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/cli/main.py +0 -0
  202. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/codex/__init__.py +0 -0
  203. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/codex/artifacts.py +0 -0
  204. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/codex/ouroboros.md +0 -0
  205. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/codex_permissions.py +0 -0
  206. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/config/__init__.py +0 -0
  207. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/config/loader.py +0 -0
  208. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/config/models.py +0 -0
  209. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/__init__.py +0 -0
  210. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/ac_tree.py +0 -0
  211. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/context.py +0 -0
  212. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/errors.py +0 -0
  213. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/file_lock.py +0 -0
  214. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/git_workflow.py +0 -0
  215. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/initial_context.py +0 -0
  216. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/json_utils.py +0 -0
  217. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/lineage.py +0 -0
  218. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/ontology_aspect.py +0 -0
  219. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/ontology_questions.py +0 -0
  220. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/project_paths.py +0 -0
  221. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/retry.py +0 -0
  222. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/security.py +0 -0
  223. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/seed.py +0 -0
  224. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/text.py +0 -0
  225. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/ttl_cache.py +0 -0
  226. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/types.py +0 -0
  227. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/core/worktree.py +0 -0
  228. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evaluation/__init__.py +0 -0
  229. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evaluation/artifact_collector.py +0 -0
  230. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evaluation/consensus.py +0 -0
  231. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evaluation/json_utils.py +0 -0
  232. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evaluation/languages.py +0 -0
  233. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evaluation/mechanical.py +0 -0
  234. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evaluation/models.py +0 -0
  235. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evaluation/pipeline.py +0 -0
  236. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evaluation/semantic.py +0 -0
  237. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evaluation/trigger.py +0 -0
  238. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evaluation/verification_artifacts.py +0 -0
  239. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/events/__init__.py +0 -0
  240. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/events/base.py +0 -0
  241. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/events/decomposition.py +0 -0
  242. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/events/evaluation.py +0 -0
  243. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/events/interview.py +0 -0
  244. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/events/lineage.py +0 -0
  245. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/events/ontology.py +0 -0
  246. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evolution/__init__.py +0 -0
  247. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evolution/convergence.py +0 -0
  248. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evolution/loop.py +0 -0
  249. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evolution/projector.py +0 -0
  250. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evolution/reflect.py +0 -0
  251. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evolution/regression.py +0 -0
  252. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/evolution/wonder.py +0 -0
  253. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/execution/__init__.py +0 -0
  254. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/execution/atomicity.py +0 -0
  255. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/execution/decomposition.py +0 -0
  256. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/execution/double_diamond.py +0 -0
  257. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/execution/subagent.py +0 -0
  258. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/__init__.py +0 -0
  259. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/bridge/__init__.py +0 -0
  260. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/bridge/bridge.py +0 -0
  261. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/bridge/config.py +0 -0
  262. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/bridge/factory.py +0 -0
  263. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/client/__init__.py +0 -0
  264. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/client/adapter.py +0 -0
  265. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/client/manager.py +0 -0
  266. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/client/protocol.py +0 -0
  267. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/errors.py +0 -0
  268. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/job_manager.py +0 -0
  269. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/resources/__init__.py +0 -0
  270. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/resources/handlers.py +0 -0
  271. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/server/__init__.py +0 -0
  272. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/server/adapter.py +0 -0
  273. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/server/protocol.py +0 -0
  274. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/server/security.py +0 -0
  275. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/__init__.py +0 -0
  276. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/ac_tree_hud_handler.py +0 -0
  277. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/ac_tree_hud_render.py +0 -0
  278. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/authoring_handlers.py +0 -0
  279. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/bridge_mixin.py +0 -0
  280. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/brownfield_handler.py +0 -0
  281. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/dashboard.py +0 -0
  282. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/definitions.py +0 -0
  283. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/evaluation_handlers.py +0 -0
  284. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/evolution_handlers.py +0 -0
  285. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/execution_handlers.py +0 -0
  286. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/job_handlers.py +0 -0
  287. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/pm_handler.py +0 -0
  288. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/qa.py +0 -0
  289. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/query_handlers.py +0 -0
  290. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/tools/registry.py +0 -0
  291. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/mcp/types.py +0 -0
  292. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/observability/__init__.py +0 -0
  293. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/observability/drift.py +0 -0
  294. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/observability/logging.py +0 -0
  295. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/observability/retrospective.py +0 -0
  296. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/adapter.py +0 -0
  297. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/capabilities.py +0 -0
  298. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/codex_cli_runtime.py +0 -0
  299. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/command_dispatcher.py +0 -0
  300. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/control_plane.py +0 -0
  301. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/coordinator.py +0 -0
  302. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/dependency_analyzer.py +0 -0
  303. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/events.py +0 -0
  304. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/execution_runtime_scope.py +0 -0
  305. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/execution_strategy.py +0 -0
  306. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/heartbeat.py +0 -0
  307. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/level_context.py +0 -0
  308. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/mcp_config.py +0 -0
  309. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/mcp_tools.py +0 -0
  310. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/parallel_executor.py +0 -0
  311. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/parallel_executor_models.py +0 -0
  312. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/policy.py +0 -0
  313. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/runner.py +0 -0
  314. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/runtime_message_projection.py +0 -0
  315. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/session.py +0 -0
  316. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/orchestrator/workflow_state.py +0 -0
  317. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/persistence/__init__.py +0 -0
  318. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/persistence/brownfield.py +0 -0
  319. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/persistence/checkpoint.py +0 -0
  320. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/persistence/event_store.py +0 -0
  321. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/persistence/migrations/__init__.py +0 -0
  322. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/persistence/migrations/runner.py +0 -0
  323. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
  324. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/persistence/migrations/scripts/002_brownfield.sql +0 -0
  325. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/persistence/schema.py +0 -0
  326. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/persistence/uow.py +0 -0
  327. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/plugin/__init__.py +0 -0
  328. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/plugin/agents/__init__.py +0 -0
  329. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/plugin/agents/pool.py +0 -0
  330. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/plugin/agents/registry.py +0 -0
  331. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/plugin/orchestration/__init__.py +0 -0
  332. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/plugin/orchestration/router.py +0 -0
  333. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/plugin/orchestration/scheduler.py +0 -0
  334. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/plugin/skills/__init__.py +0 -0
  335. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/plugin/skills/docs.py +0 -0
  336. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/plugin/skills/executor.py +0 -0
  337. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/plugin/skills/keywords.py +0 -0
  338. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/plugin/skills/registry.py +0 -0
  339. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/pm/__init__.py +0 -0
  340. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/pm/handoff.py +0 -0
  341. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/pm/renderer.py +0 -0
  342. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/providers/anthropic_adapter.py +0 -0
  343. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/providers/base.py +0 -0
  344. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/providers/claude_code_adapter.py +0 -0
  345. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/providers/codex_cli_adapter.py +0 -0
  346. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/providers/codex_cli_stream.py +0 -0
  347. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/providers/gemini_cli_adapter.py +0 -0
  348. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/providers/litellm_adapter.py +0 -0
  349. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/py.typed +0 -0
  350. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/resilience/__init__.py +0 -0
  351. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/resilience/lateral.py +0 -0
  352. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/resilience/stagnation.py +0 -0
  353. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/routing/__init__.py +0 -0
  354. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/routing/complexity.py +0 -0
  355. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/routing/downgrade.py +0 -0
  356. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/routing/escalation.py +0 -0
  357. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/routing/router.py +0 -0
  358. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/routing/tiers.py +0 -0
  359. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/secondary/__init__.py +0 -0
  360. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/secondary/scheduler.py +0 -0
  361. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/secondary/todo_registry.py +0 -0
  362. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/strategies/__init__.py +0 -0
  363. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/strategies/devil_advocate.py +0 -0
  364. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/__init__.py +0 -0
  365. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/app.py +0 -0
  366. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/components/__init__.py +0 -0
  367. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/components/agents_panel.py +0 -0
  368. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/components/event_log.py +0 -0
  369. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/components/progress.py +0 -0
  370. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/components/token_tracker.py +0 -0
  371. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/events.py +0 -0
  372. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/screens/__init__.py +0 -0
  373. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/screens/confirm_rewind.py +0 -0
  374. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/screens/dashboard.py +0 -0
  375. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/screens/dashboard_v2.py +0 -0
  376. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/screens/dashboard_v3.py +0 -0
  377. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/screens/debug.py +0 -0
  378. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/screens/execution.py +0 -0
  379. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/screens/hud_dashboard.py +0 -0
  380. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/screens/lineage_detail.py +0 -0
  381. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/screens/lineage_selector.py +0 -0
  382. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/screens/logs.py +0 -0
  383. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/screens/session_selector.py +0 -0
  384. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/widgets/__init__.py +0 -0
  385. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/widgets/ac_progress.py +0 -0
  386. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/widgets/ac_tree.py +0 -0
  387. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/widgets/agent_activity.py +0 -0
  388. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/widgets/cost_tracker.py +0 -0
  389. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/widgets/drift_meter.py +0 -0
  390. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/widgets/lineage_tree.py +0 -0
  391. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/widgets/parallel_graph.py +0 -0
  392. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/tui/widgets/phase_progress.py +0 -0
  393. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/verification/__init__.py +0 -0
  394. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/verification/extractor.py +0 -0
  395. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/verification/models.py +0 -0
  396. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/src/ouroboros/verification/verifier.py +0 -0
  397. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/__init__.py +0 -0
  398. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/conftest.py +0 -0
  399. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/e2e/__init__.py +0 -0
  400. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/e2e/conftest.py +0 -0
  401. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/e2e/mcp_bridge_test_config.yaml +0 -0
  402. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/e2e/test_cli_commands.py +0 -0
  403. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/e2e/test_full_workflow.py +0 -0
  404. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/e2e/test_session_persistence.py +0 -0
  405. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/fixtures/test_atomicity_seed.yml +0 -0
  406. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/integration/__init__.py +0 -0
  407. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/integration/conftest.py +0 -0
  408. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/integration/mcp/__init__.py +0 -0
  409. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/integration/mcp/bridge/__init__.py +0 -0
  410. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/integration/mcp/bridge/test_bridge_server_to_server.py +0 -0
  411. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/integration/mcp/conftest.py +0 -0
  412. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/integration/mcp/test_client_adapter.py +0 -0
  413. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/integration/mcp/test_client_manager.py +0 -0
  414. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/integration/plugin/test_orchestration.py +0 -0
  415. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/integration/test_codex_cli_passthrough_smoke.py +0 -0
  416. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/integration/test_codex_skill_fallback.py +0 -0
  417. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/integration/test_codex_skill_smoke.py +0 -0
  418. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/integration/test_entry_point.py +0 -0
  419. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/__init__.py +0 -0
  420. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/agents/__init__.py +0 -0
  421. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/agents/test_loader.py +0 -0
  422. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/__init__.py +0 -0
  423. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_ambiguity.py +0 -0
  424. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_brownfield.py +0 -0
  425. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_classifier_context.py +0 -0
  426. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_decide_later_items.py +0 -0
  427. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_explore.py +0 -0
  428. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_interview.py +0 -0
  429. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_interview_async_io.py +0 -0
  430. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_interview_no_web_search_hint.py +0 -0
  431. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_interview_research_prefix.py +0 -0
  432. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_pm_completion.py +0 -0
  433. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_pm_document_generator.py +0 -0
  434. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_pm_document_writer.py +0 -0
  435. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_pm_interview.py +0 -0
  436. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_pm_interview_brownfield_db.py +0 -0
  437. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_pm_seed_ac12.py +0 -0
  438. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_pm_seed_save.py +0 -0
  439. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_question_classifier.py +0 -0
  440. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/bigbang/test_seed_generator.py +0 -0
  441. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/__init__.py +0 -0
  442. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/commands/test_tui_command.py +0 -0
  443. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/formatters/__init__.py +0 -0
  444. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/formatters/test_console.py +0 -0
  445. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/formatters/test_panels.py +0 -0
  446. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/formatters/test_progress.py +0 -0
  447. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/formatters/test_prompting.py +0 -0
  448. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/formatters/test_tables.py +0 -0
  449. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/formatters/test_workflow_display.py +0 -0
  450. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_cancel.py +0 -0
  451. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_config.py +0 -0
  452. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_init_pm_seed_detection.py +0 -0
  453. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_init_runtime.py +0 -0
  454. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_main.py +0 -0
  455. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_mcp_nested_guard.py +0 -0
  456. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_mcp_startup_cleanup.py +0 -0
  457. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_pm.py +0 -0
  458. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_pm_brownfield.py +0 -0
  459. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_pm_completion.py +0 -0
  460. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_pm_interactive_logging.py +0 -0
  461. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_pm_missing_litellm.py +0 -0
  462. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_pm_overwrite.py +0 -0
  463. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_pm_select_repos.py +0 -0
  464. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_run_qa.py +0 -0
  465. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/cli/test_uninstall.py +0 -0
  466. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/config/__init__.py +0 -0
  467. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/config/test_loader.py +0 -0
  468. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/config/test_loader_env.py +0 -0
  469. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/config/test_models.py +0 -0
  470. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/__init__.py +0 -0
  471. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/test_ac_tree.py +0 -0
  472. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/test_context.py +0 -0
  473. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/test_errors.py +0 -0
  474. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/test_file_lock.py +0 -0
  475. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/test_git_workflow.py +0 -0
  476. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/test_initial_context.py +0 -0
  477. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/test_lineage.py +0 -0
  478. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/test_ontology_aspect.py +0 -0
  479. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/test_ontology_questions.py +0 -0
  480. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/test_retry.py +0 -0
  481. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/test_security.py +0 -0
  482. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/test_seed.py +0 -0
  483. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/test_ttl_cache.py +0 -0
  484. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/test_types.py +0 -0
  485. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/core/test_worktree.py +0 -0
  486. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/evaluation/__init__.py +0 -0
  487. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/evaluation/test_artifact_collector_file_prefix.py +0 -0
  488. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/evaluation/test_consensus.py +0 -0
  489. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/evaluation/test_json_utils.py +0 -0
  490. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/evaluation/test_languages.py +0 -0
  491. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/evaluation/test_mechanical.py +0 -0
  492. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/evaluation/test_models.py +0 -0
  493. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/evaluation/test_pipeline_trigger_consensus.py +0 -0
  494. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/evaluation/test_review_fixes.py +0 -0
  495. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/evaluation/test_semantic.py +0 -0
  496. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/evaluation/test_trigger.py +0 -0
  497. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/evaluation/test_trigger_consensus.py +0 -0
  498. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/evaluation/test_verification_artifacts.py +0 -0
  499. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/events/__init__.py +0 -0
  500. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/events/test_base.py +0 -0
  501. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/events/test_decomposition_events.py +0 -0
  502. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/evolution/test_wonder_scope.py +0 -0
  503. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/execution/__init__.py +0 -0
  504. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/execution/test_atomicity.py +0 -0
  505. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/execution/test_decomposition.py +0 -0
  506. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/execution/test_double_diamond.py +0 -0
  507. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/execution/test_subagent_isolation.py +0 -0
  508. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/__init__.py +0 -0
  509. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/bridge/__init__.py +0 -0
  510. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/bridge/test_bridge.py +0 -0
  511. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/bridge/test_config.py +0 -0
  512. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/bridge/test_factory.py +0 -0
  513. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/bridge/test_handler_wiring.py +0 -0
  514. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/bridge/test_stability.py +0 -0
  515. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/client/__init__.py +0 -0
  516. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/client/test_adapter.py +0 -0
  517. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/client/test_adapter_transport_lifecycle.py +0 -0
  518. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/client/test_manager.py +0 -0
  519. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/conftest.py +0 -0
  520. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/server/__init__.py +0 -0
  521. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/server/test_adapter.py +0 -0
  522. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/server/test_security.py +0 -0
  523. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/test_errors.py +0 -0
  524. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/test_job_manager.py +0 -0
  525. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/test_types.py +0 -0
  526. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/__init__.py +0 -0
  527. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/conftest.py +0 -0
  528. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_ac_tree_hud_footer.py +0 -0
  529. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_ac_tree_hud_handler.py +0 -0
  530. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_ac_tree_hud_handler_completed.py +0 -0
  531. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_ac_tree_hud_handler_cursor_changed.py +0 -0
  532. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_ac_tree_hud_handler_invalid_session.py +0 -0
  533. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_ac_tree_hud_handler_no_execution.py +0 -0
  534. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_ac_tree_hud_handler_waiting.py +0 -0
  535. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_ac_tree_hud_max_nodes.py +0 -0
  536. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_ac_tree_hud_render_depth2.py +0 -0
  537. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_ac_tree_hud_render_depth3.py +0 -0
  538. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_ac_tree_hud_status_icons.py +0 -0
  539. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_ac_tree_hud_truncation.py +0 -0
  540. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_brownfield_handler.py +0 -0
  541. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_definitions.py +0 -0
  542. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_evaluation_handler.py +0 -0
  543. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_interview_parallel_scoring.py +0 -0
  544. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_interview_scoring_guard.py +0 -0
  545. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_mcp_manager_wiring.py +0 -0
  546. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_pm_handler.py +0 -0
  547. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_pm_handler_generate.py +0 -0
  548. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_pm_handler_pending_reframe.py +0 -0
  549. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_qa_integration.py +0 -0
  550. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_qa_parser.py +0 -0
  551. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_registry.py +0 -0
  552. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/mcp/tools/test_traceback_reporting.py +0 -0
  553. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/observability/__init__.py +0 -0
  554. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/observability/test_drift.py +0 -0
  555. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/observability/test_logging.py +0 -0
  556. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/observability/test_retrospective.py +0 -0
  557. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/__init__.py +0 -0
  558. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_adapter.py +0 -0
  559. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_capabilities.py +0 -0
  560. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_codex_cli_runtime.py +0 -0
  561. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_codex_recursion_guard.py +0 -0
  562. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_command_dispatcher.py +0 -0
  563. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_control_plane.py +0 -0
  564. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_coordinator.py +0 -0
  565. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_dependency_analyzer.py +0 -0
  566. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_events.py +0 -0
  567. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_execution_runtime_scope.py +0 -0
  568. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_execution_strategy.py +0 -0
  569. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_inflight_cancellation.py +0 -0
  570. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_level_context.py +0 -0
  571. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_mcp_config.py +0 -0
  572. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_mcp_tools.py +0 -0
  573. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_parallel_executor.py +0 -0
  574. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_parallel_executor_atomic_judgment.py +0 -0
  575. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_parallel_executor_recursive_depth.py +0 -0
  576. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_parallel_executor_retry_resume.py +0 -0
  577. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_policy.py +0 -0
  578. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_runner.py +0 -0
  579. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_runner_cancellation.py +0 -0
  580. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_runtime_message_projection.py +0 -0
  581. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_session.py +0 -0
  582. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/orchestrator/test_workflow_state.py +0 -0
  583. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/persistence/__init__.py +0 -0
  584. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/persistence/test_brownfield_store.py +0 -0
  585. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/persistence/test_checkpoint.py +0 -0
  586. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/persistence/test_event_store.py +0 -0
  587. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/persistence/test_schema.py +0 -0
  588. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/persistence/test_uow.py +0 -0
  589. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/plugin/__init__.py +0 -0
  590. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/plugin/agents/__init__.py +0 -0
  591. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/plugin/agents/test_registry.py +0 -0
  592. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/plugin/orchestration/__init__.py +0 -0
  593. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/plugin/orchestration/test_model_router.py +0 -0
  594. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/plugin/skills/__init__.py +0 -0
  595. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/plugin/skills/test_keywords.py +0 -0
  596. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/plugin/skills/test_registry.py +0 -0
  597. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/pm/__init__.py +0 -0
  598. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/pm/test_renderer.py +0 -0
  599. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/providers/__init__.py +0 -0
  600. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/providers/test_base.py +0 -0
  601. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/providers/test_claude_code_adapter.py +0 -0
  602. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/providers/test_codex_cli_adapter.py +0 -0
  603. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/providers/test_gemini_cli_adapter.py +0 -0
  604. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/providers/test_litellm_adapter.py +0 -0
  605. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/resilience/__init__.py +0 -0
  606. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/resilience/test_lateral.py +0 -0
  607. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/resilience/test_stagnation.py +0 -0
  608. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/routing/__init__.py +0 -0
  609. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/routing/test_complexity.py +0 -0
  610. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/routing/test_downgrade.py +0 -0
  611. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/routing/test_escalation.py +0 -0
  612. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/routing/test_router.py +0 -0
  613. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/routing/test_tiers.py +0 -0
  614. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/scripts/test_keyword_detector.py +0 -0
  615. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/scripts/test_version_check.py +0 -0
  616. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/secondary/__init__.py +0 -0
  617. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/secondary/test_scheduler.py +0 -0
  618. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/secondary/test_todo_registry.py +0 -0
  619. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_artifact_collector.py +0 -0
  620. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_codex_artifacts.py +0 -0
  621. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_convergence.py +0 -0
  622. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_dashboard.py +0 -0
  623. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_dependencies_configured.py +0 -0
  624. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_evolve_rewind.py +0 -0
  625. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_evolve_step.py +0 -0
  626. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_graceful_shutdown.py +0 -0
  627. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_main_entry_point.py +0 -0
  628. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_module_structure.py +0 -0
  629. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_project_initialization.py +0 -0
  630. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_projector_rewind.py +0 -0
  631. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_ralph_parser.py +0 -0
  632. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_ralph_rewind.py +0 -0
  633. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_regression.py +0 -0
  634. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_tooling_configuration.py +0 -0
  635. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/test_verification.py +0 -0
  636. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/tui/__init__.py +0 -0
  637. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/tui/test_app.py +0 -0
  638. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/tui/test_cancelled_display.py +0 -0
  639. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/tui/test_events.py +0 -0
  640. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/tui/test_lineage_viewer.py +0 -0
  641. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/tui/test_screens.py +0 -0
  642. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/tui/test_session_selector_replay.py +0 -0
  643. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tests/unit/tui/test_widgets.py +0 -0
  644. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/tools/sync_github_project.py +0 -0
  645. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev1}/uv.lock +0 -0
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "name": "ouroboros",
12
12
  "description": "Transform vague ideas into validated seed specifications through Socratic questioning and ontological analysis",
13
- "version": "0.27.1",
13
+ "version": "0.27.2",
14
14
  "author": {
15
15
  "name": "Q00",
16
16
  "email": "jqyu.lee@gmail.com"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ouroboros",
3
- "version": "0.27.1",
3
+ "version": "0.27.2",
4
4
  "description": "Self-improving AI workflow system. Crystallize requirements before execution with Socratic interview, ambiguity scoring, and 3-stage evaluation.",
5
5
  "author": {
6
6
  "name": "Q00",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ouroboros-ai
3
- Version: 0.27.2.dev2
3
+ Version: 0.27.3.dev1
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
@@ -1,6 +1,6 @@
1
1
  <!--
2
2
  doc_metadata:
3
- runtime_scope: [local, claude, codex]
3
+ runtime_scope: [local, claude, codex, opencode]
4
4
  -->
5
5
 
6
6
  # CLI Reference
@@ -56,7 +56,7 @@ ouroboros [OPTIONS] COMMAND [ARGS]...
56
56
  Detect available runtime backends and configure Ouroboros for your environment.
57
57
 
58
58
  Ouroboros supports multiple runtime backends via a pluggable `AgentRuntime` protocol. The `setup` command auto-detects
59
- which runtimes are available in your PATH (currently: Claude Code, Codex CLI) and
59
+ which runtimes are available in your PATH (currently: Claude Code, Codex CLI, OpenCode) and
60
60
  configures `orchestrator.runtime_backend` accordingly. Additional runtimes can be registered
61
61
  by implementing the protocol — see [Architecture](architecture.md#how-to-add-a-new-runtime-adapter).
62
62
 
@@ -68,7 +68,7 @@ ouroboros setup [OPTIONS]
68
68
 
69
69
  | Option | Description |
70
70
  |--------|-------------|
71
- | `-r, --runtime TEXT` | Runtime backend to configure. Shipped values: `claude`, `codex`. Auto-detected if omitted |
71
+ | `-r, --runtime TEXT` | Runtime backend to configure. Shipped values: `claude`, `codex`, `opencode`. Auto-detected if omitted |
72
72
  | `--non-interactive` | Skip interactive prompts (for scripted installs) |
73
73
 
74
74
  **Examples:**
@@ -97,11 +97,10 @@ ouroboros setup --non-interactive
97
97
  - For Codex CLI: installs managed Ouroboros rules into `~/.codex/rules/`
98
98
  - For Codex CLI: installs managed Ouroboros skills into `~/.codex/skills/`
99
99
  - For Codex CLI: registers the Ouroboros MCP/env block in `~/.codex/config.toml`
100
+ - For OpenCode: registers the Ouroboros MCP server in OpenCode's configuration
100
101
 
101
102
  > **Codex config split:** put persistent Ouroboros per-role model overrides in `~/.ouroboros/config.yaml` (`clarification.default_model`, `llm.qa_model`, `evaluation.semantic_model`, `consensus.models`, `consensus.advocate_model`, `consensus.devil_model`, `consensus.judge_model`). `~/.codex/config.toml` is only the Codex MCP/env hookup file used by setup.
102
103
 
103
- > **`opencode` caveat:** `setup` detects the `opencode` binary in PATH but cannot configure it — if `opencode` is your only installed runtime, `setup` exits with `Error: Unsupported runtime: opencode`. The `opencode` runtime backend is **not yet implemented** (`runtime_factory.py` raises `NotImplementedError`). It is planned for a future release.
104
-
105
104
  ---
106
105
 
107
106
  ## `ouroboros init`
@@ -132,8 +131,8 @@ ouroboros init [start] [OPTIONS] [CONTEXT]
132
131
  | `-r, --resume TEXT` | Resume an existing interview by ID |
133
132
  | `--state-dir DIRECTORY` | Custom directory for interview state files |
134
133
  | `-o, --orchestrator` | Use Claude Code for the interview/seed flow; combine with `--runtime` to choose the workflow handoff backend |
135
- | `--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. |
136
- | `--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 |
134
+ | `--runtime TEXT` | Agent runtime backend for the workflow execution step after seed generation. Shipped values: `claude`, `codex`, `opencode`. 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`) |
137
136
  | `-d, --debug` | Show verbose logs including debug messages |
138
137
 
139
138
  **Examples:**
@@ -209,7 +208,7 @@ ouroboros run [workflow] [OPTIONS] SEED_FILE
209
208
  | Option | Description |
210
209
  |--------|-------------|
211
210
  | `-o/-O, --orchestrator/--no-orchestrator` | Use the agent-runtime orchestrator for execution (default: enabled) |
212
- | `--runtime TEXT` | Agent runtime backend override (`claude`, `codex`). Uses configured default if omitted. (`opencode` is in the CLI enum but out of scope) |
211
+ | `--runtime TEXT` | Agent runtime backend override (`claude`, `codex`, `opencode`). Uses configured default if omitted |
213
212
  | `-r, --resume TEXT` | Resume a previous orchestrator session by ID |
214
213
  | `--mcp-config PATH` | Path to MCP client configuration YAML file |
215
214
  | `--mcp-tool-prefix TEXT` | Prefix to add to all MCP tool names (e.g., `mcp_`) |
@@ -352,7 +351,7 @@ ouroboros config backend [BACKEND]
352
351
 
353
352
  | Argument | Description |
354
353
  |----------|-------------|
355
- | `BACKEND` | Backend to switch to: `claude` or `codex`. Omit to show current |
354
+ | `BACKEND` | Backend to switch to: `claude` or `codex`. Omit to show current. For `opencode`, use `ouroboros setup` instead |
356
355
 
357
356
  **Examples:**
358
357
 
@@ -631,8 +630,8 @@ ouroboros mcp serve [OPTIONS]
631
630
  | `-p, --port INTEGER` | Port to bind to (default: 8080) |
632
631
  | `-t, --transport TEXT` | Transport type: `stdio` or `sse` (default: stdio) |
633
632
  | `--db TEXT` | Path to the EventStore database file |
634
- | `--runtime TEXT` | Runtime backend for orchestrator-driven tools (`claude`, `codex`). (`opencode` is in the CLI enum but out of scope) |
635
- | `--llm-backend TEXT` | LLM backend for interview/seed/evaluation tools (`claude_code`, `litellm`, `codex`). (`opencode` is in the CLI enum but out of scope) |
633
+ | `--runtime TEXT` | Agent runtime backend for orchestrator-driven tools (`claude`, `codex`, `opencode`). Affects which tool variants are instantiated |
634
+ | `--llm-backend TEXT` | LLM backend for interview/seed/evaluation tools (`claude_code`, `litellm`, `codex`, `opencode`). Affects which tool variants are instantiated |
636
635
 
637
636
  **Examples:**
638
637
 
@@ -689,7 +688,7 @@ If Ouroboros is installed directly (not via `uvx`), use:
689
688
 
690
689
  ```yaml
691
690
  orchestrator:
692
- runtime_backend: claude # or "codex"
691
+ runtime_backend: claude # or "codex" or "opencode"
693
692
  ```
694
693
 
695
694
  Override per-session with the `OUROBOROS_AGENT_RUNTIME` environment variable if needed.
@@ -706,8 +705,8 @@ ouroboros mcp info [OPTIONS]
706
705
 
707
706
  | Option | Description |
708
707
  |--------|-------------|
709
- | `--runtime TEXT` | Agent runtime backend for orchestrator-driven tools (`claude`, `codex`). Affects which tool variants are instantiated |
710
- | `--llm-backend TEXT` | LLM backend for interview/seed/evaluation tools (`claude_code`, `litellm`, `codex`). Affects which tool variants are instantiated |
708
+ | `--runtime TEXT` | Agent runtime backend for orchestrator-driven tools (`claude`, `codex`, `opencode`). Affects which tool variants are instantiated |
709
+ | `--llm-backend TEXT` | LLM backend for interview/seed/evaluation tools (`claude_code`, `litellm`, `codex`, `opencode`). Affects which tool variants are instantiated |
711
710
 
712
711
  **Available Tools:**
713
712
 
@@ -722,7 +721,7 @@ ouroboros mcp info [OPTIONS]
722
721
  ## Typical Workflows
723
722
 
724
723
  > For first-time setup and the complete onboarding flow, see **[Getting Started](getting-started.md)**.
725
- > For runtime-specific configuration, see the [Claude Code](runtime-guides/claude-code.md) and [Codex CLI](runtime-guides/codex.md) runtime guides.
724
+ > For runtime-specific configuration, see the [Claude Code](runtime-guides/claude-code.md), [Codex CLI](runtime-guides/codex.md), and [OpenCode](runtime-guides/opencode.md) runtime guides.
726
725
 
727
726
  ### Cancelling Stuck Executions
728
727
 
@@ -745,11 +744,12 @@ The table below covers the most commonly used variables. For the full list — i
745
744
  | `ANTHROPIC_API_KEY` | — | Anthropic API key for Claude models |
746
745
  | `OPENAI_API_KEY` | — | OpenAI API key for LiteLLM / Codex CLI |
747
746
  | `OPENROUTER_API_KEY` | — | OpenRouter API key for consensus and LiteLLM |
748
- | `OUROBOROS_AGENT_RUNTIME` | `orchestrator.runtime_backend` | Override the runtime backend (`claude`, `codex`) |
749
- | `OUROBOROS_AGENT_PERMISSION_MODE` | `orchestrator.permission_mode` | Permission mode for non-OpenCode runtimes |
747
+ | `OUROBOROS_AGENT_RUNTIME` | `orchestrator.runtime_backend` | Override the runtime backend (`claude`, `codex`, `opencode`) |
748
+ | `OUROBOROS_AGENT_PERMISSION_MODE` | `orchestrator.permission_mode` | Permission mode for Claude Code / Codex runtimes (no-op for OpenCode) |
750
749
  | `OUROBOROS_LLM_BACKEND` | `llm.backend` | Override the LLM-only flow backend |
751
750
  | `OUROBOROS_CLI_PATH` | `orchestrator.cli_path` | Path to the Claude CLI binary |
752
751
  | `OUROBOROS_CODEX_CLI_PATH` | `orchestrator.codex_cli_path` | Path to the Codex CLI binary |
752
+ | `OUROBOROS_OPENCODE_CLI_PATH` | `orchestrator.opencode_cli_path` | Path to the OpenCode CLI binary |
753
753
 
754
754
  ---
755
755
 
@@ -75,7 +75,7 @@ Controls how Ouroboros launches and communicates with the agent runtime backend.
75
75
 
76
76
  ```yaml
77
77
  orchestrator:
78
- runtime_backend: claude # "claude" | "codex" | "opencode" (opencode: not yet implemented)
78
+ runtime_backend: claude # "claude" | "codex" | "opencode"
79
79
  permission_mode: acceptEdits # "default" | "acceptEdits" | "bypassPermissions"
80
80
  opencode_permission_mode: bypassPermissions
81
81
  cli_path: null # Path to Claude CLI binary; null = use SDK default
@@ -94,8 +94,6 @@ orchestrator:
94
94
  | `opencode_cli_path` | `string \| null` | `null` | Absolute path to the OpenCode CLI binary (`~` is expanded). When `null`, resolved from `PATH` at runtime. Overridable via `OUROBOROS_OPENCODE_CLI_PATH`. |
95
95
  | `default_max_turns` | `int >= 1` | `10` | Default maximum number of turns per agent execution task. |
96
96
 
97
- > **OpenCode scope note:** The `opencode` runtime backend is **not yet implemented** — setting `runtime_backend: opencode` will raise `NotImplementedError` at runtime. The `opencode_*` options are listed here for forward-compatibility; support is planned for a future release.
98
-
99
97
  ---
100
98
 
101
99
  ## `llm`
@@ -35,7 +35,7 @@ That's it. `ooo interview` runs a Socratic interview that auto-generates a seed
35
35
 
36
36
  ### Alternative: Standalone CLI (`ouroboros`)
37
37
 
38
- Use this path if you prefer a standalone terminal workflow, or are using a non-Claude runtime (e.g., Codex CLI).
38
+ Use this path if you prefer a standalone terminal workflow, or are using a non-Claude runtime (e.g., Codex CLI, OpenCode).
39
39
 
40
40
  **Requires Python >= 3.12.**
41
41
 
@@ -114,6 +114,7 @@ uv run ouroboros --version # verify CLI
114
114
  | Claude Code (`ooo`) | Claude Code with plugin support |
115
115
  | Standalone CLI (`ouroboros`) | Python >= 3.12, API key (Anthropic or OpenAI) |
116
116
  | Codex CLI backend | Python >= 3.12, `npm install -g @openai/codex`, OpenAI API key with access to GPT-5.4 |
117
+ | OpenCode backend | Python >= 3.12, `opencode` on PATH, API key for your configured provider |
117
118
 
118
119
  ---
119
120
 
@@ -137,7 +138,7 @@ export OPENAI_API_KEY="your-openai-key"
137
138
 
138
139
  ```yaml
139
140
  orchestrator:
140
- runtime_backend: claude # claude | codex
141
+ runtime_backend: claude # claude | codex | opencode
141
142
 
142
143
  llm:
143
144
  backend: claude_code # claude_code | codex | litellm
@@ -293,20 +294,21 @@ ooo run
293
294
 
294
295
  ## Choosing a Runtime Backend
295
296
 
296
- Ouroboros delegates code execution to a pluggable runtime backend. Two ship out of the box:
297
+ Ouroboros delegates code execution to a pluggable runtime backend. Three ship out of the box:
297
298
 
298
- | | Claude Code | Codex CLI |
299
- |---|---|---|
300
- | **Best for** | Claude Code users; subscription billing | OpenAI ecosystem; pay-per-token billing |
301
- | **Install** | `pip install ouroboros-ai[claude]` | `pip install ouroboros-ai` + `npm install -g @openai/codex` |
302
- | **Skill shortcuts** | `ooo` inside Claude Code | `ooo` after `ouroboros setup --runtime codex` installs managed Codex skills |
303
- | **Config value** | `claude` | `codex` |
299
+ | | Claude Code | Codex CLI | OpenCode |
300
+ |---|---|---|---|
301
+ | **Best for** | Claude Code users; subscription billing | OpenAI ecosystem; pay-per-token billing | Multi-provider flexibility; open-source tooling |
302
+ | **Install** | `pip install ouroboros-ai[claude]` | `pip install ouroboros-ai` + `npm install -g @openai/codex` | `pip install ouroboros-ai` + `opencode` on PATH |
303
+ | **Skill shortcuts** | `ooo` inside Claude Code | `ooo` after `ouroboros setup --runtime codex` installs managed Codex skills | `ooo` after `ouroboros setup --runtime opencode` |
304
+ | **Config value** | `claude` | `codex` | `opencode` |
304
305
 
305
- Both backends run the same core workflow engine (seed execution, TUI). However, user-facing commands still differ: Claude Code has native in-session `ooo` workflows, while Codex CLI relies on `ouroboros setup --runtime codex` to install managed rules/skills plus the MCP hookup. The `ouroboros` CLI remains the most universal terminal path, and some advanced operations are still MCP/Claude-only.
306
+ All three backends run the same core workflow engine (seed execution, TUI). However, user-facing commands still differ: Claude Code has native in-session `ooo` workflows, while Codex CLI and OpenCode rely on `ouroboros setup --runtime <backend>` to configure the integration. The `ouroboros` CLI remains the most universal terminal path, and some advanced operations are still MCP/Claude-only.
306
307
 
307
308
  For backend-specific configuration:
308
309
  - [Claude Code runtime guide](runtime-guides/claude-code.md)
309
310
  - [Codex CLI runtime guide](runtime-guides/codex.md)
311
+ - [OpenCode runtime guide](runtime-guides/opencode.md)
310
312
 
311
313
  ---
312
314
 
@@ -405,5 +407,6 @@ ouroboros cancel execution <session_id>
405
407
  - [Configuration Reference](config-reference.md) -- all config keys and defaults
406
408
  - [Claude Code runtime guide](runtime-guides/claude-code.md) -- backend-specific setup
407
409
  - [Codex CLI runtime guide](runtime-guides/codex.md) -- backend-specific setup
410
+ - [OpenCode runtime guide](runtime-guides/opencode.md) -- backend-specific setup
408
411
 
409
412
  Need help? Open an issue on [GitHub](https://github.com/Q00/ouroboros/issues).
@@ -13,7 +13,7 @@ The runtime backend is selected via the `orchestrator.runtime_backend` config ke
13
13
 
14
14
  ```yaml
15
15
  orchestrator:
16
- runtime_backend: claude # Supported values: claude | codex
16
+ runtime_backend: claude # Supported values: claude | codex | opencode
17
17
  # The runtime abstraction layer also accepts custom
18
18
  # adapters registered in runtime_factory.py
19
19
  ```
@@ -26,7 +26,7 @@ ouroboros run workflow --runtime codex seed.yaml
26
26
 
27
27
  You can also override the configured backend with the `OUROBOROS_AGENT_RUNTIME` environment variable.
28
28
 
29
- > **Extensibility:** Ouroboros uses a pluggable `AgentRuntime` protocol. Claude Code and Codex CLI are the two shipped backends; additional runtimes can be registered by implementing the protocol and extending `runtime_factory.py`. See [Architecture — How to add a new runtime adapter](architecture.md#how-to-add-a-new-runtime-adapter).
29
+ > **Extensibility:** Ouroboros uses a pluggable `AgentRuntime` protocol. Claude Code, Codex CLI, and OpenCode are the three shipped backends; additional runtimes can be registered by implementing the protocol and extending `runtime_factory.py`. See [Architecture — How to add a new runtime adapter](architecture.md#how-to-add-a-new-runtime-adapter).
30
30
 
31
31
  ## Capability Matrix
32
32
 
@@ -34,39 +34,39 @@ You can also override the configured backend with the `OUROBOROS_AGENT_RUNTIME`
34
34
 
35
35
  These capabilities are part of the Ouroboros core engine and work the same way regardless of runtime backend.
36
36
 
37
- | Capability | Claude Code | Codex CLI | Notes |
38
- |------------|:-----------:|:---------:|-------|
39
- | Seed file parsing | Yes | Yes | Same YAML schema, same validation |
40
- | Acceptance criteria tree | Yes | Yes | Structured AC decomposition |
41
- | Evaluation principles | Yes | Yes | Weighted scoring against principles |
42
- | Exit conditions | Yes | Yes | Deterministic termination logic |
43
- | Event sourcing (SQLite) | Yes | Yes | Full event log, replay support |
44
- | Checkpoint / resume | Yes | Yes | `--resume <session_id>` |
45
- | TUI dashboard | Yes | Yes | Textual-based progress view |
46
- | Interview (Socratic seed creation) | Yes | Yes | `ouroboros init start ...` with the appropriate LLM backend |
47
- | Dry-run validation | Yes | Yes | `--dry-run` validates without executing |
37
+ | Capability | Claude Code | Codex CLI | OpenCode | Notes |
38
+ |------------|:-----------:|:---------:|:--------:|-------|
39
+ | Seed file parsing | Yes | Yes | Yes | Same YAML schema, same validation |
40
+ | Acceptance criteria tree | Yes | Yes | Yes | Structured AC decomposition |
41
+ | Evaluation principles | Yes | Yes | Yes | Weighted scoring against principles |
42
+ | Exit conditions | Yes | Yes | Yes | Deterministic termination logic |
43
+ | Event sourcing (SQLite) | Yes | Yes | Yes | Full event log, replay support |
44
+ | Checkpoint / resume | Yes | Yes | Yes | `--resume <session_id>` |
45
+ | TUI dashboard | Yes | Yes | Yes | Textual-based progress view |
46
+ | Interview (Socratic seed creation) | Yes | Yes | Yes | `ouroboros init start ...` with the appropriate LLM backend |
47
+ | Dry-run validation | Yes | Yes | Yes | `--dry-run` validates without executing |
48
48
 
49
49
  ### Runtime Layer (differs by backend)
50
50
 
51
51
  These capabilities depend on the runtime backend's native features and execution model.
52
52
 
53
- | Capability | Claude Code | Codex CLI | Notes |
54
- |------------|:-----------:|:---------:|-------|
55
- | **Authentication** | Max Plan subscription | OpenAI API key | No API key needed for Claude Code |
56
- | **Underlying model** | Claude (Anthropic) | GPT-5.4+ (OpenAI) | Model choice follows the runtime |
57
- | **Tool surface** | Read, Write, Edit, Bash, Glob, Grep | Codex-native tool set | Different tool implementations; same task outcomes |
58
- | **Sandbox / permissions** | Claude Code permission system | Codex sandbox model | Each runtime manages its own safety boundaries |
59
- | **Cost model** | Included in Max Plan | Per-token API charges | See [OpenAI pricing](https://openai.com/pricing) for Codex costs |
53
+ | Capability | Claude Code | Codex CLI | OpenCode | Notes |
54
+ |------------|:-----------:|:---------:|:--------:|-------|
55
+ | **Authentication** | Max Plan subscription | OpenAI API key | Provider API keys (configured in OpenCode) | No API key needed for Claude Code |
56
+ | **Underlying model** | Claude (Anthropic) | GPT-5.4+ (OpenAI) | Provider-dependent (OpenCode supports multiple providers) | Model choice follows the runtime |
57
+ | **Tool surface** | Read, Write, Edit, Bash, Glob, Grep | Codex-native tool set | Read, Write, Edit, Bash, Glob, Grep | Different tool implementations; same task outcomes |
58
+ | **Sandbox / permissions** | Claude Code permission system | Codex sandbox model | OpenCode permission system | Each runtime manages its own safety boundaries |
59
+ | **Cost model** | Included in Max Plan | Per-token API charges | Depends on configured provider | See [OpenAI pricing](https://openai.com/pricing) for Codex costs |
60
60
 
61
61
  ### Integration Surface (UX differences)
62
62
 
63
- | Aspect | Claude Code | Codex CLI |
64
- |--------|-------------|-----------|
65
- | **Primary UX** | In-session skills and MCP server | Session-oriented Ouroboros runtime over Codex CLI transport |
66
- | **Skill shortcuts (`ooo`)** | Yes -- skills loaded into Claude Code session | Yes -- after `ouroboros setup --runtime codex` installs managed skills into `~/.codex/skills/`, rules into `~/.codex/rules/`, and the MCP/env hookup into `~/.codex/config.toml`. Keep role-specific Ouroboros model overrides in `~/.ouroboros/config.yaml` |
67
- | **MCP integration** | Native MCP server support | Deterministic skill/MCP dispatch through the Ouroboros Codex adapter |
68
- | **Session context** | Shares Claude Code session context | Preserved via runtime handles, native session IDs, and resume support |
69
- | **Install extras** | `ouroboros-ai[claude]` | `ouroboros-ai` (base package) + `codex` on PATH |
63
+ | Aspect | Claude Code | Codex CLI | OpenCode |
64
+ |--------|-------------|-----------|----------|
65
+ | **Primary UX** | In-session skills and MCP server | Session-oriented Ouroboros runtime over Codex CLI transport | MCP server integration |
66
+ | **Skill shortcuts (`ooo`)** | Yes -- skills loaded into Claude Code session | Yes -- after `ouroboros setup --runtime codex` installs managed skills into `~/.codex/skills/`, rules into `~/.codex/rules/`, and the MCP/env hookup into `~/.codex/config.toml`. Keep role-specific Ouroboros model overrides in `~/.ouroboros/config.yaml` | Yes -- after `ouroboros setup --runtime opencode` |
67
+ | **MCP integration** | Native MCP server support | Deterministic skill/MCP dispatch through the Ouroboros Codex adapter | Native MCP server support |
68
+ | **Session context** | Shares Claude Code session context | Preserved via runtime handles, native session IDs, and resume support | Session IDs + resume via `--session` |
69
+ | **Install extras** | `ouroboros-ai[claude]` | `ouroboros-ai` (base package) + `codex` on PATH | `ouroboros-ai` (base package) + `opencode` on PATH |
70
70
 
71
71
  ## What Stays the Same
72
72
 
@@ -97,15 +97,18 @@ The table below covers the two currently shipped backends. Because Ouroboros use
97
97
  |-----------|----------|
98
98
  | Have a Claude Code Max Plan and want zero API key setup | Claude Code (`runtime_backend: claude`) |
99
99
  | Want a Codex-backed Ouroboros session instead of a Claude Code session | Codex CLI (`runtime_backend: codex`) |
100
+ | Want to use OpenCode with multiple model providers | OpenCode (`runtime_backend: opencode`) |
100
101
  | Want to use Anthropic's Claude models | Claude Code |
101
102
  | Want to use OpenAI's GPT models | Codex CLI |
102
- | Need MCP server integration | Claude Code |
103
- | Want minimal Python dependencies | Codex CLI (base package only) |
103
+ | Want to use multiple providers via a single runtime | OpenCode |
104
+ | Need MCP server integration | Claude Code or OpenCode |
105
+ | Want minimal Python dependencies | Codex CLI or OpenCode (base package only) |
104
106
  | Want to integrate a custom or third-party AI coding agent | Implement the `AgentRuntime` protocol and register it in `runtime_factory.py` |
105
107
 
106
108
  ## Further Reading
107
109
 
108
110
  - [Claude Code runtime guide](runtime-guides/claude-code.md)
109
111
  - [Codex CLI runtime guide](runtime-guides/codex.md)
112
+ - [OpenCode runtime guide](runtime-guides/opencode.md)
110
113
  - [Platform support matrix](platform-support.md) (OS and Python version compatibility)
111
114
  - [Architecture overview](architecture.md) — including [How to add a new runtime adapter](architecture.md#how-to-add-a-new-runtime-adapter)
@@ -0,0 +1,165 @@
1
+ <!--
2
+ doc_metadata:
3
+ runtime_scope: [opencode]
4
+ -->
5
+
6
+ # Running Ouroboros with OpenCode
7
+
8
+ > For installation and first-run onboarding, see [Getting Started](../getting-started.md).
9
+
10
+ Ouroboros can use **OpenCode** as a runtime backend. [OpenCode](https://opencode.ai) is an open-source AI coding agent that supports multiple model providers (Anthropic, OpenAI, Google, and others). In Ouroboros, the OpenCode backend is presented as a **session-oriented runtime** with the same specification-first workflow harness (acceptance criteria, evaluation principles, deterministic exit conditions).
11
+
12
+ No additional Python SDK is required beyond the base `ouroboros-ai` package.
13
+
14
+ ## Prerequisites
15
+
16
+ - **OpenCode** installed and on your `PATH` (see [install steps](#installing-opencode) below)
17
+ - An **API key** for your configured provider (e.g., `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`)
18
+ - **Python >= 3.12**
19
+
20
+ ## Installing OpenCode
21
+
22
+ OpenCode is distributed as a standalone binary. Install via the official script:
23
+
24
+ ```bash
25
+ curl -fsSL https://opencode.ai/install | bash
26
+ ```
27
+
28
+ Verify the installation:
29
+
30
+ ```bash
31
+ opencode --version
32
+ ```
33
+
34
+ For alternative install methods, see the [OpenCode documentation](https://opencode.ai/docs).
35
+
36
+ ## Configuration
37
+
38
+ To select OpenCode as the runtime backend, set the following in your Ouroboros configuration:
39
+
40
+ ```yaml
41
+ orchestrator:
42
+ runtime_backend: opencode
43
+ ```
44
+
45
+ Or pass the backend on the command line:
46
+
47
+ ```bash
48
+ uv run ouroboros run workflow --runtime opencode ~/.ouroboros/seeds/seed_abcd1234ef56.yaml
49
+ ```
50
+
51
+ ### Setup
52
+
53
+ Run the setup command to auto-configure:
54
+
55
+ ```bash
56
+ ouroboros setup --runtime opencode
57
+ ```
58
+
59
+ This:
60
+
61
+ - Detects the `opencode` binary on your `PATH`
62
+ - Writes `orchestrator.runtime_backend: opencode` to `~/.ouroboros/config.yaml`
63
+ - Registers the Ouroboros MCP server in OpenCode's configuration
64
+
65
+ ## How It Works
66
+
67
+ ```
68
+ +-----------------+ +------------------+ +-----------------+
69
+ | Seed YAML | --> | Orchestrator | --> | OpenCode |
70
+ | (your task) | | (runtime_factory)| | (runtime) |
71
+ +-----------------+ +------------------+ +-----------------+
72
+ |
73
+ v
74
+ +------------------+
75
+ | Tools Available |
76
+ | - Read |
77
+ | - Write |
78
+ | - Edit |
79
+ | - Bash |
80
+ | - Glob |
81
+ | - Grep |
82
+ +------------------+
83
+ ```
84
+
85
+ The `OpenCodeRuntime` adapter launches `opencode run --format json` as a subprocess for each task execution. The orchestrator pipes the prompt via stdin and parses the structured JSON event stream from stdout.
86
+
87
+ > For a side-by-side comparison of all runtime backends, see the [runtime capability matrix](../runtime-capability-matrix.md).
88
+
89
+ ## OpenCode-Specific Strengths
90
+
91
+ - **Multi-provider support** -- use Anthropic, OpenAI, Google, or other providers through a single runtime
92
+ - **Rich tool access** -- full suite of file, shell, and search tools (same surface as Claude Code)
93
+ - **Native MCP integration** -- OpenCode has built-in MCP server support
94
+ - **Open-source** -- fully open-source, allowing inspection and contribution
95
+
96
+ ## CLI Options
97
+
98
+ ### Workflow Commands
99
+
100
+ ```bash
101
+ # Execute workflow (OpenCode runtime)
102
+ uv run ouroboros run workflow --runtime opencode ~/.ouroboros/seeds/seed_abcd1234ef56.yaml
103
+
104
+ # Debug output (show logs and agent output)
105
+ uv run ouroboros run workflow --runtime opencode --debug ~/.ouroboros/seeds/seed_abcd1234ef56.yaml
106
+
107
+ # Resume a previous session
108
+ uv run ouroboros run workflow --runtime opencode --resume <session_id> ~/.ouroboros/seeds/seed_abcd1234ef56.yaml
109
+ ```
110
+
111
+ ## Known Limitations
112
+
113
+ ### Session pollution
114
+
115
+ Each task execution via `opencode run` creates a visible session in OpenCode's session history. Long-running workflows with many orchestrator steps will accumulate sessions. A future phase will reparent these sessions under the caller to prevent polluting the session picker (see GitHub #164 Phase 2).
116
+
117
+ ### No interactive mode
118
+
119
+ The adapter uses `opencode run --format json` (non-interactive). Features that require interactive OpenCode sessions (e.g., manual approval prompts) are not available during Ouroboros execution.
120
+
121
+ ## Troubleshooting
122
+
123
+ ### OpenCode not found
124
+
125
+ Ensure `opencode` is installed and available on your `PATH`:
126
+
127
+ ```bash
128
+ which opencode
129
+ ```
130
+
131
+ If not installed:
132
+
133
+ ```bash
134
+ curl -fsSL https://opencode.ai/install | bash
135
+ ```
136
+
137
+ ### API key errors
138
+
139
+ Verify your provider API key is set:
140
+
141
+ ```bash
142
+ # For Anthropic
143
+ echo $ANTHROPIC_API_KEY
144
+
145
+ # For OpenAI
146
+ echo $OPENAI_API_KEY
147
+ ```
148
+
149
+ ### "Providers: warning" in health check
150
+
151
+ This is normal when using the orchestrator runtime backends. The warning refers to LiteLLM providers, which are not used in orchestrator mode.
152
+
153
+ ### "EventStore not initialized"
154
+
155
+ The database will be created automatically at `~/.ouroboros/ouroboros.db`.
156
+
157
+ ## Cost
158
+
159
+ Using OpenCode as the runtime backend incurs API charges from your configured provider. Costs depend on:
160
+
161
+ - Provider and model selected in OpenCode configuration
162
+ - Task complexity and token usage
163
+ - Number of tool calls and iterations
164
+
165
+ Refer to your provider's pricing page for current rates.
@@ -246,7 +246,7 @@ A backup will be created: CLAUDE.md.bak
246
246
  **If "Preview first", show:**
247
247
  ````markdown
248
248
  <!-- ooo:START -->
249
- <!-- ooo:VERSION:0.27.1 -->
249
+ <!-- ooo:VERSION:0.27.2 -->
250
250
  # Ouroboros — Specification-First AI Development
251
251
 
252
252
  > Before telling AI what to build, define what should be built.
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.27.2.dev2'
22
- __version_tuple__ = version_tuple = (0, 27, 2, 'dev2')
21
+ __version__ = version = '0.27.3.dev1'
22
+ __version_tuple__ = version_tuple = (0, 27, 3, 'dev1')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -50,6 +50,7 @@ class AgentRuntimeBackend(str, Enum): # noqa: UP042
50
50
 
51
51
  CLAUDE = "claude"
52
52
  CODEX = "codex"
53
+ OPENCODE = "opencode"
53
54
 
54
55
 
55
56
  class LLMBackend(str, Enum): # noqa: UP042
@@ -58,6 +59,7 @@ class LLMBackend(str, Enum): # noqa: UP042
58
59
  CLAUDE_CODE = "claude_code"
59
60
  LITELLM = "litellm"
60
61
  CODEX = "codex"
62
+ OPENCODE = "opencode"
61
63
 
62
64
 
63
65
  class _DefaultStartGroup(typer.core.TyperGroup):
@@ -669,7 +671,7 @@ def start(
669
671
  "--runtime",
670
672
  help=(
671
673
  "Agent runtime backend for the workflow execution step after seed generation "
672
- "(claude or codex)."
674
+ "(claude, codex, or opencode)."
673
675
  ),
674
676
  case_sensitive=False,
675
677
  ),
@@ -680,7 +682,7 @@ def start(
680
682
  "--llm-backend",
681
683
  help=(
682
684
  "LLM backend for interview, ambiguity scoring, and seed generation "
683
- "(claude_code, litellm, or codex)."
685
+ "(claude_code, litellm, codex, or opencode)."
684
686
  ),
685
687
  case_sensitive=False,
686
688
  ),
@@ -29,6 +29,7 @@ class AgentRuntimeBackend(str, Enum): # noqa: UP042
29
29
 
30
30
  CLAUDE = "claude"
31
31
  CODEX = "codex"
32
+ OPENCODE = "opencode"
32
33
 
33
34
 
34
35
  class LLMBackend(str, Enum): # noqa: UP042
@@ -37,6 +38,7 @@ class LLMBackend(str, Enum): # noqa: UP042
37
38
  CLAUDE_CODE = "claude_code"
38
39
  LITELLM = "litellm"
39
40
  CODEX = "codex"
41
+ OPENCODE = "opencode"
40
42
 
41
43
 
42
44
  def _write_pid_file() -> bool:
@@ -262,7 +264,7 @@ def serve(
262
264
  AgentRuntimeBackend | None,
263
265
  typer.Option(
264
266
  "--runtime",
265
- help="Agent runtime backend for orchestrator-driven tools (claude or codex).",
267
+ help="Agent runtime backend for orchestrator-driven tools (claude, codex, or opencode).",
266
268
  case_sensitive=False,
267
269
  ),
268
270
  ] = None,
@@ -271,7 +273,7 @@ def serve(
271
273
  typer.Option(
272
274
  "--llm-backend",
273
275
  help=(
274
- "LLM backend for interview/seed/evaluation tools (claude_code, litellm, or codex)."
276
+ "LLM backend for interview/seed/evaluation tools (claude_code, litellm, codex, or opencode)."
275
277
  ),
276
278
  case_sensitive=False,
277
279
  ),
@@ -296,8 +298,8 @@ def serve(
296
298
  # Start with SSE transport on custom port
297
299
  ouroboros mcp serve --transport sse --port 9000
298
300
 
299
- # Start with Codex runtime for orchestrator-driven tools
300
- ouroboros mcp serve --runtime codex
301
+ # Start with OpenCode runtime
302
+ ouroboros mcp serve --runtime opencode
301
303
 
302
304
  # Use Codex CLI for LLM-only tools as well
303
305
  ouroboros mcp serve --runtime codex --llm-backend codex
@@ -349,7 +351,7 @@ def info(
349
351
  AgentRuntimeBackend | None,
350
352
  typer.Option(
351
353
  "--runtime",
352
- help="Agent runtime backend for orchestrator-driven tools (claude or codex).",
354
+ help="Agent runtime backend for orchestrator-driven tools (claude, codex, or opencode).",
353
355
  case_sensitive=False,
354
356
  ),
355
357
  ] = None,
@@ -358,7 +360,7 @@ def info(
358
360
  typer.Option(
359
361
  "--llm-backend",
360
362
  help=(
361
- "LLM backend for interview/seed/evaluation tools (claude_code, litellm, or codex)."
363
+ "LLM backend for interview/seed/evaluation tools (claude_code, litellm, codex, or opencode)."
362
364
  ),
363
365
  case_sensitive=False,
364
366
  ),
@@ -59,6 +59,7 @@ class AgentRuntimeBackend(str, Enum): # noqa: UP042
59
59
 
60
60
  CLAUDE = "claude"
61
61
  CODEX = "codex"
62
+ OPENCODE = "opencode"
62
63
 
63
64
 
64
65
  def _derive_quality_bar(seed: "Seed") -> str:
@@ -418,7 +419,7 @@ def workflow(
418
419
  AgentRuntimeBackend | None,
419
420
  typer.Option(
420
421
  "--runtime",
421
- help="Agent runtime backend for orchestrator mode (claude or codex).",
422
+ help="Agent runtime backend for orchestrator mode (claude, codex, or opencode).",
422
423
  case_sensitive=False,
423
424
  ),
424
425
  ] = None,