ouroboros-ai 0.26.2.dev34__tar.gz → 0.26.2.dev36__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 (553) hide show
  1. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/PKG-INFO +10 -19
  2. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/README.ko.md +10 -22
  3. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/README.md +9 -18
  4. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/scripts/keyword-detector.py +34 -1
  5. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/help/SKILL.md +20 -0
  6. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/_version.py +2 -2
  7. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/worktree.py +4 -1
  8. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/definitions.py +1 -20
  9. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/execution_handlers.py +3 -0
  10. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/test_qa_integration.py +4 -4
  11. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_evolve_step.py +3 -3
  12. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.claude/settings.json +0 -0
  13. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.claude-plugin/.mcp.json +0 -0
  14. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.claude-plugin/marketplace.json +0 -0
  15. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.claude-plugin/plugin.json +0 -0
  16. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.env.example +0 -0
  17. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  18. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  19. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  20. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  21. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.github/workflows/dev-publish.yml +0 -0
  22. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.github/workflows/lint.yml +0 -0
  23. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.github/workflows/release.yml +0 -0
  24. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.github/workflows/test.yml +0 -0
  25. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.gitignore +0 -0
  26. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.mcp.json +0 -0
  27. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.ouroboros/mechanical.toml +0 -0
  28. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.pre-commit-config.yaml +0 -0
  29. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/.python-version +0 -0
  30. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/CHANGELOG.md +0 -0
  31. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/CLAUDE.md +0 -0
  32. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/CODE_OF_CONDUCT.md +0 -0
  33. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/CONTRIBUTING.md +0 -0
  34. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/HANDOFF.md +0 -0
  35. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/LICENSE +0 -0
  36. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/SECURITY.md +0 -0
  37. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/commands/cancel.md +0 -0
  38. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/commands/evaluate.md +0 -0
  39. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/commands/evolve.md +0 -0
  40. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/commands/help.md +0 -0
  41. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/commands/interview.md +0 -0
  42. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/commands/ralph.md +0 -0
  43. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/commands/run.md +0 -0
  44. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/commands/seed.md +0 -0
  45. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/commands/setup.md +0 -0
  46. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/commands/status.md +0 -0
  47. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/commands/tutorial.md +0 -0
  48. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/commands/unstuck.md +0 -0
  49. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/commands/welcome.md +0 -0
  50. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/.gitignore +0 -0
  51. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/Cargo.lock +0 -0
  52. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/Cargo.toml +0 -0
  53. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/README.md +0 -0
  54. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/db.rs +0 -0
  55. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/main.rs +0 -0
  56. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/mock.rs +0 -0
  57. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/state.rs +0 -0
  58. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/views/dashboard.rs +0 -0
  59. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/views/execution.rs +0 -0
  60. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/views/lineage.rs +0 -0
  61. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/views/logs.rs +0 -0
  62. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/views/mod.rs +0 -0
  63. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/views/session_selector.rs +0 -0
  64. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/README.md +0 -0
  65. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/api/README.md +0 -0
  66. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/api/core.md +0 -0
  67. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/api/mcp.md +0 -0
  68. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/architecture.md +0 -0
  69. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/cli-reference.md +0 -0
  70. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/config-reference.md +0 -0
  71. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/contributing/architecture-overview.md +0 -0
  72. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/contributing/findings-registry.md +0 -0
  73. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/contributing/issue-quality-policy.md +0 -0
  74. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/contributing/key-patterns.md +0 -0
  75. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/contributing/testing-guide.md +0 -0
  76. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/examples/mcp-config.yaml +0 -0
  77. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/getting-started.md +0 -0
  78. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/guides/evaluation-pipeline.md +0 -0
  79. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/guides/evolution-loop.md +0 -0
  80. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/guides/issue-176-subagent-mcp-inheritance.md +0 -0
  81. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/guides/seed-authoring.md +0 -0
  82. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/guides/tui-usage.md +0 -0
  83. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/images/PLACEHOLDER_README.md +0 -0
  84. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/images/ouroboros.png +0 -0
  85. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/platform-support.md +0 -0
  86. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/runtime-capability-matrix.md +0 -0
  87. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/runtime-guides/claude-code.md +0 -0
  88. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/docs/runtime-guides/codex.md +0 -0
  89. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/examples/coordinator_test_seed.yaml +0 -0
  90. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/examples/dummy_seed.yaml +0 -0
  91. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/examples/parallel_subac_test_seed.yaml +0 -0
  92. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/examples/subac_test_seed.yaml +0 -0
  93. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/examples/task_manager/README.md +0 -0
  94. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/examples/task_manager/__init__.py +0 -0
  95. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/examples/task_manager/__main__.py +0 -0
  96. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/examples/task_manager/cli.py +0 -0
  97. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/examples/task_manager/models.py +0 -0
  98. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/examples/task_manager/storage.py +0 -0
  99. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/examples/test_display.py +0 -0
  100. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/hooks/hooks.json +0 -0
  101. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/llms-full.txt +0 -0
  102. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/llms.txt +0 -0
  103. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/project-context.md +0 -0
  104. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/pyproject.toml +0 -0
  105. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/scripts/drift-monitor.py +0 -0
  106. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/scripts/install.sh +0 -0
  107. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/scripts/mcp-serve.sh +0 -0
  108. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/scripts/ralph-rewind.py +0 -0
  109. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/scripts/ralph.py +0 -0
  110. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/scripts/ralph.sh +0 -0
  111. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/scripts/session-start.py +0 -0
  112. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/scripts/sync-plugin-version.py +0 -0
  113. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/scripts/version-check.py +0 -0
  114. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/brownfield/SKILL.md +0 -0
  115. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/cancel/SKILL.md +0 -0
  116. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/evaluate/SKILL.md +0 -0
  117. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/evolve/SKILL.md +0 -0
  118. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/interview/SKILL.md +0 -0
  119. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/pm/SKILL.md +0 -0
  120. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/qa/SKILL.md +0 -0
  121. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/ralph/SKILL.md +0 -0
  122. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/run/SKILL.md +0 -0
  123. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/seed/SKILL.md +0 -0
  124. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/setup/SKILL.md +0 -0
  125. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/status/SKILL.md +0 -0
  126. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/tutorial/SKILL.md +0 -0
  127. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/unstuck/SKILL.md +0 -0
  128. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/update/SKILL.md +0 -0
  129. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/skills/welcome/SKILL.md +0 -0
  130. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/__init__.py +0 -0
  131. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/__main__.py +0 -0
  132. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/__init__.py +0 -0
  133. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/advocate.md +0 -0
  134. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/analysis-agent.md +0 -0
  135. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/architect.md +0 -0
  136. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/breadth-keeper.md +0 -0
  137. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/code-executor.md +0 -0
  138. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/codebase-explorer.md +0 -0
  139. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/consensus-reviewer.md +0 -0
  140. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/contrarian.md +0 -0
  141. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/evaluator.md +0 -0
  142. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/hacker.md +0 -0
  143. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/judge.md +0 -0
  144. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/loader.py +0 -0
  145. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/ontologist.md +0 -0
  146. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/ontology-analyst.md +0 -0
  147. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/qa-judge.md +0 -0
  148. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/research-agent.md +0 -0
  149. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/researcher.md +0 -0
  150. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/seed-architect.md +0 -0
  151. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/seed-closer.md +0 -0
  152. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/semantic-evaluator.md +0 -0
  153. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/simplifier.md +0 -0
  154. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/socratic-interviewer.md +0 -0
  155. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/__init__.py +0 -0
  156. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/ambiguity.py +0 -0
  157. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/brownfield.py +0 -0
  158. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/explore.py +0 -0
  159. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/interview.py +0 -0
  160. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/pm_document.py +0 -0
  161. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/pm_interview.py +0 -0
  162. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/pm_seed.py +0 -0
  163. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/question_classifier.py +0 -0
  164. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/seed_generator.py +0 -0
  165. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/__init__.py +0 -0
  166. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/__init__.py +0 -0
  167. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/cancel.py +0 -0
  168. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/config.py +0 -0
  169. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/init.py +0 -0
  170. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/mcp.py +0 -0
  171. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/pm.py +0 -0
  172. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/run.py +0 -0
  173. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/setup.py +0 -0
  174. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/status.py +0 -0
  175. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/tui.py +0 -0
  176. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/formatters/__init__.py +0 -0
  177. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/formatters/panels.py +0 -0
  178. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/formatters/progress.py +0 -0
  179. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/formatters/tables.py +0 -0
  180. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/formatters/workflow_display.py +0 -0
  181. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/main.py +0 -0
  182. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/codex/__init__.py +0 -0
  183. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/codex/artifacts.py +0 -0
  184. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/codex/ouroboros.md +0 -0
  185. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/codex_permissions.py +0 -0
  186. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/config/__init__.py +0 -0
  187. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/config/loader.py +0 -0
  188. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/config/models.py +0 -0
  189. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/__init__.py +0 -0
  190. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/ac_tree.py +0 -0
  191. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/context.py +0 -0
  192. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/errors.py +0 -0
  193. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/file_lock.py +0 -0
  194. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/git_workflow.py +0 -0
  195. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/lineage.py +0 -0
  196. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/ontology_aspect.py +0 -0
  197. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/ontology_questions.py +0 -0
  198. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/security.py +0 -0
  199. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/seed.py +0 -0
  200. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/text.py +0 -0
  201. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/types.py +0 -0
  202. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/__init__.py +0 -0
  203. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/artifact_collector.py +0 -0
  204. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/consensus.py +0 -0
  205. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/json_utils.py +0 -0
  206. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/languages.py +0 -0
  207. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/mechanical.py +0 -0
  208. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/models.py +0 -0
  209. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/pipeline.py +0 -0
  210. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/semantic.py +0 -0
  211. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/trigger.py +0 -0
  212. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/events/__init__.py +0 -0
  213. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/events/base.py +0 -0
  214. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/events/decomposition.py +0 -0
  215. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/events/evaluation.py +0 -0
  216. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/events/interview.py +0 -0
  217. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/events/lineage.py +0 -0
  218. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/events/ontology.py +0 -0
  219. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evolution/__init__.py +0 -0
  220. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evolution/convergence.py +0 -0
  221. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evolution/loop.py +0 -0
  222. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evolution/projector.py +0 -0
  223. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evolution/reflect.py +0 -0
  224. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evolution/regression.py +0 -0
  225. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evolution/wonder.py +0 -0
  226. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/execution/__init__.py +0 -0
  227. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/execution/atomicity.py +0 -0
  228. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/execution/decomposition.py +0 -0
  229. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/execution/double_diamond.py +0 -0
  230. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/execution/subagent.py +0 -0
  231. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/__init__.py +0 -0
  232. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/client/__init__.py +0 -0
  233. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/client/adapter.py +0 -0
  234. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/client/manager.py +0 -0
  235. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/client/protocol.py +0 -0
  236. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/errors.py +0 -0
  237. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/job_manager.py +0 -0
  238. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/resources/__init__.py +0 -0
  239. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/resources/handlers.py +0 -0
  240. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/server/__init__.py +0 -0
  241. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/server/adapter.py +0 -0
  242. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/server/protocol.py +0 -0
  243. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/server/security.py +0 -0
  244. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/__init__.py +0 -0
  245. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/authoring_handlers.py +0 -0
  246. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/brownfield_handler.py +0 -0
  247. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/dashboard.py +0 -0
  248. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/evaluation_handlers.py +0 -0
  249. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/evolution_handlers.py +0 -0
  250. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/job_handlers.py +0 -0
  251. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/pm_handler.py +0 -0
  252. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/qa.py +0 -0
  253. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/query_handlers.py +0 -0
  254. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/registry.py +0 -0
  255. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/types.py +0 -0
  256. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/observability/__init__.py +0 -0
  257. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/observability/drift.py +0 -0
  258. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/observability/logging.py +0 -0
  259. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/observability/retrospective.py +0 -0
  260. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/__init__.py +0 -0
  261. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/adapter.py +0 -0
  262. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/codex_cli_runtime.py +0 -0
  263. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/command_dispatcher.py +0 -0
  264. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/coordinator.py +0 -0
  265. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/dependency_analyzer.py +0 -0
  266. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/events.py +0 -0
  267. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/execution_runtime_scope.py +0 -0
  268. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/execution_strategy.py +0 -0
  269. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/heartbeat.py +0 -0
  270. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/level_context.py +0 -0
  271. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/mcp_config.py +0 -0
  272. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/mcp_tools.py +0 -0
  273. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/parallel_executor.py +0 -0
  274. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/parallel_executor_models.py +0 -0
  275. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/runner.py +0 -0
  276. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/runtime_factory.py +0 -0
  277. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/runtime_message_projection.py +0 -0
  278. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/session.py +0 -0
  279. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/workflow_state.py +0 -0
  280. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/__init__.py +0 -0
  281. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/brownfield.py +0 -0
  282. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/checkpoint.py +0 -0
  283. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/event_store.py +0 -0
  284. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/migrations/__init__.py +0 -0
  285. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/migrations/runner.py +0 -0
  286. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
  287. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/migrations/scripts/002_brownfield.sql +0 -0
  288. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/schema.py +0 -0
  289. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/uow.py +0 -0
  290. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/__init__.py +0 -0
  291. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/agents/__init__.py +0 -0
  292. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/agents/pool.py +0 -0
  293. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/agents/registry.py +0 -0
  294. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/orchestration/__init__.py +0 -0
  295. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/orchestration/router.py +0 -0
  296. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/orchestration/scheduler.py +0 -0
  297. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/skills/__init__.py +0 -0
  298. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/skills/docs.py +0 -0
  299. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/skills/executor.py +0 -0
  300. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/skills/keywords.py +0 -0
  301. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/skills/registry.py +0 -0
  302. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/pm/__init__.py +0 -0
  303. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/pm/renderer.py +0 -0
  304. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/__init__.py +0 -0
  305. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/anthropic_adapter.py +0 -0
  306. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/base.py +0 -0
  307. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/claude_code_adapter.py +0 -0
  308. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/codex_cli_adapter.py +0 -0
  309. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/codex_cli_stream.py +0 -0
  310. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/factory.py +0 -0
  311. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/litellm_adapter.py +0 -0
  312. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/py.typed +0 -0
  313. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/resilience/__init__.py +0 -0
  314. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/resilience/lateral.py +0 -0
  315. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/resilience/stagnation.py +0 -0
  316. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/routing/__init__.py +0 -0
  317. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/routing/complexity.py +0 -0
  318. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/routing/downgrade.py +0 -0
  319. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/routing/escalation.py +0 -0
  320. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/routing/router.py +0 -0
  321. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/routing/tiers.py +0 -0
  322. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/secondary/__init__.py +0 -0
  323. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/secondary/scheduler.py +0 -0
  324. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/secondary/todo_registry.py +0 -0
  325. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/strategies/__init__.py +0 -0
  326. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/strategies/devil_advocate.py +0 -0
  327. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/__init__.py +0 -0
  328. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/app.py +0 -0
  329. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/components/__init__.py +0 -0
  330. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/components/agents_panel.py +0 -0
  331. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/components/event_log.py +0 -0
  332. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/components/progress.py +0 -0
  333. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/components/token_tracker.py +0 -0
  334. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/events.py +0 -0
  335. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/__init__.py +0 -0
  336. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/confirm_rewind.py +0 -0
  337. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/dashboard.py +0 -0
  338. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/dashboard_v2.py +0 -0
  339. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/dashboard_v3.py +0 -0
  340. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/debug.py +0 -0
  341. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/execution.py +0 -0
  342. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/hud_dashboard.py +0 -0
  343. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/lineage_detail.py +0 -0
  344. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/lineage_selector.py +0 -0
  345. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/logs.py +0 -0
  346. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/session_selector.py +0 -0
  347. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/__init__.py +0 -0
  348. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/ac_progress.py +0 -0
  349. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/ac_tree.py +0 -0
  350. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/agent_activity.py +0 -0
  351. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/cost_tracker.py +0 -0
  352. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/drift_meter.py +0 -0
  353. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/lineage_tree.py +0 -0
  354. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/parallel_graph.py +0 -0
  355. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/phase_progress.py +0 -0
  356. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/verification/__init__.py +0 -0
  357. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/verification/extractor.py +0 -0
  358. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/verification/models.py +0 -0
  359. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/verification/verifier.py +0 -0
  360. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/__init__.py +0 -0
  361. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/conftest.py +0 -0
  362. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/e2e/__init__.py +0 -0
  363. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/e2e/conftest.py +0 -0
  364. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/e2e/test_cli_commands.py +0 -0
  365. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/e2e/test_full_workflow.py +0 -0
  366. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/e2e/test_session_persistence.py +0 -0
  367. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/fixtures/test_atomicity_seed.yml +0 -0
  368. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/integration/__init__.py +0 -0
  369. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/integration/conftest.py +0 -0
  370. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/integration/mcp/__init__.py +0 -0
  371. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/integration/mcp/conftest.py +0 -0
  372. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/integration/mcp/test_client_adapter.py +0 -0
  373. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/integration/mcp/test_client_manager.py +0 -0
  374. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/integration/mcp/test_server_adapter.py +0 -0
  375. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/integration/plugin/test_orchestration.py +0 -0
  376. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/integration/test_codex_cli_passthrough_smoke.py +0 -0
  377. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/integration/test_codex_skill_fallback.py +0 -0
  378. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/integration/test_codex_skill_smoke.py +0 -0
  379. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/integration/test_entry_point.py +0 -0
  380. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/__init__.py +0 -0
  381. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/agents/__init__.py +0 -0
  382. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/agents/test_loader.py +0 -0
  383. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/__init__.py +0 -0
  384. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_ambiguity.py +0 -0
  385. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_brownfield.py +0 -0
  386. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_classifier_context.py +0 -0
  387. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_decide_later_items.py +0 -0
  388. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_explore.py +0 -0
  389. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_interview.py +0 -0
  390. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_pm_document_generator.py +0 -0
  391. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_pm_document_writer.py +0 -0
  392. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_pm_interview.py +0 -0
  393. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_pm_interview_brownfield_db.py +0 -0
  394. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_pm_seed_ac12.py +0 -0
  395. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_pm_seed_save.py +0 -0
  396. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_question_classifier.py +0 -0
  397. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_seed_generator.py +0 -0
  398. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/__init__.py +0 -0
  399. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/formatters/__init__.py +0 -0
  400. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/formatters/test_console.py +0 -0
  401. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/formatters/test_panels.py +0 -0
  402. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/formatters/test_progress.py +0 -0
  403. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/formatters/test_tables.py +0 -0
  404. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/formatters/test_workflow_display.py +0 -0
  405. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_cancel.py +0 -0
  406. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_init_pm_seed_detection.py +0 -0
  407. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_init_runtime.py +0 -0
  408. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_main.py +0 -0
  409. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_mcp_nested_guard.py +0 -0
  410. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_mcp_startup_cleanup.py +0 -0
  411. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_pm_brownfield.py +0 -0
  412. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_pm_overwrite.py +0 -0
  413. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_pm_select_repos.py +0 -0
  414. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_setup.py +0 -0
  415. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/config/__init__.py +0 -0
  416. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/config/test_loader.py +0 -0
  417. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/config/test_models.py +0 -0
  418. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/__init__.py +0 -0
  419. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_ac_tree.py +0 -0
  420. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_context.py +0 -0
  421. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_errors.py +0 -0
  422. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_git_workflow.py +0 -0
  423. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_lineage.py +0 -0
  424. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_ontology_aspect.py +0 -0
  425. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_ontology_questions.py +0 -0
  426. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_security.py +0 -0
  427. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_seed.py +0 -0
  428. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_types.py +0 -0
  429. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_worktree.py +0 -0
  430. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/__init__.py +0 -0
  431. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/test_consensus.py +0 -0
  432. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/test_json_utils.py +0 -0
  433. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/test_languages.py +0 -0
  434. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/test_mechanical.py +0 -0
  435. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/test_models.py +0 -0
  436. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/test_semantic.py +0 -0
  437. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/test_trigger.py +0 -0
  438. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/events/__init__.py +0 -0
  439. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/events/test_base.py +0 -0
  440. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/events/test_decomposition_events.py +0 -0
  441. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/evolution/test_wonder_scope.py +0 -0
  442. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/execution/__init__.py +0 -0
  443. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/execution/test_atomicity.py +0 -0
  444. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/execution/test_decomposition.py +0 -0
  445. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/execution/test_double_diamond.py +0 -0
  446. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/execution/test_subagent_isolation.py +0 -0
  447. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/__init__.py +0 -0
  448. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/client/__init__.py +0 -0
  449. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/client/test_adapter.py +0 -0
  450. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/client/test_manager.py +0 -0
  451. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/conftest.py +0 -0
  452. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/server/__init__.py +0 -0
  453. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/server/test_adapter.py +0 -0
  454. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/server/test_security.py +0 -0
  455. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/test_errors.py +0 -0
  456. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/test_job_manager.py +0 -0
  457. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/test_types.py +0 -0
  458. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/__init__.py +0 -0
  459. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/conftest.py +0 -0
  460. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/test_brownfield_handler.py +0 -0
  461. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/test_definitions.py +0 -0
  462. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/test_pm_handler.py +0 -0
  463. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/test_pm_handler_generate.py +0 -0
  464. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/test_pm_handler_pending_reframe.py +0 -0
  465. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/test_registry.py +0 -0
  466. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/observability/__init__.py +0 -0
  467. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/observability/test_drift.py +0 -0
  468. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/observability/test_logging.py +0 -0
  469. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/observability/test_retrospective.py +0 -0
  470. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/__init__.py +0 -0
  471. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_adapter.py +0 -0
  472. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_codex_cli_runtime.py +0 -0
  473. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_codex_recursion_guard.py +0 -0
  474. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_command_dispatcher.py +0 -0
  475. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_coordinator.py +0 -0
  476. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_dependency_analyzer.py +0 -0
  477. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_events.py +0 -0
  478. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_execution_runtime_scope.py +0 -0
  479. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_execution_strategy.py +0 -0
  480. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_inflight_cancellation.py +0 -0
  481. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_level_context.py +0 -0
  482. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_mcp_config.py +0 -0
  483. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_mcp_tools.py +0 -0
  484. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_parallel_executor.py +0 -0
  485. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_parallel_executor_retry_resume.py +0 -0
  486. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_runner.py +0 -0
  487. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_runner_cancellation.py +0 -0
  488. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_runtime_factory.py +0 -0
  489. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_runtime_message_projection.py +0 -0
  490. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_session.py +0 -0
  491. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_workflow_state.py +0 -0
  492. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/persistence/__init__.py +0 -0
  493. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/persistence/test_brownfield_store.py +0 -0
  494. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/persistence/test_checkpoint.py +0 -0
  495. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/persistence/test_event_store.py +0 -0
  496. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/persistence/test_schema.py +0 -0
  497. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/persistence/test_uow.py +0 -0
  498. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/__init__.py +0 -0
  499. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/agents/__init__.py +0 -0
  500. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/agents/test_registry.py +0 -0
  501. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/orchestration/__init__.py +0 -0
  502. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/orchestration/test_model_router.py +0 -0
  503. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/skills/__init__.py +0 -0
  504. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/skills/test_keywords.py +0 -0
  505. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/skills/test_registry.py +0 -0
  506. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/pm/__init__.py +0 -0
  507. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/pm/test_renderer.py +0 -0
  508. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/providers/__init__.py +0 -0
  509. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/providers/test_base.py +0 -0
  510. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/providers/test_claude_code_adapter.py +0 -0
  511. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/providers/test_codex_cli_adapter.py +0 -0
  512. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/providers/test_factory.py +0 -0
  513. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/providers/test_litellm_adapter.py +0 -0
  514. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/resilience/__init__.py +0 -0
  515. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/resilience/test_lateral.py +0 -0
  516. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/resilience/test_stagnation.py +0 -0
  517. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/routing/__init__.py +0 -0
  518. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/routing/test_complexity.py +0 -0
  519. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/routing/test_downgrade.py +0 -0
  520. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/routing/test_escalation.py +0 -0
  521. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/routing/test_router.py +0 -0
  522. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/routing/test_tiers.py +0 -0
  523. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/scripts/test_keyword_detector.py +0 -0
  524. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/scripts/test_version_check.py +0 -0
  525. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/secondary/__init__.py +0 -0
  526. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/secondary/test_scheduler.py +0 -0
  527. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/secondary/test_todo_registry.py +0 -0
  528. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_artifact_collector.py +0 -0
  529. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_codex_artifacts.py +0 -0
  530. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_convergence.py +0 -0
  531. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_dashboard.py +0 -0
  532. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_dependencies_configured.py +0 -0
  533. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_evolve_rewind.py +0 -0
  534. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_graceful_shutdown.py +0 -0
  535. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_main_entry_point.py +0 -0
  536. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_module_structure.py +0 -0
  537. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_project_initialization.py +0 -0
  538. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_projector_rewind.py +0 -0
  539. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_ralph_parser.py +0 -0
  540. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_ralph_rewind.py +0 -0
  541. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_regression.py +0 -0
  542. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_tooling_configuration.py +0 -0
  543. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_verification.py +0 -0
  544. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/__init__.py +0 -0
  545. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/test_app.py +0 -0
  546. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/test_cancelled_display.py +0 -0
  547. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/test_events.py +0 -0
  548. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/test_lineage_viewer.py +0 -0
  549. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/test_screens.py +0 -0
  550. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/test_session_selector_replay.py +0 -0
  551. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/test_widgets.py +0 -0
  552. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/tools/sync_github_project.py +0 -0
  553. {ouroboros_ai-0.26.2.dev34 → ouroboros_ai-0.26.2.dev36}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ouroboros-ai
3
- Version: 0.26.2.dev34
3
+ Version: 0.26.2.dev36
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
@@ -78,26 +78,12 @@ Description-Content-Type: text/markdown
78
78
 
79
79
  ---
80
80
 
81
- > **Security Notice (2026-03-24): LiteLLM PyPI Supply Chain Attack**
81
+ > **New: PM Mode** — `ooo pm` generates a PRD through a guided PM-focused interview.
82
+ > Ouroboros now supports product management workflows: stakeholder alignment, user story mapping, and structured PRD generation — all driven by the same Socratic engine.
82
83
  >
83
- > LiteLLM versions **1.82.7** and **1.82.8** on PyPI contained a malicious `.pth` file that auto-executes on every Python startup, exfiltrating environment variables, API keys, and credentials to an external server.
84
- >
85
- > **What we did:** Ouroboros now pins LiteLLM to **`<=1.82.6`** (safe versions only) as an optional dependency. LiteLLM is no longer a core dependency — it is only installed when you explicitly opt in via `pip install ouroboros-ai[litellm]`.
86
- >
87
- > **If you previously installed litellm 1.82.7 or 1.82.8**, the malicious `.pth` file may still be on your system even after upgrading. Clean up manually:
88
- >
89
- > ```bash
90
- > # 1. Find and delete the malicious file
91
- > find / -name "litellm_init.pth" 2>/dev/null
92
- >
93
- > # 2. Clean package manager caches
94
- > uv cache clean litellm # if using uv
95
- > pip cache purge # if using pip
96
- >
97
- > # 3. Rotate ALL credentials that were on your system during the exposure window
98
84
  > ```
99
- >
100
- > References: [LiteLLM #24512](https://github.com/BerriAI/litellm/issues/24512) · [Ouroboros #195](https://github.com/Q00/ouroboros/issues/195) · [DSPy mitigation](https://github.com/stanfordnlp/dspy/commit/66e33399bf29)
85
+ > > ooo pm "I want to build a notification system"
86
+ > ```
101
87
 
102
88
  ---
103
89
 
@@ -148,6 +134,7 @@ Then run `ooo setup` inside a Claude Code session.
148
134
  ```bash
149
135
  pip install ouroboros-ai # base
150
136
  pip install ouroboros-ai[claude] # + Claude Code deps
137
+ pip install ouroboros-ai[litellm] # + LiteLLM multi-provider
151
138
  pip install ouroboros-ai[all] # everything
152
139
  ouroboros setup # configure runtime
153
140
  ```
@@ -259,6 +246,10 @@ Inside AI coding agent sessions, use `ooo <cmd>` skills. From the terminal, use
259
246
  | `ooo ralph` | *(via MCP)* | Persistent loop until verified |
260
247
  | `ooo tutorial` | *(interactive)* | Interactive hands-on learning |
261
248
  | `ooo help` | `ouroboros --help` | Full reference |
249
+ | `ooo pm` | *(via MCP)* | PM-focused interview + PRD generation |
250
+ | `ooo qa` | *(via skill)* | General-purpose QA verdict for any artifact |
251
+ | `ooo update` | `ouroboros update` | Check for updates + upgrade to latest |
252
+ | `ooo brownfield` | *(via skill)* | Scan and manage brownfield repo defaults |
262
253
 
263
254
  > Not all skills have direct CLI equivalents. Some (`evaluate`, `evolve`, `unstuck`, `ralph`) are available through agent skills or MCP tools only.
264
255
 
@@ -37,30 +37,12 @@
37
37
 
38
38
  ---
39
39
 
40
- > **보안 공지 (2026-03-24): LiteLLM PyPI 공급망 공격**
40
+ > **New: PM 모드** — `ooo pm`으로 소크라테스식 PM 인터뷰를 통해 PRD를 자동 생성할 수 있습니다.
41
+ > 이해관계자 정렬, 유저 스토리 매핑, 구조화된 PRD 생성까지 — 같은 소크라테스 엔진이 제품 관리 워크플로우도 지원합니다.
41
42
  >
42
- > LiteLLM 1.82.7 / 1.82.8 버전에 악성 `.pth` 파일이 포함되어 배포되었습니다. 이 파일은 `import` 없이도 **Python 시작 시 자동 실행**되며, 환경변수, API 키, SSH 키, 클라우드 크레덴셜을 외부 서버로 전송합니다.
43
- >
44
- > **영향 범위:** 2026년 3월 23일 이후에 아래 중 하나라도 해당되면 감염 가능성이 있습니다:
45
- > - Ouroboros를 신규 설치 (`pip install ouroboros-ai`, `uv tool install ouroboros-ai`)
46
- > - 기존 설치를 업그레이드 (`pip install --upgrade ouroboros-ai`)
47
- >
48
- > 두 경우 모두 `litellm>=1.80.0` 의존성이 악성 버전 1.82.7/1.82.8로 resolve됩니다. 그 이전에 설치하고 재설치/업그레이드하지 않았다면 안전합니다.
49
- >
50
- > **Ouroboros는 litellm 의존성을 완전 제거했습니다** (v0.25.2 stable / v0.26.0b7 beta). 단, **Ouroboros를 업데이트하면 의존성 목록에서 litellm이 빠질 뿐, 이미 설치된 litellm 패키지와 악성 `.pth` 파일은 그대로 남아있습니다.** 수동 정리가 필요합니다:
51
- >
52
- > ```bash
53
- > # 1. 악성 파일 찾기 — 결과가 나오면 즉시 삭제
54
- > find / -name "litellm_init.pth" 2>/dev/null
55
- >
56
- > # 2. 패키지 매니저 캐시 정리
57
- > uv cache clean litellm # uv 사용자
58
- > pip cache purge # pip 사용자
59
- >
60
- > # 3. 노출 기간 동안 시스템에 있던 모든 크레덴셜 로테이션
61
43
  > ```
62
- >
63
- > 참고: [LiteLLM #24512](https://github.com/BerriAI/litellm/issues/24512) · [Ouroboros #195](https://github.com/Q00/ouroboros/issues/195) · [분석 보고서](https://futuresearch.ai/blog/litellm-pypi-supply-chain-attack/)
44
+ > > ooo pm "알림 시스템을 만들고 싶어"
45
+ > ```
64
46
 
65
47
  ---
66
48
 
@@ -136,6 +118,7 @@ Claude Code 세션 안에서 `ooo setup` 실행.
136
118
  ```bash
137
119
  pip install ouroboros-ai # 기본
138
120
  pip install ouroboros-ai[claude] # + Claude Code 의존성
121
+ pip install ouroboros-ai[litellm] # + LiteLLM 멀티 프로바이더
139
122
  pip install ouroboros-ai[all] # 전부
140
123
  ouroboros setup # 런타임 설정
141
124
  ```
@@ -283,6 +266,11 @@ Gen 3: {Task, Priority, Status, DueDate} → similarity 1.00 → CONVERGED
283
266
  | `ooo ralph` | 검증될 때까지 계속 도는 루프 |
284
267
  | `ooo tutorial` | 대화형 실습 |
285
268
  | `ooo help` | 전체 참조 |
269
+ | `ooo pm` | PM 인터뷰 + PRD 생성 |
270
+ | `ooo qa` | 범용 QA 판정 |
271
+ | `ooo cancel` | 멈춘 실행 취소 |
272
+ | `ooo update` | 최신 버전 확인 + 업그레이드 |
273
+ | `ooo brownfield` | 기존 저장소 스캔 + 기본값 관리 |
286
274
 
287
275
  ---
288
276
 
@@ -38,26 +38,12 @@
38
38
 
39
39
  ---
40
40
 
41
- > **Security Notice (2026-03-24): LiteLLM PyPI Supply Chain Attack**
41
+ > **New: PM Mode** — `ooo pm` generates a PRD through a guided PM-focused interview.
42
+ > Ouroboros now supports product management workflows: stakeholder alignment, user story mapping, and structured PRD generation — all driven by the same Socratic engine.
42
43
  >
43
- > LiteLLM versions **1.82.7** and **1.82.8** on PyPI contained a malicious `.pth` file that auto-executes on every Python startup, exfiltrating environment variables, API keys, and credentials to an external server.
44
- >
45
- > **What we did:** Ouroboros now pins LiteLLM to **`<=1.82.6`** (safe versions only) as an optional dependency. LiteLLM is no longer a core dependency — it is only installed when you explicitly opt in via `pip install ouroboros-ai[litellm]`.
46
- >
47
- > **If you previously installed litellm 1.82.7 or 1.82.8**, the malicious `.pth` file may still be on your system even after upgrading. Clean up manually:
48
- >
49
- > ```bash
50
- > # 1. Find and delete the malicious file
51
- > find / -name "litellm_init.pth" 2>/dev/null
52
- >
53
- > # 2. Clean package manager caches
54
- > uv cache clean litellm # if using uv
55
- > pip cache purge # if using pip
56
- >
57
- > # 3. Rotate ALL credentials that were on your system during the exposure window
58
44
  > ```
59
- >
60
- > References: [LiteLLM #24512](https://github.com/BerriAI/litellm/issues/24512) · [Ouroboros #195](https://github.com/Q00/ouroboros/issues/195) · [DSPy mitigation](https://github.com/stanfordnlp/dspy/commit/66e33399bf29)
45
+ > > ooo pm "I want to build a notification system"
46
+ > ```
61
47
 
62
48
  ---
63
49
 
@@ -108,6 +94,7 @@ Then run `ooo setup` inside a Claude Code session.
108
94
  ```bash
109
95
  pip install ouroboros-ai # base
110
96
  pip install ouroboros-ai[claude] # + Claude Code deps
97
+ pip install ouroboros-ai[litellm] # + LiteLLM multi-provider
111
98
  pip install ouroboros-ai[all] # everything
112
99
  ouroboros setup # configure runtime
113
100
  ```
@@ -219,6 +206,10 @@ Inside AI coding agent sessions, use `ooo <cmd>` skills. From the terminal, use
219
206
  | `ooo ralph` | *(via MCP)* | Persistent loop until verified |
220
207
  | `ooo tutorial` | *(interactive)* | Interactive hands-on learning |
221
208
  | `ooo help` | `ouroboros --help` | Full reference |
209
+ | `ooo pm` | *(via MCP)* | PM-focused interview + PRD generation |
210
+ | `ooo qa` | *(via skill)* | General-purpose QA verdict for any artifact |
211
+ | `ooo update` | `ouroboros update` | Check for updates + upgrade to latest |
212
+ | `ooo brownfield` | *(via skill)* | Scan and manage brownfield repo defaults |
222
213
 
223
214
  > Not all skills have direct CLI equivalents. Some (`evaluate`, `evolve`, `unstuck`, `ralph`) are available through agent skills or MCP tools only.
224
215
 
@@ -19,7 +19,11 @@ import sys
19
19
 
20
20
  # Skills that work without MCP setup (bypass the setup gate)
21
21
  # qa has a built-in fallback that adopts the qa-judge agent directly
22
- SETUP_BYPASS_SKILLS = ["/ouroboros:setup", "/ouroboros:help", "/ouroboros:qa"]
22
+ SETUP_BYPASS_SKILLS = [
23
+ "/ouroboros:setup",
24
+ "/ouroboros:help",
25
+ "/ouroboros:qa",
26
+ ]
23
27
 
24
28
  # Keyword → skill mapping
25
29
  # "ooo <cmd>" prefix always works; natural language keywords also supported
@@ -37,9 +41,22 @@ KEYWORD_MAP = [
37
41
  {"patterns": ["ooo welcome"], "skill": "/ouroboros:welcome"},
38
42
  {"patterns": ["ooo setup"], "skill": "/ouroboros:setup"},
39
43
  {"patterns": ["ooo help"], "skill": "/ouroboros:help"},
44
+ {"patterns": ["ooo pm", "ooo prd"], "skill": "/ouroboros:pm"},
40
45
  {"patterns": ["ooo qa", "qa check", "quality check"], "skill": "/ouroboros:qa"},
46
+ {"patterns": ["ooo cancel", "ooo abort"], "skill": "/ouroboros:cancel"},
41
47
  {"patterns": ["ooo update", "ooo upgrade"], "skill": "/ouroboros:update"},
48
+ {"patterns": ["ooo brownfield"], "skill": "/ouroboros:brownfield"},
42
49
  # Natural language triggers
50
+ # PM triggers must precede generic interview to avoid "pm interview" being shadowed
51
+ {
52
+ "patterns": [
53
+ "write prd",
54
+ "pm interview",
55
+ "product requirements",
56
+ "create prd",
57
+ ],
58
+ "skill": "/ouroboros:pm",
59
+ },
43
60
  {
44
61
  "patterns": [
45
62
  "interview me",
@@ -97,6 +114,22 @@ KEYWORD_MAP = [
97
114
  "patterns": ["update ouroboros", "upgrade ouroboros"],
98
115
  "skill": "/ouroboros:update",
99
116
  },
117
+ {
118
+ "patterns": [
119
+ "cancel execution",
120
+ "stop job",
121
+ "kill stuck",
122
+ "abort execution",
123
+ ],
124
+ "skill": "/ouroboros:cancel",
125
+ },
126
+ {
127
+ "patterns": [
128
+ "brownfield defaults",
129
+ "brownfield scan",
130
+ ],
131
+ "skill": "/ouroboros:brownfield",
132
+ },
100
133
  ]
101
134
 
102
135
 
@@ -41,6 +41,11 @@ Ouroboros is a **requirement crystallization engine** for AI workflows. It trans
41
41
  | `ooo welcome` | First-touch welcome guide | Plugin |
42
42
  | `ooo tutorial` | Interactive hands-on learning | Plugin |
43
43
  | `ooo help` | This reference guide | Plugin |
44
+ | `ooo pm` | PM-focused interview + PRD generation | MCP |
45
+ | `ooo qa` | General-purpose QA verdict for any artifact | Plugin |
46
+ | `ooo cancel` | Cancel stuck or orphaned executions | CLI |
47
+ | `ooo update` | Check for updates + upgrade to latest | Plugin |
48
+ | `ooo brownfield` | Scan and manage brownfield repo defaults | MCP |
44
49
 
45
50
  ### Evolutionary Loop
46
51
 
@@ -63,6 +68,16 @@ Ouroboros is a **requirement crystallization engine** for AI workflows. It trans
63
68
  | "think sideways", "i'm stuck", "break through", "lateral thinking" | `ooo unstuck` |
64
69
  | "am I drifting?", "drift check", "session status" | `ooo status` |
65
70
 
71
+ ### Utility Triggers
72
+
73
+ | Phrase | Triggers |
74
+ |--------|----------|
75
+ | "write prd", "pm interview", "product requirements", "create prd" | `ooo pm` |
76
+ | "qa check", "quality check" | `ooo qa` |
77
+ | "cancel execution", "stop job", "kill stuck", "abort execution" | `ooo cancel` |
78
+ | "update ouroboros", "upgrade ouroboros" | `ooo update` |
79
+ | "brownfield defaults", "brownfield scan" | `ooo brownfield` |
80
+
66
81
  ### Loop Triggers
67
82
 
68
83
  | Phrase | Triggers |
@@ -86,6 +101,11 @@ Ouroboros is a **requirement crystallization engine** for AI workflows. It trans
86
101
  | `/ouroboros:setup` | Installation wizard | Plugin |
87
102
  | `/ouroboros:tutorial` | Interactive hands-on learning | Plugin |
88
103
  | `/ouroboros:help` | This guide | Plugin |
104
+ | `/ouroboros:pm` | PM-focused interview + PRD generation | MCP |
105
+ | `/ouroboros:qa` | General-purpose QA verdict for any artifact | Plugin |
106
+ | `/ouroboros:cancel` | Cancel stuck or orphaned executions | CLI |
107
+ | `/ouroboros:update` | Check for updates + upgrade to latest | Plugin |
108
+ | `/ouroboros:brownfield` | Scan and manage brownfield repo defaults | MCP |
89
109
 
90
110
  ### Loop Skills
91
111
 
@@ -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.26.2.dev34'
22
- __version_tuple__ = version_tuple = (0, 26, 2, 'dev34')
21
+ __version__ = version = '0.26.2.dev36'
22
+ __version_tuple__ = version_tuple = (0, 26, 2, 'dev36')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -298,8 +298,11 @@ def _pid_is_alive(pid: int) -> bool:
298
298
  return False
299
299
  try:
300
300
  os.kill(pid, 0)
301
- except OSError:
301
+ except ProcessLookupError:
302
302
  return False
303
+ except PermissionError:
304
+ # Process exists but we lack permission to signal it — still alive.
305
+ return True
303
306
  return True
304
307
 
305
308
 
@@ -18,8 +18,6 @@ Handler modules:
18
18
 
19
19
  from __future__ import annotations
20
20
 
21
- from ouroboros.core.worktree import is_git_repo, maybe_restore_task_workspace # noqa: F401
22
- from ouroboros.mcp.tools import evolution_handlers as _evolution_handlers
23
21
  from ouroboros.mcp.tools.authoring_handlers import (
24
22
  GenerateSeedHandler,
25
23
  InterviewHandler,
@@ -31,12 +29,10 @@ from ouroboros.mcp.tools.evaluation_handlers import (
31
29
  )
32
30
  from ouroboros.mcp.tools.evolution_handlers import (
33
31
  EvolveRewindHandler,
32
+ EvolveStepHandler,
34
33
  LineageStatusHandler,
35
34
  StartEvolveStepHandler,
36
35
  )
37
- from ouroboros.mcp.tools.evolution_handlers import (
38
- EvolveStepHandler as _BaseEvolveStepHandler,
39
- )
40
36
  from ouroboros.mcp.tools.execution_handlers import (
41
37
  ExecuteSeedHandler,
42
38
  StartExecuteSeedHandler,
@@ -60,21 +56,6 @@ from ouroboros.mcp.tools.query_handlers import (
60
56
  # ---------------------------------------------------------------------------
61
57
 
62
58
 
63
- class EvolveStepHandler(_BaseEvolveStepHandler):
64
- """Compatibility wrapper that respects patched helpers re-exported here."""
65
-
66
- async def handle(self, arguments):
67
- original_is_git_repo = _evolution_handlers.is_git_repo
68
- original_restore_workspace = _evolution_handlers.maybe_restore_task_workspace
69
- _evolution_handlers.is_git_repo = is_git_repo
70
- _evolution_handlers.maybe_restore_task_workspace = maybe_restore_task_workspace
71
- try:
72
- return await super().handle(arguments)
73
- finally:
74
- _evolution_handlers.is_git_repo = original_is_git_repo
75
- _evolution_handlers.maybe_restore_task_workspace = original_restore_workspace
76
-
77
-
78
59
  def execute_seed_handler(
79
60
  *,
80
61
  runtime_backend: str | None = None,
@@ -417,6 +417,7 @@ class ExecuteSeedHandler:
417
417
  _seed_content: str,
418
418
  _resume_existing: bool,
419
419
  _skip_qa: bool,
420
+ _workspace: TaskWorkspace | None = workspace,
420
421
  _session_repo: SessionRepository = session_repo,
421
422
  _event_store: EventStore = event_store,
422
423
  _owns_event_store: bool = owns_event_store,
@@ -481,6 +482,8 @@ class ExecuteSeedHandler:
481
482
  except Exception:
482
483
  log.exception("mcp.tool.execute_seed.mark_failed_error")
483
484
  finally:
485
+ if _workspace is not None:
486
+ release_lock(_workspace.lock_path)
484
487
  if _owns_event_store:
485
488
  try:
486
489
  await _event_store.close()
@@ -337,7 +337,7 @@ class TestEvolveStepHandlerQA:
337
337
 
338
338
  with (
339
339
  patch(
340
- "ouroboros.mcp.tools.definitions.maybe_restore_task_workspace",
340
+ "ouroboros.mcp.tools.evolution_handlers.maybe_restore_task_workspace",
341
341
  return_value=None,
342
342
  ),
343
343
  patch(
@@ -378,7 +378,7 @@ class TestEvolveStepHandlerQA:
378
378
 
379
379
  with (
380
380
  patch(
381
- "ouroboros.mcp.tools.definitions.maybe_restore_task_workspace",
381
+ "ouroboros.mcp.tools.evolution_handlers.maybe_restore_task_workspace",
382
382
  return_value=None,
383
383
  ),
384
384
  patch(
@@ -434,7 +434,7 @@ class TestEvolveStepHandlerQA:
434
434
 
435
435
  with (
436
436
  patch(
437
- "ouroboros.mcp.tools.definitions.maybe_restore_task_workspace",
437
+ "ouroboros.mcp.tools.evolution_handlers.maybe_restore_task_workspace",
438
438
  return_value=None,
439
439
  ),
440
440
  patch(
@@ -467,7 +467,7 @@ class TestEvolveStepHandlerQA:
467
467
 
468
468
  with (
469
469
  patch(
470
- "ouroboros.mcp.tools.definitions.maybe_restore_task_workspace",
470
+ "ouroboros.mcp.tools.evolution_handlers.maybe_restore_task_workspace",
471
471
  return_value=None,
472
472
  ),
473
473
  patch(
@@ -721,7 +721,7 @@ class TestEvolveStepHandler:
721
721
  import yaml
722
722
 
723
723
  with patch(
724
- "ouroboros.mcp.tools.definitions.maybe_restore_task_workspace",
724
+ "ouroboros.mcp.tools.evolution_handlers.maybe_restore_task_workspace",
725
725
  return_value=None,
726
726
  ):
727
727
  result = await handler.handle(
@@ -821,9 +821,9 @@ class TestEvolveStepHandler:
821
821
  handler = EvolveStepHandler(evolutionary_loop=loop)
822
822
 
823
823
  with (
824
- patch("ouroboros.mcp.tools.definitions.is_git_repo", return_value=True),
824
+ patch("ouroboros.mcp.tools.evolution_handlers.is_git_repo", return_value=True),
825
825
  patch(
826
- "ouroboros.mcp.tools.definitions.maybe_restore_task_workspace",
826
+ "ouroboros.mcp.tools.evolution_handlers.maybe_restore_task_workspace",
827
827
  side_effect=WorktreeError("Invalid durable task identifier for git worktree"),
828
828
  ),
829
829
  ):