ouroboros-ai 0.26.2.dev35__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.dev35 → ouroboros_ai-0.26.2.dev36}/PKG-INFO +10 -19
  2. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/README.ko.md +10 -22
  3. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/README.md +9 -18
  4. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/scripts/keyword-detector.py +34 -1
  5. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/help/SKILL.md +20 -0
  6. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/_version.py +2 -2
  7. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.claude/settings.json +0 -0
  8. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.claude-plugin/.mcp.json +0 -0
  9. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.claude-plugin/marketplace.json +0 -0
  10. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.claude-plugin/plugin.json +0 -0
  11. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.env.example +0 -0
  12. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  13. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  14. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  15. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  16. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.github/workflows/dev-publish.yml +0 -0
  17. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.github/workflows/lint.yml +0 -0
  18. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.github/workflows/release.yml +0 -0
  19. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.github/workflows/test.yml +0 -0
  20. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.gitignore +0 -0
  21. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.mcp.json +0 -0
  22. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.ouroboros/mechanical.toml +0 -0
  23. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.pre-commit-config.yaml +0 -0
  24. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/.python-version +0 -0
  25. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/CHANGELOG.md +0 -0
  26. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/CLAUDE.md +0 -0
  27. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/CODE_OF_CONDUCT.md +0 -0
  28. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/CONTRIBUTING.md +0 -0
  29. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/HANDOFF.md +0 -0
  30. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/LICENSE +0 -0
  31. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/SECURITY.md +0 -0
  32. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/commands/cancel.md +0 -0
  33. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/commands/evaluate.md +0 -0
  34. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/commands/evolve.md +0 -0
  35. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/commands/help.md +0 -0
  36. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/commands/interview.md +0 -0
  37. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/commands/ralph.md +0 -0
  38. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/commands/run.md +0 -0
  39. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/commands/seed.md +0 -0
  40. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/commands/setup.md +0 -0
  41. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/commands/status.md +0 -0
  42. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/commands/tutorial.md +0 -0
  43. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/commands/unstuck.md +0 -0
  44. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/commands/welcome.md +0 -0
  45. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/.gitignore +0 -0
  46. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/Cargo.lock +0 -0
  47. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/Cargo.toml +0 -0
  48. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/README.md +0 -0
  49. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/db.rs +0 -0
  50. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/main.rs +0 -0
  51. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/mock.rs +0 -0
  52. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/state.rs +0 -0
  53. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/views/dashboard.rs +0 -0
  54. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/views/execution.rs +0 -0
  55. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/views/lineage.rs +0 -0
  56. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/views/logs.rs +0 -0
  57. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/views/mod.rs +0 -0
  58. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/crates/ouroboros-tui/src/views/session_selector.rs +0 -0
  59. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/README.md +0 -0
  60. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/api/README.md +0 -0
  61. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/api/core.md +0 -0
  62. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/api/mcp.md +0 -0
  63. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/architecture.md +0 -0
  64. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/cli-reference.md +0 -0
  65. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/config-reference.md +0 -0
  66. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/contributing/architecture-overview.md +0 -0
  67. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/contributing/findings-registry.md +0 -0
  68. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/contributing/issue-quality-policy.md +0 -0
  69. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/contributing/key-patterns.md +0 -0
  70. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/contributing/testing-guide.md +0 -0
  71. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/examples/mcp-config.yaml +0 -0
  72. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/getting-started.md +0 -0
  73. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/guides/evaluation-pipeline.md +0 -0
  74. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/guides/evolution-loop.md +0 -0
  75. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/guides/issue-176-subagent-mcp-inheritance.md +0 -0
  76. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/guides/seed-authoring.md +0 -0
  77. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/guides/tui-usage.md +0 -0
  78. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/images/PLACEHOLDER_README.md +0 -0
  79. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/images/ouroboros.png +0 -0
  80. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/platform-support.md +0 -0
  81. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/runtime-capability-matrix.md +0 -0
  82. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/runtime-guides/claude-code.md +0 -0
  83. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/docs/runtime-guides/codex.md +0 -0
  84. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/examples/coordinator_test_seed.yaml +0 -0
  85. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/examples/dummy_seed.yaml +0 -0
  86. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/examples/parallel_subac_test_seed.yaml +0 -0
  87. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/examples/subac_test_seed.yaml +0 -0
  88. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/examples/task_manager/README.md +0 -0
  89. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/examples/task_manager/__init__.py +0 -0
  90. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/examples/task_manager/__main__.py +0 -0
  91. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/examples/task_manager/cli.py +0 -0
  92. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/examples/task_manager/models.py +0 -0
  93. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/examples/task_manager/storage.py +0 -0
  94. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/examples/test_display.py +0 -0
  95. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/hooks/hooks.json +0 -0
  96. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/llms-full.txt +0 -0
  97. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/llms.txt +0 -0
  98. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/project-context.md +0 -0
  99. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/pyproject.toml +0 -0
  100. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/scripts/drift-monitor.py +0 -0
  101. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/scripts/install.sh +0 -0
  102. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/scripts/mcp-serve.sh +0 -0
  103. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/scripts/ralph-rewind.py +0 -0
  104. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/scripts/ralph.py +0 -0
  105. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/scripts/ralph.sh +0 -0
  106. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/scripts/session-start.py +0 -0
  107. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/scripts/sync-plugin-version.py +0 -0
  108. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/scripts/version-check.py +0 -0
  109. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/brownfield/SKILL.md +0 -0
  110. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/cancel/SKILL.md +0 -0
  111. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/evaluate/SKILL.md +0 -0
  112. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/evolve/SKILL.md +0 -0
  113. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/interview/SKILL.md +0 -0
  114. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/pm/SKILL.md +0 -0
  115. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/qa/SKILL.md +0 -0
  116. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/ralph/SKILL.md +0 -0
  117. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/run/SKILL.md +0 -0
  118. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/seed/SKILL.md +0 -0
  119. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/setup/SKILL.md +0 -0
  120. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/status/SKILL.md +0 -0
  121. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/tutorial/SKILL.md +0 -0
  122. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/unstuck/SKILL.md +0 -0
  123. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/update/SKILL.md +0 -0
  124. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/skills/welcome/SKILL.md +0 -0
  125. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/__init__.py +0 -0
  126. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/__main__.py +0 -0
  127. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/__init__.py +0 -0
  128. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/advocate.md +0 -0
  129. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/analysis-agent.md +0 -0
  130. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/architect.md +0 -0
  131. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/breadth-keeper.md +0 -0
  132. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/code-executor.md +0 -0
  133. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/codebase-explorer.md +0 -0
  134. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/consensus-reviewer.md +0 -0
  135. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/contrarian.md +0 -0
  136. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/evaluator.md +0 -0
  137. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/hacker.md +0 -0
  138. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/judge.md +0 -0
  139. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/loader.py +0 -0
  140. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/ontologist.md +0 -0
  141. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/ontology-analyst.md +0 -0
  142. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/qa-judge.md +0 -0
  143. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/research-agent.md +0 -0
  144. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/researcher.md +0 -0
  145. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/seed-architect.md +0 -0
  146. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/seed-closer.md +0 -0
  147. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/semantic-evaluator.md +0 -0
  148. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/simplifier.md +0 -0
  149. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/agents/socratic-interviewer.md +0 -0
  150. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/__init__.py +0 -0
  151. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/ambiguity.py +0 -0
  152. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/brownfield.py +0 -0
  153. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/explore.py +0 -0
  154. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/interview.py +0 -0
  155. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/pm_document.py +0 -0
  156. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/pm_interview.py +0 -0
  157. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/pm_seed.py +0 -0
  158. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/question_classifier.py +0 -0
  159. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/bigbang/seed_generator.py +0 -0
  160. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/__init__.py +0 -0
  161. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/__init__.py +0 -0
  162. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/cancel.py +0 -0
  163. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/config.py +0 -0
  164. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/init.py +0 -0
  165. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/mcp.py +0 -0
  166. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/pm.py +0 -0
  167. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/run.py +0 -0
  168. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/setup.py +0 -0
  169. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/status.py +0 -0
  170. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/commands/tui.py +0 -0
  171. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/formatters/__init__.py +0 -0
  172. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/formatters/panels.py +0 -0
  173. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/formatters/progress.py +0 -0
  174. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/formatters/tables.py +0 -0
  175. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/formatters/workflow_display.py +0 -0
  176. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/cli/main.py +0 -0
  177. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/codex/__init__.py +0 -0
  178. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/codex/artifacts.py +0 -0
  179. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/codex/ouroboros.md +0 -0
  180. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/codex_permissions.py +0 -0
  181. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/config/__init__.py +0 -0
  182. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/config/loader.py +0 -0
  183. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/config/models.py +0 -0
  184. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/__init__.py +0 -0
  185. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/ac_tree.py +0 -0
  186. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/context.py +0 -0
  187. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/errors.py +0 -0
  188. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/file_lock.py +0 -0
  189. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/git_workflow.py +0 -0
  190. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/lineage.py +0 -0
  191. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/ontology_aspect.py +0 -0
  192. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/ontology_questions.py +0 -0
  193. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/security.py +0 -0
  194. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/seed.py +0 -0
  195. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/text.py +0 -0
  196. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/types.py +0 -0
  197. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/core/worktree.py +0 -0
  198. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/__init__.py +0 -0
  199. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/artifact_collector.py +0 -0
  200. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/consensus.py +0 -0
  201. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/json_utils.py +0 -0
  202. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/languages.py +0 -0
  203. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/mechanical.py +0 -0
  204. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/models.py +0 -0
  205. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/pipeline.py +0 -0
  206. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/semantic.py +0 -0
  207. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evaluation/trigger.py +0 -0
  208. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/events/__init__.py +0 -0
  209. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/events/base.py +0 -0
  210. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/events/decomposition.py +0 -0
  211. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/events/evaluation.py +0 -0
  212. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/events/interview.py +0 -0
  213. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/events/lineage.py +0 -0
  214. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/events/ontology.py +0 -0
  215. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evolution/__init__.py +0 -0
  216. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evolution/convergence.py +0 -0
  217. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evolution/loop.py +0 -0
  218. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evolution/projector.py +0 -0
  219. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evolution/reflect.py +0 -0
  220. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evolution/regression.py +0 -0
  221. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/evolution/wonder.py +0 -0
  222. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/execution/__init__.py +0 -0
  223. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/execution/atomicity.py +0 -0
  224. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/execution/decomposition.py +0 -0
  225. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/execution/double_diamond.py +0 -0
  226. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/execution/subagent.py +0 -0
  227. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/__init__.py +0 -0
  228. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/client/__init__.py +0 -0
  229. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/client/adapter.py +0 -0
  230. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/client/manager.py +0 -0
  231. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/client/protocol.py +0 -0
  232. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/errors.py +0 -0
  233. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/job_manager.py +0 -0
  234. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/resources/__init__.py +0 -0
  235. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/resources/handlers.py +0 -0
  236. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/server/__init__.py +0 -0
  237. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/server/adapter.py +0 -0
  238. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/server/protocol.py +0 -0
  239. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/server/security.py +0 -0
  240. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/__init__.py +0 -0
  241. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/authoring_handlers.py +0 -0
  242. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/brownfield_handler.py +0 -0
  243. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/dashboard.py +0 -0
  244. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/definitions.py +0 -0
  245. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/evaluation_handlers.py +0 -0
  246. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/evolution_handlers.py +0 -0
  247. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/execution_handlers.py +0 -0
  248. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/job_handlers.py +0 -0
  249. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/pm_handler.py +0 -0
  250. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/qa.py +0 -0
  251. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/query_handlers.py +0 -0
  252. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/tools/registry.py +0 -0
  253. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/mcp/types.py +0 -0
  254. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/observability/__init__.py +0 -0
  255. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/observability/drift.py +0 -0
  256. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/observability/logging.py +0 -0
  257. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/observability/retrospective.py +0 -0
  258. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/__init__.py +0 -0
  259. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/adapter.py +0 -0
  260. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/codex_cli_runtime.py +0 -0
  261. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/command_dispatcher.py +0 -0
  262. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/coordinator.py +0 -0
  263. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/dependency_analyzer.py +0 -0
  264. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/events.py +0 -0
  265. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/execution_runtime_scope.py +0 -0
  266. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/execution_strategy.py +0 -0
  267. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/heartbeat.py +0 -0
  268. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/level_context.py +0 -0
  269. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/mcp_config.py +0 -0
  270. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/mcp_tools.py +0 -0
  271. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/parallel_executor.py +0 -0
  272. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/parallel_executor_models.py +0 -0
  273. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/runner.py +0 -0
  274. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/runtime_factory.py +0 -0
  275. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/runtime_message_projection.py +0 -0
  276. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/session.py +0 -0
  277. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/orchestrator/workflow_state.py +0 -0
  278. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/__init__.py +0 -0
  279. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/brownfield.py +0 -0
  280. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/checkpoint.py +0 -0
  281. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/event_store.py +0 -0
  282. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/migrations/__init__.py +0 -0
  283. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/migrations/runner.py +0 -0
  284. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
  285. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/migrations/scripts/002_brownfield.sql +0 -0
  286. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/schema.py +0 -0
  287. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/persistence/uow.py +0 -0
  288. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/__init__.py +0 -0
  289. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/agents/__init__.py +0 -0
  290. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/agents/pool.py +0 -0
  291. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/agents/registry.py +0 -0
  292. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/orchestration/__init__.py +0 -0
  293. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/orchestration/router.py +0 -0
  294. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/orchestration/scheduler.py +0 -0
  295. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/skills/__init__.py +0 -0
  296. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/skills/docs.py +0 -0
  297. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/skills/executor.py +0 -0
  298. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/skills/keywords.py +0 -0
  299. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/plugin/skills/registry.py +0 -0
  300. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/pm/__init__.py +0 -0
  301. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/pm/renderer.py +0 -0
  302. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/__init__.py +0 -0
  303. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/anthropic_adapter.py +0 -0
  304. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/base.py +0 -0
  305. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/claude_code_adapter.py +0 -0
  306. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/codex_cli_adapter.py +0 -0
  307. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/codex_cli_stream.py +0 -0
  308. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/factory.py +0 -0
  309. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/providers/litellm_adapter.py +0 -0
  310. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/py.typed +0 -0
  311. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/resilience/__init__.py +0 -0
  312. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/resilience/lateral.py +0 -0
  313. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/resilience/stagnation.py +0 -0
  314. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/routing/__init__.py +0 -0
  315. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/routing/complexity.py +0 -0
  316. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/routing/downgrade.py +0 -0
  317. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/routing/escalation.py +0 -0
  318. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/routing/router.py +0 -0
  319. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/routing/tiers.py +0 -0
  320. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/secondary/__init__.py +0 -0
  321. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/secondary/scheduler.py +0 -0
  322. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/secondary/todo_registry.py +0 -0
  323. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/strategies/__init__.py +0 -0
  324. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/strategies/devil_advocate.py +0 -0
  325. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/__init__.py +0 -0
  326. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/app.py +0 -0
  327. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/components/__init__.py +0 -0
  328. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/components/agents_panel.py +0 -0
  329. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/components/event_log.py +0 -0
  330. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/components/progress.py +0 -0
  331. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/components/token_tracker.py +0 -0
  332. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/events.py +0 -0
  333. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/__init__.py +0 -0
  334. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/confirm_rewind.py +0 -0
  335. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/dashboard.py +0 -0
  336. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/dashboard_v2.py +0 -0
  337. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/dashboard_v3.py +0 -0
  338. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/debug.py +0 -0
  339. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/execution.py +0 -0
  340. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/hud_dashboard.py +0 -0
  341. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/lineage_detail.py +0 -0
  342. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/lineage_selector.py +0 -0
  343. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/logs.py +0 -0
  344. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/screens/session_selector.py +0 -0
  345. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/__init__.py +0 -0
  346. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/ac_progress.py +0 -0
  347. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/ac_tree.py +0 -0
  348. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/agent_activity.py +0 -0
  349. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/cost_tracker.py +0 -0
  350. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/drift_meter.py +0 -0
  351. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/lineage_tree.py +0 -0
  352. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/parallel_graph.py +0 -0
  353. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/tui/widgets/phase_progress.py +0 -0
  354. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/verification/__init__.py +0 -0
  355. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/verification/extractor.py +0 -0
  356. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/verification/models.py +0 -0
  357. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/src/ouroboros/verification/verifier.py +0 -0
  358. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/__init__.py +0 -0
  359. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/conftest.py +0 -0
  360. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/e2e/__init__.py +0 -0
  361. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/e2e/conftest.py +0 -0
  362. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/e2e/test_cli_commands.py +0 -0
  363. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/e2e/test_full_workflow.py +0 -0
  364. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/e2e/test_session_persistence.py +0 -0
  365. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/fixtures/test_atomicity_seed.yml +0 -0
  366. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/integration/__init__.py +0 -0
  367. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/integration/conftest.py +0 -0
  368. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/integration/mcp/__init__.py +0 -0
  369. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/integration/mcp/conftest.py +0 -0
  370. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/integration/mcp/test_client_adapter.py +0 -0
  371. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/integration/mcp/test_client_manager.py +0 -0
  372. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/integration/mcp/test_server_adapter.py +0 -0
  373. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/integration/plugin/test_orchestration.py +0 -0
  374. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/integration/test_codex_cli_passthrough_smoke.py +0 -0
  375. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/integration/test_codex_skill_fallback.py +0 -0
  376. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/integration/test_codex_skill_smoke.py +0 -0
  377. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/integration/test_entry_point.py +0 -0
  378. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/__init__.py +0 -0
  379. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/agents/__init__.py +0 -0
  380. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/agents/test_loader.py +0 -0
  381. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/__init__.py +0 -0
  382. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_ambiguity.py +0 -0
  383. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_brownfield.py +0 -0
  384. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_classifier_context.py +0 -0
  385. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_decide_later_items.py +0 -0
  386. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_explore.py +0 -0
  387. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_interview.py +0 -0
  388. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_pm_document_generator.py +0 -0
  389. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_pm_document_writer.py +0 -0
  390. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_pm_interview.py +0 -0
  391. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_pm_interview_brownfield_db.py +0 -0
  392. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_pm_seed_ac12.py +0 -0
  393. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_pm_seed_save.py +0 -0
  394. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_question_classifier.py +0 -0
  395. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/bigbang/test_seed_generator.py +0 -0
  396. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/__init__.py +0 -0
  397. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/formatters/__init__.py +0 -0
  398. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/formatters/test_console.py +0 -0
  399. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/formatters/test_panels.py +0 -0
  400. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/formatters/test_progress.py +0 -0
  401. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/formatters/test_tables.py +0 -0
  402. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/formatters/test_workflow_display.py +0 -0
  403. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_cancel.py +0 -0
  404. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_init_pm_seed_detection.py +0 -0
  405. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_init_runtime.py +0 -0
  406. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_main.py +0 -0
  407. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_mcp_nested_guard.py +0 -0
  408. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_mcp_startup_cleanup.py +0 -0
  409. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_pm_brownfield.py +0 -0
  410. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_pm_overwrite.py +0 -0
  411. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_pm_select_repos.py +0 -0
  412. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/cli/test_setup.py +0 -0
  413. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/config/__init__.py +0 -0
  414. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/config/test_loader.py +0 -0
  415. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/config/test_models.py +0 -0
  416. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/__init__.py +0 -0
  417. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_ac_tree.py +0 -0
  418. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_context.py +0 -0
  419. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_errors.py +0 -0
  420. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_git_workflow.py +0 -0
  421. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_lineage.py +0 -0
  422. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_ontology_aspect.py +0 -0
  423. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_ontology_questions.py +0 -0
  424. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_security.py +0 -0
  425. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_seed.py +0 -0
  426. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_types.py +0 -0
  427. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/core/test_worktree.py +0 -0
  428. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/__init__.py +0 -0
  429. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/test_consensus.py +0 -0
  430. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/test_json_utils.py +0 -0
  431. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/test_languages.py +0 -0
  432. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/test_mechanical.py +0 -0
  433. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/test_models.py +0 -0
  434. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/test_semantic.py +0 -0
  435. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/evaluation/test_trigger.py +0 -0
  436. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/events/__init__.py +0 -0
  437. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/events/test_base.py +0 -0
  438. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/events/test_decomposition_events.py +0 -0
  439. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/evolution/test_wonder_scope.py +0 -0
  440. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/execution/__init__.py +0 -0
  441. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/execution/test_atomicity.py +0 -0
  442. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/execution/test_decomposition.py +0 -0
  443. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/execution/test_double_diamond.py +0 -0
  444. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/execution/test_subagent_isolation.py +0 -0
  445. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/__init__.py +0 -0
  446. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/client/__init__.py +0 -0
  447. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/client/test_adapter.py +0 -0
  448. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/client/test_manager.py +0 -0
  449. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/conftest.py +0 -0
  450. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/server/__init__.py +0 -0
  451. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/server/test_adapter.py +0 -0
  452. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/server/test_security.py +0 -0
  453. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/test_errors.py +0 -0
  454. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/test_job_manager.py +0 -0
  455. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/test_types.py +0 -0
  456. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/__init__.py +0 -0
  457. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/conftest.py +0 -0
  458. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/test_brownfield_handler.py +0 -0
  459. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/test_definitions.py +0 -0
  460. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/test_pm_handler.py +0 -0
  461. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/test_pm_handler_generate.py +0 -0
  462. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/test_pm_handler_pending_reframe.py +0 -0
  463. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/test_qa_integration.py +0 -0
  464. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/mcp/tools/test_registry.py +0 -0
  465. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/observability/__init__.py +0 -0
  466. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/observability/test_drift.py +0 -0
  467. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/observability/test_logging.py +0 -0
  468. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/observability/test_retrospective.py +0 -0
  469. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/__init__.py +0 -0
  470. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_adapter.py +0 -0
  471. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_codex_cli_runtime.py +0 -0
  472. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_codex_recursion_guard.py +0 -0
  473. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_command_dispatcher.py +0 -0
  474. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_coordinator.py +0 -0
  475. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_dependency_analyzer.py +0 -0
  476. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_events.py +0 -0
  477. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_execution_runtime_scope.py +0 -0
  478. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_execution_strategy.py +0 -0
  479. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_inflight_cancellation.py +0 -0
  480. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_level_context.py +0 -0
  481. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_mcp_config.py +0 -0
  482. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_mcp_tools.py +0 -0
  483. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_parallel_executor.py +0 -0
  484. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_parallel_executor_retry_resume.py +0 -0
  485. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_runner.py +0 -0
  486. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_runner_cancellation.py +0 -0
  487. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_runtime_factory.py +0 -0
  488. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_runtime_message_projection.py +0 -0
  489. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_session.py +0 -0
  490. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/orchestrator/test_workflow_state.py +0 -0
  491. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/persistence/__init__.py +0 -0
  492. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/persistence/test_brownfield_store.py +0 -0
  493. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/persistence/test_checkpoint.py +0 -0
  494. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/persistence/test_event_store.py +0 -0
  495. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/persistence/test_schema.py +0 -0
  496. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/persistence/test_uow.py +0 -0
  497. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/__init__.py +0 -0
  498. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/agents/__init__.py +0 -0
  499. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/agents/test_registry.py +0 -0
  500. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/orchestration/__init__.py +0 -0
  501. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/orchestration/test_model_router.py +0 -0
  502. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/skills/__init__.py +0 -0
  503. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/skills/test_keywords.py +0 -0
  504. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/plugin/skills/test_registry.py +0 -0
  505. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/pm/__init__.py +0 -0
  506. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/pm/test_renderer.py +0 -0
  507. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/providers/__init__.py +0 -0
  508. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/providers/test_base.py +0 -0
  509. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/providers/test_claude_code_adapter.py +0 -0
  510. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/providers/test_codex_cli_adapter.py +0 -0
  511. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/providers/test_factory.py +0 -0
  512. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/providers/test_litellm_adapter.py +0 -0
  513. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/resilience/__init__.py +0 -0
  514. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/resilience/test_lateral.py +0 -0
  515. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/resilience/test_stagnation.py +0 -0
  516. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/routing/__init__.py +0 -0
  517. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/routing/test_complexity.py +0 -0
  518. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/routing/test_downgrade.py +0 -0
  519. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/routing/test_escalation.py +0 -0
  520. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/routing/test_router.py +0 -0
  521. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/routing/test_tiers.py +0 -0
  522. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/scripts/test_keyword_detector.py +0 -0
  523. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/scripts/test_version_check.py +0 -0
  524. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/secondary/__init__.py +0 -0
  525. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/secondary/test_scheduler.py +0 -0
  526. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/secondary/test_todo_registry.py +0 -0
  527. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_artifact_collector.py +0 -0
  528. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_codex_artifacts.py +0 -0
  529. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_convergence.py +0 -0
  530. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_dashboard.py +0 -0
  531. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_dependencies_configured.py +0 -0
  532. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_evolve_rewind.py +0 -0
  533. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_evolve_step.py +0 -0
  534. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_graceful_shutdown.py +0 -0
  535. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_main_entry_point.py +0 -0
  536. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_module_structure.py +0 -0
  537. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_project_initialization.py +0 -0
  538. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_projector_rewind.py +0 -0
  539. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_ralph_parser.py +0 -0
  540. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_ralph_rewind.py +0 -0
  541. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_regression.py +0 -0
  542. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_tooling_configuration.py +0 -0
  543. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/test_verification.py +0 -0
  544. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/__init__.py +0 -0
  545. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/test_app.py +0 -0
  546. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/test_cancelled_display.py +0 -0
  547. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/test_events.py +0 -0
  548. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/test_lineage_viewer.py +0 -0
  549. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/test_screens.py +0 -0
  550. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/test_session_selector_replay.py +0 -0
  551. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tests/unit/tui/test_widgets.py +0 -0
  552. {ouroboros_ai-0.26.2.dev35 → ouroboros_ai-0.26.2.dev36}/tools/sync_github_project.py +0 -0
  553. {ouroboros_ai-0.26.2.dev35 → 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.dev35
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.dev35'
22
- __version_tuple__ = version_tuple = (0, 26, 2, 'dev35')
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