ouroboros-ai 0.29.1.dev9__tar.gz → 0.29.2.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 (712) hide show
  1. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.claude-plugin/marketplace.json +1 -1
  2. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.claude-plugin/plugin.json +1 -1
  3. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/PKG-INFO +1 -1
  4. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/brownfield/SKILL.md +36 -1
  5. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/interview/SKILL.md +21 -5
  6. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/setup/SKILL.md +1 -1
  7. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/_version.py +2 -2
  8. ouroboros_ai-0.29.2.dev2/src/ouroboros/agents/seed-closer.md +54 -0
  9. ouroboros_ai-0.29.2.dev2/src/ouroboros/cli/commands/detect.py +97 -0
  10. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/main.py +14 -1
  11. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/config/__init__.py +2 -0
  12. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/config/loader.py +14 -0
  13. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/__init__.py +10 -2
  14. ouroboros_ai-0.29.2.dev2/src/ouroboros/evaluation/detector.py +2351 -0
  15. ouroboros_ai-0.29.2.dev2/src/ouroboros/evaluation/languages.py +367 -0
  16. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/verification_artifacts.py +56 -3
  17. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/evaluation_handlers.py +26 -4
  18. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/execution_handlers.py +2 -0
  19. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/subagent.py +147 -4
  20. ouroboros_ai-0.29.2.dev2/tests/unit/evaluation/test_detector.py +1905 -0
  21. ouroboros_ai-0.29.2.dev2/tests/unit/evaluation/test_languages.py +199 -0
  22. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_verification_artifacts.py +223 -1
  23. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_subagent.py +128 -0
  24. ouroboros_ai-0.29.1.dev9/src/ouroboros/agents/seed-closer.md +0 -39
  25. ouroboros_ai-0.29.1.dev9/src/ouroboros/evaluation/languages.py +0 -396
  26. ouroboros_ai-0.29.1.dev9/tests/unit/evaluation/test_languages.py +0 -388
  27. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.claude/settings.json +0 -0
  28. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.claude-plugin/.mcp.json +0 -0
  29. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.env.example +0 -0
  30. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  31. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  32. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  33. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  34. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/workflows/dev-publish.yml +0 -0
  35. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/workflows/lint.yml +0 -0
  36. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/workflows/release.yml +0 -0
  37. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/workflows/test.yml +0 -0
  38. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.gitignore +0 -0
  39. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.mcp.json +0 -0
  40. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.ouroboros/mechanical.toml +0 -0
  41. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.ouroboros/seeds/seed_73827177a2a3.yaml +0 -0
  42. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.ouroboros/seeds/seed_78c8e6e41813.yaml +0 -0
  43. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.pre-commit-config.yaml +0 -0
  44. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.python-version +0 -0
  45. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/CHANGELOG.md +0 -0
  46. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/CLAUDE.md +0 -0
  47. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/CODE_OF_CONDUCT.md +0 -0
  48. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/CONTRIBUTING.md +0 -0
  49. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/Code-Review-Claude.md +0 -0
  50. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/Code-Review-Codex.md +0 -0
  51. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/HANDOFF.md +0 -0
  52. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/LICENSE +0 -0
  53. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/README.ko.md +0 -0
  54. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/README.md +0 -0
  55. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/SECURITY.md +0 -0
  56. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/UNINSTALL.md +0 -0
  57. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/cancel.md +0 -0
  58. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/evaluate.md +0 -0
  59. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/evolve.md +0 -0
  60. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/help.md +0 -0
  61. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/interview.md +0 -0
  62. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/ralph.md +0 -0
  63. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/run.md +0 -0
  64. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/seed.md +0 -0
  65. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/setup.md +0 -0
  66. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/status.md +0 -0
  67. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/tutorial.md +0 -0
  68. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/unstuck.md +0 -0
  69. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/welcome.md +0 -0
  70. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/.gitignore +0 -0
  71. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/Cargo.lock +0 -0
  72. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/Cargo.toml +0 -0
  73. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/README.md +0 -0
  74. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/db.rs +0 -0
  75. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/main.rs +0 -0
  76. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/mock.rs +0 -0
  77. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/state.rs +0 -0
  78. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/views/dashboard.rs +0 -0
  79. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/views/execution.rs +0 -0
  80. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/views/lineage.rs +0 -0
  81. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/views/logs.rs +0 -0
  82. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/views/mod.rs +0 -0
  83. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/views/session_selector.rs +0 -0
  84. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/README.md +0 -0
  85. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/api/README.md +0 -0
  86. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/api/core.md +0 -0
  87. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/api/mcp.md +0 -0
  88. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/architecture.md +0 -0
  89. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/cli-reference.md +0 -0
  90. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/config-reference.md +0 -0
  91. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/contributing/architecture-overview.md +0 -0
  92. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/contributing/findings-registry.md +0 -0
  93. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/contributing/issue-quality-policy.md +0 -0
  94. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/contributing/key-patterns.md +0 -0
  95. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/contributing/testing-guide.md +0 -0
  96. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/events.md +0 -0
  97. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/examples/mcp-config.yaml +0 -0
  98. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/getting-started.md +0 -0
  99. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/evaluation-pipeline.md +0 -0
  100. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/evolution-loop.md +0 -0
  101. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/issue-176-subagent-mcp-inheritance.md +0 -0
  102. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/mcp-bridge.md +0 -0
  103. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/ooo-skill-dispatch-router.md +0 -0
  104. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/opencode-subagent-bridge.md +0 -0
  105. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/seed-authoring.md +0 -0
  106. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/tui-usage.md +0 -0
  107. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/images/PLACEHOLDER_README.md +0 -0
  108. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/images/ouroboros.png +0 -0
  109. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/platform-support.md +0 -0
  110. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/runtime-capability-matrix.md +0 -0
  111. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/runtime-guides/claude-code.md +0 -0
  112. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/runtime-guides/codex.md +0 -0
  113. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/runtime-guides/hermes.md +0 -0
  114. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/runtime-guides/opencode.md +0 -0
  115. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/coordinator_test_seed.yaml +0 -0
  116. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/dummy_seed.yaml +0 -0
  117. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/parallel_subac_test_seed.yaml +0 -0
  118. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/subac_test_seed.yaml +0 -0
  119. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/task_manager/README.md +0 -0
  120. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/task_manager/__init__.py +0 -0
  121. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/task_manager/__main__.py +0 -0
  122. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/task_manager/cli.py +0 -0
  123. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/task_manager/models.py +0 -0
  124. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/task_manager/storage.py +0 -0
  125. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/test_display.py +0 -0
  126. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/hooks/hooks.json +0 -0
  127. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/llms-full.txt +0 -0
  128. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/llms.txt +0 -0
  129. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/project-context.md +0 -0
  130. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/pyproject.toml +0 -0
  131. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/drift-monitor.py +0 -0
  132. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/install.sh +0 -0
  133. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/keyword-detector.py +0 -0
  134. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/mcp-serve.sh +0 -0
  135. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/ralph-rewind.py +0 -0
  136. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/ralph.py +0 -0
  137. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/ralph.sh +0 -0
  138. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/session-start.py +0 -0
  139. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/sync-plugin-version.py +0 -0
  140. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/version-check.py +0 -0
  141. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/cancel/SKILL.md +0 -0
  142. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/evaluate/SKILL.md +0 -0
  143. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/evolve/SKILL.md +0 -0
  144. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/help/SKILL.md +0 -0
  145. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/pm/SKILL.md +0 -0
  146. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/publish/SKILL.md +0 -0
  147. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/qa/SKILL.md +0 -0
  148. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/ralph/SKILL.md +0 -0
  149. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/run/SKILL.md +0 -0
  150. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/seed/SKILL.md +0 -0
  151. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/status/SKILL.md +0 -0
  152. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/tutorial/SKILL.md +0 -0
  153. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/unstuck/SKILL.md +0 -0
  154. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/update/SKILL.md +0 -0
  155. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/welcome/SKILL.md +0 -0
  156. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/__init__.py +0 -0
  157. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/__main__.py +0 -0
  158. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/__init__.py +0 -0
  159. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/advocate.md +0 -0
  160. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/analysis-agent.md +0 -0
  161. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/architect.md +0 -0
  162. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/breadth-keeper.md +0 -0
  163. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/code-executor.md +0 -0
  164. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/codebase-explorer.md +0 -0
  165. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/consensus-reviewer.md +0 -0
  166. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/contrarian.md +0 -0
  167. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/evaluator.md +0 -0
  168. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/hacker.md +0 -0
  169. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/judge.md +0 -0
  170. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/loader.py +0 -0
  171. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/ontologist.md +0 -0
  172. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/ontology-analyst.md +0 -0
  173. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/qa-judge.md +0 -0
  174. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/research-agent.md +0 -0
  175. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/researcher.md +0 -0
  176. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/seed-architect.md +0 -0
  177. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/semantic-evaluator.md +0 -0
  178. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/simplifier.md +0 -0
  179. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/socratic-interviewer.md +0 -0
  180. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/__init__.py +0 -0
  181. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/ambiguity.py +0 -0
  182. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/brownfield.py +0 -0
  183. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/explore.py +0 -0
  184. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/interview.py +0 -0
  185. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/pm_completion.py +0 -0
  186. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/pm_document.py +0 -0
  187. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/pm_interview.py +0 -0
  188. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/pm_seed.py +0 -0
  189. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/question_classifier.py +0 -0
  190. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/seed_generator.py +0 -0
  191. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/claude_permissions.py +0 -0
  192. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/__init__.py +0 -0
  193. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/__init__.py +0 -0
  194. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/cancel.py +0 -0
  195. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/config.py +0 -0
  196. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/init.py +0 -0
  197. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/mcp.py +0 -0
  198. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/mcp_doctor.py +0 -0
  199. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/pm.py +0 -0
  200. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/run.py +0 -0
  201. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/setup.py +0 -0
  202. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/status.py +0 -0
  203. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/tui.py +0 -0
  204. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/uninstall.py +0 -0
  205. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/formatters/__init__.py +0 -0
  206. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/formatters/panels.py +0 -0
  207. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/formatters/progress.py +0 -0
  208. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/formatters/prompting.py +0 -0
  209. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/formatters/tables.py +0 -0
  210. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/formatters/workflow_display.py +0 -0
  211. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/jsonc.py +0 -0
  212. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/opencode_config.py +0 -0
  213. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/codex/__init__.py +0 -0
  214. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/codex/artifacts.py +0 -0
  215. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/codex/cli_policy.py +0 -0
  216. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/codex/ouroboros.md +0 -0
  217. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/codex_permissions.py +0 -0
  218. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/config/models.py +0 -0
  219. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/__init__.py +0 -0
  220. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/ac_tree.py +0 -0
  221. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/context.py +0 -0
  222. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/errors.py +0 -0
  223. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/file_lock.py +0 -0
  224. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/git_workflow.py +0 -0
  225. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/initial_context.py +0 -0
  226. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/json_utils.py +0 -0
  227. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/lineage.py +0 -0
  228. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/ontology_aspect.py +0 -0
  229. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/ontology_questions.py +0 -0
  230. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/project_paths.py +0 -0
  231. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/retry.py +0 -0
  232. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/security.py +0 -0
  233. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/seed.py +0 -0
  234. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/text.py +0 -0
  235. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/ttl_cache.py +0 -0
  236. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/types.py +0 -0
  237. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/worktree.py +0 -0
  238. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/artifact_collector.py +0 -0
  239. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/checklist.py +0 -0
  240. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/consensus.py +0 -0
  241. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/json_utils.py +0 -0
  242. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/mechanical.py +0 -0
  243. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/models.py +0 -0
  244. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/pipeline.py +0 -0
  245. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/semantic.py +0 -0
  246. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/trigger.py +0 -0
  247. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/events/__init__.py +0 -0
  248. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/events/base.py +0 -0
  249. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/events/decomposition.py +0 -0
  250. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/events/evaluation.py +0 -0
  251. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/events/interview.py +0 -0
  252. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/events/lineage.py +0 -0
  253. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/events/ontology.py +0 -0
  254. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evolution/__init__.py +0 -0
  255. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evolution/convergence.py +0 -0
  256. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evolution/loop.py +0 -0
  257. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evolution/projector.py +0 -0
  258. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evolution/reflect.py +0 -0
  259. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evolution/regression.py +0 -0
  260. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evolution/wonder.py +0 -0
  261. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/execution/__init__.py +0 -0
  262. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/execution/atomicity.py +0 -0
  263. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/execution/decomposition.py +0 -0
  264. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/execution/double_diamond.py +0 -0
  265. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/execution/subagent.py +0 -0
  266. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/hermes/__init__.py +0 -0
  267. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/hermes/artifacts.py +0 -0
  268. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/__init__.py +0 -0
  269. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/bridge/__init__.py +0 -0
  270. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/bridge/bridge.py +0 -0
  271. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/bridge/config.py +0 -0
  272. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/bridge/factory.py +0 -0
  273. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/client/__init__.py +0 -0
  274. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/client/adapter.py +0 -0
  275. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/client/manager.py +0 -0
  276. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/client/protocol.py +0 -0
  277. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/errors.py +0 -0
  278. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/job_manager.py +0 -0
  279. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/resources/__init__.py +0 -0
  280. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/resources/handlers.py +0 -0
  281. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/server/__init__.py +0 -0
  282. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/server/adapter.py +0 -0
  283. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/server/protocol.py +0 -0
  284. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/server/security.py +0 -0
  285. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/__init__.py +0 -0
  286. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/ac_tree_hud_handler.py +0 -0
  287. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/ac_tree_hud_render.py +0 -0
  288. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/authoring_handlers.py +0 -0
  289. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/bridge_mixin.py +0 -0
  290. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/brownfield_handler.py +0 -0
  291. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/dashboard.py +0 -0
  292. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/definitions.py +0 -0
  293. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/evolution_handlers.py +0 -0
  294. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/job_handlers.py +0 -0
  295. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/pm_handler.py +0 -0
  296. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/qa.py +0 -0
  297. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/query_handlers.py +0 -0
  298. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/registry.py +0 -0
  299. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/types.py +0 -0
  300. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/observability/__init__.py +0 -0
  301. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/observability/drift.py +0 -0
  302. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/observability/logging.py +0 -0
  303. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/observability/retrospective.py +0 -0
  304. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/opencode/__init__.py +0 -0
  305. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/opencode/plugin/__init__.py +0 -0
  306. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/opencode/plugin/opencode-plugin.d.ts +0 -0
  307. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/opencode/plugin/ouroboros-bridge.test.ts +0 -0
  308. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/opencode/plugin/ouroboros-bridge.ts +0 -0
  309. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/opencode/plugin/package.json +0 -0
  310. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/opencode/plugin/tsconfig.json +0 -0
  311. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/__init__.py +0 -0
  312. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/adapter.py +0 -0
  313. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/capabilities.py +0 -0
  314. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/codex_cli_runtime.py +0 -0
  315. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/command_dispatcher.py +0 -0
  316. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/control_plane.py +0 -0
  317. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/coordinator.py +0 -0
  318. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/dependency_analyzer.py +0 -0
  319. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/events.py +0 -0
  320. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/execution_runtime_scope.py +0 -0
  321. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/execution_strategy.py +0 -0
  322. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/heartbeat.py +0 -0
  323. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/hermes_runtime.py +0 -0
  324. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/level_context.py +0 -0
  325. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/mcp_config.py +0 -0
  326. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/mcp_tools.py +0 -0
  327. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/opencode_event_normalizer.py +0 -0
  328. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/opencode_runtime.py +0 -0
  329. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/parallel_executor.py +0 -0
  330. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/parallel_executor_models.py +0 -0
  331. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/policy.py +0 -0
  332. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/rate_limit.py +0 -0
  333. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/runner.py +0 -0
  334. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/runtime_factory.py +0 -0
  335. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/runtime_message_projection.py +0 -0
  336. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/session.py +0 -0
  337. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/workflow_state.py +0 -0
  338. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/__init__.py +0 -0
  339. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/brownfield.py +0 -0
  340. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/checkpoint.py +0 -0
  341. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/event_store.py +0 -0
  342. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/migrations/__init__.py +0 -0
  343. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/migrations/runner.py +0 -0
  344. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
  345. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/migrations/scripts/002_brownfield.sql +0 -0
  346. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/schema.py +0 -0
  347. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/uow.py +0 -0
  348. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/__init__.py +0 -0
  349. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/agents/__init__.py +0 -0
  350. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/agents/pool.py +0 -0
  351. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/agents/registry.py +0 -0
  352. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/orchestration/__init__.py +0 -0
  353. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/orchestration/router.py +0 -0
  354. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/orchestration/scheduler.py +0 -0
  355. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/skills/__init__.py +0 -0
  356. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/skills/docs.py +0 -0
  357. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/skills/executor.py +0 -0
  358. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/skills/keywords.py +0 -0
  359. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/skills/registry.py +0 -0
  360. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/pm/__init__.py +0 -0
  361. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/pm/handoff.py +0 -0
  362. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/pm/renderer.py +0 -0
  363. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/__init__.py +0 -0
  364. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/anthropic_adapter.py +0 -0
  365. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/base.py +0 -0
  366. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/claude_code_adapter.py +0 -0
  367. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/codex_cli_adapter.py +0 -0
  368. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/codex_cli_stream.py +0 -0
  369. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/factory.py +0 -0
  370. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/gemini_cli_adapter.py +0 -0
  371. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/litellm_adapter.py +0 -0
  372. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/opencode_adapter.py +0 -0
  373. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/py.typed +0 -0
  374. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/resilience/__init__.py +0 -0
  375. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/resilience/lateral.py +0 -0
  376. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/resilience/stagnation.py +0 -0
  377. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/router/__init__.py +0 -0
  378. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/router/command_parser.py +0 -0
  379. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/router/dispatch.py +0 -0
  380. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/router/registry.py +0 -0
  381. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/router/types.py +0 -0
  382. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/routing/__init__.py +0 -0
  383. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/routing/complexity.py +0 -0
  384. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/routing/downgrade.py +0 -0
  385. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/routing/escalation.py +0 -0
  386. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/routing/router.py +0 -0
  387. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/routing/tiers.py +0 -0
  388. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/sandbox.py +0 -0
  389. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/secondary/__init__.py +0 -0
  390. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/secondary/scheduler.py +0 -0
  391. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/secondary/todo_registry.py +0 -0
  392. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/skills/__init__.py +0 -0
  393. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/skills/artifacts.py +0 -0
  394. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/strategies/__init__.py +0 -0
  395. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/strategies/devil_advocate.py +0 -0
  396. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/__init__.py +0 -0
  397. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/app.py +0 -0
  398. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/components/__init__.py +0 -0
  399. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/components/agents_panel.py +0 -0
  400. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/components/event_log.py +0 -0
  401. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/components/progress.py +0 -0
  402. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/components/token_tracker.py +0 -0
  403. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/events.py +0 -0
  404. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/__init__.py +0 -0
  405. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/confirm_rewind.py +0 -0
  406. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/dashboard.py +0 -0
  407. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/dashboard_v2.py +0 -0
  408. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/dashboard_v3.py +0 -0
  409. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/debug.py +0 -0
  410. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/execution.py +0 -0
  411. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/hud_dashboard.py +0 -0
  412. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/lineage_detail.py +0 -0
  413. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/lineage_selector.py +0 -0
  414. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/logs.py +0 -0
  415. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/session_selector.py +0 -0
  416. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/__init__.py +0 -0
  417. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/ac_progress.py +0 -0
  418. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/ac_tree.py +0 -0
  419. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/agent_activity.py +0 -0
  420. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/cost_tracker.py +0 -0
  421. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/drift_meter.py +0 -0
  422. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/lineage_tree.py +0 -0
  423. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/parallel_graph.py +0 -0
  424. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/phase_progress.py +0 -0
  425. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/verification/__init__.py +0 -0
  426. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/verification/extractor.py +0 -0
  427. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/verification/models.py +0 -0
  428. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/verification/verifier.py +0 -0
  429. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/__init__.py +0 -0
  430. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/conftest.py +0 -0
  431. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/e2e/__init__.py +0 -0
  432. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/e2e/conftest.py +0 -0
  433. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/e2e/mcp_bridge_test_config.yaml +0 -0
  434. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/e2e/test_cli_commands.py +0 -0
  435. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/e2e/test_full_workflow.py +0 -0
  436. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/e2e/test_session_persistence.py +0 -0
  437. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/fixtures/router/skills/frontmatter-body/run/SKILL.md +0 -0
  438. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/fixtures/test_atomicity_seed.yml +0 -0
  439. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/__init__.py +0 -0
  440. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/conftest.py +0 -0
  441. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/mcp/__init__.py +0 -0
  442. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/mcp/bridge/__init__.py +0 -0
  443. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/mcp/bridge/test_bridge_server_to_server.py +0 -0
  444. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/mcp/conftest.py +0 -0
  445. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/mcp/test_client_adapter.py +0 -0
  446. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/mcp/test_client_manager.py +0 -0
  447. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/mcp/test_server_adapter.py +0 -0
  448. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/plugin/test_orchestration.py +0 -0
  449. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/test_codex_cli_passthrough_smoke.py +0 -0
  450. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/test_codex_skill_fallback.py +0 -0
  451. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/test_codex_skill_smoke.py +0 -0
  452. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/test_entry_point.py +0 -0
  453. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/test-execution-plan.md +0 -0
  454. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/__init__.py +0 -0
  455. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/agents/__init__.py +0 -0
  456. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/agents/test_loader.py +0 -0
  457. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/__init__.py +0 -0
  458. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_ambiguity.py +0 -0
  459. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_brownfield.py +0 -0
  460. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_classifier_context.py +0 -0
  461. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_decide_later_items.py +0 -0
  462. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_explore.py +0 -0
  463. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_interview.py +0 -0
  464. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_interview_async_io.py +0 -0
  465. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_interview_no_web_search_hint.py +0 -0
  466. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_interview_research_prefix.py +0 -0
  467. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_pm_completion.py +0 -0
  468. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_pm_document_generator.py +0 -0
  469. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_pm_document_writer.py +0 -0
  470. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_pm_interview.py +0 -0
  471. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_pm_interview_brownfield_db.py +0 -0
  472. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_pm_seed_ac12.py +0 -0
  473. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_pm_seed_save.py +0 -0
  474. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_question_classifier.py +0 -0
  475. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_seed_generator.py +0 -0
  476. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/__init__.py +0 -0
  477. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/commands/test_tui_command.py +0 -0
  478. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/conftest.py +0 -0
  479. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/formatters/__init__.py +0 -0
  480. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/formatters/test_console.py +0 -0
  481. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/formatters/test_panels.py +0 -0
  482. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/formatters/test_progress.py +0 -0
  483. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/formatters/test_prompting.py +0 -0
  484. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/formatters/test_tables.py +0 -0
  485. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/formatters/test_workflow_display.py +0 -0
  486. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_bridge_plugin_hardening.py +0 -0
  487. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_bridge_plugin_lifecycle.py +0 -0
  488. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_cancel.py +0 -0
  489. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_config.py +0 -0
  490. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_init_pm_seed_detection.py +0 -0
  491. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_init_runtime.py +0 -0
  492. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_jsonc.py +0 -0
  493. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_main.py +0 -0
  494. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_mcp_doctor.py +0 -0
  495. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_mcp_nested_guard.py +0 -0
  496. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_mcp_startup_cleanup.py +0 -0
  497. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_mcp_validate_transport_stderr.py +0 -0
  498. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_opencode_config.py +0 -0
  499. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm.py +0 -0
  500. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm_brownfield.py +0 -0
  501. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm_completion.py +0 -0
  502. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm_interactive_logging.py +0 -0
  503. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm_missing_litellm.py +0 -0
  504. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm_overwrite.py +0 -0
  505. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm_runtime_adapter.py +0 -0
  506. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm_select_repos.py +0 -0
  507. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_run_qa.py +0 -0
  508. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_setup.py +0 -0
  509. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_uninstall.py +0 -0
  510. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/codex/test_cli_policy.py +0 -0
  511. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/config/__init__.py +0 -0
  512. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/config/test_loader.py +0 -0
  513. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/config/test_loader_env.py +0 -0
  514. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/config/test_models.py +0 -0
  515. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/__init__.py +0 -0
  516. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_ac_tree.py +0 -0
  517. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_context.py +0 -0
  518. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_errors.py +0 -0
  519. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_file_lock.py +0 -0
  520. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_git_workflow.py +0 -0
  521. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_initial_context.py +0 -0
  522. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_lineage.py +0 -0
  523. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_ontology_aspect.py +0 -0
  524. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_ontology_questions.py +0 -0
  525. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_retry.py +0 -0
  526. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_security.py +0 -0
  527. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_seed.py +0 -0
  528. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_ttl_cache.py +0 -0
  529. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_types.py +0 -0
  530. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_worktree.py +0 -0
  531. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/__init__.py +0 -0
  532. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_artifact_collector_file_prefix.py +0 -0
  533. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_checklist.py +0 -0
  534. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_consensus.py +0 -0
  535. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_json_utils.py +0 -0
  536. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_mechanical.py +0 -0
  537. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_models.py +0 -0
  538. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_pipeline_stage1_reuse.py +0 -0
  539. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_pipeline_trigger_consensus.py +0 -0
  540. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_review_fixes.py +0 -0
  541. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_semantic.py +0 -0
  542. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_trigger.py +0 -0
  543. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_trigger_consensus.py +0 -0
  544. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/events/__init__.py +0 -0
  545. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/events/test_base.py +0 -0
  546. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/events/test_decomposition_events.py +0 -0
  547. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evolution/test_wonder_scope.py +0 -0
  548. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/execution/__init__.py +0 -0
  549. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/execution/test_atomicity.py +0 -0
  550. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/execution/test_decomposition.py +0 -0
  551. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/execution/test_double_diamond.py +0 -0
  552. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/execution/test_subagent_isolation.py +0 -0
  553. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/hermes/test_artifacts.py +0 -0
  554. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/__init__.py +0 -0
  555. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/bridge/__init__.py +0 -0
  556. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/bridge/test_bridge.py +0 -0
  557. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/bridge/test_config.py +0 -0
  558. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/bridge/test_factory.py +0 -0
  559. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/bridge/test_handler_wiring.py +0 -0
  560. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/bridge/test_stability.py +0 -0
  561. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/client/__init__.py +0 -0
  562. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/client/test_adapter.py +0 -0
  563. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/client/test_adapter_transport_lifecycle.py +0 -0
  564. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/client/test_manager.py +0 -0
  565. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/conftest.py +0 -0
  566. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/server/__init__.py +0 -0
  567. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/server/test_adapter.py +0 -0
  568. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/server/test_security.py +0 -0
  569. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/test_errors.py +0 -0
  570. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/test_job_manager.py +0 -0
  571. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/test_types.py +0 -0
  572. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/__init__.py +0 -0
  573. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/conftest.py +0 -0
  574. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_footer.py +0 -0
  575. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler.py +0 -0
  576. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_completed.py +0 -0
  577. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_cursor_changed.py +0 -0
  578. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_invalid_session.py +0 -0
  579. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_no_execution.py +0 -0
  580. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_waiting.py +0 -0
  581. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_max_nodes.py +0 -0
  582. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_render_depth2.py +0 -0
  583. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_render_depth3.py +0 -0
  584. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_status_icons.py +0 -0
  585. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_truncation.py +0 -0
  586. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_brownfield_handler.py +0 -0
  587. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_checklist_verify.py +0 -0
  588. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_definitions.py +0 -0
  589. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_evaluate_multi_ac.py +0 -0
  590. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_handler_subagent_wiring.py +0 -0
  591. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_lateral_think_handler.py +0 -0
  592. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_mcp_manager_wiring.py +0 -0
  593. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_pm_handler.py +0 -0
  594. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_pm_handler_pending_reframe.py +0 -0
  595. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_qa_parser.py +0 -0
  596. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_registry.py +0 -0
  597. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_round5_fixes.py +0 -0
  598. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/observability/__init__.py +0 -0
  599. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/observability/test_drift.py +0 -0
  600. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/observability/test_logging.py +0 -0
  601. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/observability/test_retrospective.py +0 -0
  602. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/__init__.py +0 -0
  603. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_adapter.py +0 -0
  604. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_capabilities.py +0 -0
  605. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_codex_cli_runtime.py +0 -0
  606. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_codex_recursion_guard.py +0 -0
  607. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_command_dispatcher.py +0 -0
  608. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_control_plane.py +0 -0
  609. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_coordinator.py +0 -0
  610. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_dependency_analyzer.py +0 -0
  611. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_events.py +0 -0
  612. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_execution_runtime_scope.py +0 -0
  613. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_execution_strategy.py +0 -0
  614. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_hermes_runtime.py +0 -0
  615. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_inflight_cancellation.py +0 -0
  616. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_level_context.py +0 -0
  617. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_mcp_config.py +0 -0
  618. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_mcp_tools.py +0 -0
  619. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_opencode_runtime.py +0 -0
  620. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_parallel_executor.py +0 -0
  621. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_parallel_executor_atomic_judgment.py +0 -0
  622. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_parallel_executor_recursive_depth.py +0 -0
  623. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_parallel_executor_retry_resume.py +0 -0
  624. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_policy.py +0 -0
  625. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_rate_limit.py +0 -0
  626. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_runner.py +0 -0
  627. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_runner_cancellation.py +0 -0
  628. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_runtime_factory.py +0 -0
  629. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_runtime_message_projection.py +0 -0
  630. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_sandbox_class.py +0 -0
  631. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_session.py +0 -0
  632. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_workflow_state.py +0 -0
  633. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/persistence/__init__.py +0 -0
  634. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/persistence/test_brownfield_store.py +0 -0
  635. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/persistence/test_checkpoint.py +0 -0
  636. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/persistence/test_event_store.py +0 -0
  637. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/persistence/test_schema.py +0 -0
  638. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/persistence/test_uow.py +0 -0
  639. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/__init__.py +0 -0
  640. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/agents/__init__.py +0 -0
  641. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/agents/test_registry.py +0 -0
  642. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/orchestration/__init__.py +0 -0
  643. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/orchestration/test_model_router.py +0 -0
  644. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/skills/__init__.py +0 -0
  645. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/skills/test_keywords.py +0 -0
  646. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/skills/test_registry.py +0 -0
  647. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/pm/__init__.py +0 -0
  648. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/pm/test_renderer.py +0 -0
  649. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/__init__.py +0 -0
  650. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/test_base.py +0 -0
  651. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/test_claude_code_adapter.py +0 -0
  652. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/test_codex_cli_adapter.py +0 -0
  653. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/test_factory.py +0 -0
  654. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/test_gemini_cli_adapter.py +0 -0
  655. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/test_litellm_adapter.py +0 -0
  656. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/test_opencode_adapter.py +0 -0
  657. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/resilience/__init__.py +0 -0
  658. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/resilience/test_lateral.py +0 -0
  659. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/resilience/test_stagnation.py +0 -0
  660. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/__init__.py +0 -0
  661. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_command_parser.py +0 -0
  662. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_dispatch.py +0 -0
  663. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_dispatch_result_shapes.py +0 -0
  664. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_extract_first_argument.py +0 -0
  665. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_invalid_dispatch_input_types.py +0 -0
  666. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_malformed_unknown_dispatch_errors.py +0 -0
  667. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_not_handled_resolution.py +0 -0
  668. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_registry.py +0 -0
  669. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_repository_dispatch_guard.py +0 -0
  670. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_router_resolution_pipeline.py +0 -0
  671. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_typed_frontmatter_fields.py +0 -0
  672. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_valid_dispatch_normalization.py +0 -0
  673. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/routing/__init__.py +0 -0
  674. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/routing/test_complexity.py +0 -0
  675. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/routing/test_downgrade.py +0 -0
  676. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/routing/test_escalation.py +0 -0
  677. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/routing/test_router.py +0 -0
  678. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/routing/test_tiers.py +0 -0
  679. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/scripts/test_keyword_detector.py +0 -0
  680. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/scripts/test_session_start.py +0 -0
  681. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/scripts/test_version_check.py +0 -0
  682. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/secondary/__init__.py +0 -0
  683. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/secondary/test_scheduler.py +0 -0
  684. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/secondary/test_todo_registry.py +0 -0
  685. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/skills/test_skill_artifacts.py +0 -0
  686. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_artifact_collector.py +0 -0
  687. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_codex_artifacts.py +0 -0
  688. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_convergence.py +0 -0
  689. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_dashboard.py +0 -0
  690. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_dependencies_configured.py +0 -0
  691. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_evolve_rewind.py +0 -0
  692. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_evolve_step.py +0 -0
  693. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_graceful_shutdown.py +0 -0
  694. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_main_entry_point.py +0 -0
  695. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_module_structure.py +0 -0
  696. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_project_initialization.py +0 -0
  697. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_projector_rewind.py +0 -0
  698. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_ralph_parser.py +0 -0
  699. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_ralph_rewind.py +0 -0
  700. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_regression.py +0 -0
  701. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_tooling_configuration.py +0 -0
  702. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_verification.py +0 -0
  703. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/__init__.py +0 -0
  704. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/test_app.py +0 -0
  705. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/test_cancelled_display.py +0 -0
  706. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/test_events.py +0 -0
  707. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/test_lineage_viewer.py +0 -0
  708. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/test_screens.py +0 -0
  709. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/test_session_selector_replay.py +0 -0
  710. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/test_widgets.py +0 -0
  711. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tools/sync_github_project.py +0 -0
  712. {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/uv.lock +0 -0
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "name": "ouroboros",
12
12
  "description": "Transform vague ideas into validated seed specifications through Socratic questioning and ontological analysis",
13
- "version": "0.29.0",
13
+ "version": "0.29.1",
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.29.0",
3
+ "version": "0.29.1",
4
4
  "description": "Self-improving AI workflow system. Crystallize requirements before execution with Socratic interview, ambiguity scoring, and 3-stage evaluation.",
5
5
  "author": {
6
6
  "name": "Q00",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ouroboros-ai
3
- Version: 0.29.1.dev9
3
+ Version: 0.29.2.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
@@ -14,9 +14,10 @@ ooo brownfield # Scan repos and set defaults
14
14
  ooo brownfield scan # Scan only (no default selection)
15
15
  ooo brownfield defaults # Show current defaults
16
16
  ooo brownfield set 6,18,19 # Set defaults by repo numbers
17
+ ooo brownfield detect [path] # Author mechanical.toml via one AI call
17
18
  ```
18
19
 
19
- **Trigger keywords:** "brownfield", "scan repos", "default repos", "brownfield scan"
20
+ **Trigger keywords:** "brownfield", "scan repos", "default repos", "brownfield scan", "mechanical detect"
20
21
 
21
22
  ---
22
23
 
@@ -167,3 +168,37 @@ Arguments: { "action": "set_defaults", "indices": "<indices>" }
167
168
  ```
168
169
 
169
170
  Show confirmation with updated defaults.
171
+
172
+ ---
173
+
174
+ ### Subcommand: `detect [path]`
175
+
176
+ Runs one AI call against the target directory (defaults to the user's cwd)
177
+ and writes `.ouroboros/mechanical.toml` with validated lint / build / test /
178
+ static / coverage commands. Stage 1 of evaluation reads this file verbatim,
179
+ so the toml is the authoritative Stage 1 contract — no hardcoded language
180
+ presets exist anymore.
181
+
182
+ Ouroboros auto-runs this detect the first time `ouroboros_evaluate` is
183
+ invoked without a toml present, so most users never need to call it
184
+ directly. Run it explicitly when:
185
+
186
+ - you want to pre-author the toml before the first evaluate,
187
+ - you moved to a new build tool and want to refresh (`--force`),
188
+ - you want to review/edit the commands before Stage 1 trusts them.
189
+
190
+ **Implementation:** invoke the CLI via Bash.
191
+
192
+ ```
193
+ uvx --from ouroboros-ai ouroboros detect [path]
194
+ # or, if already installed:
195
+ ouroboros detect [path] [--force]
196
+ ```
197
+
198
+ Then print the resulting `.ouroboros/mechanical.toml` contents so the user
199
+ can confirm the proposed commands or hand-edit them.
200
+
201
+ If detect reports "could not propose any verifiable commands", surface the
202
+ reason (no manifests found, LLM unavailable, every proposal dropped) and
203
+ suggest the user write a minimal toml by hand — any single entry like
204
+ `test = "pytest -q"` is enough to opt back in to Stage 1 for that check.
@@ -215,10 +215,24 @@ MCP (question generator) ←→ You (answerer + router) ←→ User (human judgm
215
215
 
216
216
  7. **Repeat steps 2-6** until the user says "done" or MCP signals seed-ready.
217
217
 
218
- 8. **Prefer stopping over over-interviewing**:
219
- When scope, outputs, AC, and non-goals are clear, suggest `ooo seed`.
220
-
221
- 9. After completion, suggest the next step:
218
+ 8. **Seed-ready Acceptance Guard**:
219
+ When MCP signals seed-ready, do NOT relay completion blindly. Before
220
+ announcing completion or suggesting `ooo seed`, apply the canonical Seed
221
+ Closer criteria from `src/ouroboros/agents/seed-closer.md` as the single
222
+ source of truth for closure readiness. Run the check from the main session's
223
+ perspective, including any code, research, or brownfield context MCP did not
224
+ see.
225
+
226
+ If any material decision remains unresolved, do not announce seed-ready.
227
+ If the local challenge finds a material gap, explicitly override the MCP
228
+ signal: `"MCP says seed-ready, but I am not accepting it yet because <gap>."`
229
+ Explain the gap briefly and ask the single highest-impact follow-up question,
230
+ routed through PATH 2 or PATH 3 as appropriate.
231
+
232
+ 9. **Prefer stopping over over-interviewing**:
233
+ When the Seed-ready Acceptance Guard passes, suggest `ooo seed`.
234
+
235
+ 10. After completion, suggest the next step:
222
236
  `📍 Next: ooo seed to crystallize these requirements into a specification`
223
237
 
224
238
  #### Dialectic Rhythm Guard
@@ -261,7 +275,7 @@ If the MCP tool is NOT available, fall back to agent-based interview:
261
275
  - Track multiple independent ambiguity threads
262
276
  - Revisit unresolved threads every few rounds
263
277
  - Do not let one detailed subtopic crowd out the rest of the original request
264
- 7. Prefer closure when the request already has stable scope, outputs, verification, and non-goals. Ask whether to move to `ooo seed` rather than continuing to generate narrower questions.
278
+ 7. Prefer closure only after applying the Seed-ready Acceptance Guard above. Ask whether to move to `ooo seed` rather than continuing to generate narrower questions.
265
279
  8. Continue until the user says "done"
266
280
  9. Interview results live in conversation context (not persisted)
267
281
  10. After completion, suggest the next step in `📍 Next:` format:
@@ -280,6 +294,8 @@ If the MCP tool is NOT available, fall back to agent-based interview:
280
294
  - For high-confidence factual questions (PATH 1a), auto-confirm and notify the user
281
295
  - For all other questions, present to user as confirmation or direct question
282
296
  - You NEVER make decisions on behalf of the user — auto-confirm is for FACTS only
297
+ - You are the final gate on MCP seed-ready signals: apply the canonical Seed
298
+ Closer criteria before suggesting `ooo seed`
283
299
  - The Dialectic Rhythm Guard prevents over-automation: after 3 consecutive
284
300
  non-user answers, the next question MUST go directly to the user
285
301
 
@@ -246,7 +246,7 @@ A backup will be created: CLAUDE.md.bak
246
246
  **If "Preview first", show:**
247
247
  ````markdown
248
248
  <!-- ooo:START -->
249
- <!-- ooo:VERSION:0.29.0 -->
249
+ <!-- ooo:VERSION:0.29.1 -->
250
250
  # Ouroboros — Specification-First AI Development
251
251
 
252
252
  > Before telling AI what to build, define what should be built.
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.29.1.dev9'
22
- __version_tuple__ = version_tuple = (0, 29, 1, 'dev9')
21
+ __version__ = version = '0.29.2.dev2'
22
+ __version_tuple__ = version_tuple = (0, 29, 2, 'dev2')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -0,0 +1,54 @@
1
+ # Seed Closer
2
+
3
+ You decide when the interview is actually safe to stop and convert into a Seed instead of asking one more clever question.
4
+
5
+ ## YOUR PHILOSOPHY
6
+
7
+ "A good interview ends on time, but not before unresolved decisions that would change execution are exposed."
8
+
9
+ You optimize for executable clarity, not endless refinement or premature closure.
10
+
11
+ ## CLOSURE GATE SUMMARY
12
+
13
+ - Treat a low ambiguity score as permission to audit closure, not permission to close.
14
+ - Do not close if any unresolved decision would materially change implementation.
15
+ - For brownfield or system-level work, check ownership/SSoT, protocol or API contract, lifecycle/recovery, migration, cross-client impact, and verification.
16
+ - If code, research, or architecture context reveals a materially different path, ask for the needed human decision instead of closing.
17
+
18
+ ## YOUR APPROACH
19
+
20
+ ### 1. Check The Decision Boundary
21
+ - Ask whether scope, non-goals, outputs, and verification expectations are already explicit
22
+ - Distinguish true ambiguity from minor wording polish
23
+ - Prefer stopping once the remaining uncertainty would not change execution materially
24
+ - Treat a low ambiguity score as permission to audit closure, not permission to close
25
+
26
+ ### 2. Sweep For Material Blockers
27
+ - For brownfield or system-level work, check whether ownership/SSoT, protocol or API contract, lifecycle/recovery, migration, cross-client impact, and verification are clear enough to execute
28
+ - Look for unasked alternatives from code, research, or architecture context that would materially change the implementation
29
+ - If a human/product/architecture decision remains open, ask that question instead of closing
30
+
31
+ ### 3. Reject Over-Interviewing
32
+ - Notice when new questions only produce stylistic refinement or edge-case bikeshedding
33
+ - Treat repeated restatement as a sign that the interview may already be done
34
+ - Avoid opening new branches when the current information is already seed-worthy and no material blocker remains
35
+
36
+ ### 4. Ask For Closure Directly
37
+ - Convert late-stage refinement into a closure question
38
+ - Confirm whether the current constraints are sufficient to proceed
39
+ - Move the conversation toward seed generation instead of another exploratory detour only after material blockers are resolved
40
+
41
+ ### 5. Preserve Practical Momentum
42
+ - Favor "good enough to execute" over theoretical completeness
43
+ - Accept that implementation mechanics belong to execution, but decisions that change architecture, ownership, protocol, lifecycle, or verification belong in the interview
44
+ - End the interview once the next useful action is seed generation
45
+
46
+ ## YOUR QUESTIONS
47
+
48
+ - Is there any ambiguity left that would materially change implementation?
49
+ - Are scope, non-goals, outputs, and verification expectations already clear enough for a Seed?
50
+ - For brownfield or system-level work, are ownership, protocol/API contract, lifecycle/recovery, migration, cross-client impact, and verification clear enough to execute?
51
+ - Did code or research reveal an alternative path that would change implementation and needs a human decision?
52
+ - Would another question change execution, or just polish wording?
53
+ - Should we stop the interview here and move to seed generation?
54
+ - What is the smallest remaining clarification needed before we can proceed?
@@ -0,0 +1,97 @@
1
+ """Mechanical detect command for Ouroboros.
2
+
3
+ Runs a single AI call to inspect a project and author
4
+ ``.ouroboros/mechanical.toml``. Stage 1 (lint/build/test/static) then reads
5
+ that file deterministically instead of guessing from hardcoded language
6
+ presets.
7
+
8
+ Usage:
9
+ ouroboros detect # detect in current directory
10
+ ouroboros detect /path/to/repo # detect in explicit directory
11
+ ouroboros detect --force # overwrite an existing mechanical.toml
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ import asyncio
17
+ from pathlib import Path
18
+ from typing import Annotated
19
+
20
+ import typer
21
+
22
+ from ouroboros.cli.formatters.panels import (
23
+ print_error,
24
+ print_info,
25
+ print_success,
26
+ print_warning,
27
+ )
28
+ from ouroboros.evaluation.detector import (
29
+ ensure_mechanical_toml,
30
+ has_mechanical_toml,
31
+ toml_path,
32
+ )
33
+ from ouroboros.providers.factory import create_llm_adapter
34
+
35
+ app = typer.Typer(
36
+ name="detect",
37
+ help="Generate .ouroboros/mechanical.toml via one AI call.",
38
+ invoke_without_command=True,
39
+ )
40
+
41
+
42
+ @app.callback(invoke_without_command=True)
43
+ def detect(
44
+ path: Annotated[
45
+ Path | None,
46
+ typer.Argument(help="Project directory to inspect. Defaults to cwd."),
47
+ ] = None,
48
+ force: Annotated[
49
+ bool,
50
+ typer.Option(
51
+ "--force",
52
+ "-f",
53
+ help="Re-detect and overwrite an existing .ouroboros/mechanical.toml.",
54
+ ),
55
+ ] = False,
56
+ backend: Annotated[
57
+ str | None,
58
+ typer.Option(
59
+ "--backend",
60
+ help="LLM backend override (claude, codex, gemini, opencode, litellm).",
61
+ ),
62
+ ] = None,
63
+ ) -> None:
64
+ """Inspect the project and write mechanical.toml with validated commands."""
65
+ working_dir = (path or Path.cwd()).resolve()
66
+ if not working_dir.is_dir():
67
+ print_error(f"Not a directory: {working_dir}")
68
+ raise typer.Exit(code=2)
69
+
70
+ target = toml_path(working_dir)
71
+ if has_mechanical_toml(working_dir) and not force:
72
+ print_info(f"Already present: {target} (use --force to re-detect)")
73
+ raise typer.Exit(code=0)
74
+
75
+ try:
76
+ adapter = create_llm_adapter(backend=backend, max_turns=1)
77
+ except Exception as exc: # noqa: BLE001 — surface any factory failure to user
78
+ print_error(f"Could not initialize LLM adapter: {exc}")
79
+ raise typer.Exit(code=1) from exc
80
+
81
+ existed_before = has_mechanical_toml(working_dir)
82
+ ok = asyncio.run(ensure_mechanical_toml(working_dir, adapter, backend=backend, force=force))
83
+ if not ok:
84
+ if existed_before and force:
85
+ print_warning(
86
+ "Detector could not propose any verifiable commands. "
87
+ f"Existing {target} was left untouched."
88
+ )
89
+ else:
90
+ print_warning(
91
+ "Detector could not propose any verifiable commands. "
92
+ "Stage 1 will skip gracefully until mechanical.toml is authored."
93
+ )
94
+ raise typer.Exit(code=1)
95
+
96
+ print_success(f"Wrote {target}")
97
+ print_info("Edit this file to customize Stage 1 commands.")
@@ -14,7 +14,19 @@ from typing import Annotated
14
14
  import typer
15
15
 
16
16
  from ouroboros import __version__
17
- from ouroboros.cli.commands import cancel, config, init, mcp, pm, run, setup, status, tui, uninstall
17
+ from ouroboros.cli.commands import (
18
+ cancel,
19
+ config,
20
+ detect,
21
+ init,
22
+ mcp,
23
+ pm,
24
+ run,
25
+ setup,
26
+ status,
27
+ tui,
28
+ uninstall,
29
+ )
18
30
  from ouroboros.cli.formatters import console
19
31
 
20
32
  # Create the main Typer app
@@ -33,6 +45,7 @@ app.add_typer(status.app, name="status")
33
45
  app.add_typer(cancel.app, name="cancel")
34
46
  app.add_typer(mcp.app, name="mcp")
35
47
  app.add_typer(setup.app, name="setup")
48
+ app.add_typer(detect.app, name="detect")
36
49
  app.add_typer(tui.app, name="tui")
37
50
  app.add_typer(pm.app, name="pm")
38
51
  app.add_typer(uninstall.app, name="uninstall")
@@ -47,6 +47,7 @@ from ouroboros.config.loader import (
47
47
  get_hermes_cli_path,
48
48
  get_llm_backend,
49
49
  get_llm_permission_mode,
50
+ get_mechanical_detector_model,
50
51
  get_ontology_analysis_model,
51
52
  get_opencode_cli_path,
52
53
  get_opencode_mode,
@@ -117,6 +118,7 @@ __all__ = [
117
118
  "get_consensus_judge_model",
118
119
  "get_consensus_models",
119
120
  "get_context_compression_model",
121
+ "get_mechanical_detector_model",
120
122
  "get_codex_cli_path",
121
123
  "get_gemini_cli_path",
122
124
  "get_hermes_cli_path",
@@ -918,6 +918,20 @@ def get_assertion_extraction_model(backend: str | None = None) -> str:
918
918
  return _default_model_for_backend("claude-sonnet-4-6", backend=backend)
919
919
 
920
920
 
921
+ def get_mechanical_detector_model(backend: str | None = None) -> str:
922
+ """Resolve the model used by the mechanical.toml AI detector.
923
+
924
+ Mirrors the assertion-extraction model resolution: env var override,
925
+ then ``OuroborosConfig.evaluation.assertion_extraction_model`` with
926
+ backend-safe fallback to the Codex ``"default"`` sentinel for
927
+ Codex/OpenCode backends.
928
+ """
929
+ env_model = os.environ.get("OUROBOROS_DETECTOR_MODEL", "").strip()
930
+ if env_model:
931
+ return env_model
932
+ return get_assertion_extraction_model(backend=backend)
933
+
934
+
921
935
  def get_consensus_models(backend: str | None = None) -> tuple[str, ...]:
922
936
  """Get consensus stage model roster from environment variable or config."""
923
937
  env_models = os.environ.get("OUROBOROS_CONSENSUS_MODELS", "").strip()
@@ -40,6 +40,11 @@ from ouroboros.evaluation.consensus import (
40
40
  run_consensus_evaluation,
41
41
  run_deliberative_evaluation,
42
42
  )
43
+ from ouroboros.evaluation.detector import (
44
+ DetectedCommands,
45
+ ensure_mechanical_toml,
46
+ has_mechanical_toml,
47
+ )
43
48
  from ouroboros.evaluation.languages import (
44
49
  LanguagePreset,
45
50
  build_mechanical_config,
@@ -99,11 +104,14 @@ __all__ = [
99
104
  "Vote",
100
105
  "VoterRole",
101
106
  # Stage 1
102
- "LanguagePreset",
107
+ "DetectedCommands",
108
+ "LanguagePreset", # deprecated compat shim
103
109
  "MechanicalConfig",
104
110
  "MechanicalVerifier",
105
111
  "build_mechanical_config",
106
- "detect_language",
112
+ "detect_language", # deprecated compat shim
113
+ "ensure_mechanical_toml",
114
+ "has_mechanical_toml",
107
115
  "run_mechanical_verification",
108
116
  # Stage 2
109
117
  "DEFAULT_SEMANTIC_MODEL",