ouroboros-ai 0.27.2.dev2__tar.gz → 0.27.3.dev2__tar.gz

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

Potentially problematic release.


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

Files changed (648) hide show
  1. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.claude-plugin/marketplace.json +1 -1
  2. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.claude-plugin/plugin.json +1 -1
  3. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/PKG-INFO +27 -17
  4. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/README.ko.md +2 -0
  5. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/README.md +3 -1
  6. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/cli-reference.md +17 -21
  7. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/config-reference.md +1 -3
  8. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/getting-started.md +15 -11
  9. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/runtime-capability-matrix.md +32 -29
  10. ouroboros_ai-0.27.3.dev2/docs/runtime-guides/opencode.md +165 -0
  11. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/pyproject.toml +17 -11
  12. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/setup/SKILL.md +1 -1
  13. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/_version.py +2 -2
  14. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/init.py +4 -2
  15. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/mcp.py +8 -6
  16. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/run.py +2 -1
  17. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/setup.py +213 -6
  18. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/uninstall.py +54 -0
  19. ouroboros_ai-0.27.3.dev2/src/ouroboros/cli/formatters/prompting.py +38 -0
  20. ouroboros_ai-0.27.3.dev2/src/ouroboros/cli/jsonc.py +93 -0
  21. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/config/loader.py +20 -1
  22. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/file_lock.py +5 -5
  23. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/server/adapter.py +60 -7
  24. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/__init__.py +12 -18
  25. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/mcp_tools.py +2 -1
  26. ouroboros_ai-0.27.3.dev2/src/ouroboros/orchestrator/opencode_event_normalizer.py +414 -0
  27. ouroboros_ai-0.27.3.dev2/src/ouroboros/orchestrator/opencode_runtime.py +1547 -0
  28. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/runtime_factory.py +10 -6
  29. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/__init__.py +5 -5
  30. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/factory.py +15 -10
  31. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/litellm_adapter.py +12 -0
  32. ouroboros_ai-0.27.3.dev2/src/ouroboros/providers/opencode_adapter.py +660 -0
  33. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/mcp/test_server_adapter.py +14 -3
  34. ouroboros_ai-0.27.3.dev2/tests/unit/cli/formatters/test_prompting.py +45 -0
  35. ouroboros_ai-0.27.3.dev2/tests/unit/cli/test_jsonc.py +141 -0
  36. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm_runtime_adapter.py +2 -4
  37. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_setup.py +451 -0
  38. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/config/test_loader_env.py +16 -0
  39. ouroboros_ai-0.27.3.dev2/tests/unit/core/test_file_lock.py +52 -0
  40. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/server/test_adapter.py +29 -0
  41. ouroboros_ai-0.27.3.dev2/tests/unit/orchestrator/test_opencode_runtime.py +781 -0
  42. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_runtime_factory.py +16 -53
  43. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/providers/test_factory.py +15 -25
  44. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/providers/test_litellm_adapter.py +20 -0
  45. ouroboros_ai-0.27.3.dev2/tests/unit/providers/test_opencode_adapter.py +515 -0
  46. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_dependencies_configured.py +19 -0
  47. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/uv.lock +506 -17
  48. ouroboros_ai-0.27.2.dev2/src/ouroboros/cli/formatters/prompting.py +0 -68
  49. ouroboros_ai-0.27.2.dev2/tests/unit/cli/formatters/test_prompting.py +0 -32
  50. ouroboros_ai-0.27.2.dev2/tests/unit/core/test_file_lock.py +0 -17
  51. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.claude/settings.json +0 -0
  52. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.claude-plugin/.mcp.json +0 -0
  53. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.env.example +0 -0
  54. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  55. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  56. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  57. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  58. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/workflows/dev-publish.yml +0 -0
  59. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/workflows/lint.yml +0 -0
  60. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/workflows/release.yml +0 -0
  61. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/workflows/test.yml +0 -0
  62. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.gitignore +0 -0
  63. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.mcp.json +0 -0
  64. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.ouroboros/mechanical.toml +0 -0
  65. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.ouroboros/seeds/seed_73827177a2a3.yaml +0 -0
  66. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.ouroboros/seeds/seed_78c8e6e41813.yaml +0 -0
  67. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.pre-commit-config.yaml +0 -0
  68. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.python-version +0 -0
  69. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/CHANGELOG.md +0 -0
  70. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/CLAUDE.md +0 -0
  71. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/CODE_OF_CONDUCT.md +0 -0
  72. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/CONTRIBUTING.md +0 -0
  73. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/HANDOFF.md +0 -0
  74. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/LICENSE +0 -0
  75. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/SECURITY.md +0 -0
  76. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/UNINSTALL.md +0 -0
  77. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/cancel.md +0 -0
  78. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/evaluate.md +0 -0
  79. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/evolve.md +0 -0
  80. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/help.md +0 -0
  81. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/interview.md +0 -0
  82. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/ralph.md +0 -0
  83. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/run.md +0 -0
  84. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/seed.md +0 -0
  85. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/setup.md +0 -0
  86. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/status.md +0 -0
  87. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/tutorial.md +0 -0
  88. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/unstuck.md +0 -0
  89. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/welcome.md +0 -0
  90. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/.gitignore +0 -0
  91. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/Cargo.lock +0 -0
  92. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/Cargo.toml +0 -0
  93. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/README.md +0 -0
  94. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/db.rs +0 -0
  95. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/main.rs +0 -0
  96. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/mock.rs +0 -0
  97. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/state.rs +0 -0
  98. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/views/dashboard.rs +0 -0
  99. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/views/execution.rs +0 -0
  100. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/views/lineage.rs +0 -0
  101. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/views/logs.rs +0 -0
  102. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/views/mod.rs +0 -0
  103. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/views/session_selector.rs +0 -0
  104. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/README.md +0 -0
  105. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/api/README.md +0 -0
  106. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/api/core.md +0 -0
  107. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/api/mcp.md +0 -0
  108. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/architecture.md +0 -0
  109. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/contributing/architecture-overview.md +0 -0
  110. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/contributing/findings-registry.md +0 -0
  111. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/contributing/issue-quality-policy.md +0 -0
  112. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/contributing/key-patterns.md +0 -0
  113. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/contributing/testing-guide.md +0 -0
  114. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/examples/mcp-config.yaml +0 -0
  115. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/guides/evaluation-pipeline.md +0 -0
  116. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/guides/evolution-loop.md +0 -0
  117. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/guides/issue-176-subagent-mcp-inheritance.md +0 -0
  118. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/guides/mcp-bridge.md +0 -0
  119. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/guides/seed-authoring.md +0 -0
  120. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/guides/tui-usage.md +0 -0
  121. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/images/PLACEHOLDER_README.md +0 -0
  122. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/images/ouroboros.png +0 -0
  123. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/platform-support.md +0 -0
  124. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/runtime-guides/claude-code.md +0 -0
  125. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/runtime-guides/codex.md +0 -0
  126. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/coordinator_test_seed.yaml +0 -0
  127. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/dummy_seed.yaml +0 -0
  128. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/parallel_subac_test_seed.yaml +0 -0
  129. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/subac_test_seed.yaml +0 -0
  130. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/task_manager/README.md +0 -0
  131. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/task_manager/__init__.py +0 -0
  132. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/task_manager/__main__.py +0 -0
  133. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/task_manager/cli.py +0 -0
  134. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/task_manager/models.py +0 -0
  135. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/task_manager/storage.py +0 -0
  136. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/test_display.py +0 -0
  137. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/hooks/hooks.json +0 -0
  138. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/llms-full.txt +0 -0
  139. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/llms.txt +0 -0
  140. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/project-context.md +0 -0
  141. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/drift-monitor.py +0 -0
  142. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/install.sh +0 -0
  143. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/keyword-detector.py +0 -0
  144. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/mcp-serve.sh +0 -0
  145. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/ralph-rewind.py +0 -0
  146. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/ralph.py +0 -0
  147. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/ralph.sh +0 -0
  148. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/session-start.py +0 -0
  149. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/sync-plugin-version.py +0 -0
  150. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/version-check.py +0 -0
  151. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/brownfield/SKILL.md +0 -0
  152. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/cancel/SKILL.md +0 -0
  153. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/evaluate/SKILL.md +0 -0
  154. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/evolve/SKILL.md +0 -0
  155. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/help/SKILL.md +0 -0
  156. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/interview/SKILL.md +0 -0
  157. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/pm/SKILL.md +0 -0
  158. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/publish/SKILL.md +0 -0
  159. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/qa/SKILL.md +0 -0
  160. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/ralph/SKILL.md +0 -0
  161. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/run/SKILL.md +0 -0
  162. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/seed/SKILL.md +0 -0
  163. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/status/SKILL.md +0 -0
  164. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/tutorial/SKILL.md +0 -0
  165. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/unstuck/SKILL.md +0 -0
  166. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/update/SKILL.md +0 -0
  167. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/welcome/SKILL.md +0 -0
  168. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/__init__.py +0 -0
  169. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/__main__.py +0 -0
  170. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/__init__.py +0 -0
  171. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/advocate.md +0 -0
  172. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/analysis-agent.md +0 -0
  173. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/architect.md +0 -0
  174. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/breadth-keeper.md +0 -0
  175. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/code-executor.md +0 -0
  176. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/codebase-explorer.md +0 -0
  177. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/consensus-reviewer.md +0 -0
  178. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/contrarian.md +0 -0
  179. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/evaluator.md +0 -0
  180. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/hacker.md +0 -0
  181. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/judge.md +0 -0
  182. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/loader.py +0 -0
  183. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/ontologist.md +0 -0
  184. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/ontology-analyst.md +0 -0
  185. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/qa-judge.md +0 -0
  186. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/research-agent.md +0 -0
  187. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/researcher.md +0 -0
  188. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/seed-architect.md +0 -0
  189. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/seed-closer.md +0 -0
  190. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/semantic-evaluator.md +0 -0
  191. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/simplifier.md +0 -0
  192. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/socratic-interviewer.md +0 -0
  193. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/__init__.py +0 -0
  194. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/ambiguity.py +0 -0
  195. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/brownfield.py +0 -0
  196. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/explore.py +0 -0
  197. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/interview.py +0 -0
  198. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/pm_completion.py +0 -0
  199. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/pm_document.py +0 -0
  200. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/pm_interview.py +0 -0
  201. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/pm_seed.py +0 -0
  202. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/question_classifier.py +0 -0
  203. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/seed_generator.py +0 -0
  204. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/__init__.py +0 -0
  205. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/__init__.py +0 -0
  206. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/cancel.py +0 -0
  207. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/config.py +0 -0
  208. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/pm.py +0 -0
  209. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/status.py +0 -0
  210. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/tui.py +0 -0
  211. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/formatters/__init__.py +0 -0
  212. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/formatters/panels.py +0 -0
  213. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/formatters/progress.py +0 -0
  214. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/formatters/tables.py +0 -0
  215. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/formatters/workflow_display.py +0 -0
  216. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/main.py +0 -0
  217. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/codex/__init__.py +0 -0
  218. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/codex/artifacts.py +0 -0
  219. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/codex/ouroboros.md +0 -0
  220. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/codex_permissions.py +0 -0
  221. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/config/__init__.py +0 -0
  222. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/config/models.py +0 -0
  223. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/__init__.py +0 -0
  224. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/ac_tree.py +0 -0
  225. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/context.py +0 -0
  226. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/errors.py +0 -0
  227. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/git_workflow.py +0 -0
  228. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/initial_context.py +0 -0
  229. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/json_utils.py +0 -0
  230. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/lineage.py +0 -0
  231. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/ontology_aspect.py +0 -0
  232. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/ontology_questions.py +0 -0
  233. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/project_paths.py +0 -0
  234. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/retry.py +0 -0
  235. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/security.py +0 -0
  236. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/seed.py +0 -0
  237. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/text.py +0 -0
  238. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/ttl_cache.py +0 -0
  239. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/types.py +0 -0
  240. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/worktree.py +0 -0
  241. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/__init__.py +0 -0
  242. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/artifact_collector.py +0 -0
  243. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/consensus.py +0 -0
  244. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/json_utils.py +0 -0
  245. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/languages.py +0 -0
  246. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/mechanical.py +0 -0
  247. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/models.py +0 -0
  248. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/pipeline.py +0 -0
  249. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/semantic.py +0 -0
  250. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/trigger.py +0 -0
  251. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/verification_artifacts.py +0 -0
  252. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/events/__init__.py +0 -0
  253. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/events/base.py +0 -0
  254. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/events/decomposition.py +0 -0
  255. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/events/evaluation.py +0 -0
  256. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/events/interview.py +0 -0
  257. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/events/lineage.py +0 -0
  258. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/events/ontology.py +0 -0
  259. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evolution/__init__.py +0 -0
  260. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evolution/convergence.py +0 -0
  261. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evolution/loop.py +0 -0
  262. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evolution/projector.py +0 -0
  263. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evolution/reflect.py +0 -0
  264. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evolution/regression.py +0 -0
  265. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evolution/wonder.py +0 -0
  266. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/execution/__init__.py +0 -0
  267. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/execution/atomicity.py +0 -0
  268. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/execution/decomposition.py +0 -0
  269. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/execution/double_diamond.py +0 -0
  270. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/execution/subagent.py +0 -0
  271. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/__init__.py +0 -0
  272. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/bridge/__init__.py +0 -0
  273. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/bridge/bridge.py +0 -0
  274. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/bridge/config.py +0 -0
  275. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/bridge/factory.py +0 -0
  276. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/client/__init__.py +0 -0
  277. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/client/adapter.py +0 -0
  278. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/client/manager.py +0 -0
  279. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/client/protocol.py +0 -0
  280. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/errors.py +0 -0
  281. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/job_manager.py +0 -0
  282. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/resources/__init__.py +0 -0
  283. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/resources/handlers.py +0 -0
  284. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/server/__init__.py +0 -0
  285. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/server/protocol.py +0 -0
  286. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/server/security.py +0 -0
  287. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/__init__.py +0 -0
  288. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/ac_tree_hud_handler.py +0 -0
  289. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/ac_tree_hud_render.py +0 -0
  290. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/authoring_handlers.py +0 -0
  291. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/bridge_mixin.py +0 -0
  292. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/brownfield_handler.py +0 -0
  293. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/dashboard.py +0 -0
  294. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/definitions.py +0 -0
  295. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/evaluation_handlers.py +0 -0
  296. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/evolution_handlers.py +0 -0
  297. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/execution_handlers.py +0 -0
  298. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/job_handlers.py +0 -0
  299. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/pm_handler.py +0 -0
  300. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/qa.py +0 -0
  301. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/query_handlers.py +0 -0
  302. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/registry.py +0 -0
  303. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/types.py +0 -0
  304. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/observability/__init__.py +0 -0
  305. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/observability/drift.py +0 -0
  306. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/observability/logging.py +0 -0
  307. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/observability/retrospective.py +0 -0
  308. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/adapter.py +0 -0
  309. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/capabilities.py +0 -0
  310. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/codex_cli_runtime.py +0 -0
  311. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/command_dispatcher.py +0 -0
  312. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/control_plane.py +0 -0
  313. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/coordinator.py +0 -0
  314. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/dependency_analyzer.py +0 -0
  315. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/events.py +0 -0
  316. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/execution_runtime_scope.py +0 -0
  317. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/execution_strategy.py +0 -0
  318. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/heartbeat.py +0 -0
  319. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/level_context.py +0 -0
  320. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/mcp_config.py +0 -0
  321. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/parallel_executor.py +0 -0
  322. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/parallel_executor_models.py +0 -0
  323. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/policy.py +0 -0
  324. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/runner.py +0 -0
  325. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/runtime_message_projection.py +0 -0
  326. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/session.py +0 -0
  327. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/workflow_state.py +0 -0
  328. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/__init__.py +0 -0
  329. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/brownfield.py +0 -0
  330. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/checkpoint.py +0 -0
  331. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/event_store.py +0 -0
  332. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/migrations/__init__.py +0 -0
  333. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/migrations/runner.py +0 -0
  334. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
  335. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/migrations/scripts/002_brownfield.sql +0 -0
  336. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/schema.py +0 -0
  337. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/uow.py +0 -0
  338. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/__init__.py +0 -0
  339. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/agents/__init__.py +0 -0
  340. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/agents/pool.py +0 -0
  341. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/agents/registry.py +0 -0
  342. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/orchestration/__init__.py +0 -0
  343. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/orchestration/router.py +0 -0
  344. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/orchestration/scheduler.py +0 -0
  345. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/skills/__init__.py +0 -0
  346. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/skills/docs.py +0 -0
  347. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/skills/executor.py +0 -0
  348. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/skills/keywords.py +0 -0
  349. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/skills/registry.py +0 -0
  350. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/pm/__init__.py +0 -0
  351. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/pm/handoff.py +0 -0
  352. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/pm/renderer.py +0 -0
  353. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/anthropic_adapter.py +0 -0
  354. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/base.py +0 -0
  355. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/claude_code_adapter.py +0 -0
  356. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/codex_cli_adapter.py +0 -0
  357. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/codex_cli_stream.py +0 -0
  358. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/gemini_cli_adapter.py +0 -0
  359. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/py.typed +0 -0
  360. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/resilience/__init__.py +0 -0
  361. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/resilience/lateral.py +0 -0
  362. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/resilience/stagnation.py +0 -0
  363. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/routing/__init__.py +0 -0
  364. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/routing/complexity.py +0 -0
  365. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/routing/downgrade.py +0 -0
  366. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/routing/escalation.py +0 -0
  367. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/routing/router.py +0 -0
  368. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/routing/tiers.py +0 -0
  369. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/secondary/__init__.py +0 -0
  370. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/secondary/scheduler.py +0 -0
  371. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/secondary/todo_registry.py +0 -0
  372. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/strategies/__init__.py +0 -0
  373. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/strategies/devil_advocate.py +0 -0
  374. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/__init__.py +0 -0
  375. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/app.py +0 -0
  376. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/components/__init__.py +0 -0
  377. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/components/agents_panel.py +0 -0
  378. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/components/event_log.py +0 -0
  379. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/components/progress.py +0 -0
  380. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/components/token_tracker.py +0 -0
  381. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/events.py +0 -0
  382. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/__init__.py +0 -0
  383. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/confirm_rewind.py +0 -0
  384. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/dashboard.py +0 -0
  385. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/dashboard_v2.py +0 -0
  386. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/dashboard_v3.py +0 -0
  387. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/debug.py +0 -0
  388. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/execution.py +0 -0
  389. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/hud_dashboard.py +0 -0
  390. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/lineage_detail.py +0 -0
  391. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/lineage_selector.py +0 -0
  392. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/logs.py +0 -0
  393. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/session_selector.py +0 -0
  394. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/__init__.py +0 -0
  395. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/ac_progress.py +0 -0
  396. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/ac_tree.py +0 -0
  397. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/agent_activity.py +0 -0
  398. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/cost_tracker.py +0 -0
  399. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/drift_meter.py +0 -0
  400. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/lineage_tree.py +0 -0
  401. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/parallel_graph.py +0 -0
  402. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/phase_progress.py +0 -0
  403. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/verification/__init__.py +0 -0
  404. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/verification/extractor.py +0 -0
  405. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/verification/models.py +0 -0
  406. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/verification/verifier.py +0 -0
  407. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/__init__.py +0 -0
  408. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/conftest.py +0 -0
  409. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/e2e/__init__.py +0 -0
  410. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/e2e/conftest.py +0 -0
  411. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/e2e/mcp_bridge_test_config.yaml +0 -0
  412. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/e2e/test_cli_commands.py +0 -0
  413. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/e2e/test_full_workflow.py +0 -0
  414. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/e2e/test_session_persistence.py +0 -0
  415. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/fixtures/test_atomicity_seed.yml +0 -0
  416. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/__init__.py +0 -0
  417. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/conftest.py +0 -0
  418. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/mcp/__init__.py +0 -0
  419. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/mcp/bridge/__init__.py +0 -0
  420. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/mcp/bridge/test_bridge_server_to_server.py +0 -0
  421. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/mcp/conftest.py +0 -0
  422. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/mcp/test_client_adapter.py +0 -0
  423. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/mcp/test_client_manager.py +0 -0
  424. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/plugin/test_orchestration.py +0 -0
  425. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/test_codex_cli_passthrough_smoke.py +0 -0
  426. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/test_codex_skill_fallback.py +0 -0
  427. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/test_codex_skill_smoke.py +0 -0
  428. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/test_entry_point.py +0 -0
  429. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/__init__.py +0 -0
  430. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/agents/__init__.py +0 -0
  431. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/agents/test_loader.py +0 -0
  432. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/__init__.py +0 -0
  433. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_ambiguity.py +0 -0
  434. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_brownfield.py +0 -0
  435. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_classifier_context.py +0 -0
  436. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_decide_later_items.py +0 -0
  437. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_explore.py +0 -0
  438. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_interview.py +0 -0
  439. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_interview_async_io.py +0 -0
  440. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_interview_no_web_search_hint.py +0 -0
  441. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_interview_research_prefix.py +0 -0
  442. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_pm_completion.py +0 -0
  443. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_pm_document_generator.py +0 -0
  444. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_pm_document_writer.py +0 -0
  445. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_pm_interview.py +0 -0
  446. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_pm_interview_brownfield_db.py +0 -0
  447. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_pm_seed_ac12.py +0 -0
  448. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_pm_seed_save.py +0 -0
  449. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_question_classifier.py +0 -0
  450. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_seed_generator.py +0 -0
  451. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/__init__.py +0 -0
  452. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/commands/test_tui_command.py +0 -0
  453. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/formatters/__init__.py +0 -0
  454. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/formatters/test_console.py +0 -0
  455. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/formatters/test_panels.py +0 -0
  456. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/formatters/test_progress.py +0 -0
  457. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/formatters/test_tables.py +0 -0
  458. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/formatters/test_workflow_display.py +0 -0
  459. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_cancel.py +0 -0
  460. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_config.py +0 -0
  461. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_init_pm_seed_detection.py +0 -0
  462. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_init_runtime.py +0 -0
  463. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_main.py +0 -0
  464. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_mcp_nested_guard.py +0 -0
  465. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_mcp_startup_cleanup.py +0 -0
  466. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm.py +0 -0
  467. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm_brownfield.py +0 -0
  468. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm_completion.py +0 -0
  469. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm_interactive_logging.py +0 -0
  470. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm_missing_litellm.py +0 -0
  471. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm_overwrite.py +0 -0
  472. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm_select_repos.py +0 -0
  473. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_run_qa.py +0 -0
  474. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_uninstall.py +0 -0
  475. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/config/__init__.py +0 -0
  476. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/config/test_loader.py +0 -0
  477. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/config/test_models.py +0 -0
  478. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/__init__.py +0 -0
  479. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_ac_tree.py +0 -0
  480. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_context.py +0 -0
  481. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_errors.py +0 -0
  482. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_git_workflow.py +0 -0
  483. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_initial_context.py +0 -0
  484. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_lineage.py +0 -0
  485. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_ontology_aspect.py +0 -0
  486. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_ontology_questions.py +0 -0
  487. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_retry.py +0 -0
  488. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_security.py +0 -0
  489. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_seed.py +0 -0
  490. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_ttl_cache.py +0 -0
  491. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_types.py +0 -0
  492. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_worktree.py +0 -0
  493. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/__init__.py +0 -0
  494. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_artifact_collector_file_prefix.py +0 -0
  495. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_consensus.py +0 -0
  496. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_json_utils.py +0 -0
  497. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_languages.py +0 -0
  498. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_mechanical.py +0 -0
  499. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_models.py +0 -0
  500. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_pipeline_trigger_consensus.py +0 -0
  501. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_review_fixes.py +0 -0
  502. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_semantic.py +0 -0
  503. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_trigger.py +0 -0
  504. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_trigger_consensus.py +0 -0
  505. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_verification_artifacts.py +0 -0
  506. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/events/__init__.py +0 -0
  507. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/events/test_base.py +0 -0
  508. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/events/test_decomposition_events.py +0 -0
  509. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evolution/test_wonder_scope.py +0 -0
  510. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/execution/__init__.py +0 -0
  511. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/execution/test_atomicity.py +0 -0
  512. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/execution/test_decomposition.py +0 -0
  513. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/execution/test_double_diamond.py +0 -0
  514. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/execution/test_subagent_isolation.py +0 -0
  515. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/__init__.py +0 -0
  516. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/bridge/__init__.py +0 -0
  517. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/bridge/test_bridge.py +0 -0
  518. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/bridge/test_config.py +0 -0
  519. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/bridge/test_factory.py +0 -0
  520. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/bridge/test_handler_wiring.py +0 -0
  521. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/bridge/test_stability.py +0 -0
  522. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/client/__init__.py +0 -0
  523. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/client/test_adapter.py +0 -0
  524. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/client/test_adapter_transport_lifecycle.py +0 -0
  525. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/client/test_manager.py +0 -0
  526. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/conftest.py +0 -0
  527. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/server/__init__.py +0 -0
  528. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/server/test_security.py +0 -0
  529. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/test_errors.py +0 -0
  530. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/test_job_manager.py +0 -0
  531. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/test_types.py +0 -0
  532. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/__init__.py +0 -0
  533. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/conftest.py +0 -0
  534. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_footer.py +0 -0
  535. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler.py +0 -0
  536. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_completed.py +0 -0
  537. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_cursor_changed.py +0 -0
  538. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_invalid_session.py +0 -0
  539. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_no_execution.py +0 -0
  540. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_waiting.py +0 -0
  541. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_max_nodes.py +0 -0
  542. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_render_depth2.py +0 -0
  543. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_render_depth3.py +0 -0
  544. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_status_icons.py +0 -0
  545. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_truncation.py +0 -0
  546. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_brownfield_handler.py +0 -0
  547. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_definitions.py +0 -0
  548. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_evaluation_handler.py +0 -0
  549. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_interview_parallel_scoring.py +0 -0
  550. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_interview_scoring_guard.py +0 -0
  551. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_mcp_manager_wiring.py +0 -0
  552. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_pm_handler.py +0 -0
  553. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_pm_handler_generate.py +0 -0
  554. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_pm_handler_pending_reframe.py +0 -0
  555. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_qa_integration.py +0 -0
  556. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_qa_parser.py +0 -0
  557. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_registry.py +0 -0
  558. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_traceback_reporting.py +0 -0
  559. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/observability/__init__.py +0 -0
  560. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/observability/test_drift.py +0 -0
  561. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/observability/test_logging.py +0 -0
  562. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/observability/test_retrospective.py +0 -0
  563. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/__init__.py +0 -0
  564. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_adapter.py +0 -0
  565. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_capabilities.py +0 -0
  566. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_codex_cli_runtime.py +0 -0
  567. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_codex_recursion_guard.py +0 -0
  568. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_command_dispatcher.py +0 -0
  569. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_control_plane.py +0 -0
  570. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_coordinator.py +0 -0
  571. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_dependency_analyzer.py +0 -0
  572. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_events.py +0 -0
  573. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_execution_runtime_scope.py +0 -0
  574. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_execution_strategy.py +0 -0
  575. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_inflight_cancellation.py +0 -0
  576. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_level_context.py +0 -0
  577. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_mcp_config.py +0 -0
  578. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_mcp_tools.py +0 -0
  579. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_parallel_executor.py +0 -0
  580. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_parallel_executor_atomic_judgment.py +0 -0
  581. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_parallel_executor_recursive_depth.py +0 -0
  582. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_parallel_executor_retry_resume.py +0 -0
  583. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_policy.py +0 -0
  584. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_runner.py +0 -0
  585. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_runner_cancellation.py +0 -0
  586. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_runtime_message_projection.py +0 -0
  587. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_session.py +0 -0
  588. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_workflow_state.py +0 -0
  589. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/persistence/__init__.py +0 -0
  590. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/persistence/test_brownfield_store.py +0 -0
  591. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/persistence/test_checkpoint.py +0 -0
  592. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/persistence/test_event_store.py +0 -0
  593. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/persistence/test_schema.py +0 -0
  594. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/persistence/test_uow.py +0 -0
  595. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/__init__.py +0 -0
  596. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/agents/__init__.py +0 -0
  597. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/agents/test_registry.py +0 -0
  598. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/orchestration/__init__.py +0 -0
  599. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/orchestration/test_model_router.py +0 -0
  600. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/skills/__init__.py +0 -0
  601. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/skills/test_keywords.py +0 -0
  602. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/skills/test_registry.py +0 -0
  603. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/pm/__init__.py +0 -0
  604. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/pm/test_renderer.py +0 -0
  605. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/providers/__init__.py +0 -0
  606. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/providers/test_base.py +0 -0
  607. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/providers/test_claude_code_adapter.py +0 -0
  608. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/providers/test_codex_cli_adapter.py +0 -0
  609. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/providers/test_gemini_cli_adapter.py +0 -0
  610. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/resilience/__init__.py +0 -0
  611. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/resilience/test_lateral.py +0 -0
  612. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/resilience/test_stagnation.py +0 -0
  613. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/routing/__init__.py +0 -0
  614. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/routing/test_complexity.py +0 -0
  615. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/routing/test_downgrade.py +0 -0
  616. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/routing/test_escalation.py +0 -0
  617. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/routing/test_router.py +0 -0
  618. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/routing/test_tiers.py +0 -0
  619. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/scripts/test_keyword_detector.py +0 -0
  620. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/scripts/test_version_check.py +0 -0
  621. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/secondary/__init__.py +0 -0
  622. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/secondary/test_scheduler.py +0 -0
  623. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/secondary/test_todo_registry.py +0 -0
  624. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_artifact_collector.py +0 -0
  625. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_codex_artifacts.py +0 -0
  626. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_convergence.py +0 -0
  627. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_dashboard.py +0 -0
  628. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_evolve_rewind.py +0 -0
  629. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_evolve_step.py +0 -0
  630. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_graceful_shutdown.py +0 -0
  631. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_main_entry_point.py +0 -0
  632. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_module_structure.py +0 -0
  633. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_project_initialization.py +0 -0
  634. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_projector_rewind.py +0 -0
  635. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_ralph_parser.py +0 -0
  636. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_ralph_rewind.py +0 -0
  637. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_regression.py +0 -0
  638. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_tooling_configuration.py +0 -0
  639. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_verification.py +0 -0
  640. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/__init__.py +0 -0
  641. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/test_app.py +0 -0
  642. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/test_cancelled_display.py +0 -0
  643. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/test_events.py +0 -0
  644. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/test_lineage_viewer.py +0 -0
  645. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/test_screens.py +0 -0
  646. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/test_session_selector_replay.py +0 -0
  647. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/test_widgets.py +0 -0
  648. {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tools/sync_github_project.py +0 -0
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "name": "ouroboros",
12
12
  "description": "Transform vague ideas into validated seed specifications through Socratic questioning and ontological analysis",
13
- "version": "0.27.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,32 +1,40 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ouroboros-ai
3
- Version: 0.27.2.dev2
3
+ Version: 0.27.3.dev2
4
4
  Summary: Specification-first workflow engine for AI coding agents. Works with Claude Code and Codex CLI.
5
5
  Author-email: Q00 <jqyu.lee@gmail.com>
6
6
  License-File: LICENSE
7
7
  Requires-Python: >=3.12
8
- Requires-Dist: aiosqlite>=0.20.0
9
- Requires-Dist: pydantic>=2.0.0
10
- Requires-Dist: pyyaml>=6.0.0
11
- Requires-Dist: rich>=13.0.0
12
- Requires-Dist: sqlalchemy[asyncio]>=2.0.0
13
- Requires-Dist: structlog>=24.0.0
14
- Requires-Dist: typer>=0.12.0
8
+ Requires-Dist: aiosqlite<1.0.0,>=0.20.0
9
+ Requires-Dist: prompt-toolkit<4.0.0,>=3.0.0
10
+ Requires-Dist: pydantic<3.0.0,>=2.0.0
11
+ Requires-Dist: pyyaml<7.0.0,>=6.0.0
12
+ Requires-Dist: rich<15.0.0,>=13.0.0
13
+ Requires-Dist: sqlalchemy[asyncio]<3.0.0,>=2.0.0
14
+ Requires-Dist: structlog<26.0.0,>=24.0.0
15
+ Requires-Dist: typer<1.0.0,>=0.12.0
15
16
  Provides-Extra: all
16
- Requires-Dist: anthropic>=0.52.0; extra == 'all'
17
- Requires-Dist: claude-agent-sdk>=0.1.0; extra == 'all'
17
+ Requires-Dist: anthropic<1.0.0,>=0.52.0; extra == 'all'
18
+ Requires-Dist: claude-agent-sdk<1.0.0,>=0.1.0; extra == 'all'
18
19
  Requires-Dist: litellm<=1.82.6,>=1.80.0; extra == 'all'
19
- Requires-Dist: mcp>=1.26.0; extra == 'all'
20
- Requires-Dist: textual>=1.0.0; extra == 'all'
20
+ Requires-Dist: mcp<2.0.0,>=1.26.0; extra == 'all'
21
+ Requires-Dist: pandas<3.0.0,>=2.2.0; extra == 'all'
22
+ Requires-Dist: plotly<7.0.0,>=5.24.0; extra == 'all'
23
+ Requires-Dist: streamlit<2.0.0,>=1.40.0; extra == 'all'
24
+ Requires-Dist: textual<9.0.0,>=1.0.0; extra == 'all'
21
25
  Provides-Extra: claude
22
- Requires-Dist: anthropic>=0.52.0; extra == 'claude'
23
- Requires-Dist: claude-agent-sdk>=0.1.0; extra == 'claude'
26
+ Requires-Dist: anthropic<1.0.0,>=0.52.0; extra == 'claude'
27
+ Requires-Dist: claude-agent-sdk<1.0.0,>=0.1.0; extra == 'claude'
28
+ Provides-Extra: dashboard
29
+ Requires-Dist: pandas<3.0.0,>=2.2.0; extra == 'dashboard'
30
+ Requires-Dist: plotly<7.0.0,>=5.24.0; extra == 'dashboard'
31
+ Requires-Dist: streamlit<2.0.0,>=1.40.0; extra == 'dashboard'
24
32
  Provides-Extra: litellm
25
33
  Requires-Dist: litellm<=1.82.6,>=1.80.0; extra == 'litellm'
26
34
  Provides-Extra: mcp
27
- Requires-Dist: mcp>=1.26.0; extra == 'mcp'
35
+ Requires-Dist: mcp<2.0.0,>=1.26.0; extra == 'mcp'
28
36
  Provides-Extra: tui
29
- Requires-Dist: textual>=1.0.0; extra == 'tui'
37
+ Requires-Dist: textual<9.0.0,>=1.0.0; extra == 'tui'
30
38
  Description-Content-Type: text/markdown
31
39
 
32
40
  <p align="right">
@@ -128,10 +136,12 @@ pip install ouroboros-ai[claude] # + Claude Code deps
128
136
  pip install ouroboros-ai[litellm] # + LiteLLM multi-provider
129
137
  pip install ouroboros-ai[mcp] # + MCP server/client support
130
138
  pip install ouroboros-ai[tui] # + Textual terminal UI
131
- pip install ouroboros-ai[all] # everything
139
+ pip install ouroboros-ai[all] # everything (claude + litellm + mcp + tui + dashboard)
132
140
  ouroboros setup # configure runtime
133
141
  ```
134
142
 
143
+ Legacy compatibility: `ouroboros-ai[dashboard]` is still accepted as a compatibility alias while extras migrate.
144
+
135
145
  See runtime guides: [Claude Code](./docs/runtime-guides/claude-code.md) · [Codex CLI](./docs/runtime-guides/codex.md)
136
146
 
137
147
  </details>
@@ -125,6 +125,8 @@ pip install ouroboros-ai[all] # 전부
125
125
  ouroboros setup # 런타임 설정
126
126
  ```
127
127
 
128
+ 호환성 참고: extras 전환 기간 동안 `ouroboros-ai[dashboard]`도 no-op alias로 계속 허용됩니다.
129
+
128
130
  런타임별 가이드: [Claude Code](./docs/runtime-guides/claude-code.md) · [Codex CLI](./docs/runtime-guides/codex.md)
129
131
 
130
132
  </details>
@@ -97,10 +97,12 @@ pip install ouroboros-ai[claude] # + Claude Code deps
97
97
  pip install ouroboros-ai[litellm] # + LiteLLM multi-provider
98
98
  pip install ouroboros-ai[mcp] # + MCP server/client support
99
99
  pip install ouroboros-ai[tui] # + Textual terminal UI
100
- pip install ouroboros-ai[all] # everything
100
+ pip install ouroboros-ai[all] # everything (claude + litellm + mcp + tui + dashboard)
101
101
  ouroboros setup # configure runtime
102
102
  ```
103
103
 
104
+ Legacy compatibility: `ouroboros-ai[dashboard]` is still accepted as a compatibility alias while extras migrate.
105
+
104
106
  See runtime guides: [Claude Code](./docs/runtime-guides/claude-code.md) · [Codex CLI](./docs/runtime-guides/codex.md)
105
107
 
106
108
  </details>
@@ -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:**
@@ -161,10 +160,6 @@ ouroboros init start --resume interview_20260116_120000
161
160
  ouroboros init
162
161
  ```
163
162
 
164
- > **Interactive multiline input:** when `init` or other interview-style commands prompt for a
165
- > longer response, press `Ctrl+D` (macOS/Linux) or `Ctrl+Z` then Enter (Windows) to submit the
166
- > full response. Plain Enter inserts a newline.
167
-
168
163
  ### `init list`
169
164
 
170
165
  List all interview sessions.
@@ -209,7 +204,7 @@ ouroboros run [workflow] [OPTIONS] SEED_FILE
209
204
  | Option | Description |
210
205
  |--------|-------------|
211
206
  | `-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) |
207
+ | `--runtime TEXT` | Agent runtime backend override (`claude`, `codex`, `opencode`). Uses configured default if omitted |
213
208
  | `-r, --resume TEXT` | Resume a previous orchestrator session by ID |
214
209
  | `--mcp-config PATH` | Path to MCP client configuration YAML file |
215
210
  | `--mcp-tool-prefix TEXT` | Prefix to add to all MCP tool names (e.g., `mcp_`) |
@@ -352,7 +347,7 @@ ouroboros config backend [BACKEND]
352
347
 
353
348
  | Argument | Description |
354
349
  |----------|-------------|
355
- | `BACKEND` | Backend to switch to: `claude` or `codex`. Omit to show current |
350
+ | `BACKEND` | Backend to switch to: `claude` or `codex`. Omit to show current. For `opencode`, use `ouroboros setup` instead |
356
351
 
357
352
  **Examples:**
358
353
 
@@ -631,8 +626,8 @@ ouroboros mcp serve [OPTIONS]
631
626
  | `-p, --port INTEGER` | Port to bind to (default: 8080) |
632
627
  | `-t, --transport TEXT` | Transport type: `stdio` or `sse` (default: stdio) |
633
628
  | `--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) |
629
+ | `--runtime TEXT` | Agent runtime backend for orchestrator-driven tools (`claude`, `codex`, `opencode`). Affects which tool variants are instantiated |
630
+ | `--llm-backend TEXT` | LLM backend for interview/seed/evaluation tools (`claude_code`, `litellm`, `codex`, `opencode`). Affects which tool variants are instantiated |
636
631
 
637
632
  **Examples:**
638
633
 
@@ -689,7 +684,7 @@ If Ouroboros is installed directly (not via `uvx`), use:
689
684
 
690
685
  ```yaml
691
686
  orchestrator:
692
- runtime_backend: claude # or "codex"
687
+ runtime_backend: claude # or "codex" or "opencode"
693
688
  ```
694
689
 
695
690
  Override per-session with the `OUROBOROS_AGENT_RUNTIME` environment variable if needed.
@@ -706,8 +701,8 @@ ouroboros mcp info [OPTIONS]
706
701
 
707
702
  | Option | Description |
708
703
  |--------|-------------|
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 |
704
+ | `--runtime TEXT` | Agent runtime backend for orchestrator-driven tools (`claude`, `codex`, `opencode`). Affects which tool variants are instantiated |
705
+ | `--llm-backend TEXT` | LLM backend for interview/seed/evaluation tools (`claude_code`, `litellm`, `codex`, `opencode`). Affects which tool variants are instantiated |
711
706
 
712
707
  **Available Tools:**
713
708
 
@@ -722,7 +717,7 @@ ouroboros mcp info [OPTIONS]
722
717
  ## Typical Workflows
723
718
 
724
719
  > 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.
720
+ > 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
721
 
727
722
  ### Cancelling Stuck Executions
728
723
 
@@ -745,11 +740,12 @@ The table below covers the most commonly used variables. For the full list — i
745
740
  | `ANTHROPIC_API_KEY` | — | Anthropic API key for Claude models |
746
741
  | `OPENAI_API_KEY` | — | OpenAI API key for LiteLLM / Codex CLI |
747
742
  | `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 |
743
+ | `OUROBOROS_AGENT_RUNTIME` | `orchestrator.runtime_backend` | Override the runtime backend (`claude`, `codex`, `opencode`) |
744
+ | `OUROBOROS_AGENT_PERMISSION_MODE` | `orchestrator.permission_mode` | Permission mode for Claude Code / Codex runtimes (no-op for OpenCode) |
750
745
  | `OUROBOROS_LLM_BACKEND` | `llm.backend` | Override the LLM-only flow backend |
751
746
  | `OUROBOROS_CLI_PATH` | `orchestrator.cli_path` | Path to the Claude CLI binary |
752
747
  | `OUROBOROS_CODEX_CLI_PATH` | `orchestrator.codex_cli_path` | Path to the Codex CLI binary |
748
+ | `OUROBOROS_OPENCODE_CLI_PATH` | `orchestrator.opencode_cli_path` | Path to the OpenCode CLI binary |
753
749
 
754
750
  ---
755
751
 
@@ -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
 
@@ -82,13 +82,14 @@ pip install ouroboros-ai[claude] # + Claude Code runtime deps (anthropic, c
82
82
  pip install ouroboros-ai[litellm] # + LiteLLM multi-provider support (100+ models)
83
83
  pip install ouroboros-ai[mcp] # + MCP server/client runtime support
84
84
  pip install ouroboros-ai[tui] # + Textual terminal UI
85
- pip install ouroboros-ai[all] # Everything (claude + litellm + mcp + tui)
85
+ pip install ouroboros-ai[all] # Everything (claude + litellm + mcp + tui + dashboard)
86
86
 
87
87
  ouroboros --version # verify CLI
88
88
  ```
89
89
 
90
90
  > **Which extra do I need?** If you only use Claude Code as your runtime, `ouroboros-ai[claude]` is sufficient.
91
91
  > For multi-model support via LiteLLM, use `ouroboros-ai[litellm]` or just grab everything with `ouroboros-ai[all]`.
92
+ > Legacy note: `ouroboros-ai[dashboard]` is still accepted as a compatibility extra during the extras transition.
92
93
 
93
94
  **One-liner alternative** (auto-detects your runtime and installs matching extras):
94
95
  ```bash
@@ -114,6 +115,7 @@ uv run ouroboros --version # verify CLI
114
115
  | Claude Code (`ooo`) | Claude Code with plugin support |
115
116
  | Standalone CLI (`ouroboros`) | Python >= 3.12, API key (Anthropic or OpenAI) |
116
117
  | Codex CLI backend | Python >= 3.12, `npm install -g @openai/codex`, OpenAI API key with access to GPT-5.4 |
118
+ | OpenCode backend | Python >= 3.12, `opencode` on PATH, API key for your configured provider |
117
119
 
118
120
  ---
119
121
 
@@ -137,7 +139,7 @@ export OPENAI_API_KEY="your-openai-key"
137
139
 
138
140
  ```yaml
139
141
  orchestrator:
140
- runtime_backend: claude # claude | codex
142
+ runtime_backend: claude # claude | codex | opencode
141
143
 
142
144
  llm:
143
145
  backend: claude_code # claude_code | codex | litellm
@@ -293,20 +295,21 @@ ooo run
293
295
 
294
296
  ## Choosing a Runtime Backend
295
297
 
296
- Ouroboros delegates code execution to a pluggable runtime backend. Two ship out of the box:
298
+ Ouroboros delegates code execution to a pluggable runtime backend. Three ship out of the box:
297
299
 
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` |
300
+ | | Claude Code | Codex CLI | OpenCode |
301
+ |---|---|---|---|
302
+ | **Best for** | Claude Code users; subscription billing | OpenAI ecosystem; pay-per-token billing | Multi-provider flexibility; open-source tooling |
303
+ | **Install** | `pip install ouroboros-ai[claude]` | `pip install ouroboros-ai` + `npm install -g @openai/codex` | `pip install ouroboros-ai` + `opencode` on PATH |
304
+ | **Skill shortcuts** | `ooo` inside Claude Code | `ooo` after `ouroboros setup --runtime codex` installs managed Codex skills | `ooo` after `ouroboros setup --runtime opencode` |
305
+ | **Config value** | `claude` | `codex` | `opencode` |
304
306
 
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.
307
+ 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
308
 
307
309
  For backend-specific configuration:
308
310
  - [Claude Code runtime guide](runtime-guides/claude-code.md)
309
311
  - [Codex CLI runtime guide](runtime-guides/codex.md)
312
+ - [OpenCode runtime guide](runtime-guides/opencode.md)
310
313
 
311
314
  ---
312
315
 
@@ -405,5 +408,6 @@ ouroboros cancel execution <session_id>
405
408
  - [Configuration Reference](config-reference.md) -- all config keys and defaults
406
409
  - [Claude Code runtime guide](runtime-guides/claude-code.md) -- backend-specific setup
407
410
  - [Codex CLI runtime guide](runtime-guides/codex.md) -- backend-specific setup
411
+ - [OpenCode runtime guide](runtime-guides/opencode.md) -- backend-specific setup
408
412
 
409
413
  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.