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.
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/CHANGELOG.md +38 -0
- ouroboros_ai-0.4.0/HANDOFF.md +111 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/PKG-INFO +73 -17
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/README.md +70 -16
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/planning-artifacts/architecture.md +78 -2
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/planning-artifacts/epics.md +267 -6
- ouroboros_ai-0.4.0/docs/README.md +59 -0
- ouroboros_ai-0.4.0/docs/api/README.md +178 -0
- ouroboros_ai-0.4.0/docs/api/core.md +456 -0
- ouroboros_ai-0.4.0/docs/api/mcp.md +864 -0
- ouroboros_ai-0.4.0/docs/architecture.md +306 -0
- ouroboros_ai-0.4.0/docs/cli-reference.md +379 -0
- ouroboros_ai-0.4.0/docs/examples/mcp-config.yaml +88 -0
- ouroboros_ai-0.4.0/docs/guides/cli-usage.md +838 -0
- ouroboros_ai-0.4.0/docs/ontological-framework/HANDOFF.md +288 -0
- ouroboros_ai-0.4.0/docs/ontological-framework/aop-design.md +930 -0
- ouroboros_ai-0.4.0/docs/ontological-framework/architecture.md +519 -0
- ouroboros_ai-0.4.0/docs/ontological-framework/requirements.md +112 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/pyproject.toml +4 -1
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/__init__.py +1 -1
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/bigbang/__init__.py +9 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/bigbang/interview.py +16 -18
- ouroboros_ai-0.4.0/src/ouroboros/bigbang/ontology.py +180 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/commands/__init__.py +2 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/commands/init.py +162 -97
- ouroboros_ai-0.4.0/src/ouroboros/cli/commands/mcp.py +161 -0
- ouroboros_ai-0.4.0/src/ouroboros/cli/commands/run.py +347 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/main.py +2 -1
- ouroboros_ai-0.4.0/src/ouroboros/core/ontology_aspect.py +455 -0
- ouroboros_ai-0.4.0/src/ouroboros/core/ontology_questions.py +462 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/evaluation/__init__.py +16 -1
- ouroboros_ai-0.4.0/src/ouroboros/evaluation/consensus.py +908 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/evaluation/models.py +81 -0
- ouroboros_ai-0.4.0/src/ouroboros/events/ontology.py +135 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/__init__.py +83 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/client/__init__.py +20 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/client/adapter.py +632 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/client/manager.py +600 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/client/protocol.py +161 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/errors.py +377 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/resources/__init__.py +22 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/resources/handlers.py +328 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/server/__init__.py +21 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/server/adapter.py +408 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/server/protocol.py +291 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/server/security.py +636 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/tools/__init__.py +24 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/tools/definitions.py +351 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/tools/registry.py +269 -0
- ouroboros_ai-0.4.0/src/ouroboros/mcp/types.py +333 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/orchestrator/__init__.py +31 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/orchestrator/events.py +40 -0
- ouroboros_ai-0.4.0/src/ouroboros/orchestrator/mcp_config.py +419 -0
- ouroboros_ai-0.4.0/src/ouroboros/orchestrator/mcp_tools.py +483 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/orchestrator/runner.py +119 -2
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/providers/claude_code_adapter.py +75 -0
- ouroboros_ai-0.4.0/src/ouroboros/strategies/__init__.py +23 -0
- ouroboros_ai-0.4.0/src/ouroboros/strategies/devil_advocate.py +197 -0
- ouroboros_ai-0.4.0/tests/e2e/__init__.py +1 -0
- ouroboros_ai-0.4.0/tests/e2e/conftest.py +523 -0
- ouroboros_ai-0.4.0/tests/e2e/test_cli_commands.py +396 -0
- ouroboros_ai-0.4.0/tests/e2e/test_full_workflow.py +502 -0
- ouroboros_ai-0.4.0/tests/e2e/test_session_persistence.py +684 -0
- ouroboros_ai-0.4.0/tests/integration/mcp/__init__.py +1 -0
- ouroboros_ai-0.4.0/tests/integration/mcp/conftest.py +786 -0
- ouroboros_ai-0.4.0/tests/integration/mcp/test_client_adapter.py +529 -0
- ouroboros_ai-0.4.0/tests/integration/mcp/test_client_manager.py +659 -0
- ouroboros_ai-0.4.0/tests/integration/mcp/test_server_adapter.py +599 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/bigbang/test_interview.py +33 -25
- ouroboros_ai-0.4.0/tests/unit/bigbang/test_ontology.py +146 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/cli/test_main.py +24 -0
- ouroboros_ai-0.4.0/tests/unit/core/test_ontology_aspect.py +261 -0
- ouroboros_ai-0.4.0/tests/unit/core/test_ontology_questions.py +348 -0
- ouroboros_ai-0.4.0/tests/unit/evaluation/test_consensus.py +782 -0
- ouroboros_ai-0.4.0/tests/unit/mcp/__init__.py +1 -0
- ouroboros_ai-0.4.0/tests/unit/mcp/client/__init__.py +1 -0
- ouroboros_ai-0.4.0/tests/unit/mcp/client/test_adapter.py +110 -0
- ouroboros_ai-0.4.0/tests/unit/mcp/client/test_manager.py +157 -0
- ouroboros_ai-0.4.0/tests/unit/mcp/conftest.py +48 -0
- ouroboros_ai-0.4.0/tests/unit/mcp/server/__init__.py +1 -0
- ouroboros_ai-0.4.0/tests/unit/mcp/server/test_adapter.py +224 -0
- ouroboros_ai-0.4.0/tests/unit/mcp/server/test_security.py +279 -0
- ouroboros_ai-0.4.0/tests/unit/mcp/test_errors.py +189 -0
- ouroboros_ai-0.4.0/tests/unit/mcp/test_types.py +309 -0
- ouroboros_ai-0.4.0/tests/unit/mcp/tools/__init__.py +1 -0
- ouroboros_ai-0.4.0/tests/unit/mcp/tools/test_definitions.py +163 -0
- ouroboros_ai-0.4.0/tests/unit/mcp/tools/test_registry.py +238 -0
- ouroboros_ai-0.4.0/tests/unit/orchestrator/test_mcp_config.py +452 -0
- ouroboros_ai-0.4.0/tests/unit/orchestrator/test_mcp_tools.py +467 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/orchestrator/test_runner.py +210 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/uv.lock +25 -1
- ouroboros_ai-0.4.0/vision-draft.md +42 -0
- ouroboros_ai-0.2.3/PR-43-CODE-REVIEW-REPORT.md +0 -614
- ouroboros_ai-0.2.3/requirement/1_EXECUTIVE_SUMMARY.md +0 -167
- ouroboros_ai-0.2.3/requirement/2_FULL_SPECIFICATION.md +0 -1067
- ouroboros_ai-0.2.3/requirement/3_CONFIG_TEMPLATE.yaml +0 -344
- ouroboros_ai-0.2.3/requirement/4_REDDIT_EXAMPLE.md +0 -2108
- ouroboros_ai-0.2.3/src/ouroboros/cli/commands/run.py +0 -209
- ouroboros_ai-0.2.3/src/ouroboros/evaluation/consensus.py +0 -350
- ouroboros_ai-0.2.3/tests/unit/evaluation/test_consensus.py +0 -384
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/.gitignore +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/.pre-commit-config.yaml +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/.python-version +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/LICENSE +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/github-issue-mapping.yaml +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/sprint-status.yaml +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/0-1-project-initialization-with-uv.md +0 -0
- {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
- {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
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/0-4-configuration-and-credentials-management.md +0 -0
- {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
- {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
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/0-7-structured-logging-with-structlog.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/0-8-checkpoint-and-recovery-system.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/0-9-context-compression-engine.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/1-1-interview-protocol-engine.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/1-2-ambiguity-score-calculation.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/1-3-immutable-seed-generation.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/2-1-three-tier-model-configuration.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/2-2-complexity-based-routing.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/2-3-escalation-on-failure.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/2-4-downgrade-on-success.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/3-1-double-diamond-cycle-implementation.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/3-2-hierarchical-ac-decomposition.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/3-3-atomicity-detection.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/3-4-subagent-isolation.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/4-1-stagnation-detection-4-patterns.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/4-2-lateral-thinking-personas.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/4-3-persona-rotation-strategy.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/5-1-stage-1-mechanical-verification.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/5-2-stage-2-semantic-evaluation.md +0 -0
- {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
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/5-4-consensus-trigger-matrix.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/6-1-drift-measurement-engine.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/6-2-automatic-retrospective.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/7-1-todo-registry.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/implementation-artifacts/stories/7-2-secondary-loop-batch-processing.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/planning-artifacts/bmm-workflow-status.yaml +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/_bmad-output/update-stories.sh +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/docs/running-with-claude-code.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/project-context.md +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/__main__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/bigbang/ambiguity.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/bigbang/seed_generator.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/commands/config.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/commands/status.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/formatters/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/formatters/panels.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/formatters/progress.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/cli/formatters/tables.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/config/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/config/loader.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/config/models.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/core/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/core/ac_tree.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/core/context.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/core/errors.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/core/security.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/core/seed.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/core/types.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/evaluation/mechanical.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/evaluation/pipeline.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/evaluation/semantic.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/evaluation/trigger.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/events/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/events/base.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/events/decomposition.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/events/evaluation.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/execution/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/execution/atomicity.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/execution/decomposition.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/execution/double_diamond.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/execution/subagent.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/observability/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/observability/drift.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/observability/logging.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/observability/retrospective.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/orchestrator/adapter.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/orchestrator/session.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/checkpoint.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/event_store.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/migrations/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/migrations/runner.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/schema.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/persistence/uow.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/providers/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/providers/base.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/providers/litellm_adapter.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/py.typed +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/resilience/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/resilience/lateral.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/resilience/stagnation.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/routing/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/routing/complexity.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/routing/downgrade.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/routing/escalation.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/routing/router.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/routing/tiers.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/secondary/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/secondary/scheduler.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/src/ouroboros/secondary/todo_registry.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/conftest.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/integration/test_entry_point.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/bigbang/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/bigbang/test_ambiguity.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/bigbang/test_seed_generator.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/cli/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/cli/formatters/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/cli/formatters/test_console.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/cli/formatters/test_panels.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/cli/formatters/test_progress.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/cli/formatters/test_tables.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/config/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/config/test_loader.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/config/test_models.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/core/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/core/test_ac_tree.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/core/test_context.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/core/test_errors.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/core/test_security.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/core/test_seed.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/core/test_types.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/evaluation/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/evaluation/test_mechanical.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/evaluation/test_models.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/evaluation/test_semantic.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/evaluation/test_trigger.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/events/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/events/test_base.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/events/test_decomposition_events.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/execution/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/execution/test_atomicity.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/execution/test_decomposition.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/execution/test_double_diamond.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/execution/test_subagent_isolation.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/observability/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/observability/test_drift.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/observability/test_logging.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/observability/test_retrospective.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/orchestrator/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/orchestrator/test_adapter.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/orchestrator/test_events.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/orchestrator/test_session.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/persistence/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/persistence/test_checkpoint.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/persistence/test_event_store.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/persistence/test_schema.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/persistence/test_uow.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/providers/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/providers/test_base.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/providers/test_litellm_adapter.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/resilience/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/resilience/test_lateral.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/resilience/test_stagnation.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/routing/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/routing/test_complexity.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/routing/test_downgrade.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/routing/test_escalation.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/routing/test_router.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/routing/test_tiers.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/secondary/__init__.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/secondary/test_scheduler.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/secondary/test_todo_registry.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/test_dependencies_configured.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/test_main_entry_point.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/test_module_structure.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/test_project_initialization.py +0 -0
- {ouroboros_ai-0.2.3 → ouroboros_ai-0.4.0}/tests/unit/test_tooling_configuration.py +0 -0
- {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.
|
|
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="#-
|
|
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>
|
|
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 ($$$$) —
|
|
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,
|
|
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
|
-
|
|
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
|
|
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="#-
|
|
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>
|
|
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 ($$$$) —
|
|
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,
|
|
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
|
-
|
|
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
|
|
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
|
-
│ │ │
|
|
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
|
-
│ │
|
|
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
|
+
|