ouroboros-ai 0.27.1.dev10__tar.gz → 0.27.2.dev2__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.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.claude-plugin/marketplace.json +1 -1
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.claude-plugin/plugin.json +1 -1
- ouroboros_ai-0.27.2.dev2/.ouroboros/seeds/seed_73827177a2a3.yaml +125 -0
- ouroboros_ai-0.27.2.dev2/.ouroboros/seeds/seed_78c8e6e41813.yaml +159 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/PKG-INFO +9 -16
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/README.ko.md +2 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/README.md +2 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/cli-reference.md +4 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/getting-started.md +3 -2
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/pyproject.toml +4 -15
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/run/SKILL.md +34 -25
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/setup/SKILL.md +1 -1
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/_version.py +2 -2
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/tui.py +1 -1
- ouroboros_ai-0.27.2.dev2/src/ouroboros/cli/formatters/prompting.py +68 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/config/loader.py +43 -5
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/errors.py +28 -0
- ouroboros_ai-0.27.2.dev2/src/ouroboros/core/file_lock.py +55 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/lineage.py +63 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/ontology_aspect.py +1 -2
- ouroboros_ai-0.27.2.dev2/src/ouroboros/core/retry.py +51 -0
- ouroboros_ai-0.27.2.dev2/src/ouroboros/core/ttl_cache.py +76 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/events/lineage.py +3 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evolution/loop.py +10 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evolution/projector.py +1 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evolution/reflect.py +15 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evolution/wonder.py +15 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/client/adapter.py +5 -5
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/server/adapter.py +36 -1
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/__init__.py +4 -0
- ouroboros_ai-0.27.2.dev2/src/ouroboros/mcp/tools/ac_tree_hud_handler.py +1087 -0
- ouroboros_ai-0.27.2.dev2/src/ouroboros/mcp/tools/ac_tree_hud_render.py +289 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/definitions.py +8 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/evaluation_handlers.py +30 -2
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/execution_handlers.py +4 -3
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/adapter.py +30 -0
- ouroboros_ai-0.27.2.dev2/src/ouroboros/orchestrator/capabilities.py +387 -0
- ouroboros_ai-0.27.2.dev2/src/ouroboros/orchestrator/control_plane.py +110 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/coordinator.py +24 -6
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/mcp_tools.py +4 -5
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/parallel_executor.py +235 -182
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/parallel_executor_models.py +3 -0
- ouroboros_ai-0.27.2.dev2/src/ouroboros/orchestrator/policy.py +161 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/runner.py +44 -2
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/runtime_message_projection.py +12 -1
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/claude_code_adapter.py +110 -51
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/litellm_adapter.py +4 -7
- ouroboros_ai-0.27.2.dev2/tests/unit/cli/commands/test_tui_command.py +29 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/cli/formatters/test_prompting.py +32 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_run_qa.py +1 -1
- ouroboros_ai-0.27.2.dev2/tests/unit/config/test_loader_env.py +36 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/core/test_file_lock.py +17 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_lineage.py +92 -1
- ouroboros_ai-0.27.2.dev2/tests/unit/core/test_retry.py +47 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/core/test_ttl_cache.py +37 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evolution/test_wonder_scope.py +35 -1
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/server/test_adapter.py +23 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_footer.py +92 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_handler.py +856 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_handler_completed.py +95 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_handler_cursor_changed.py +113 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_handler_invalid_session.py +43 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_handler_no_execution.py +58 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_handler_waiting.py +61 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_max_nodes.py +130 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_render_depth2.py +49 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_render_depth3.py +120 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_status_icons.py +166 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/mcp/tools/test_ac_tree_hud_truncation.py +51 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_definitions.py +70 -2
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_adapter.py +5 -5
- ouroboros_ai-0.27.2.dev2/tests/unit/orchestrator/test_capabilities.py +47 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_codex_cli_runtime.py +4 -2
- ouroboros_ai-0.27.2.dev2/tests/unit/orchestrator/test_control_plane.py +35 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_coordinator.py +5 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_parallel_executor.py +374 -13
- ouroboros_ai-0.27.2.dev2/tests/unit/orchestrator/test_parallel_executor_atomic_judgment.py +102 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/orchestrator/test_parallel_executor_recursive_depth.py +106 -0
- ouroboros_ai-0.27.2.dev2/tests/unit/orchestrator/test_policy.py +44 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_runner.py +3 -1
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_runtime_factory.py +3 -3
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_runtime_message_projection.py +8 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/providers/test_claude_code_adapter.py +278 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/providers/test_factory.py +4 -4
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/providers/test_litellm_adapter.py +1 -1
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_dependencies_configured.py +2 -2
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_evolve_step.py +129 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_projector_rewind.py +44 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/uv.lock +17 -526
- ouroboros_ai-0.27.1.dev10/src/ouroboros/cli/formatters/prompting.py +0 -38
- ouroboros_ai-0.27.1.dev10/src/ouroboros/core/file_lock.py +0 -43
- ouroboros_ai-0.27.1.dev10/tests/unit/cli/formatters/test_prompting.py +0 -45
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.claude/settings.json +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.claude-plugin/.mcp.json +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.env.example +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/ISSUE_TEMPLATE/question.yml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/workflows/dev-publish.yml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/workflows/lint.yml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/workflows/release.yml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.github/workflows/test.yml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.gitignore +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.mcp.json +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.ouroboros/mechanical.toml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.pre-commit-config.yaml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/.python-version +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/CHANGELOG.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/CLAUDE.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/CODE_OF_CONDUCT.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/CONTRIBUTING.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/HANDOFF.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/LICENSE +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/SECURITY.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/UNINSTALL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/cancel.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/evaluate.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/evolve.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/help.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/interview.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/ralph.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/run.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/seed.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/setup.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/status.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/tutorial.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/unstuck.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/commands/welcome.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/.gitignore +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/Cargo.lock +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/Cargo.toml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/README.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/db.rs +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/main.rs +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/mock.rs +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/state.rs +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/views/dashboard.rs +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/views/execution.rs +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/views/lineage.rs +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/views/logs.rs +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/views/mod.rs +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/crates/ouroboros-tui/src/views/session_selector.rs +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/README.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/api/README.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/api/core.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/api/mcp.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/architecture.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/config-reference.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/contributing/architecture-overview.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/contributing/findings-registry.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/contributing/issue-quality-policy.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/contributing/key-patterns.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/contributing/testing-guide.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/examples/mcp-config.yaml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/guides/evaluation-pipeline.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/guides/evolution-loop.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/guides/issue-176-subagent-mcp-inheritance.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/guides/mcp-bridge.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/guides/seed-authoring.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/guides/tui-usage.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/images/PLACEHOLDER_README.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/images/ouroboros.png +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/platform-support.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/runtime-capability-matrix.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/runtime-guides/claude-code.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/docs/runtime-guides/codex.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/coordinator_test_seed.yaml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/dummy_seed.yaml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/parallel_subac_test_seed.yaml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/subac_test_seed.yaml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/task_manager/README.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/task_manager/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/task_manager/__main__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/task_manager/cli.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/task_manager/models.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/task_manager/storage.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/examples/test_display.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/hooks/hooks.json +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/llms-full.txt +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/llms.txt +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/project-context.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/drift-monitor.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/install.sh +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/keyword-detector.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/mcp-serve.sh +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/ralph-rewind.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/ralph.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/ralph.sh +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/session-start.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/sync-plugin-version.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/scripts/version-check.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/brownfield/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/cancel/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/evaluate/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/evolve/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/help/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/interview/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/pm/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/publish/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/qa/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/ralph/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/seed/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/status/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/tutorial/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/unstuck/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/update/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/skills/welcome/SKILL.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/__main__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/advocate.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/analysis-agent.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/architect.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/breadth-keeper.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/code-executor.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/codebase-explorer.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/consensus-reviewer.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/contrarian.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/evaluator.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/hacker.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/judge.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/loader.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/ontologist.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/ontology-analyst.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/qa-judge.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/research-agent.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/researcher.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/seed-architect.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/seed-closer.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/semantic-evaluator.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/simplifier.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/agents/socratic-interviewer.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/ambiguity.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/brownfield.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/explore.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/interview.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/pm_completion.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/pm_document.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/pm_interview.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/pm_seed.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/question_classifier.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/bigbang/seed_generator.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/cancel.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/config.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/init.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/mcp.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/pm.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/run.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/setup.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/status.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/commands/uninstall.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/formatters/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/formatters/panels.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/formatters/progress.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/formatters/tables.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/formatters/workflow_display.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/cli/main.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/codex/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/codex/artifacts.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/codex/ouroboros.md +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/codex_permissions.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/config/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/config/models.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/ac_tree.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/context.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/git_workflow.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/initial_context.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/json_utils.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/ontology_questions.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/project_paths.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/security.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/seed.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/text.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/types.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/core/worktree.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/artifact_collector.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/consensus.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/json_utils.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/languages.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/mechanical.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/models.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/pipeline.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/semantic.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/trigger.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evaluation/verification_artifacts.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/events/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/events/base.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/events/decomposition.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/events/evaluation.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/events/interview.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/events/ontology.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evolution/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evolution/convergence.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/evolution/regression.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/execution/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/execution/atomicity.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/execution/decomposition.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/execution/double_diamond.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/execution/subagent.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/bridge/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/bridge/bridge.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/bridge/config.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/bridge/factory.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/client/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/client/manager.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/client/protocol.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/errors.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/job_manager.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/resources/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/resources/handlers.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/server/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/server/protocol.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/server/security.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/authoring_handlers.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/bridge_mixin.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/brownfield_handler.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/dashboard.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/evolution_handlers.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/job_handlers.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/pm_handler.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/qa.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/query_handlers.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/tools/registry.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/mcp/types.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/observability/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/observability/drift.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/observability/logging.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/observability/retrospective.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/codex_cli_runtime.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/command_dispatcher.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/dependency_analyzer.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/events.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/execution_runtime_scope.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/execution_strategy.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/heartbeat.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/level_context.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/mcp_config.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/runtime_factory.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/session.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/orchestrator/workflow_state.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/brownfield.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/checkpoint.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/event_store.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/migrations/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/migrations/runner.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/migrations/scripts/002_brownfield.sql +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/schema.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/persistence/uow.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/agents/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/agents/pool.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/agents/registry.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/orchestration/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/orchestration/router.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/orchestration/scheduler.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/skills/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/skills/docs.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/skills/executor.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/skills/keywords.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/plugin/skills/registry.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/pm/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/pm/handoff.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/pm/renderer.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/anthropic_adapter.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/base.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/codex_cli_adapter.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/codex_cli_stream.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/factory.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/providers/gemini_cli_adapter.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/py.typed +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/resilience/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/resilience/lateral.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/resilience/stagnation.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/routing/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/routing/complexity.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/routing/downgrade.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/routing/escalation.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/routing/router.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/routing/tiers.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/secondary/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/secondary/scheduler.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/secondary/todo_registry.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/strategies/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/strategies/devil_advocate.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/app.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/components/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/components/agents_panel.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/components/event_log.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/components/progress.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/components/token_tracker.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/events.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/confirm_rewind.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/dashboard.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/dashboard_v2.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/dashboard_v3.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/debug.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/execution.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/hud_dashboard.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/lineage_detail.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/lineage_selector.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/logs.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/screens/session_selector.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/ac_progress.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/ac_tree.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/agent_activity.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/cost_tracker.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/drift_meter.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/lineage_tree.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/parallel_graph.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/tui/widgets/phase_progress.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/verification/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/verification/extractor.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/verification/models.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/src/ouroboros/verification/verifier.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/conftest.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/e2e/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/e2e/conftest.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/e2e/mcp_bridge_test_config.yaml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/e2e/test_cli_commands.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/e2e/test_full_workflow.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/e2e/test_session_persistence.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/fixtures/test_atomicity_seed.yml +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/conftest.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/mcp/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/mcp/bridge/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/mcp/bridge/test_bridge_server_to_server.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/mcp/conftest.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/mcp/test_client_adapter.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/mcp/test_client_manager.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/mcp/test_server_adapter.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/plugin/test_orchestration.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/test_codex_cli_passthrough_smoke.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/test_codex_skill_fallback.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/test_codex_skill_smoke.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/integration/test_entry_point.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/agents/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/agents/test_loader.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_ambiguity.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_brownfield.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_classifier_context.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_decide_later_items.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_explore.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_interview.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_interview_async_io.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_interview_no_web_search_hint.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_interview_research_prefix.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_pm_completion.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_pm_document_generator.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_pm_document_writer.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_pm_interview.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_pm_interview_brownfield_db.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_pm_seed_ac12.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_pm_seed_save.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_question_classifier.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/bigbang/test_seed_generator.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/formatters/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/formatters/test_console.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/formatters/test_panels.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/formatters/test_progress.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/formatters/test_tables.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/formatters/test_workflow_display.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_cancel.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_config.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_init_pm_seed_detection.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_init_runtime.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_main.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_mcp_nested_guard.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_mcp_startup_cleanup.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm_brownfield.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm_completion.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm_interactive_logging.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm_missing_litellm.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm_overwrite.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm_runtime_adapter.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_pm_select_repos.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_setup.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/cli/test_uninstall.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/config/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/config/test_loader.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/config/test_models.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_ac_tree.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_context.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_errors.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_git_workflow.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_initial_context.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_ontology_aspect.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_ontology_questions.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_security.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_seed.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_types.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/core/test_worktree.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_artifact_collector_file_prefix.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_consensus.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_json_utils.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_languages.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_mechanical.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_models.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_pipeline_trigger_consensus.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_review_fixes.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_semantic.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_trigger.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_trigger_consensus.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/evaluation/test_verification_artifacts.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/events/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/events/test_base.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/events/test_decomposition_events.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/execution/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/execution/test_atomicity.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/execution/test_decomposition.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/execution/test_double_diamond.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/execution/test_subagent_isolation.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/bridge/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/bridge/test_bridge.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/bridge/test_config.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/bridge/test_factory.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/bridge/test_handler_wiring.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/bridge/test_stability.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/client/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/client/test_adapter.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/client/test_adapter_transport_lifecycle.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/client/test_manager.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/conftest.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/server/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/server/test_security.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/test_errors.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/test_job_manager.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/test_types.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/conftest.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_brownfield_handler.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_evaluation_handler.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_interview_parallel_scoring.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_interview_scoring_guard.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_mcp_manager_wiring.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_pm_handler.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_pm_handler_generate.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_pm_handler_pending_reframe.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_qa_integration.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_qa_parser.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_registry.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/mcp/tools/test_traceback_reporting.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/observability/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/observability/test_drift.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/observability/test_logging.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/observability/test_retrospective.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_codex_recursion_guard.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_command_dispatcher.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_dependency_analyzer.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_events.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_execution_runtime_scope.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_execution_strategy.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_inflight_cancellation.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_level_context.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_mcp_config.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_mcp_tools.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_parallel_executor_retry_resume.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_runner_cancellation.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_session.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/orchestrator/test_workflow_state.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/persistence/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/persistence/test_brownfield_store.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/persistence/test_checkpoint.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/persistence/test_event_store.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/persistence/test_schema.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/persistence/test_uow.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/agents/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/agents/test_registry.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/orchestration/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/orchestration/test_model_router.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/skills/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/skills/test_keywords.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/plugin/skills/test_registry.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/pm/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/pm/test_renderer.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/providers/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/providers/test_base.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/providers/test_codex_cli_adapter.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/providers/test_gemini_cli_adapter.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/resilience/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/resilience/test_lateral.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/resilience/test_stagnation.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/routing/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/routing/test_complexity.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/routing/test_downgrade.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/routing/test_escalation.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/routing/test_router.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/routing/test_tiers.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/scripts/test_keyword_detector.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/scripts/test_version_check.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/secondary/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/secondary/test_scheduler.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/secondary/test_todo_registry.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_artifact_collector.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_codex_artifacts.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_convergence.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_dashboard.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_evolve_rewind.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_graceful_shutdown.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_main_entry_point.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_module_structure.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_project_initialization.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_ralph_parser.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_ralph_rewind.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_regression.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_tooling_configuration.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/test_verification.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/__init__.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/test_app.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/test_cancelled_display.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/test_events.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/test_lineage_viewer.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/test_screens.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/test_session_selector_replay.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tests/unit/tui/test_widgets.py +0 -0
- {ouroboros_ai-0.27.1.dev10 → ouroboros_ai-0.27.2.dev2}/tools/sync_github_project.py +0 -0
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
{
|
|
11
11
|
"name": "ouroboros",
|
|
12
12
|
"description": "Transform vague ideas into validated seed specifications through Socratic questioning and ontological analysis",
|
|
13
|
-
"version": "0.27.
|
|
13
|
+
"version": "0.27.1",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "Q00",
|
|
16
16
|
"email": "jqyu.lee@gmail.com"
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
goal: Refactor parallel_executor.py AC tree execution to support recursive decomposition
|
|
2
|
+
by making _execute_single_ac the sole recursive entry point, eliminating _execute_sub_acs,
|
|
3
|
+
scoping stall retry to atomic execution only, and adding decomposition depth warning
|
|
4
|
+
as evolutionary loop feedback canary
|
|
5
|
+
task_type: code
|
|
6
|
+
brownfield_context:
|
|
7
|
+
project_type: brownfield
|
|
8
|
+
context_references:
|
|
9
|
+
- path: parallel_executor.py
|
|
10
|
+
role: primary
|
|
11
|
+
summary: Contains _execute_sub_acs, _execute_single_ac, _execute_ac, _execute_atomic_ac
|
|
12
|
+
— the core execution methods being refactored
|
|
13
|
+
existing_patterns:
|
|
14
|
+
- anyio task groups for parallel AC execution
|
|
15
|
+
- _execute_single_ac as entry point for individual AC execution
|
|
16
|
+
- _execute_atomic_ac for leaf node execution
|
|
17
|
+
- ACExecutionResult as the result container
|
|
18
|
+
- Claude ATOMIC/COMPOSITE judgment for decomposition decisions
|
|
19
|
+
- Stall retry logic for atomic execution recovery
|
|
20
|
+
- EventStore-based event flow for state propagation
|
|
21
|
+
existing_dependencies:
|
|
22
|
+
- claude_agent_sdk
|
|
23
|
+
- anyio
|
|
24
|
+
- textual
|
|
25
|
+
constraints:
|
|
26
|
+
- Python >= 3.14
|
|
27
|
+
- Uses Claude Agent SDK
|
|
28
|
+
- Uses anyio task groups for parallel execution
|
|
29
|
+
- Maximum recursion depth is 3 (soft safety net, not hard stop)
|
|
30
|
+
- Claude's ATOMIC judgment is the real recursion termination condition
|
|
31
|
+
- Must preserve existing parallel execution semantics
|
|
32
|
+
- No new external dependencies
|
|
33
|
+
acceptance_criteria:
|
|
34
|
+
- _execute_single_ac is the sole recursive entry point handling both atomic and composite
|
|
35
|
+
ACs
|
|
36
|
+
- _execute_sub_acs is eliminated and its loop is inlined into _execute_ac
|
|
37
|
+
- Children ACs are dispatched via _execute_single_ac recursion
|
|
38
|
+
- Stall retry logic wraps only atomic execution at leaf nodes, not recursive dispatch
|
|
39
|
+
- At depth >= 3 execution is forced atomic with no further decomposition
|
|
40
|
+
- decomposition_depth_warning flag is set on ACExecutionResult when depth limit is
|
|
41
|
+
reached
|
|
42
|
+
- Depth warning flows through Evaluate stage to evolutionary loop as seed quality
|
|
43
|
+
feedback
|
|
44
|
+
- Recursive decomposition works beyond depth 1 up to depth limit
|
|
45
|
+
- ATOMIC judgment from Claude still terminates recursion at any depth
|
|
46
|
+
ontology_schema:
|
|
47
|
+
name: ACRecursiveExecution
|
|
48
|
+
description: Domain model for recursive acceptance criteria tree execution with
|
|
49
|
+
depth-aware decomposition and evolutionary feedback
|
|
50
|
+
fields:
|
|
51
|
+
- name: ac_id
|
|
52
|
+
type: string
|
|
53
|
+
description: Unique identifier for an acceptance criterion node
|
|
54
|
+
required: true
|
|
55
|
+
- name: ac_type
|
|
56
|
+
type: string
|
|
57
|
+
description: Whether AC is ATOMIC or COMPOSITE as judged by Claude
|
|
58
|
+
required: true
|
|
59
|
+
- name: execution_depth
|
|
60
|
+
type: number
|
|
61
|
+
description: Current recursion depth of this AC in the decomposition tree
|
|
62
|
+
required: true
|
|
63
|
+
- name: max_depth
|
|
64
|
+
type: number
|
|
65
|
+
description: Maximum allowed recursion depth before forcing atomic execution
|
|
66
|
+
required: true
|
|
67
|
+
- name: decomposition_depth_warning
|
|
68
|
+
type: boolean
|
|
69
|
+
description: Flag indicating depth limit was reached and atomic was forced
|
|
70
|
+
required: true
|
|
71
|
+
- name: children_ids
|
|
72
|
+
type: array
|
|
73
|
+
description: List of child AC IDs produced by decomposition
|
|
74
|
+
required: true
|
|
75
|
+
- name: execution_result
|
|
76
|
+
type: object
|
|
77
|
+
description: The ACExecutionResult containing output and metadata
|
|
78
|
+
required: true
|
|
79
|
+
- name: stall_retry_count
|
|
80
|
+
type: number
|
|
81
|
+
description: Number of stall retries attempted for atomic execution
|
|
82
|
+
required: true
|
|
83
|
+
- name: is_forced_atomic
|
|
84
|
+
type: boolean
|
|
85
|
+
description: Whether this AC was forced atomic due to depth limit rather than
|
|
86
|
+
Claude judgment
|
|
87
|
+
required: true
|
|
88
|
+
evaluation_principles:
|
|
89
|
+
- name: single_entry_point
|
|
90
|
+
description: _execute_single_ac is the only method that recurses into AC execution,
|
|
91
|
+
no alternate paths exist
|
|
92
|
+
weight: 0.3
|
|
93
|
+
- name: sub_acs_eliminated
|
|
94
|
+
description: _execute_sub_acs function is completely removed and its logic inlined
|
|
95
|
+
into _execute_ac
|
|
96
|
+
weight: 0.2
|
|
97
|
+
- name: stall_retry_scoping
|
|
98
|
+
description: Stall retry logic wraps only atomic leaf execution, never recursive
|
|
99
|
+
composite dispatch
|
|
100
|
+
weight: 0.2
|
|
101
|
+
- name: depth_canary_correctness
|
|
102
|
+
description: At depth >= 3 execution forces atomic and sets decomposition_depth_warning
|
|
103
|
+
on ACExecutionResult
|
|
104
|
+
weight: 0.2
|
|
105
|
+
- name: behavioral_preservation
|
|
106
|
+
description: Existing parallel execution behavior via anyio task groups is preserved
|
|
107
|
+
for non-depth-limited cases
|
|
108
|
+
weight: 0.1
|
|
109
|
+
exit_conditions:
|
|
110
|
+
- name: all_criteria_met
|
|
111
|
+
description: All four refactoring goals are implemented and passing
|
|
112
|
+
criteria: All acceptance criteria evaluate as satisfied
|
|
113
|
+
- name: recursive_depth_works
|
|
114
|
+
description: Recursive decomposition demonstrably works beyond depth 1
|
|
115
|
+
criteria: AC tree can recurse to depth 2 without forced atomic
|
|
116
|
+
- name: canary_signal_flows
|
|
117
|
+
description: Depth warning propagates to evaluation
|
|
118
|
+
criteria: decomposition_depth_warning is set and accessible in Evaluate stage
|
|
119
|
+
metadata:
|
|
120
|
+
seed_id: seed_73827177a2a3
|
|
121
|
+
version: 1.0.0
|
|
122
|
+
created_at: '2026-04-04T16:54:00.213513Z'
|
|
123
|
+
ambiguity_score: 0.1225
|
|
124
|
+
interview_id: interview_20260404_165002
|
|
125
|
+
parent_seed_id: null
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
goal: Build ouroboros_ac_tree_hud MCP tool that returns a render-ready, cursor-based
|
|
2
|
+
AC tree snapshot as compact markdown for live execution monitoring, supporting recursive
|
|
3
|
+
depth up to 3 levels, delta rendering (one-liner when unchanged), and graceful error
|
|
4
|
+
handling, replacing verbose job_wait polling for Codex/Claude Code environments
|
|
5
|
+
without TUI.
|
|
6
|
+
task_type: code
|
|
7
|
+
brownfield_context:
|
|
8
|
+
project_type: brownfield
|
|
9
|
+
context_references:
|
|
10
|
+
- path: src/ouroboros/events.py
|
|
11
|
+
role: primary
|
|
12
|
+
summary: EventStore with get_events_after pattern using last_row_id cursor, TUIState
|
|
13
|
+
dataclass, workflow.progress.updated event definitions
|
|
14
|
+
- path: src/ouroboros/app.py
|
|
15
|
+
role: reference
|
|
16
|
+
summary: Main app owning _state.ac_tree as SSOT, _merge_ac_progress for AC tree
|
|
17
|
+
state management
|
|
18
|
+
- path: src/ouroboros/tui/screens/dashboard_v3.py
|
|
19
|
+
role: reference
|
|
20
|
+
summary: Existing AC tree rendering logic in TUI with SelectableACTree widget
|
|
21
|
+
for visual reference
|
|
22
|
+
- path: src/ouroboros/workflow_state_tracker.py
|
|
23
|
+
role: reference
|
|
24
|
+
summary: Computes messages_count, tool_calls_count, estimated_tokens, estimated_cost_usd,
|
|
25
|
+
elapsed_display metrics emitted with progress events
|
|
26
|
+
existing_patterns:
|
|
27
|
+
- EventStore row ID cursor pattern from job_wait (get_events_after with last_row_id)
|
|
28
|
+
- workflow.progress.updated events carry full AC data including metrics
|
|
29
|
+
- _merge_ac_progress preserves children_ids when updating status
|
|
30
|
+
- AC tree owned as SSOT in app state
|
|
31
|
+
- MCP tool pattern for Codex/Claude Code integration
|
|
32
|
+
existing_dependencies:
|
|
33
|
+
- EventStore
|
|
34
|
+
- WorkflowStateTracker
|
|
35
|
+
- workflow.progress.updated event payload
|
|
36
|
+
- Existing AC tree data structures with recursive children_ids
|
|
37
|
+
constraints:
|
|
38
|
+
- Python 3.14+ with uv run
|
|
39
|
+
- Must integrate with existing EventStore and workflow.progress.updated events
|
|
40
|
+
- Cursor is EventStore row ID integer, consistent with existing job_wait cursor semantics
|
|
41
|
+
- Depth visualization up to 3 levels (matches MAX_DECOMPOSITION_DEPTH), collapse deeper
|
|
42
|
+
with "... (+N sub-tasks)"
|
|
43
|
+
- Footer metrics are best-effort decorations, omit missing/zero fields rather than
|
|
44
|
+
showing N/A
|
|
45
|
+
- Error cases return graceful markdown, not structured errors
|
|
46
|
+
- No TUI dependency — pure markdown string output
|
|
47
|
+
- max_nodes default 50 as hard cap
|
|
48
|
+
- Must not regress existing tests
|
|
49
|
+
acceptance_criteria:
|
|
50
|
+
- AC tree renders correctly for depth 1 trees
|
|
51
|
+
- AC tree renders correctly for depth 2 trees
|
|
52
|
+
- AC tree renders correctly for depth 3 trees
|
|
53
|
+
- Cursor returns delta one-liner when no new workflow.progress.updated events since
|
|
54
|
+
cursor row ID
|
|
55
|
+
- Full render returned when state has changed since cursor
|
|
56
|
+
- Truncation shows all ACs when total <= 12
|
|
57
|
+
- Truncation shows executing AC ± 2 neighbors + first + last + ellipsis when total
|
|
58
|
+
> 12
|
|
59
|
+
- max_nodes param caps output for pathological cases and is caller-overridable
|
|
60
|
+
- Invalid session_id returns graceful markdown warning
|
|
61
|
+
- No execution linked returns graceful markdown warning
|
|
62
|
+
- No AC tree yet returns waiting message
|
|
63
|
+
- Completed session shows final tree with all statuses and completion footer
|
|
64
|
+
- Footer line includes elapsed time, message count, tool call count, and cost from
|
|
65
|
+
workflow.progress.updated payload
|
|
66
|
+
- 'Status icons render correctly: done, executing, pending, failed'
|
|
67
|
+
- Current tool activity shown inline for executing ACs
|
|
68
|
+
- Run skill can use this tool instead of verbose job_wait polling
|
|
69
|
+
ontology_schema:
|
|
70
|
+
name: ACTreeHUD
|
|
71
|
+
description: Domain model for a cursor-based acceptance criteria tree HUD that renders
|
|
72
|
+
compact markdown snapshots of workflow execution progress
|
|
73
|
+
fields:
|
|
74
|
+
- name: session_id
|
|
75
|
+
type: string
|
|
76
|
+
description: Session identifier for the execution being monitored
|
|
77
|
+
required: true
|
|
78
|
+
- name: cursor
|
|
79
|
+
type: number
|
|
80
|
+
description: EventStore row ID integer, 0 or omitted for first call, returned
|
|
81
|
+
by tool for subsequent calls
|
|
82
|
+
required: true
|
|
83
|
+
- name: max_nodes
|
|
84
|
+
type: number
|
|
85
|
+
description: Hard cap on rendered tree nodes, default 50, caller-overridable
|
|
86
|
+
required: true
|
|
87
|
+
- name: ac_id
|
|
88
|
+
type: string
|
|
89
|
+
description: Unique identifier for an acceptance criterion node
|
|
90
|
+
required: true
|
|
91
|
+
- name: ac_label
|
|
92
|
+
type: string
|
|
93
|
+
description: Human-readable label for the AC
|
|
94
|
+
required: true
|
|
95
|
+
- name: ac_status
|
|
96
|
+
type: string
|
|
97
|
+
description: One of done, executing, pending, failed
|
|
98
|
+
required: true
|
|
99
|
+
- name: ac_depth
|
|
100
|
+
type: number
|
|
101
|
+
description: Nesting depth of the AC node in the tree (1-3+)
|
|
102
|
+
required: true
|
|
103
|
+
- name: children_ids
|
|
104
|
+
type: array
|
|
105
|
+
description: Ordered list of child AC IDs for recursive decomposition
|
|
106
|
+
required: true
|
|
107
|
+
- name: render_mode
|
|
108
|
+
type: string
|
|
109
|
+
description: Either full (tree changed) or delta (one-liner, unchanged)
|
|
110
|
+
required: true
|
|
111
|
+
evaluation_principles:
|
|
112
|
+
- name: visual_correctness
|
|
113
|
+
description: Rendered markdown matches the specified format with correct icons,
|
|
114
|
+
tree prefixes, indentation, and inline tool activity
|
|
115
|
+
weight: 0.25
|
|
116
|
+
- name: cursor_semantics
|
|
117
|
+
description: Cursor-based delta detection correctly distinguishes changed vs unchanged
|
|
118
|
+
state using EventStore row IDs
|
|
119
|
+
weight: 0.2
|
|
120
|
+
- name: truncation_logic
|
|
121
|
+
description: Smart focus truncation correctly handles small trees (show all), large
|
|
122
|
+
trees (executing ± 2 + first + last), and depth > 3 collapse
|
|
123
|
+
weight: 0.2
|
|
124
|
+
- name: error_graceful
|
|
125
|
+
description: All error cases return human-readable graceful markdown lines, never
|
|
126
|
+
structured errors or stack traces
|
|
127
|
+
weight: 0.15
|
|
128
|
+
- name: integration_fidelity
|
|
129
|
+
description: Correctly sources all data from existing EventStore workflow.progress.updated
|
|
130
|
+
events and WorkflowStateTracker metrics
|
|
131
|
+
weight: 0.1
|
|
132
|
+
- name: compactness
|
|
133
|
+
description: Output is compact enough to replace verbose job_wait polling, footer
|
|
134
|
+
omits zero/missing fields
|
|
135
|
+
weight: 0.1
|
|
136
|
+
exit_conditions:
|
|
137
|
+
- name: all_ac_rendered
|
|
138
|
+
description: All acceptance criteria pass and tool renders correctly at all depth
|
|
139
|
+
levels
|
|
140
|
+
criteria: AC tree renders for depth 1, 2, 3 with correct icons and tree structure
|
|
141
|
+
- name: delta_working
|
|
142
|
+
description: Cursor-based delta detection returns one-liner when unchanged and full
|
|
143
|
+
render when changed
|
|
144
|
+
criteria: Two consecutive calls with no intervening events produce one-liner on
|
|
145
|
+
second call
|
|
146
|
+
- name: errors_graceful
|
|
147
|
+
description: All four error cases produce correct graceful markdown
|
|
148
|
+
criteria: Invalid session, no execution, no AC tree yet, and completed session all
|
|
149
|
+
return specified markdown
|
|
150
|
+
- name: no_regression
|
|
151
|
+
description: Existing test suite passes without regression
|
|
152
|
+
criteria: All pre-existing tests pass after integration
|
|
153
|
+
metadata:
|
|
154
|
+
seed_id: seed_78c8e6e41813
|
|
155
|
+
version: 1.0.0
|
|
156
|
+
created_at: '2026-04-04T18:09:30.786879Z'
|
|
157
|
+
ambiguity_score: 0.1105
|
|
158
|
+
interview_id: interview_20260404_180516
|
|
159
|
+
parent_seed_id: null
|
|
@@ -1,41 +1,32 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ouroboros-ai
|
|
3
|
-
Version: 0.27.
|
|
3
|
+
Version: 0.27.2.dev2
|
|
4
4
|
Summary: Specification-first workflow engine for AI coding agents. Works with Claude Code and Codex CLI.
|
|
5
5
|
Author-email: Q00 <jqyu.lee@gmail.com>
|
|
6
6
|
License-File: LICENSE
|
|
7
7
|
Requires-Python: >=3.12
|
|
8
8
|
Requires-Dist: aiosqlite>=0.20.0
|
|
9
|
-
Requires-Dist: cachetools>=5.0.0
|
|
10
|
-
Requires-Dist: filelock>=3.13.0
|
|
11
|
-
Requires-Dist: httpx>=0.27.0
|
|
12
|
-
Requires-Dist: mcp>=1.26.0
|
|
13
|
-
Requires-Dist: prompt-toolkit>=3.0.0
|
|
14
9
|
Requires-Dist: pydantic>=2.0.0
|
|
15
|
-
Requires-Dist: python-dotenv>=1.2.1
|
|
16
10
|
Requires-Dist: pyyaml>=6.0.0
|
|
17
11
|
Requires-Dist: rich>=13.0.0
|
|
18
12
|
Requires-Dist: sqlalchemy[asyncio]>=2.0.0
|
|
19
|
-
Requires-Dist: stamina>=25.1.0
|
|
20
13
|
Requires-Dist: structlog>=24.0.0
|
|
21
|
-
Requires-Dist: textual>=1.0.0
|
|
22
14
|
Requires-Dist: typer>=0.12.0
|
|
23
15
|
Provides-Extra: all
|
|
24
16
|
Requires-Dist: anthropic>=0.52.0; extra == 'all'
|
|
25
17
|
Requires-Dist: claude-agent-sdk>=0.1.0; extra == 'all'
|
|
26
18
|
Requires-Dist: litellm<=1.82.6,>=1.80.0; extra == 'all'
|
|
27
|
-
Requires-Dist:
|
|
28
|
-
Requires-Dist:
|
|
29
|
-
Requires-Dist: streamlit>=1.40.0; extra == 'all'
|
|
19
|
+
Requires-Dist: mcp>=1.26.0; extra == 'all'
|
|
20
|
+
Requires-Dist: textual>=1.0.0; extra == 'all'
|
|
30
21
|
Provides-Extra: claude
|
|
31
22
|
Requires-Dist: anthropic>=0.52.0; extra == 'claude'
|
|
32
23
|
Requires-Dist: claude-agent-sdk>=0.1.0; extra == 'claude'
|
|
33
|
-
Provides-Extra: dashboard
|
|
34
|
-
Requires-Dist: pandas>=2.2.0; extra == 'dashboard'
|
|
35
|
-
Requires-Dist: plotly>=5.24.0; extra == 'dashboard'
|
|
36
|
-
Requires-Dist: streamlit>=1.40.0; extra == 'dashboard'
|
|
37
24
|
Provides-Extra: litellm
|
|
38
25
|
Requires-Dist: litellm<=1.82.6,>=1.80.0; extra == 'litellm'
|
|
26
|
+
Provides-Extra: mcp
|
|
27
|
+
Requires-Dist: mcp>=1.26.0; extra == 'mcp'
|
|
28
|
+
Provides-Extra: tui
|
|
29
|
+
Requires-Dist: textual>=1.0.0; extra == 'tui'
|
|
39
30
|
Description-Content-Type: text/markdown
|
|
40
31
|
|
|
41
32
|
<p align="right">
|
|
@@ -135,6 +126,8 @@ Then run `ooo setup` inside a Claude Code session.
|
|
|
135
126
|
pip install ouroboros-ai # base
|
|
136
127
|
pip install ouroboros-ai[claude] # + Claude Code deps
|
|
137
128
|
pip install ouroboros-ai[litellm] # + LiteLLM multi-provider
|
|
129
|
+
pip install ouroboros-ai[mcp] # + MCP server/client support
|
|
130
|
+
pip install ouroboros-ai[tui] # + Textual terminal UI
|
|
138
131
|
pip install ouroboros-ai[all] # everything
|
|
139
132
|
ouroboros setup # configure runtime
|
|
140
133
|
```
|
|
@@ -119,6 +119,8 @@ Claude Code 세션 안에서 `ooo setup` 실행.
|
|
|
119
119
|
pip install ouroboros-ai # 기본
|
|
120
120
|
pip install ouroboros-ai[claude] # + Claude Code 의존성
|
|
121
121
|
pip install ouroboros-ai[litellm] # + LiteLLM 멀티 프로바이더
|
|
122
|
+
pip install ouroboros-ai[mcp] # + MCP 서버/클라이언트 지원
|
|
123
|
+
pip install ouroboros-ai[tui] # + Textual 터미널 UI
|
|
122
124
|
pip install ouroboros-ai[all] # 전부
|
|
123
125
|
ouroboros setup # 런타임 설정
|
|
124
126
|
```
|
|
@@ -95,6 +95,8 @@ Then run `ooo setup` inside a Claude Code session.
|
|
|
95
95
|
pip install ouroboros-ai # base
|
|
96
96
|
pip install ouroboros-ai[claude] # + Claude Code deps
|
|
97
97
|
pip install ouroboros-ai[litellm] # + LiteLLM multi-provider
|
|
98
|
+
pip install ouroboros-ai[mcp] # + MCP server/client support
|
|
99
|
+
pip install ouroboros-ai[tui] # + Textual terminal UI
|
|
98
100
|
pip install ouroboros-ai[all] # everything
|
|
99
101
|
ouroboros setup # configure runtime
|
|
100
102
|
```
|
|
@@ -161,6 +161,10 @@ ouroboros init start --resume interview_20260116_120000
|
|
|
161
161
|
ouroboros init
|
|
162
162
|
```
|
|
163
163
|
|
|
164
|
+
> **Interactive multiline input:** when `init` or other interview-style commands prompt for a
|
|
165
|
+
> longer response, press `Ctrl+D` (macOS/Linux) or `Ctrl+Z` then Enter (Windows) to submit the
|
|
166
|
+
> full response. Plain Enter inserts a newline.
|
|
167
|
+
|
|
164
168
|
### `init list`
|
|
165
169
|
|
|
166
170
|
List all interview sessions.
|
|
@@ -80,8 +80,9 @@ No Python, pip, or API key configuration needed -- Claude Code handles the runti
|
|
|
80
80
|
pip install ouroboros-ai # Base package (core engine)
|
|
81
81
|
pip install ouroboros-ai[claude] # + Claude Code runtime deps (anthropic, claude-agent-sdk)
|
|
82
82
|
pip install ouroboros-ai[litellm] # + LiteLLM multi-provider support (100+ models)
|
|
83
|
-
pip install ouroboros-ai[
|
|
84
|
-
pip install ouroboros-ai[
|
|
83
|
+
pip install ouroboros-ai[mcp] # + MCP server/client runtime support
|
|
84
|
+
pip install ouroboros-ai[tui] # + Textual terminal UI
|
|
85
|
+
pip install ouroboros-ai[all] # Everything (claude + litellm + mcp + tui)
|
|
85
86
|
|
|
86
87
|
ouroboros --version # verify CLI
|
|
87
88
|
```
|
|
@@ -9,31 +9,20 @@ authors = [
|
|
|
9
9
|
requires-python = ">=3.12"
|
|
10
10
|
dependencies = [
|
|
11
11
|
"aiosqlite>=0.20.0",
|
|
12
|
-
"cachetools>=5.0.0",
|
|
13
|
-
"filelock>=3.13.0",
|
|
14
|
-
"httpx>=0.27.0",
|
|
15
|
-
"mcp>=1.26.0",
|
|
16
|
-
"prompt-toolkit>=3.0.0",
|
|
17
12
|
"pydantic>=2.0.0",
|
|
18
|
-
"python-dotenv>=1.2.1",
|
|
19
13
|
"pyyaml>=6.0.0",
|
|
20
14
|
"rich>=13.0.0",
|
|
21
15
|
"sqlalchemy[asyncio]>=2.0.0",
|
|
22
|
-
"stamina>=25.1.0",
|
|
23
16
|
"structlog>=24.0.0",
|
|
24
|
-
"textual>=1.0.0",
|
|
25
17
|
"typer>=0.12.0",
|
|
26
18
|
]
|
|
27
19
|
|
|
28
20
|
[project.optional-dependencies]
|
|
29
21
|
claude = ["claude-agent-sdk>=0.1.0", "anthropic>=0.52.0"]
|
|
30
22
|
litellm = ["litellm>=1.80.0,<=1.82.6"]
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
"plotly>=5.24.0",
|
|
35
|
-
"pandas>=2.2.0",
|
|
36
|
-
]
|
|
23
|
+
mcp = ["mcp>=1.26.0"]
|
|
24
|
+
tui = ["textual>=1.0.0"]
|
|
25
|
+
all = ["ouroboros-ai[claude,litellm,mcp,tui]"]
|
|
37
26
|
|
|
38
27
|
[project.scripts]
|
|
39
28
|
ouroboros = "ouroboros.cli.main:app"
|
|
@@ -65,7 +54,7 @@ packages = ["src/ouroboros"]
|
|
|
65
54
|
|
|
66
55
|
[dependency-groups]
|
|
67
56
|
dev = [
|
|
68
|
-
"ouroboros-ai[claude,litellm]",
|
|
57
|
+
"ouroboros-ai[claude,litellm,mcp,tui]",
|
|
69
58
|
"mypy>=1.19.1",
|
|
70
59
|
"pre-commit>=4.5.1",
|
|
71
60
|
"pytest>=9.0.2",
|
|
@@ -126,63 +126,69 @@ The Ouroboros MCP tools are often registered as **deferred tools** that must be
|
|
|
126
126
|
```
|
|
127
127
|
Then **stop** — do NOT proceed to polling steps.
|
|
128
128
|
|
|
129
|
-
6. **Poll for progress** using `
|
|
129
|
+
6. **Poll for progress** using `ouroboros_ac_tree_hud` (only if user chose to poll):
|
|
130
130
|
|
|
131
|
-
The polling behavior differs based on the user's interval choice
|
|
131
|
+
The polling behavior differs based on the user's interval choice. In all cases,
|
|
132
|
+
the tool returns a compact markdown snapshot when state changed, or a one-line
|
|
133
|
+
delta ("No AC tree change since cursor <cursor>.") when nothing changed.
|
|
134
|
+
Keep the latest cursor from the tool's meta payload for the next call.
|
|
132
135
|
|
|
133
136
|
**Option A: "Per level (Recommended)"**
|
|
134
137
|
```
|
|
135
138
|
prev_completed = 0
|
|
136
139
|
|
|
137
140
|
loop:
|
|
138
|
-
Tool:
|
|
141
|
+
Tool: ouroboros_ac_tree_hud
|
|
139
142
|
Arguments:
|
|
140
|
-
|
|
143
|
+
session_id: <session_id from step 3>
|
|
141
144
|
cursor: <cursor from previous response, starts at 0>
|
|
142
|
-
|
|
145
|
+
max_nodes: 50
|
|
143
146
|
|
|
144
|
-
# Parse
|
|
145
|
-
current_completed = <
|
|
146
|
-
total = <
|
|
147
|
-
phase = <current phase from response>
|
|
147
|
+
# Parse completed/total from the snapshot or meta
|
|
148
|
+
current_completed = <completed count>
|
|
149
|
+
total = <total count>
|
|
148
150
|
|
|
149
151
|
if current_completed > prev_completed:
|
|
150
|
-
# A level completed —
|
|
151
|
-
print
|
|
152
|
+
# A level completed — show the returned markdown snapshot as-is
|
|
153
|
+
print snapshot
|
|
152
154
|
prev_completed = current_completed
|
|
153
155
|
# else: continue silently (no output)
|
|
154
156
|
|
|
155
|
-
# Continue until status is "completed", "failed", or "cancelled"
|
|
157
|
+
# Continue until meta.status is "completed", "failed", or "cancelled"
|
|
156
158
|
```
|
|
157
159
|
|
|
158
160
|
**Option B: "Every 10 minutes"**
|
|
159
161
|
```
|
|
160
162
|
loop:
|
|
161
|
-
Tool:
|
|
163
|
+
Tool: ouroboros_ac_tree_hud
|
|
162
164
|
Arguments:
|
|
163
|
-
|
|
165
|
+
session_id: <session_id from step 3>
|
|
164
166
|
cursor: <cursor from previous response, starts at 0>
|
|
165
|
-
|
|
167
|
+
max_nodes: 50
|
|
166
168
|
|
|
167
169
|
# Report on every return regardless of change
|
|
168
|
-
|
|
170
|
+
- If unchanged: echo the one-line delta only
|
|
171
|
+
- If changed: show the returned markdown snapshot as-is
|
|
172
|
+
sleep 600 # 10 min between polls
|
|
169
173
|
|
|
170
|
-
# Continue until status is "completed", "failed", or "cancelled"
|
|
174
|
+
# Continue until meta.status is "completed", "failed", or "cancelled"
|
|
171
175
|
```
|
|
172
176
|
|
|
173
177
|
**Option C: "Every 20 minutes"**
|
|
174
178
|
```
|
|
175
179
|
loop:
|
|
176
|
-
Tool:
|
|
180
|
+
Tool: ouroboros_ac_tree_hud
|
|
177
181
|
Arguments:
|
|
178
|
-
|
|
182
|
+
session_id: <session_id from step 3>
|
|
179
183
|
cursor: <cursor from previous response, starts at 0>
|
|
180
|
-
|
|
184
|
+
max_nodes: 50
|
|
181
185
|
|
|
182
186
|
# Report on every return regardless of change
|
|
183
|
-
|
|
187
|
+
- If unchanged: echo the one-line delta only
|
|
188
|
+
- If changed: show the returned markdown snapshot as-is
|
|
189
|
+
sleep 1200 # 20 min between polls
|
|
184
190
|
|
|
185
|
-
# Continue until status is "completed", "failed", or "cancelled"
|
|
191
|
+
# Continue until meta.status is "completed", "failed", or "cancelled"
|
|
186
192
|
```
|
|
187
193
|
|
|
188
194
|
7. **Fetch final result** with `ouroboros_job_result`:
|
|
@@ -234,9 +240,12 @@ Session ID: orch_x1y2z3
|
|
|
234
240
|
Execution ID: exec_m1n2o3
|
|
235
241
|
|
|
236
242
|
[Polling for progress...]
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
243
|
+
🌳 AC Tree
|
|
244
|
+
✅ Parse seed
|
|
245
|
+
⏳ Implement workflow routing [Edit src/ouroboros/mcp/tools/ac_tree_hud_handler.py]
|
|
246
|
+
⬜ Verify output
|
|
247
|
+
|
|
248
|
+
elapsed 45s | messages 12 | tools 4
|
|
240
249
|
|
|
241
250
|
[Fetching final result...]
|
|
242
251
|
|
|
@@ -246,7 +246,7 @@ A backup will be created: CLAUDE.md.bak
|
|
|
246
246
|
**If "Preview first", show:**
|
|
247
247
|
````markdown
|
|
248
248
|
<!-- ooo:START -->
|
|
249
|
-
<!-- ooo:VERSION:0.27.
|
|
249
|
+
<!-- ooo:VERSION:0.27.1 -->
|
|
250
250
|
# Ouroboros — Specification-First AI Development
|
|
251
251
|
|
|
252
252
|
> Before telling AI what to build, define what should be built.
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.27.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 27,
|
|
21
|
+
__version__ = version = '0.27.2.dev2'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 27, 2, 'dev2')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -58,7 +58,7 @@ def monitor_command(
|
|
|
58
58
|
from ouroboros.tui import OuroborosTUI
|
|
59
59
|
except ImportError as e:
|
|
60
60
|
print_error(
|
|
61
|
-
"TUI dependencies not installed. Install with: pip install 'ouroboros[tui]'",
|
|
61
|
+
"TUI dependencies not installed. Install with: pip install 'ouroboros-ai[tui]'",
|
|
62
62
|
)
|
|
63
63
|
raise typer.Exit(1) from e
|
|
64
64
|
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""Prompt helpers for interactive CLI input."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
from contextlib import contextmanager
|
|
7
|
+
import sys
|
|
8
|
+
from typing import TextIO
|
|
9
|
+
|
|
10
|
+
from ouroboros.cli.formatters import console
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
async def multiline_prompt_async(prompt_text: str) -> str:
|
|
14
|
+
"""Get multiline-safe input while allowing logs above the active prompt."""
|
|
15
|
+
console.print(
|
|
16
|
+
f"[bold green]{prompt_text}[/] [dim](Ctrl+D/Ctrl+Z then Enter: submit; "
|
|
17
|
+
"Enter inserts newline)[/]"
|
|
18
|
+
)
|
|
19
|
+
with _patched_stdio():
|
|
20
|
+
return await asyncio.to_thread(_read_multiline_from_stdin)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _read_multiline_from_stdin() -> str:
|
|
24
|
+
lines: list[str] = []
|
|
25
|
+
prompt = "> "
|
|
26
|
+
continuation = " "
|
|
27
|
+
|
|
28
|
+
while True:
|
|
29
|
+
try:
|
|
30
|
+
line = input(prompt if not lines else continuation)
|
|
31
|
+
except EOFError:
|
|
32
|
+
print()
|
|
33
|
+
return "\n".join(lines)
|
|
34
|
+
lines.append(line)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@contextmanager
|
|
38
|
+
def _patched_stdio() -> TextIO:
|
|
39
|
+
stdout = sys.stdout
|
|
40
|
+
stderr = sys.stderr
|
|
41
|
+
sys.stdout = _StreamProxy(stdout)
|
|
42
|
+
sys.stderr = _StreamProxy(stderr)
|
|
43
|
+
try:
|
|
44
|
+
yield stdout
|
|
45
|
+
finally:
|
|
46
|
+
sys.stdout = stdout
|
|
47
|
+
sys.stderr = stderr
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class _StreamProxy:
|
|
51
|
+
def __init__(self, target: TextIO) -> None:
|
|
52
|
+
self._target = target
|
|
53
|
+
|
|
54
|
+
def write(self, data: str) -> int:
|
|
55
|
+
return self._target.write(data)
|
|
56
|
+
|
|
57
|
+
def flush(self) -> None:
|
|
58
|
+
self._target.flush()
|
|
59
|
+
|
|
60
|
+
def isatty(self) -> bool:
|
|
61
|
+
return self._target.isatty()
|
|
62
|
+
|
|
63
|
+
@property
|
|
64
|
+
def encoding(self) -> str | None:
|
|
65
|
+
return getattr(self._target, "encoding", None)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
__all__ = ["multiline_prompt_async"]
|