ouroboros-ai 0.2.3__tar.gz → 0.4.0__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 (272) hide show
  1. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/CHANGELOG.md +38 -0
  2. ouroboros_ai-0.4.0/HANDOFF.md +111 -0
  3. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/PKG-INFO +73 -17
  4. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/README.md +70 -16
  5. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/planning-artifacts/architecture.md +78 -2
  6. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/planning-artifacts/epics.md +267 -6
  7. ouroboros_ai-0.4.0/docs/README.md +59 -0
  8. ouroboros_ai-0.4.0/docs/api/README.md +178 -0
  9. ouroboros_ai-0.4.0/docs/api/core.md +456 -0
  10. ouroboros_ai-0.4.0/docs/api/mcp.md +864 -0
  11. ouroboros_ai-0.4.0/docs/architecture.md +306 -0
  12. ouroboros_ai-0.4.0/docs/cli-reference.md +379 -0
  13. ouroboros_ai-0.4.0/docs/examples/mcp-config.yaml +88 -0
  14. ouroboros_ai-0.4.0/docs/guides/cli-usage.md +838 -0
  15. ouroboros_ai-0.4.0/docs/ontological-framework/HANDOFF.md +288 -0
  16. ouroboros_ai-0.4.0/docs/ontological-framework/aop-design.md +930 -0
  17. ouroboros_ai-0.4.0/docs/ontological-framework/architecture.md +519 -0
  18. ouroboros_ai-0.4.0/docs/ontological-framework/requirements.md +112 -0
  19. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/pyproject.toml +4 -1
  20. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/__init__.py +1 -1
  21. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/bigbang/__init__.py +9 -0
  22. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/bigbang/interview.py +16 -18
  23. ouroboros_ai-0.4.0/src/ouroboros/bigbang/ontology.py +180 -0
  24. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/commands/__init__.py +2 -0
  25. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/commands/init.py +162 -97
  26. ouroboros_ai-0.4.0/src/ouroboros/cli/commands/mcp.py +161 -0
  27. ouroboros_ai-0.4.0/src/ouroboros/cli/commands/run.py +347 -0
  28. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/main.py +2 -1
  29. ouroboros_ai-0.4.0/src/ouroboros/core/ontology_aspect.py +455 -0
  30. ouroboros_ai-0.4.0/src/ouroboros/core/ontology_questions.py +462 -0
  31. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/evaluation/__init__.py +16 -1
  32. ouroboros_ai-0.4.0/src/ouroboros/evaluation/consensus.py +908 -0
  33. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/evaluation/models.py +81 -0
  34. ouroboros_ai-0.4.0/src/ouroboros/events/ontology.py +135 -0
  35. ouroboros_ai-0.4.0/src/ouroboros/mcp/__init__.py +83 -0
  36. ouroboros_ai-0.4.0/src/ouroboros/mcp/client/__init__.py +20 -0
  37. ouroboros_ai-0.4.0/src/ouroboros/mcp/client/adapter.py +632 -0
  38. ouroboros_ai-0.4.0/src/ouroboros/mcp/client/manager.py +600 -0
  39. ouroboros_ai-0.4.0/src/ouroboros/mcp/client/protocol.py +161 -0
  40. ouroboros_ai-0.4.0/src/ouroboros/mcp/errors.py +377 -0
  41. ouroboros_ai-0.4.0/src/ouroboros/mcp/resources/__init__.py +22 -0
  42. ouroboros_ai-0.4.0/src/ouroboros/mcp/resources/handlers.py +328 -0
  43. ouroboros_ai-0.4.0/src/ouroboros/mcp/server/__init__.py +21 -0
  44. ouroboros_ai-0.4.0/src/ouroboros/mcp/server/adapter.py +408 -0
  45. ouroboros_ai-0.4.0/src/ouroboros/mcp/server/protocol.py +291 -0
  46. ouroboros_ai-0.4.0/src/ouroboros/mcp/server/security.py +636 -0
  47. ouroboros_ai-0.4.0/src/ouroboros/mcp/tools/__init__.py +24 -0
  48. ouroboros_ai-0.4.0/src/ouroboros/mcp/tools/definitions.py +351 -0
  49. ouroboros_ai-0.4.0/src/ouroboros/mcp/tools/registry.py +269 -0
  50. ouroboros_ai-0.4.0/src/ouroboros/mcp/types.py +333 -0
  51. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/orchestrator/__init__.py +31 -0
  52. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/orchestrator/events.py +40 -0
  53. ouroboros_ai-0.4.0/src/ouroboros/orchestrator/mcp_config.py +419 -0
  54. ouroboros_ai-0.4.0/src/ouroboros/orchestrator/mcp_tools.py +483 -0
  55. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/orchestrator/runner.py +119 -2
  56. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/providers/claude_code_adapter.py +75 -0
  57. ouroboros_ai-0.4.0/src/ouroboros/strategies/__init__.py +23 -0
  58. ouroboros_ai-0.4.0/src/ouroboros/strategies/devil_advocate.py +197 -0
  59. ouroboros_ai-0.4.0/tests/e2e/__init__.py +1 -0
  60. ouroboros_ai-0.4.0/tests/e2e/conftest.py +523 -0
  61. ouroboros_ai-0.4.0/tests/e2e/test_cli_commands.py +396 -0
  62. ouroboros_ai-0.4.0/tests/e2e/test_full_workflow.py +502 -0
  63. ouroboros_ai-0.4.0/tests/e2e/test_session_persistence.py +684 -0
  64. ouroboros_ai-0.4.0/tests/integration/mcp/__init__.py +1 -0
  65. ouroboros_ai-0.4.0/tests/integration/mcp/conftest.py +786 -0
  66. ouroboros_ai-0.4.0/tests/integration/mcp/test_client_adapter.py +529 -0
  67. ouroboros_ai-0.4.0/tests/integration/mcp/test_client_manager.py +659 -0
  68. ouroboros_ai-0.4.0/tests/integration/mcp/test_server_adapter.py +599 -0
  69. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/bigbang/test_interview.py +33 -25
  70. ouroboros_ai-0.4.0/tests/unit/bigbang/test_ontology.py +146 -0
  71. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/cli/test_main.py +24 -0
  72. ouroboros_ai-0.4.0/tests/unit/core/test_ontology_aspect.py +261 -0
  73. ouroboros_ai-0.4.0/tests/unit/core/test_ontology_questions.py +348 -0
  74. ouroboros_ai-0.4.0/tests/unit/evaluation/test_consensus.py +782 -0
  75. ouroboros_ai-0.4.0/tests/unit/mcp/__init__.py +1 -0
  76. ouroboros_ai-0.4.0/tests/unit/mcp/client/__init__.py +1 -0
  77. ouroboros_ai-0.4.0/tests/unit/mcp/client/test_adapter.py +110 -0
  78. ouroboros_ai-0.4.0/tests/unit/mcp/client/test_manager.py +157 -0
  79. ouroboros_ai-0.4.0/tests/unit/mcp/conftest.py +48 -0
  80. ouroboros_ai-0.4.0/tests/unit/mcp/server/__init__.py +1 -0
  81. ouroboros_ai-0.4.0/tests/unit/mcp/server/test_adapter.py +224 -0
  82. ouroboros_ai-0.4.0/tests/unit/mcp/server/test_security.py +279 -0
  83. ouroboros_ai-0.4.0/tests/unit/mcp/test_errors.py +189 -0
  84. ouroboros_ai-0.4.0/tests/unit/mcp/test_types.py +309 -0
  85. ouroboros_ai-0.4.0/tests/unit/mcp/tools/__init__.py +1 -0
  86. ouroboros_ai-0.4.0/tests/unit/mcp/tools/test_definitions.py +163 -0
  87. ouroboros_ai-0.4.0/tests/unit/mcp/tools/test_registry.py +238 -0
  88. ouroboros_ai-0.4.0/tests/unit/orchestrator/test_mcp_config.py +452 -0
  89. ouroboros_ai-0.4.0/tests/unit/orchestrator/test_mcp_tools.py +467 -0
  90. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/orchestrator/test_runner.py +210 -0
  91. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/uv.lock +25 -1
  92. ouroboros_ai-0.4.0/vision-draft.md +42 -0
  93. ouroboros_ai-0.2.3/PR-43-CODE-REVIEW-REPORT.md +0 -614
  94. ouroboros_ai-0.2.3/requirement/1_EXECUTIVE_SUMMARY.md +0 -167
  95. ouroboros_ai-0.2.3/requirement/2_FULL_SPECIFICATION.md +0 -1067
  96. ouroboros_ai-0.2.3/requirement/3_CONFIG_TEMPLATE.yaml +0 -344
  97. ouroboros_ai-0.2.3/requirement/4_REDDIT_EXAMPLE.md +0 -2108
  98. ouroboros_ai-0.2.3/src/ouroboros/cli/commands/run.py +0 -209
  99. ouroboros_ai-0.2.3/src/ouroboros/evaluation/consensus.py +0 -350
  100. ouroboros_ai-0.2.3/tests/unit/evaluation/test_consensus.py +0 -384
  101. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/.gitignore +0 -0
  102. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/.pre-commit-config.yaml +0 -0
  103. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/.python-version +0 -0
  104. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/LICENSE +0 -0
  105. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/github-issue-mapping.yaml +0 -0
  106. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/sprint-status.yaml +0 -0
  107. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/0-1-project-initialization-with-uv.md +0 -0
  108. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/0-2-core-types-and-error-handling.md +0 -0
  109. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/0-3-event-store-with-sqlalchemy-core.md +0 -0
  110. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/0-4-configuration-and-credentials-management.md +0 -0
  111. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/0-5-llm-provider-adapter-with-litellm.md +0 -0
  112. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/0-6-cli-skeleton-with-typer-and-rich.md +0 -0
  113. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/0-7-structured-logging-with-structlog.md +0 -0
  114. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/0-8-checkpoint-and-recovery-system.md +0 -0
  115. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/0-9-context-compression-engine.md +0 -0
  116. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/1-1-interview-protocol-engine.md +0 -0
  117. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/1-2-ambiguity-score-calculation.md +0 -0
  118. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/1-3-immutable-seed-generation.md +0 -0
  119. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/2-1-three-tier-model-configuration.md +0 -0
  120. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/2-2-complexity-based-routing.md +0 -0
  121. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/2-3-escalation-on-failure.md +0 -0
  122. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/2-4-downgrade-on-success.md +0 -0
  123. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/3-1-double-diamond-cycle-implementation.md +0 -0
  124. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/3-2-hierarchical-ac-decomposition.md +0 -0
  125. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/3-3-atomicity-detection.md +0 -0
  126. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/3-4-subagent-isolation.md +0 -0
  127. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/4-1-stagnation-detection-4-patterns.md +0 -0
  128. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/4-2-lateral-thinking-personas.md +0 -0
  129. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/4-3-persona-rotation-strategy.md +0 -0
  130. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/5-1-stage-1-mechanical-verification.md +0 -0
  131. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/5-2-stage-2-semantic-evaluation.md +0 -0
  132. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/5-3-stage-3-multi-model-consensus.md +0 -0
  133. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/5-4-consensus-trigger-matrix.md +0 -0
  134. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/6-1-drift-measurement-engine.md +0 -0
  135. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/6-2-automatic-retrospective.md +0 -0
  136. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/7-1-todo-registry.md +0 -0
  137. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/7-2-secondary-loop-batch-processing.md +0 -0
  138. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/planning-artifacts/bmm-workflow-status.yaml +0 -0
  139. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/update-stories.sh +0 -0
  140. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/docs/running-with-claude-code.md +0 -0
  141. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/project-context.md +0 -0
  142. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/__main__.py +0 -0
  143. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/bigbang/ambiguity.py +0 -0
  144. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/bigbang/seed_generator.py +0 -0
  145. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/__init__.py +0 -0
  146. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/commands/config.py +0 -0
  147. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/commands/status.py +0 -0
  148. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/formatters/__init__.py +0 -0
  149. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/formatters/panels.py +0 -0
  150. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/formatters/progress.py +0 -0
  151. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/formatters/tables.py +0 -0
  152. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/config/__init__.py +0 -0
  153. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/config/loader.py +0 -0
  154. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/config/models.py +0 -0
  155. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/core/__init__.py +0 -0
  156. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/core/ac_tree.py +0 -0
  157. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/core/context.py +0 -0
  158. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/core/errors.py +0 -0
  159. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/core/security.py +0 -0
  160. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/core/seed.py +0 -0
  161. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/core/types.py +0 -0
  162. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/evaluation/mechanical.py +0 -0
  163. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/evaluation/pipeline.py +0 -0
  164. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/evaluation/semantic.py +0 -0
  165. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/evaluation/trigger.py +0 -0
  166. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/events/__init__.py +0 -0
  167. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/events/base.py +0 -0
  168. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/events/decomposition.py +0 -0
  169. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/events/evaluation.py +0 -0
  170. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/execution/__init__.py +0 -0
  171. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/execution/atomicity.py +0 -0
  172. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/execution/decomposition.py +0 -0
  173. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/execution/double_diamond.py +0 -0
  174. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/execution/subagent.py +0 -0
  175. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/observability/__init__.py +0 -0
  176. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/observability/drift.py +0 -0
  177. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/observability/logging.py +0 -0
  178. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/observability/retrospective.py +0 -0
  179. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/orchestrator/adapter.py +0 -0
  180. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/orchestrator/session.py +0 -0
  181. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/__init__.py +0 -0
  182. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/checkpoint.py +0 -0
  183. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/event_store.py +0 -0
  184. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/migrations/__init__.py +0 -0
  185. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/migrations/runner.py +0 -0
  186. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
  187. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/schema.py +0 -0
  188. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/uow.py +0 -0
  189. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/providers/__init__.py +0 -0
  190. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/providers/base.py +0 -0
  191. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/providers/litellm_adapter.py +0 -0
  192. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/py.typed +0 -0
  193. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/resilience/__init__.py +0 -0
  194. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/resilience/lateral.py +0 -0
  195. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/resilience/stagnation.py +0 -0
  196. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/routing/__init__.py +0 -0
  197. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/routing/complexity.py +0 -0
  198. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/routing/downgrade.py +0 -0
  199. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/routing/escalation.py +0 -0
  200. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/routing/router.py +0 -0
  201. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/routing/tiers.py +0 -0
  202. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/secondary/__init__.py +0 -0
  203. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/secondary/scheduler.py +0 -0
  204. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/secondary/todo_registry.py +0 -0
  205. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/conftest.py +0 -0
  206. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/integration/test_entry_point.py +0 -0
  207. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/bigbang/__init__.py +0 -0
  208. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/bigbang/test_ambiguity.py +0 -0
  209. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/bigbang/test_seed_generator.py +0 -0
  210. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/cli/__init__.py +0 -0
  211. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/cli/formatters/__init__.py +0 -0
  212. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/cli/formatters/test_console.py +0 -0
  213. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/cli/formatters/test_panels.py +0 -0
  214. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/cli/formatters/test_progress.py +0 -0
  215. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/cli/formatters/test_tables.py +0 -0
  216. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/config/__init__.py +0 -0
  217. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/config/test_loader.py +0 -0
  218. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/config/test_models.py +0 -0
  219. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/core/__init__.py +0 -0
  220. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/core/test_ac_tree.py +0 -0
  221. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/core/test_context.py +0 -0
  222. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/core/test_errors.py +0 -0
  223. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/core/test_security.py +0 -0
  224. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/core/test_seed.py +0 -0
  225. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/core/test_types.py +0 -0
  226. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/evaluation/__init__.py +0 -0
  227. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/evaluation/test_mechanical.py +0 -0
  228. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/evaluation/test_models.py +0 -0
  229. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/evaluation/test_semantic.py +0 -0
  230. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/evaluation/test_trigger.py +0 -0
  231. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/events/__init__.py +0 -0
  232. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/events/test_base.py +0 -0
  233. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/events/test_decomposition_events.py +0 -0
  234. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/execution/__init__.py +0 -0
  235. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/execution/test_atomicity.py +0 -0
  236. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/execution/test_decomposition.py +0 -0
  237. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/execution/test_double_diamond.py +0 -0
  238. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/execution/test_subagent_isolation.py +0 -0
  239. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/observability/__init__.py +0 -0
  240. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/observability/test_drift.py +0 -0
  241. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/observability/test_logging.py +0 -0
  242. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/observability/test_retrospective.py +0 -0
  243. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/orchestrator/__init__.py +0 -0
  244. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/orchestrator/test_adapter.py +0 -0
  245. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/orchestrator/test_events.py +0 -0
  246. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/orchestrator/test_session.py +0 -0
  247. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/persistence/__init__.py +0 -0
  248. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/persistence/test_checkpoint.py +0 -0
  249. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/persistence/test_event_store.py +0 -0
  250. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/persistence/test_schema.py +0 -0
  251. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/persistence/test_uow.py +0 -0
  252. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/providers/__init__.py +0 -0
  253. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/providers/test_base.py +0 -0
  254. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/providers/test_litellm_adapter.py +0 -0
  255. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/resilience/__init__.py +0 -0
  256. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/resilience/test_lateral.py +0 -0
  257. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/resilience/test_stagnation.py +0 -0
  258. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/routing/__init__.py +0 -0
  259. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/routing/test_complexity.py +0 -0
  260. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/routing/test_downgrade.py +0 -0
  261. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/routing/test_escalation.py +0 -0
  262. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/routing/test_router.py +0 -0
  263. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/routing/test_tiers.py +0 -0
  264. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/secondary/__init__.py +0 -0
  265. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/secondary/test_scheduler.py +0 -0
  266. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/secondary/test_todo_registry.py +0 -0
  267. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/test_dependencies_configured.py +0 -0
  268. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/test_main_entry_point.py +0 -0
  269. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/test_module_structure.py +0 -0
  270. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/test_project_initialization.py +0 -0
  271. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/test_tooling_configuration.py +0 -0
  272. {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tools/sync_github_project.py +0 -0
@@ -5,6 +5,44 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.3.0] - 2026-01-28
9
+
10
+ ### Added
11
+
12
+ #### Documentation
13
+ - **CLI Reference** (`docs/cli-reference.md`) - Complete command reference with examples
14
+ - **Prerequisites section** in README with Python 3.14+ requirement
15
+ - **Contributing section** with links to Issues and Discussions
16
+ - **OSS badges** - PyPI version, Python version, License
17
+
18
+ #### Interview System
19
+ - **Tiered confirmation system** for interview rounds:
20
+ - Rounds 1-3: Auto-continue (minimum context gathering)
21
+ - Rounds 4-15: Ask "Continue?" after each round
22
+ - Rounds 16+: Ask "Continue?" with diminishing returns warning
23
+ - **No hard round limit** - User controls when to stop
24
+ - New constants: `MIN_ROUNDS_BEFORE_EARLY_EXIT`, `SOFT_LIMIT_WARNING_THRESHOLD`
25
+
26
+ ### Changed
27
+
28
+ #### Interview Engine
29
+ - Removed `MAX_INTERVIEW_ROUNDS` hard limit (was 10)
30
+ - `is_complete` now only checks status (user-controlled completion)
31
+ - `record_response()` no longer auto-completes at max rounds
32
+ - System prompt simplified to show "Round N" instead of "Round N of 10"
33
+
34
+ #### CLI Init Command
35
+ - Extracted `_run_interview_loop()` helper to eliminate code duplication (~60 lines)
36
+ - State saved immediately after status mutation for consistency
37
+ - Updated welcome message to reflect no round limit
38
+
39
+ ### Removed
40
+ - Korean-language requirement documents (`requirement/` folder)
41
+ - Hard round limit enforcement in interview engine
42
+
43
+ ### Fixed
44
+ - Code duplication in init.py interview continuation flow
45
+
8
46
  ## [0.2.0] - 2026-01-27
9
47
 
10
48
  ### Added
@@ -0,0 +1,111 @@
1
+ # Handoff Document
2
+
3
+ > Last Updated: 2026-02-03
4
+ > Session: Ontological Framework Implementation - Phase 6 Complete
5
+
6
+ ---
7
+
8
+ ## Goal
9
+
10
+ Ouroboros v0.4.0에 **Ontological Framework** 추가:
11
+ 1. **AOP 기반 분석 프레임워크** - 횡단 관심사를 모듈화하여 재사용 가능한 분석 전략 구현
12
+ 2. **Deliberative Consensus** - Advocate/Devil/Judge 역할 기반 2라운드 토론 시스템
13
+ 3. **Devil's Advocate Strategy** - 온톨로지 질문으로 "근본 해결책인가?" 검증
14
+
15
+ ---
16
+
17
+ ## Current Progress
18
+
19
+ ### ✅ Phase 6: Quality Review - COMPLETE
20
+
21
+ **Code Review 이슈 수정 완료:**
22
+
23
+ | 이슈 | 위치 | 해결 |
24
+ |------|------|------|
25
+ | Exception Handling (ProviderError 중복 래핑) | `consensus.py:731-737` | try/except 제거 - Strategy가 내부에서 에러 처리 |
26
+ | Unused import | `consensus.py:26` | `build_devil_advocate_prompt` 제거 |
27
+ | Import ordering | 3개 파일 | `ruff --fix`로 자동 정렬 |
28
+ | Missing `__all__` | `ontology_aspect.py` | 이미 존재 (line 443-454) |
29
+
30
+ **테스트 결과:** 73개 테스트 통과 (consensus + ontology 관련)
31
+
32
+ ### ✅ 완료된 구현
33
+
34
+ | 파일 | 설명 | 테스트 |
35
+ |------|------|--------|
36
+ | `src/ouroboros/core/ontology_questions.py` | 온톨로지 질문 정의 | ✅ |
37
+ | `src/ouroboros/core/ontology_aspect.py` | AOP 분석 프레임워크 | ✅ |
38
+ | `src/ouroboros/evaluation/models.py` | VoterRole, FinalVerdict, DeliberationResult | ✅ |
39
+ | `src/ouroboros/evaluation/consensus.py` | DeliberativeConsensus 클래스 | ✅ |
40
+ | `src/ouroboros/strategies/devil_advocate.py` | DevilAdvocateStrategy | ✅ |
41
+ | `tests/unit/evaluation/test_consensus.py` | Deliberative 테스트 | ✅ |
42
+ | `tests/unit/core/test_ontology_aspect.py` | AOP 테스트 | ✅ |
43
+ | `tests/unit/core/test_ontology_questions.py` | 온톨로지 질문 테스트 | ✅ |
44
+
45
+ ---
46
+
47
+ ## Next Steps
48
+
49
+ ### Phase 7: Summary
50
+
51
+ 1. **전체 테스트 실행**
52
+ ```bash
53
+ uv run pytest tests/unit/evaluation/ tests/unit/core/ -v
54
+ ```
55
+
56
+ 2. **변경 사항 커밋** (선택적)
57
+ ```bash
58
+ git add -p # 변경 검토
59
+ git commit -m "feat(evaluation): add deliberative consensus with AOP-based devil's advocate"
60
+ ```
61
+
62
+ ### 대기 중 (낮은 우선순위)
63
+
64
+ | 파일 | 설명 |
65
+ |------|------|
66
+ | `src/ouroboros/bigbang/ontology.py` | Interview Phase 통합 |
67
+ | `src/ouroboros/bigbang/ambiguity.py` | Ontology Score 가중치 추가 |
68
+
69
+ ---
70
+
71
+ ## Important Files
72
+
73
+ ### 핵심 구현
74
+ ```
75
+ src/ouroboros/core/ontology_questions.py # 온톨로지 질문 정의
76
+ src/ouroboros/core/ontology_aspect.py # AOP 프레임워크 (BaseAnalyzer, AnalysisResult)
77
+ src/ouroboros/evaluation/consensus.py # DeliberativeConsensus (lines 500-830)
78
+ src/ouroboros/strategies/devil_advocate.py # Strategy 패턴 구현
79
+ ```
80
+
81
+ ### 테스트
82
+ ```
83
+ tests/unit/evaluation/test_consensus.py # 32개 테스트
84
+ tests/unit/core/test_ontology_aspect.py # 18개 테스트
85
+ tests/unit/core/test_ontology_questions.py # 23개 테스트
86
+ ```
87
+
88
+ ---
89
+
90
+ ## Notes
91
+
92
+ ### 아키텍처 결정
93
+
94
+ 1. **Devil's Advocate는 Strategy 객체**: LLM 호출 대신 `DevilAdvocateStrategy.analyze()` 사용
95
+ 2. **Strategy가 에러 처리**: `analyze()` 메서드가 LLM 에러를 내부에서 처리하여 `AnalysisResult.invalid()` 반환
96
+ 3. **AnalysisResult.is_valid**: `True` = 근본 해결책, `False` = 증상 치료
97
+
98
+ ### 검증 명령어
99
+
100
+ ```bash
101
+ # 테스트
102
+ uv run pytest tests/unit/evaluation/test_consensus.py -v
103
+ uv run pytest tests/unit/core/ -v
104
+
105
+ # 린트
106
+ uv run ruff check src/ouroboros/evaluation/ src/ouroboros/core/ src/ouroboros/strategies/
107
+ ```
108
+
109
+ ---
110
+
111
+ *Phase 6 완료. Phase 7 (Summary)로 진행 가능.*
@@ -1,14 +1,16 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ouroboros-ai
3
- Version: 0.2.3
3
+ Version: 0.4.0
4
4
  Summary: Self-Improving AI Workflow System
5
5
  Author-email: Q00 <jqyu.lee@gmail.com>
6
6
  License-File: LICENSE
7
7
  Requires-Python: >=3.14
8
8
  Requires-Dist: aiosqlite>=0.20.0
9
+ Requires-Dist: cachetools>=5.0.0
9
10
  Requires-Dist: claude-agent-sdk>=0.1.0
10
11
  Requires-Dist: httpx>=0.27.0
11
12
  Requires-Dist: litellm>=1.80.0
13
+ Requires-Dist: mcp>=1.26.0
12
14
  Requires-Dist: pydantic>=2.0.0
13
15
  Requires-Dist: pyyaml>=6.0.0
14
16
  Requires-Dist: rich>=13.0.0
@@ -41,18 +43,26 @@ Description-Content-Type: text/markdown
41
43
  <em>The serpent that devours itself to be reborn anew.</em>
42
44
  </p>
43
45
 
46
+ <p align="center">
47
+ <a href="https://pypi.org/project/ouroboros-ai/"><img src="https://img.shields.io/pypi/v/ouroboros-ai?color=blue" alt="PyPI"></a>
48
+ <a href="https://python.org"><img src="https://img.shields.io/badge/python-3.14+-blue" alt="Python"></a>
49
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="License"></a>
50
+ </p>
51
+
44
52
  <p align="center">
45
53
  <a href="#-philosophy">Philosophy</a> •
46
54
  <a href="#-the-six-phases">Phases</a> •
47
55
  <a href="#-architecture">Architecture</a> •
56
+ <a href="#-prerequisites">Prerequisites</a> •
48
57
  <a href="#-quick-start">Start</a> •
49
- <a href="#-the-personas-lateral-thinking-agents">Personas</a>
58
+ <a href="#-roadmap">Roadmap</a>
59
+ <a href="#-contributing">Contributing</a>
50
60
  </p>
51
61
 
52
62
  <br/>
53
63
 
54
64
  <p align="center">
55
- <code>74 modules</code> · <code>1,341 tests</code> · <code>97%+ coverage</code>
65
+ <code>75 modules</code> · <code>1,341 tests</code> · <code>97%+ coverage</code>
56
66
  </p>
57
67
 
58
68
  <br/>
@@ -236,7 +246,7 @@ These iterate until a **Seed** crystallizes—a specification with `Ambiguity
236
246
  ┃ └────┬────┘ ┃
237
247
  ┃ │ Stage 1: Mechanical ($0) — lint, build, test ┃
238
248
  ┃ │ Stage 2: Semantic ($$) — AC compliance, drift ┃
239
- ┃ │ Stage 3: Consensus ($$$$) — multi-model vote
249
+ ┃ │ Stage 3: Consensus ($$$$) — Advocate/Devil/Judge debate
240
250
  ┃ ▼ ┃
241
251
  ┃ ┌─────────┐ ┃
242
252
  ┃ │ PHASE 5 │ S E C O N D A R Y L O O P ┃
@@ -304,9 +314,9 @@ def select_approach(task):
304
314
  ```
305
315
  src/ouroboros/
306
316
 
307
- ├── core/ ◆ The essence: types, errors, seed, context
317
+ ├── core/ ◆ The essence: types, errors, seed, ontology
308
318
 
309
- ├── bigbang/ ◇ Phase 0: Interview → Ambiguity → Seed
319
+ ├── bigbang/ ◇ Phase 0: Interview → Ontology → Ambiguity → Seed
310
320
 
311
321
  ├── routing/ ◇ Phase 1: PAL router, complexity, tiers
312
322
 
@@ -349,10 +359,11 @@ src/ouroboros/
349
359
  | **THE RESEARCHER** | *"Stop coding. Read the docs."* | Knowledge gap detected | Search, read documentation, find examples |
350
360
  | **THE SIMPLIFIER** | *"Cut scope in half. Return to MVP."* | Overengineering detected | Remove features, reduce complexity |
351
361
  | **THE ARCHITECT** | *"Question the foundation. Rebuild if needed."* | Structural issues | Redesign, refactor core assumptions |
362
+ | **THE CONTRARIAN** | *"What if we're solving the wrong problem?"* | Root cause unclear | Challenge assumptions using ontological questions |
352
363
 
353
364
  <br/>
354
365
 
355
- **작동 방식**: Stagnation Detection (4 patterns) → Persona Rotation → 새로운 관점으로 재시도
366
+ **How it works**: Stagnation Detection (4 patterns) → Persona Rotation → Retry with fresh perspective
356
367
 
357
368
  <br/>
358
369
 
@@ -415,6 +426,22 @@ not to restart, but to **re-crystallize** with new understanding.
415
426
 
416
427
  <br/>
417
428
 
429
+ ## ◈ Prerequisites
430
+
431
+ <br/>
432
+
433
+ | Requirement | Description |
434
+ |-------------|-------------|
435
+ | **Python 3.14+** | Required (uses latest language features) |
436
+ | **Claude Code Max Plan** | For orchestrator mode (no API key needed) |
437
+ | **OR API Key** | OpenRouter, Anthropic, or OpenAI for LiteLLM mode |
438
+
439
+ <br/>
440
+
441
+ ---
442
+
443
+ <br/>
444
+
418
445
  ## ◈ Installation
419
446
 
420
447
  <br/>
@@ -476,7 +503,7 @@ uv run ouroboros init start "I want to build a task management CLI"
476
503
  uv run ouroboros status health
477
504
  ```
478
505
 
479
- > 📖 **[Full Guide: Running with Claude Code](docs/running-with-claude-code.md)**
506
+ > 📖 **[Full Guide: Running with Claude Code](docs/running-with-claude-code.md)** | **[CLI Reference](docs/cli-reference.md)**
480
507
 
481
508
  <br/>
482
509
 
@@ -563,22 +590,51 @@ uv run ruff format src/
563
590
 
564
591
  <br/>
565
592
 
593
+ ## ◈ Contributing
594
+
595
+ <br/>
596
+
597
+ Contributions are welcome! Please see:
598
+
599
+ - **Issues**: [GitHub Issues](https://github.com/Q00/ouroboros/issues) for bugs and feature requests
600
+ - **Discussions**: [GitHub Discussions](https://github.com/Q00/ouroboros/discussions) for questions and ideas
601
+
602
+ <br/>
603
+
604
+ ---
605
+
606
+ <br/>
607
+
566
608
  ## ◈ Roadmap
567
609
 
568
610
  <br/>
569
611
 
612
+ ### Completed
613
+
570
614
  ```
571
- [■■■■■■■■■■] Epic 0 Foundation
572
- [■■■■■■■■■■] Epic 1 Big Bang
573
- [■■■■■■■■■■] Epic 2 PAL Router
574
- [■■■■■■■■■■] Epic 3 Double Diamond
575
- [■■■■■■■■■■] Epic 4 Resilience
576
- [■■■■■■■■■■] Epic 5 Evaluation
577
- [■■■■■■■■■■] Epic 6 Drift Control
578
- [■■■■■■■■■■] Epic 7 Secondary Loop
579
- [■■■■■■■■■■] Epic 8 Orchestrator Complete
615
+ [■■■■■■■■■■] Epic 0 Foundation
616
+ [■■■■■■■■■■] Epic 1 Big Bang
617
+ [■■■■■■■■■■] Epic 2 PAL Router
618
+ [■■■■■■■■■■] Epic 3 Double Diamond
619
+ [■■■■■■■■■■] Epic 4 Resilience
620
+ [■■■■■■■■■■] Epic 5 Evaluation
621
+ [■■■■■■■■■■] Epic 6 Drift Control
622
+ [■■■■■■■■■■] Epic 7 Secondary Loop
623
+ [■■■■■■■■■■] Epic 8 Orchestrator
624
+ [■■■■■■■■■■] Epic 9 MCP Integration ✓
625
+ [■■■■■■■■■■] Epic 10 TUI Mode ✓
580
626
  ```
581
627
 
628
+ ### Upcoming
629
+
630
+ | Feature | Description | Status |
631
+ |---------|-------------|--------|
632
+ | **Worker MCP** | MCP server for distributed task execution | Planned |
633
+ | **TUI Enhancement** | Rich terminal UI with real-time progress | Planned |
634
+ | **AC Tree Visualization** | Interactive acceptance criteria graph | Planned |
635
+ | **Plugin System** | Custom evaluators and personas | Planned |
636
+ | **Web Dashboard** | Execution monitoring and analytics | Planned |
637
+
582
638
  <br/>
583
639
 
584
640
  ---
@@ -21,18 +21,26 @@
21
21
  <em>The serpent that devours itself to be reborn anew.</em>
22
22
  </p>
23
23
 
24
+ <p align="center">
25
+ <a href="https://pypi.org/project/ouroboros-ai/"><img src="https://img.shields.io/pypi/v/ouroboros-ai?color=blue" alt="PyPI"></a>
26
+ <a href="https://python.org"><img src="https://img.shields.io/badge/python-3.14+-blue" alt="Python"></a>
27
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="License"></a>
28
+ </p>
29
+
24
30
  <p align="center">
25
31
  <a href="#-philosophy">Philosophy</a> •
26
32
  <a href="#-the-six-phases">Phases</a> •
27
33
  <a href="#-architecture">Architecture</a> •
34
+ <a href="#-prerequisites">Prerequisites</a> •
28
35
  <a href="#-quick-start">Start</a> •
29
- <a href="#-the-personas-lateral-thinking-agents">Personas</a>
36
+ <a href="#-roadmap">Roadmap</a>
37
+ <a href="#-contributing">Contributing</a>
30
38
  </p>
31
39
 
32
40
  <br/>
33
41
 
34
42
  <p align="center">
35
- <code>74 modules</code> · <code>1,341 tests</code> · <code>97%+ coverage</code>
43
+ <code>75 modules</code> · <code>1,341 tests</code> · <code>97%+ coverage</code>
36
44
  </p>
37
45
 
38
46
  <br/>
@@ -216,7 +224,7 @@ These iterate until a **Seed** crystallizes—a specification with `Ambiguity
216
224
  ┃ └────┬────┘ ┃
217
225
  ┃ │ Stage 1: Mechanical ($0) — lint, build, test ┃
218
226
  ┃ │ Stage 2: Semantic ($$) — AC compliance, drift ┃
219
- ┃ │ Stage 3: Consensus ($$$$) — multi-model vote
227
+ ┃ │ Stage 3: Consensus ($$$$) — Advocate/Devil/Judge debate
220
228
  ┃ ▼ ┃
221
229
  ┃ ┌─────────┐ ┃
222
230
  ┃ │ PHASE 5 │ S E C O N D A R Y L O O P ┃
@@ -284,9 +292,9 @@ def select_approach(task):
284
292
  ```
285
293
  src/ouroboros/
286
294
 
287
- ├── core/ ◆ The essence: types, errors, seed, context
295
+ ├── core/ ◆ The essence: types, errors, seed, ontology
288
296
 
289
- ├── bigbang/ ◇ Phase 0: Interview → Ambiguity → Seed
297
+ ├── bigbang/ ◇ Phase 0: Interview → Ontology → Ambiguity → Seed
290
298
 
291
299
  ├── routing/ ◇ Phase 1: PAL router, complexity, tiers
292
300
 
@@ -329,10 +337,11 @@ src/ouroboros/
329
337
  | **THE RESEARCHER** | *"Stop coding. Read the docs."* | Knowledge gap detected | Search, read documentation, find examples |
330
338
  | **THE SIMPLIFIER** | *"Cut scope in half. Return to MVP."* | Overengineering detected | Remove features, reduce complexity |
331
339
  | **THE ARCHITECT** | *"Question the foundation. Rebuild if needed."* | Structural issues | Redesign, refactor core assumptions |
340
+ | **THE CONTRARIAN** | *"What if we're solving the wrong problem?"* | Root cause unclear | Challenge assumptions using ontological questions |
332
341
 
333
342
  <br/>
334
343
 
335
- **작동 방식**: Stagnation Detection (4 patterns) → Persona Rotation → 새로운 관점으로 재시도
344
+ **How it works**: Stagnation Detection (4 patterns) → Persona Rotation → Retry with fresh perspective
336
345
 
337
346
  <br/>
338
347
 
@@ -395,6 +404,22 @@ not to restart, but to **re-crystallize** with new understanding.
395
404
 
396
405
  <br/>
397
406
 
407
+ ## ◈ Prerequisites
408
+
409
+ <br/>
410
+
411
+ | Requirement | Description |
412
+ |-------------|-------------|
413
+ | **Python 3.14+** | Required (uses latest language features) |
414
+ | **Claude Code Max Plan** | For orchestrator mode (no API key needed) |
415
+ | **OR API Key** | OpenRouter, Anthropic, or OpenAI for LiteLLM mode |
416
+
417
+ <br/>
418
+
419
+ ---
420
+
421
+ <br/>
422
+
398
423
  ## ◈ Installation
399
424
 
400
425
  <br/>
@@ -456,7 +481,7 @@ uv run ouroboros init start "I want to build a task management CLI"
456
481
  uv run ouroboros status health
457
482
  ```
458
483
 
459
- > 📖 **[Full Guide: Running with Claude Code](docs/running-with-claude-code.md)**
484
+ > 📖 **[Full Guide: Running with Claude Code](docs/running-with-claude-code.md)** | **[CLI Reference](docs/cli-reference.md)**
460
485
 
461
486
  <br/>
462
487
 
@@ -543,22 +568,51 @@ uv run ruff format src/
543
568
 
544
569
  <br/>
545
570
 
571
+ ## ◈ Contributing
572
+
573
+ <br/>
574
+
575
+ Contributions are welcome! Please see:
576
+
577
+ - **Issues**: [GitHub Issues](https://github.com/Q00/ouroboros/issues) for bugs and feature requests
578
+ - **Discussions**: [GitHub Discussions](https://github.com/Q00/ouroboros/discussions) for questions and ideas
579
+
580
+ <br/>
581
+
582
+ ---
583
+
584
+ <br/>
585
+
546
586
  ## ◈ Roadmap
547
587
 
548
588
  <br/>
549
589
 
590
+ ### Completed
591
+
550
592
  ```
551
- [■■■■■■■■■■] Epic 0 Foundation
552
- [■■■■■■■■■■] Epic 1 Big Bang
553
- [■■■■■■■■■■] Epic 2 PAL Router
554
- [■■■■■■■■■■] Epic 3 Double Diamond
555
- [■■■■■■■■■■] Epic 4 Resilience
556
- [■■■■■■■■■■] Epic 5 Evaluation
557
- [■■■■■■■■■■] Epic 6 Drift Control
558
- [■■■■■■■■■■] Epic 7 Secondary Loop
559
- [■■■■■■■■■■] Epic 8 Orchestrator Complete
593
+ [■■■■■■■■■■] Epic 0 Foundation
594
+ [■■■■■■■■■■] Epic 1 Big Bang
595
+ [■■■■■■■■■■] Epic 2 PAL Router
596
+ [■■■■■■■■■■] Epic 3 Double Diamond
597
+ [■■■■■■■■■■] Epic 4 Resilience
598
+ [■■■■■■■■■■] Epic 5 Evaluation
599
+ [■■■■■■■■■■] Epic 6 Drift Control
600
+ [■■■■■■■■■■] Epic 7 Secondary Loop
601
+ [■■■■■■■■■■] Epic 8 Orchestrator
602
+ [■■■■■■■■■■] Epic 9 MCP Integration ✓
603
+ [■■■■■■■■■■] Epic 10 TUI Mode ✓
560
604
  ```
561
605
 
606
+ ### Upcoming
607
+
608
+ | Feature | Description | Status |
609
+ |---------|-------------|--------|
610
+ | **Worker MCP** | MCP server for distributed task execution | Planned |
611
+ | **TUI Enhancement** | Rich terminal UI with real-time progress | Planned |
612
+ | **AC Tree Visualization** | Interactive acceptance criteria graph | Planned |
613
+ | **Plugin System** | Custom evaluators and personas | Planned |
614
+ | **Web Dashboard** | Execution monitoring and analytics | Planned |
615
+
562
616
  <br/>
563
617
 
564
618
  ---
@@ -149,6 +149,33 @@ class FilteredContext:
149
149
  - Fallback to sequential retry on partial failure
150
150
  - Minimum valid responses required before aggregation
151
151
 
152
+ #### 6. Deliberative Consensus Pattern (v0.4.0)
153
+
154
+ For high-stakes decisions requiring ontological validation:
155
+
156
+ ```python
157
+ class DeliberativeConsensus:
158
+ """Two-round adversarial evaluation with philosophical grounding"""
159
+
160
+ async def evaluate(self, proposal: Proposal) -> DeliberativeResult:
161
+ # Round 1: Concurrent positions
162
+ advocate_task = self._run_advocate(proposal)
163
+ devil_task = self._run_devil(proposal) # Uses ontology_questions
164
+ advocate, devil = await asyncio.gather(advocate_task, devil_task)
165
+
166
+ # Round 2: Judge renders verdict
167
+ verdict = await self._run_judge(advocate, devil)
168
+ return DeliberativeResult(
169
+ verdict=verdict, # APPROVED | REJECTED | CONDITIONAL
170
+ is_root_solution=devil.confirmed_root_cause,
171
+ )
172
+ ```
173
+
174
+ **Roles:**
175
+ - **ADVOCATE**: Argues for the proposal's merits
176
+ - **DEVIL'S ADVOCATE**: Challenges using four ontological questions (ESSENCE, ROOT_CAUSE, PREREQUISITES, HIDDEN_ASSUMPTIONS)
177
+ - **JUDGE**: Synthesizes positions, renders final verdict
178
+
152
179
  ### Testing Strategy
153
180
 
154
181
  **Priority**: Observability Layer First (E0 Epic)
@@ -1000,6 +1027,46 @@ async def execute_phase(phase: Phase, uow: UnitOfWork):
1000
1027
  )
1001
1028
  ```
1002
1029
 
1030
+ #### Ontological Questioning Pattern (v0.4.0)
1031
+
1032
+ ```python
1033
+ from enum import Enum
1034
+
1035
+ class OntologyQuestionType(str, Enum):
1036
+ """Four fundamental questions for deep analysis"""
1037
+ ESSENCE = "essence" # "What IS this, really?"
1038
+ ROOT_CAUSE = "root_cause" # "Is this the root cause or a symptom?"
1039
+ PREREQUISITES = "prerequisites" # "What must exist first?"
1040
+ HIDDEN_ASSUMPTIONS = "hidden_assumptions" # "What are we assuming?"
1041
+
1042
+ @dataclass
1043
+ class OntologyQuestion:
1044
+ type: OntologyQuestionType
1045
+ question: str
1046
+ context: str
1047
+
1048
+ def format_prompt(self) -> str:
1049
+ """Format for LLM consumption"""
1050
+ return f"[{self.type.value.upper()}] {self.question}\nContext: {self.context}"
1051
+
1052
+ # Usage in Contrarian Persona
1053
+ class ContrarianPersona:
1054
+ def challenge(self, proposal: str) -> list[OntologyQuestion]:
1055
+ return [
1056
+ OntologyQuestion(
1057
+ type=OntologyQuestionType.ROOT_CAUSE,
1058
+ question="Is this addressing the root cause or treating a symptom?",
1059
+ context=proposal,
1060
+ ),
1061
+ # ... other questions
1062
+ ]
1063
+ ```
1064
+
1065
+ **Application Points:**
1066
+ - `resilience/personas.py`: Contrarian uses ontological questions
1067
+ - `evaluation/consensus.py`: Devil's Advocate role
1068
+ - `bigbang/ontology.py`: Interview framework discovery
1069
+
1003
1070
  ### Anti-Patterns (MUST AVOID)
1004
1071
 
1005
1072
  #### 1. Zombie Objects (Detached ORM State)
@@ -1112,7 +1179,8 @@ ouroboros/
1112
1179
  │ │ │ ├── validate.py # ouroboros validate <seed.yaml>
1113
1180
  │ │ │ ├── status.py # ouroboros status [--seed-id]
1114
1181
  │ │ │ ├── resume.py # ouroboros resume <checkpoint-id>
1115
- │ │ │ └── config.py # ouroboros config [show|set|init]
1182
+ │ │ │ ├── config.py # ouroboros config [show|set|init]
1183
+ │ │ │ └── story.py # v0.4.0: ouroboros story - narrative generation from universe
1116
1184
  │ │ └── formatters/
1117
1185
  │ │ ├── __init__.py
1118
1186
  │ │ ├── tables.py # Rich table formatters
@@ -1126,6 +1194,7 @@ ouroboros/
1126
1194
  │ │ ├── protocols.py # Protocol definitions (LLMAdapter, etc.)
1127
1195
  │ │ ├── seed.py # Seed, OntologySchema, Constraints
1128
1196
  │ │ ├── ontology.py # EffectiveOntology, OntologyEvent
1197
+ │ │ ├── ontology_questions.py # v0.4.0: Four ontological probes (ESSENCE, ROOT_CAUSE, PREREQUISITES, HIDDEN_ASSUMPTIONS)
1129
1198
  │ │ ├── ac.py # AcceptanceCriteria, ACNode, ACTree
1130
1199
  │ │ └── context.py # ExecutionContext, contextvars
1131
1200
  │ │
@@ -1143,6 +1212,7 @@ ouroboros/
1143
1212
  │ │ ├── clarifier.py # Clarification engine
1144
1213
  │ │ ├── ambiguity.py # Ambiguity Gate (≤0.2 threshold)
1145
1214
  │ │ ├── interview.py # Interview protocol
1215
+ │ │ ├── ontology.py # v0.4.0: Ontological framework discovery during interview
1146
1216
  │ │ └── seed_generator.py # Generate Seed from interview
1147
1217
  │ │
1148
1218
  │ ├── routing/ # Phase 1: PAL Router
@@ -1169,10 +1239,12 @@ ouroboros/
1169
1239
  │ │
1170
1240
  │ ├── evaluation/ # Phase 4: Evaluation
1171
1241
  │ │ ├── __init__.py
1242
+ │ │ ├── models.py # v0.4.0: EvaluationResult, ConsensusResult, Verdict
1172
1243
  │ │ ├── pipeline.py # EvaluationPipeline orchestrator
1173
1244
  │ │ ├── mechanical.py # Stage 1: MechanicalEvaluator ($0)
1174
1245
  │ │ ├── semantic.py # Stage 2: SemanticEvaluator ($$)
1175
- │ │ └── stage_result.py # StageResult, EvaluationResult
1246
+ │ │ ├── consensus.py # v0.4.0: DeliberativeConsensus (Advocate/Devil/Judge)
1247
+ │ │ └── stage_result.py # StageResult (legacy, see models.py)
1176
1248
  │ │
1177
1249
  │ ├── consensus/ # Phase 5: Consensus
1178
1250
  │ │ ├── __init__.py
@@ -1749,3 +1821,7 @@ The Python 3.14 + uv + Typer stack with Event Sourcing and Domain-Driven Design
1749
1821
 
1750
1822
  **Document Maintenance:** Update this architecture when major technical decisions are made during implementation.
1751
1823
 
1824
+ ---
1825
+
1826
+ _Last Updated: 2026-02-02 (v0.4.0 additions)_
1827
+