ouroboros-ai 0.1.0__tar.gz → 0.1.1__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.1.0 → ouroboros_ai-0.1.1}/PKG-INFO +27 -1
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/README.md +26 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/docs/running-with-claude-code.md +11 -3
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/pyproject.toml +1 -1
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/persistence/event_store.py +8 -1
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/orchestrator/test_adapter.py +36 -23
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/uv.lock +1 -1
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/.gitignore +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/.pre-commit-config.yaml +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/.python-version +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/LICENSE +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/PR-43-CODE-REVIEW-REPORT.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/github-issue-mapping.yaml +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/sprint-status.yaml +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/0-1-project-initialization-with-uv.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/0-2-core-types-and-error-handling.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/0-3-event-store-with-sqlalchemy-core.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/0-4-configuration-and-credentials-management.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/0-5-llm-provider-adapter-with-litellm.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/0-6-cli-skeleton-with-typer-and-rich.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/0-7-structured-logging-with-structlog.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/0-8-checkpoint-and-recovery-system.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/0-9-context-compression-engine.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/1-1-interview-protocol-engine.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/1-2-ambiguity-score-calculation.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/1-3-immutable-seed-generation.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/2-1-three-tier-model-configuration.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/2-2-complexity-based-routing.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/2-3-escalation-on-failure.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/2-4-downgrade-on-success.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/3-1-double-diamond-cycle-implementation.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/3-2-hierarchical-ac-decomposition.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/3-3-atomicity-detection.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/3-4-subagent-isolation.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/4-1-stagnation-detection-4-patterns.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/4-2-lateral-thinking-personas.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/4-3-persona-rotation-strategy.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/5-1-stage-1-mechanical-verification.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/5-2-stage-2-semantic-evaluation.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/5-3-stage-3-multi-model-consensus.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/5-4-consensus-trigger-matrix.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/6-1-drift-measurement-engine.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/6-2-automatic-retrospective.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/7-1-todo-registry.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/stories/7-2-secondary-loop-batch-processing.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/planning-artifacts/architecture.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/planning-artifacts/bmm-workflow-status.yaml +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/planning-artifacts/epics.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/update-stories.sh +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/project-context.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/requirement/1_EXECUTIVE_SUMMARY.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/requirement/2_FULL_SPECIFICATION.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/requirement/3_CONFIG_TEMPLATE.yaml +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/requirement/4_REDDIT_EXAMPLE.md +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/__main__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/bigbang/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/bigbang/ambiguity.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/bigbang/interview.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/bigbang/seed_generator.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/cli/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/cli/commands/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/cli/commands/config.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/cli/commands/init.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/cli/commands/run.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/cli/commands/status.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/cli/formatters/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/cli/formatters/panels.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/cli/formatters/progress.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/cli/formatters/tables.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/cli/main.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/config/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/config/loader.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/config/models.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/core/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/core/ac_tree.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/core/context.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/core/errors.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/core/seed.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/core/types.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/evaluation/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/evaluation/consensus.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/evaluation/mechanical.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/evaluation/models.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/evaluation/pipeline.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/evaluation/semantic.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/evaluation/trigger.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/events/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/events/base.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/events/decomposition.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/events/evaluation.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/execution/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/execution/atomicity.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/execution/decomposition.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/execution/double_diamond.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/execution/subagent.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/observability/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/observability/drift.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/observability/logging.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/observability/retrospective.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/orchestrator/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/orchestrator/adapter.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/orchestrator/events.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/orchestrator/runner.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/orchestrator/session.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/persistence/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/persistence/checkpoint.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/persistence/migrations/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/persistence/migrations/runner.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/persistence/schema.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/persistence/uow.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/providers/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/providers/base.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/providers/claude_code_adapter.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/providers/litellm_adapter.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/py.typed +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/resilience/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/resilience/lateral.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/resilience/stagnation.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/routing/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/routing/complexity.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/routing/downgrade.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/routing/escalation.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/routing/router.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/routing/tiers.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/secondary/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/secondary/scheduler.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/src/ouroboros/secondary/todo_registry.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/conftest.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/integration/test_entry_point.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/bigbang/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/bigbang/test_ambiguity.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/bigbang/test_interview.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/bigbang/test_seed_generator.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/cli/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/cli/formatters/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/cli/formatters/test_console.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/cli/formatters/test_panels.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/cli/formatters/test_progress.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/cli/formatters/test_tables.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/cli/test_main.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/config/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/config/test_loader.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/config/test_models.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/core/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/core/test_ac_tree.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/core/test_context.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/core/test_errors.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/core/test_seed.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/core/test_types.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/evaluation/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/evaluation/test_consensus.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/evaluation/test_mechanical.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/evaluation/test_models.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/evaluation/test_semantic.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/evaluation/test_trigger.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/events/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/events/test_base.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/events/test_decomposition_events.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/execution/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/execution/test_atomicity.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/execution/test_decomposition.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/execution/test_double_diamond.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/execution/test_subagent_isolation.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/observability/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/observability/test_drift.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/observability/test_logging.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/observability/test_retrospective.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/orchestrator/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/orchestrator/test_events.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/orchestrator/test_runner.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/orchestrator/test_session.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/persistence/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/persistence/test_checkpoint.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/persistence/test_event_store.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/persistence/test_schema.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/persistence/test_uow.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/providers/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/providers/test_base.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/providers/test_litellm_adapter.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/resilience/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/resilience/test_lateral.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/resilience/test_stagnation.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/routing/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/routing/test_complexity.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/routing/test_downgrade.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/routing/test_escalation.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/routing/test_router.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/routing/test_tiers.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/secondary/__init__.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/secondary/test_scheduler.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/secondary/test_todo_registry.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/test_dependencies_configured.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/test_main_entry_point.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/test_module_structure.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/test_project_initialization.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tests/unit/test_tooling_configuration.py +0 -0
- {ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/tools/sync_github_project.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ouroboros-ai
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.1
|
|
4
4
|
Summary: Self-Improving AI Workflow System
|
|
5
5
|
Author-email: Q00 <jqyu.lee@gmail.com>
|
|
6
6
|
License-File: LICENSE
|
|
@@ -415,6 +415,22 @@ not to restart, but to **re-crystallize** with new understanding.
|
|
|
415
415
|
|
|
416
416
|
<br/>
|
|
417
417
|
|
|
418
|
+
## ◈ Installation
|
|
419
|
+
|
|
420
|
+
<br/>
|
|
421
|
+
|
|
422
|
+
```bash
|
|
423
|
+
pip install ouroboros-ai
|
|
424
|
+
# or
|
|
425
|
+
uv pip install ouroboros-ai
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
<br/>
|
|
429
|
+
|
|
430
|
+
---
|
|
431
|
+
|
|
432
|
+
<br/>
|
|
433
|
+
|
|
418
434
|
## ◈ Quick Start
|
|
419
435
|
|
|
420
436
|
<br/>
|
|
@@ -423,6 +439,16 @@ not to restart, but to **re-crystallize** with new understanding.
|
|
|
423
439
|
|
|
424
440
|
No API key required — uses your Claude Code subscription directly.
|
|
425
441
|
|
|
442
|
+
```bash
|
|
443
|
+
# Begin the Big Bang (interactive interview)
|
|
444
|
+
ouroboros init start --orchestrator "I want to build a task management CLI"
|
|
445
|
+
|
|
446
|
+
# Execute via Claude Agent SDK
|
|
447
|
+
ouroboros run workflow --orchestrator seed.yaml
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
### From Source (Development)
|
|
451
|
+
|
|
426
452
|
```bash
|
|
427
453
|
# Clone
|
|
428
454
|
git clone https://github.com/Q00/ouroboros
|
|
@@ -395,6 +395,22 @@ not to restart, but to **re-crystallize** with new understanding.
|
|
|
395
395
|
|
|
396
396
|
<br/>
|
|
397
397
|
|
|
398
|
+
## ◈ Installation
|
|
399
|
+
|
|
400
|
+
<br/>
|
|
401
|
+
|
|
402
|
+
```bash
|
|
403
|
+
pip install ouroboros-ai
|
|
404
|
+
# or
|
|
405
|
+
uv pip install ouroboros-ai
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
<br/>
|
|
409
|
+
|
|
410
|
+
---
|
|
411
|
+
|
|
412
|
+
<br/>
|
|
413
|
+
|
|
398
414
|
## ◈ Quick Start
|
|
399
415
|
|
|
400
416
|
<br/>
|
|
@@ -403,6 +419,16 @@ not to restart, but to **re-crystallize** with new understanding.
|
|
|
403
419
|
|
|
404
420
|
No API key required — uses your Claude Code subscription directly.
|
|
405
421
|
|
|
422
|
+
```bash
|
|
423
|
+
# Begin the Big Bang (interactive interview)
|
|
424
|
+
ouroboros init start --orchestrator "I want to build a task management CLI"
|
|
425
|
+
|
|
426
|
+
# Execute via Claude Agent SDK
|
|
427
|
+
ouroboros run workflow --orchestrator seed.yaml
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### From Source (Development)
|
|
431
|
+
|
|
406
432
|
```bash
|
|
407
433
|
# Clone
|
|
408
434
|
git clone https://github.com/Q00/ouroboros
|
|
@@ -6,17 +6,25 @@ Ouroboros can leverage your **Claude Code Max Plan** subscription to execute wor
|
|
|
6
6
|
|
|
7
7
|
- Claude Code CLI installed and authenticated (Max Plan)
|
|
8
8
|
- Python 3.14+
|
|
9
|
-
- uv package manager
|
|
10
9
|
|
|
11
|
-
##
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
pip install ouroboros-ai
|
|
14
|
+
# or
|
|
15
|
+
uv pip install ouroboros-ai
|
|
16
|
+
```
|
|
12
17
|
|
|
13
|
-
###
|
|
18
|
+
### From Source (Development)
|
|
14
19
|
|
|
15
20
|
```bash
|
|
21
|
+
git clone https://github.com/Q00/ouroboros
|
|
16
22
|
cd ouroboros
|
|
17
23
|
uv sync
|
|
18
24
|
```
|
|
19
25
|
|
|
26
|
+
## Quick Start
|
|
27
|
+
|
|
20
28
|
### 2. Check System Health
|
|
21
29
|
|
|
22
30
|
```bash
|
|
@@ -5,6 +5,8 @@ with aiosqlite backend.
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
8
10
|
from sqlalchemy import select
|
|
9
11
|
from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine
|
|
10
12
|
|
|
@@ -33,13 +35,18 @@ class EventStore:
|
|
|
33
35
|
await store.close()
|
|
34
36
|
"""
|
|
35
37
|
|
|
36
|
-
def __init__(self, database_url: str) -> None:
|
|
38
|
+
def __init__(self, database_url: str | None = None) -> None:
|
|
37
39
|
"""Initialize EventStore with database URL.
|
|
38
40
|
|
|
39
41
|
Args:
|
|
40
42
|
database_url: SQLAlchemy database URL.
|
|
43
|
+
If not provided, defaults to ~/.ouroboros/events.db
|
|
41
44
|
For async SQLite: "sqlite+aiosqlite:///path/to/db.sqlite"
|
|
42
45
|
"""
|
|
46
|
+
if database_url is None:
|
|
47
|
+
db_path = Path.home() / ".ouroboros" / "events.db"
|
|
48
|
+
db_path.parent.mkdir(parents=True, exist_ok=True)
|
|
49
|
+
database_url = f"sqlite+aiosqlite:///{db_path}"
|
|
43
50
|
self._database_url = database_url
|
|
44
51
|
self._engine: AsyncEngine | None = None
|
|
45
52
|
|
|
@@ -15,6 +15,16 @@ from ouroboros.orchestrator.adapter import (
|
|
|
15
15
|
)
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
# Helper function to create mock SDK messages with correct class names
|
|
19
|
+
def _create_mock_sdk_message(class_name: str, **attrs: Any) -> Any:
|
|
20
|
+
"""Create a mock object with a specific class name for SDK message testing."""
|
|
21
|
+
mock_class = type(class_name, (), {})
|
|
22
|
+
instance = mock_class()
|
|
23
|
+
for key, value in attrs.items():
|
|
24
|
+
setattr(instance, key, value)
|
|
25
|
+
return instance
|
|
26
|
+
|
|
27
|
+
|
|
18
28
|
class TestAgentMessage:
|
|
19
29
|
"""Tests for AgentMessage dataclass."""
|
|
20
30
|
|
|
@@ -123,14 +133,14 @@ class TestClaudeAgentAdapter:
|
|
|
123
133
|
"""Test converting SDK assistant message."""
|
|
124
134
|
adapter = ClaudeAgentAdapter(api_key="test")
|
|
125
135
|
|
|
126
|
-
#
|
|
127
|
-
mock_block =
|
|
128
|
-
mock_block.text = "I am analyzing the code."
|
|
136
|
+
# Create mock block with correct class name
|
|
137
|
+
mock_block = _create_mock_sdk_message("TextBlock", text="I am analyzing the code.")
|
|
129
138
|
|
|
130
|
-
|
|
131
|
-
mock_message
|
|
132
|
-
|
|
133
|
-
|
|
139
|
+
# Create mock message with correct class name
|
|
140
|
+
mock_message = _create_mock_sdk_message(
|
|
141
|
+
"AssistantMessage",
|
|
142
|
+
content=[mock_block],
|
|
143
|
+
)
|
|
134
144
|
|
|
135
145
|
result = adapter._convert_message(mock_message)
|
|
136
146
|
|
|
@@ -141,15 +151,14 @@ class TestClaudeAgentAdapter:
|
|
|
141
151
|
"""Test converting SDK tool call message."""
|
|
142
152
|
adapter = ClaudeAgentAdapter(api_key="test")
|
|
143
153
|
|
|
144
|
-
#
|
|
145
|
-
mock_block =
|
|
146
|
-
mock_block.name = "Edit"
|
|
147
|
-
del mock_block.text # Remove text attribute
|
|
154
|
+
# Create mock block with correct class name (ToolUseBlock)
|
|
155
|
+
mock_block = _create_mock_sdk_message("ToolUseBlock", name="Edit")
|
|
148
156
|
|
|
149
|
-
|
|
150
|
-
mock_message
|
|
151
|
-
|
|
152
|
-
|
|
157
|
+
# Create mock message with correct class name
|
|
158
|
+
mock_message = _create_mock_sdk_message(
|
|
159
|
+
"AssistantMessage",
|
|
160
|
+
content=[mock_block],
|
|
161
|
+
)
|
|
153
162
|
|
|
154
163
|
result = adapter._convert_message(mock_message)
|
|
155
164
|
|
|
@@ -161,10 +170,12 @@ class TestClaudeAgentAdapter:
|
|
|
161
170
|
"""Test converting SDK result message."""
|
|
162
171
|
adapter = ClaudeAgentAdapter(api_key="test")
|
|
163
172
|
|
|
164
|
-
|
|
165
|
-
mock_message
|
|
166
|
-
|
|
167
|
-
|
|
173
|
+
# Create mock message with correct class name
|
|
174
|
+
mock_message = _create_mock_sdk_message(
|
|
175
|
+
"ResultMessage",
|
|
176
|
+
result="Task completed",
|
|
177
|
+
subtype="success",
|
|
178
|
+
)
|
|
168
179
|
|
|
169
180
|
result = adapter._convert_message(mock_message)
|
|
170
181
|
|
|
@@ -176,10 +187,12 @@ class TestClaudeAgentAdapter:
|
|
|
176
187
|
"""Test converting SDK system init message."""
|
|
177
188
|
adapter = ClaudeAgentAdapter(api_key="test")
|
|
178
189
|
|
|
179
|
-
|
|
180
|
-
mock_message
|
|
181
|
-
|
|
182
|
-
|
|
190
|
+
# Create mock message with correct class name
|
|
191
|
+
mock_message = _create_mock_sdk_message(
|
|
192
|
+
"SystemMessage",
|
|
193
|
+
subtype="init",
|
|
194
|
+
data={"session_id": "sess_abc123"},
|
|
195
|
+
)
|
|
183
196
|
|
|
184
197
|
result = adapter._convert_message(mock_message)
|
|
185
198
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/implementation-artifacts/sprint-status.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ouroboros_ai-0.1.0 → ouroboros_ai-0.1.1}/_bmad-output/planning-artifacts/bmm-workflow-status.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|