ouroboros-ai 0.27.2.dev2__tar.gz → 0.27.3.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.2.dev2 → ouroboros_ai-0.27.3.dev2}/.claude-plugin/marketplace.json +1 -1
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.claude-plugin/plugin.json +1 -1
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/PKG-INFO +27 -17
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/README.ko.md +2 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/README.md +3 -1
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/cli-reference.md +17 -21
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/config-reference.md +1 -3
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/getting-started.md +15 -11
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/runtime-capability-matrix.md +32 -29
- ouroboros_ai-0.27.3.dev2/docs/runtime-guides/opencode.md +165 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/pyproject.toml +17 -11
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/setup/SKILL.md +1 -1
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/_version.py +2 -2
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/init.py +4 -2
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/mcp.py +8 -6
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/run.py +2 -1
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/setup.py +213 -6
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/uninstall.py +54 -0
- ouroboros_ai-0.27.3.dev2/src/ouroboros/cli/formatters/prompting.py +38 -0
- ouroboros_ai-0.27.3.dev2/src/ouroboros/cli/jsonc.py +93 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/config/loader.py +20 -1
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/file_lock.py +5 -5
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/server/adapter.py +60 -7
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/__init__.py +12 -18
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/mcp_tools.py +2 -1
- ouroboros_ai-0.27.3.dev2/src/ouroboros/orchestrator/opencode_event_normalizer.py +414 -0
- ouroboros_ai-0.27.3.dev2/src/ouroboros/orchestrator/opencode_runtime.py +1547 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/runtime_factory.py +10 -6
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/__init__.py +5 -5
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/factory.py +15 -10
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/litellm_adapter.py +12 -0
- ouroboros_ai-0.27.3.dev2/src/ouroboros/providers/opencode_adapter.py +660 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/mcp/test_server_adapter.py +14 -3
- ouroboros_ai-0.27.3.dev2/tests/unit/cli/formatters/test_prompting.py +45 -0
- ouroboros_ai-0.27.3.dev2/tests/unit/cli/test_jsonc.py +141 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm_runtime_adapter.py +2 -4
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_setup.py +451 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/config/test_loader_env.py +16 -0
- ouroboros_ai-0.27.3.dev2/tests/unit/core/test_file_lock.py +52 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/server/test_adapter.py +29 -0
- ouroboros_ai-0.27.3.dev2/tests/unit/orchestrator/test_opencode_runtime.py +781 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_runtime_factory.py +16 -53
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/providers/test_factory.py +15 -25
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/providers/test_litellm_adapter.py +20 -0
- ouroboros_ai-0.27.3.dev2/tests/unit/providers/test_opencode_adapter.py +515 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_dependencies_configured.py +19 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/uv.lock +506 -17
- ouroboros_ai-0.27.2.dev2/src/ouroboros/cli/formatters/prompting.py +0 -68
- ouroboros_ai-0.27.2.dev2/tests/unit/cli/formatters/test_prompting.py +0 -32
- ouroboros_ai-0.27.2.dev2/tests/unit/core/test_file_lock.py +0 -17
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.claude/settings.json +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.claude-plugin/.mcp.json +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.env.example +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/ISSUE_TEMPLATE/question.yml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/workflows/dev-publish.yml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/workflows/lint.yml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/workflows/release.yml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.github/workflows/test.yml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.gitignore +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.mcp.json +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.ouroboros/mechanical.toml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.ouroboros/seeds/seed_73827177a2a3.yaml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.ouroboros/seeds/seed_78c8e6e41813.yaml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.pre-commit-config.yaml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/.python-version +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/CHANGELOG.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/CLAUDE.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/CODE_OF_CONDUCT.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/CONTRIBUTING.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/HANDOFF.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/LICENSE +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/SECURITY.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/UNINSTALL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/cancel.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/evaluate.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/evolve.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/help.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/interview.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/ralph.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/run.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/seed.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/setup.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/status.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/tutorial.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/unstuck.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/commands/welcome.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/.gitignore +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/Cargo.lock +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/Cargo.toml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/README.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/db.rs +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/main.rs +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/mock.rs +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/state.rs +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/views/dashboard.rs +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/views/execution.rs +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/views/lineage.rs +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/views/logs.rs +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/views/mod.rs +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/crates/ouroboros-tui/src/views/session_selector.rs +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/README.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/api/README.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/api/core.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/api/mcp.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/architecture.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/contributing/architecture-overview.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/contributing/findings-registry.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/contributing/issue-quality-policy.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/contributing/key-patterns.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/contributing/testing-guide.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/examples/mcp-config.yaml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/guides/evaluation-pipeline.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/guides/evolution-loop.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/guides/issue-176-subagent-mcp-inheritance.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/guides/mcp-bridge.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/guides/seed-authoring.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/guides/tui-usage.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/images/PLACEHOLDER_README.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/images/ouroboros.png +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/platform-support.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/runtime-guides/claude-code.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/docs/runtime-guides/codex.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/coordinator_test_seed.yaml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/dummy_seed.yaml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/parallel_subac_test_seed.yaml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/subac_test_seed.yaml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/task_manager/README.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/task_manager/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/task_manager/__main__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/task_manager/cli.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/task_manager/models.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/task_manager/storage.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/examples/test_display.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/hooks/hooks.json +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/llms-full.txt +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/llms.txt +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/project-context.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/drift-monitor.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/install.sh +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/keyword-detector.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/mcp-serve.sh +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/ralph-rewind.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/ralph.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/ralph.sh +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/session-start.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/sync-plugin-version.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/scripts/version-check.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/brownfield/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/cancel/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/evaluate/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/evolve/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/help/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/interview/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/pm/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/publish/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/qa/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/ralph/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/run/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/seed/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/status/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/tutorial/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/unstuck/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/update/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/skills/welcome/SKILL.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/__main__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/advocate.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/analysis-agent.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/architect.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/breadth-keeper.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/code-executor.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/codebase-explorer.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/consensus-reviewer.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/contrarian.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/evaluator.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/hacker.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/judge.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/loader.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/ontologist.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/ontology-analyst.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/qa-judge.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/research-agent.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/researcher.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/seed-architect.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/seed-closer.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/semantic-evaluator.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/simplifier.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/agents/socratic-interviewer.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/ambiguity.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/brownfield.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/explore.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/interview.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/pm_completion.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/pm_document.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/pm_interview.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/pm_seed.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/question_classifier.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/bigbang/seed_generator.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/cancel.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/config.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/pm.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/status.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/commands/tui.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/formatters/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/formatters/panels.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/formatters/progress.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/formatters/tables.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/formatters/workflow_display.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/cli/main.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/codex/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/codex/artifacts.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/codex/ouroboros.md +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/codex_permissions.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/config/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/config/models.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/ac_tree.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/context.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/errors.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/git_workflow.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/initial_context.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/json_utils.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/lineage.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/ontology_aspect.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/ontology_questions.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/project_paths.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/retry.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/security.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/seed.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/text.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/ttl_cache.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/types.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/core/worktree.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/artifact_collector.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/consensus.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/json_utils.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/languages.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/mechanical.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/models.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/pipeline.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/semantic.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/trigger.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evaluation/verification_artifacts.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/events/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/events/base.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/events/decomposition.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/events/evaluation.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/events/interview.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/events/lineage.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/events/ontology.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evolution/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evolution/convergence.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evolution/loop.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evolution/projector.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evolution/reflect.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evolution/regression.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/evolution/wonder.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/execution/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/execution/atomicity.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/execution/decomposition.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/execution/double_diamond.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/execution/subagent.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/bridge/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/bridge/bridge.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/bridge/config.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/bridge/factory.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/client/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/client/adapter.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/client/manager.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/client/protocol.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/errors.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/job_manager.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/resources/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/resources/handlers.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/server/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/server/protocol.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/server/security.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/ac_tree_hud_handler.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/ac_tree_hud_render.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/authoring_handlers.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/bridge_mixin.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/brownfield_handler.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/dashboard.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/definitions.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/evaluation_handlers.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/evolution_handlers.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/execution_handlers.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/job_handlers.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/pm_handler.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/qa.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/query_handlers.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/tools/registry.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/mcp/types.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/observability/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/observability/drift.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/observability/logging.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/observability/retrospective.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/adapter.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/capabilities.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/codex_cli_runtime.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/command_dispatcher.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/control_plane.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/coordinator.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/dependency_analyzer.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/events.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/execution_runtime_scope.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/execution_strategy.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/heartbeat.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/level_context.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/mcp_config.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/parallel_executor.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/parallel_executor_models.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/policy.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/runner.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/runtime_message_projection.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/session.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/orchestrator/workflow_state.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/brownfield.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/checkpoint.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/event_store.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/migrations/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/migrations/runner.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/migrations/scripts/002_brownfield.sql +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/schema.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/persistence/uow.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/agents/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/agents/pool.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/agents/registry.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/orchestration/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/orchestration/router.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/orchestration/scheduler.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/skills/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/skills/docs.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/skills/executor.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/skills/keywords.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/plugin/skills/registry.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/pm/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/pm/handoff.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/pm/renderer.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/anthropic_adapter.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/base.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/claude_code_adapter.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/codex_cli_adapter.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/codex_cli_stream.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/providers/gemini_cli_adapter.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/py.typed +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/resilience/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/resilience/lateral.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/resilience/stagnation.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/routing/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/routing/complexity.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/routing/downgrade.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/routing/escalation.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/routing/router.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/routing/tiers.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/secondary/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/secondary/scheduler.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/secondary/todo_registry.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/strategies/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/strategies/devil_advocate.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/app.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/components/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/components/agents_panel.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/components/event_log.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/components/progress.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/components/token_tracker.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/events.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/confirm_rewind.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/dashboard.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/dashboard_v2.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/dashboard_v3.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/debug.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/execution.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/hud_dashboard.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/lineage_detail.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/lineage_selector.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/logs.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/screens/session_selector.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/ac_progress.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/ac_tree.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/agent_activity.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/cost_tracker.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/drift_meter.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/lineage_tree.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/parallel_graph.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/tui/widgets/phase_progress.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/verification/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/verification/extractor.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/verification/models.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/src/ouroboros/verification/verifier.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/conftest.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/e2e/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/e2e/conftest.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/e2e/mcp_bridge_test_config.yaml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/e2e/test_cli_commands.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/e2e/test_full_workflow.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/e2e/test_session_persistence.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/fixtures/test_atomicity_seed.yml +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/conftest.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/mcp/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/mcp/bridge/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/mcp/bridge/test_bridge_server_to_server.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/mcp/conftest.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/mcp/test_client_adapter.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/mcp/test_client_manager.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/plugin/test_orchestration.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/test_codex_cli_passthrough_smoke.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/test_codex_skill_fallback.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/test_codex_skill_smoke.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/integration/test_entry_point.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/agents/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/agents/test_loader.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_ambiguity.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_brownfield.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_classifier_context.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_decide_later_items.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_explore.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_interview.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_interview_async_io.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_interview_no_web_search_hint.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_interview_research_prefix.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_pm_completion.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_pm_document_generator.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_pm_document_writer.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_pm_interview.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_pm_interview_brownfield_db.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_pm_seed_ac12.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_pm_seed_save.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_question_classifier.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/bigbang/test_seed_generator.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/commands/test_tui_command.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/formatters/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/formatters/test_console.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/formatters/test_panels.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/formatters/test_progress.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/formatters/test_tables.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/formatters/test_workflow_display.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_cancel.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_config.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_init_pm_seed_detection.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_init_runtime.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_main.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_mcp_nested_guard.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_mcp_startup_cleanup.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm_brownfield.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm_completion.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm_interactive_logging.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm_missing_litellm.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm_overwrite.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_pm_select_repos.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_run_qa.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/cli/test_uninstall.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/config/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/config/test_loader.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/config/test_models.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_ac_tree.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_context.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_errors.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_git_workflow.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_initial_context.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_lineage.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_ontology_aspect.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_ontology_questions.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_retry.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_security.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_seed.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_ttl_cache.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_types.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/core/test_worktree.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_artifact_collector_file_prefix.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_consensus.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_json_utils.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_languages.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_mechanical.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_models.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_pipeline_trigger_consensus.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_review_fixes.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_semantic.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_trigger.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_trigger_consensus.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evaluation/test_verification_artifacts.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/events/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/events/test_base.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/events/test_decomposition_events.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/evolution/test_wonder_scope.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/execution/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/execution/test_atomicity.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/execution/test_decomposition.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/execution/test_double_diamond.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/execution/test_subagent_isolation.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/bridge/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/bridge/test_bridge.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/bridge/test_config.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/bridge/test_factory.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/bridge/test_handler_wiring.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/bridge/test_stability.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/client/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/client/test_adapter.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/client/test_adapter_transport_lifecycle.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/client/test_manager.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/conftest.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/server/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/server/test_security.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/test_errors.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/test_job_manager.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/test_types.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/conftest.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_footer.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_completed.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_cursor_changed.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_invalid_session.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_no_execution.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_waiting.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_max_nodes.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_render_depth2.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_render_depth3.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_status_icons.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_truncation.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_brownfield_handler.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_definitions.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_evaluation_handler.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_interview_parallel_scoring.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_interview_scoring_guard.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_mcp_manager_wiring.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_pm_handler.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_pm_handler_generate.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_pm_handler_pending_reframe.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_qa_integration.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_qa_parser.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_registry.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/mcp/tools/test_traceback_reporting.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/observability/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/observability/test_drift.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/observability/test_logging.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/observability/test_retrospective.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_adapter.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_capabilities.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_codex_cli_runtime.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_codex_recursion_guard.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_command_dispatcher.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_control_plane.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_coordinator.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_dependency_analyzer.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_events.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_execution_runtime_scope.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_execution_strategy.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_inflight_cancellation.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_level_context.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_mcp_config.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_mcp_tools.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_parallel_executor.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_parallel_executor_atomic_judgment.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_parallel_executor_recursive_depth.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_parallel_executor_retry_resume.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_policy.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_runner.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_runner_cancellation.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_runtime_message_projection.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_session.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/orchestrator/test_workflow_state.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/persistence/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/persistence/test_brownfield_store.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/persistence/test_checkpoint.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/persistence/test_event_store.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/persistence/test_schema.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/persistence/test_uow.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/agents/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/agents/test_registry.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/orchestration/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/orchestration/test_model_router.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/skills/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/skills/test_keywords.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/plugin/skills/test_registry.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/pm/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/pm/test_renderer.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/providers/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/providers/test_base.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/providers/test_claude_code_adapter.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/providers/test_codex_cli_adapter.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/providers/test_gemini_cli_adapter.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/resilience/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/resilience/test_lateral.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/resilience/test_stagnation.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/routing/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/routing/test_complexity.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/routing/test_downgrade.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/routing/test_escalation.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/routing/test_router.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/routing/test_tiers.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/scripts/test_keyword_detector.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/scripts/test_version_check.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/secondary/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/secondary/test_scheduler.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/secondary/test_todo_registry.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_artifact_collector.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_codex_artifacts.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_convergence.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_dashboard.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_evolve_rewind.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_evolve_step.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_graceful_shutdown.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_main_entry_point.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_module_structure.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_project_initialization.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_projector_rewind.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_ralph_parser.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_ralph_rewind.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_regression.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_tooling_configuration.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/test_verification.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/__init__.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/test_app.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/test_cancelled_display.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/test_events.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/test_lineage_viewer.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/test_screens.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/test_session_selector_replay.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.dev2}/tests/unit/tui/test_widgets.py +0 -0
- {ouroboros_ai-0.27.2.dev2 → ouroboros_ai-0.27.3.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.2",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "Q00",
|
|
16
16
|
"email": "jqyu.lee@gmail.com"
|
|
@@ -1,32 +1,40 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ouroboros-ai
|
|
3
|
-
Version: 0.27.
|
|
3
|
+
Version: 0.27.3.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
|
-
Requires-Dist: aiosqlite
|
|
9
|
-
Requires-Dist:
|
|
10
|
-
Requires-Dist:
|
|
11
|
-
Requires-Dist:
|
|
12
|
-
Requires-Dist:
|
|
13
|
-
Requires-Dist:
|
|
14
|
-
Requires-Dist:
|
|
8
|
+
Requires-Dist: aiosqlite<1.0.0,>=0.20.0
|
|
9
|
+
Requires-Dist: prompt-toolkit<4.0.0,>=3.0.0
|
|
10
|
+
Requires-Dist: pydantic<3.0.0,>=2.0.0
|
|
11
|
+
Requires-Dist: pyyaml<7.0.0,>=6.0.0
|
|
12
|
+
Requires-Dist: rich<15.0.0,>=13.0.0
|
|
13
|
+
Requires-Dist: sqlalchemy[asyncio]<3.0.0,>=2.0.0
|
|
14
|
+
Requires-Dist: structlog<26.0.0,>=24.0.0
|
|
15
|
+
Requires-Dist: typer<1.0.0,>=0.12.0
|
|
15
16
|
Provides-Extra: all
|
|
16
|
-
Requires-Dist: anthropic
|
|
17
|
-
Requires-Dist: claude-agent-sdk
|
|
17
|
+
Requires-Dist: anthropic<1.0.0,>=0.52.0; extra == 'all'
|
|
18
|
+
Requires-Dist: claude-agent-sdk<1.0.0,>=0.1.0; extra == 'all'
|
|
18
19
|
Requires-Dist: litellm<=1.82.6,>=1.80.0; extra == 'all'
|
|
19
|
-
Requires-Dist: mcp
|
|
20
|
-
Requires-Dist:
|
|
20
|
+
Requires-Dist: mcp<2.0.0,>=1.26.0; extra == 'all'
|
|
21
|
+
Requires-Dist: pandas<3.0.0,>=2.2.0; extra == 'all'
|
|
22
|
+
Requires-Dist: plotly<7.0.0,>=5.24.0; extra == 'all'
|
|
23
|
+
Requires-Dist: streamlit<2.0.0,>=1.40.0; extra == 'all'
|
|
24
|
+
Requires-Dist: textual<9.0.0,>=1.0.0; extra == 'all'
|
|
21
25
|
Provides-Extra: claude
|
|
22
|
-
Requires-Dist: anthropic
|
|
23
|
-
Requires-Dist: claude-agent-sdk
|
|
26
|
+
Requires-Dist: anthropic<1.0.0,>=0.52.0; extra == 'claude'
|
|
27
|
+
Requires-Dist: claude-agent-sdk<1.0.0,>=0.1.0; extra == 'claude'
|
|
28
|
+
Provides-Extra: dashboard
|
|
29
|
+
Requires-Dist: pandas<3.0.0,>=2.2.0; extra == 'dashboard'
|
|
30
|
+
Requires-Dist: plotly<7.0.0,>=5.24.0; extra == 'dashboard'
|
|
31
|
+
Requires-Dist: streamlit<2.0.0,>=1.40.0; extra == 'dashboard'
|
|
24
32
|
Provides-Extra: litellm
|
|
25
33
|
Requires-Dist: litellm<=1.82.6,>=1.80.0; extra == 'litellm'
|
|
26
34
|
Provides-Extra: mcp
|
|
27
|
-
Requires-Dist: mcp
|
|
35
|
+
Requires-Dist: mcp<2.0.0,>=1.26.0; extra == 'mcp'
|
|
28
36
|
Provides-Extra: tui
|
|
29
|
-
Requires-Dist: textual
|
|
37
|
+
Requires-Dist: textual<9.0.0,>=1.0.0; extra == 'tui'
|
|
30
38
|
Description-Content-Type: text/markdown
|
|
31
39
|
|
|
32
40
|
<p align="right">
|
|
@@ -128,10 +136,12 @@ pip install ouroboros-ai[claude] # + Claude Code deps
|
|
|
128
136
|
pip install ouroboros-ai[litellm] # + LiteLLM multi-provider
|
|
129
137
|
pip install ouroboros-ai[mcp] # + MCP server/client support
|
|
130
138
|
pip install ouroboros-ai[tui] # + Textual terminal UI
|
|
131
|
-
pip install ouroboros-ai[all] # everything
|
|
139
|
+
pip install ouroboros-ai[all] # everything (claude + litellm + mcp + tui + dashboard)
|
|
132
140
|
ouroboros setup # configure runtime
|
|
133
141
|
```
|
|
134
142
|
|
|
143
|
+
Legacy compatibility: `ouroboros-ai[dashboard]` is still accepted as a compatibility alias while extras migrate.
|
|
144
|
+
|
|
135
145
|
See runtime guides: [Claude Code](./docs/runtime-guides/claude-code.md) · [Codex CLI](./docs/runtime-guides/codex.md)
|
|
136
146
|
|
|
137
147
|
</details>
|
|
@@ -125,6 +125,8 @@ pip install ouroboros-ai[all] # 전부
|
|
|
125
125
|
ouroboros setup # 런타임 설정
|
|
126
126
|
```
|
|
127
127
|
|
|
128
|
+
호환성 참고: extras 전환 기간 동안 `ouroboros-ai[dashboard]`도 no-op alias로 계속 허용됩니다.
|
|
129
|
+
|
|
128
130
|
런타임별 가이드: [Claude Code](./docs/runtime-guides/claude-code.md) · [Codex CLI](./docs/runtime-guides/codex.md)
|
|
129
131
|
|
|
130
132
|
</details>
|
|
@@ -97,10 +97,12 @@ pip install ouroboros-ai[claude] # + Claude Code deps
|
|
|
97
97
|
pip install ouroboros-ai[litellm] # + LiteLLM multi-provider
|
|
98
98
|
pip install ouroboros-ai[mcp] # + MCP server/client support
|
|
99
99
|
pip install ouroboros-ai[tui] # + Textual terminal UI
|
|
100
|
-
pip install ouroboros-ai[all] # everything
|
|
100
|
+
pip install ouroboros-ai[all] # everything (claude + litellm + mcp + tui + dashboard)
|
|
101
101
|
ouroboros setup # configure runtime
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
+
Legacy compatibility: `ouroboros-ai[dashboard]` is still accepted as a compatibility alias while extras migrate.
|
|
105
|
+
|
|
104
106
|
See runtime guides: [Claude Code](./docs/runtime-guides/claude-code.md) · [Codex CLI](./docs/runtime-guides/codex.md)
|
|
105
107
|
|
|
106
108
|
</details>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
doc_metadata:
|
|
3
|
-
runtime_scope: [local, claude, codex]
|
|
3
|
+
runtime_scope: [local, claude, codex, opencode]
|
|
4
4
|
-->
|
|
5
5
|
|
|
6
6
|
# CLI Reference
|
|
@@ -56,7 +56,7 @@ ouroboros [OPTIONS] COMMAND [ARGS]...
|
|
|
56
56
|
Detect available runtime backends and configure Ouroboros for your environment.
|
|
57
57
|
|
|
58
58
|
Ouroboros supports multiple runtime backends via a pluggable `AgentRuntime` protocol. The `setup` command auto-detects
|
|
59
|
-
which runtimes are available in your PATH (currently: Claude Code, Codex CLI) and
|
|
59
|
+
which runtimes are available in your PATH (currently: Claude Code, Codex CLI, OpenCode) and
|
|
60
60
|
configures `orchestrator.runtime_backend` accordingly. Additional runtimes can be registered
|
|
61
61
|
by implementing the protocol — see [Architecture](architecture.md#how-to-add-a-new-runtime-adapter).
|
|
62
62
|
|
|
@@ -68,7 +68,7 @@ ouroboros setup [OPTIONS]
|
|
|
68
68
|
|
|
69
69
|
| Option | Description |
|
|
70
70
|
|--------|-------------|
|
|
71
|
-
| `-r, --runtime TEXT` | Runtime backend to configure. Shipped values: `claude`, `codex`. Auto-detected if omitted |
|
|
71
|
+
| `-r, --runtime TEXT` | Runtime backend to configure. Shipped values: `claude`, `codex`, `opencode`. Auto-detected if omitted |
|
|
72
72
|
| `--non-interactive` | Skip interactive prompts (for scripted installs) |
|
|
73
73
|
|
|
74
74
|
**Examples:**
|
|
@@ -97,11 +97,10 @@ ouroboros setup --non-interactive
|
|
|
97
97
|
- For Codex CLI: installs managed Ouroboros rules into `~/.codex/rules/`
|
|
98
98
|
- For Codex CLI: installs managed Ouroboros skills into `~/.codex/skills/`
|
|
99
99
|
- For Codex CLI: registers the Ouroboros MCP/env block in `~/.codex/config.toml`
|
|
100
|
+
- For OpenCode: registers the Ouroboros MCP server in OpenCode's configuration
|
|
100
101
|
|
|
101
102
|
> **Codex config split:** put persistent Ouroboros per-role model overrides in `~/.ouroboros/config.yaml` (`clarification.default_model`, `llm.qa_model`, `evaluation.semantic_model`, `consensus.models`, `consensus.advocate_model`, `consensus.devil_model`, `consensus.judge_model`). `~/.codex/config.toml` is only the Codex MCP/env hookup file used by setup.
|
|
102
103
|
|
|
103
|
-
> **`opencode` caveat:** `setup` detects the `opencode` binary in PATH but cannot configure it — if `opencode` is your only installed runtime, `setup` exits with `Error: Unsupported runtime: opencode`. The `opencode` runtime backend is **not yet implemented** (`runtime_factory.py` raises `NotImplementedError`). It is planned for a future release.
|
|
104
|
-
|
|
105
104
|
---
|
|
106
105
|
|
|
107
106
|
## `ouroboros init`
|
|
@@ -132,8 +131,8 @@ ouroboros init [start] [OPTIONS] [CONTEXT]
|
|
|
132
131
|
| `-r, --resume TEXT` | Resume an existing interview by ID |
|
|
133
132
|
| `--state-dir DIRECTORY` | Custom directory for interview state files |
|
|
134
133
|
| `-o, --orchestrator` | Use Claude Code for the interview/seed flow; combine with `--runtime` to choose the workflow handoff backend |
|
|
135
|
-
| `--runtime TEXT` | Agent runtime backend for the workflow execution step after seed generation. Shipped values: `claude`, `codex
|
|
136
|
-
| `--llm-backend TEXT` | LLM backend for interview, ambiguity scoring, and seed generation (`claude_code`, `litellm`, `codex
|
|
134
|
+
| `--runtime TEXT` | Agent runtime backend for the workflow execution step after seed generation. Shipped values: `claude`, `codex`, `opencode`. Custom adapters registered in `runtime_factory.py` are also accepted. |
|
|
135
|
+
| `--llm-backend TEXT` | LLM backend for interview, ambiguity scoring, and seed generation (`claude_code`, `litellm`, `codex`, `opencode`) |
|
|
137
136
|
| `-d, --debug` | Show verbose logs including debug messages |
|
|
138
137
|
|
|
139
138
|
**Examples:**
|
|
@@ -161,10 +160,6 @@ ouroboros init start --resume interview_20260116_120000
|
|
|
161
160
|
ouroboros init
|
|
162
161
|
```
|
|
163
162
|
|
|
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
|
-
|
|
168
163
|
### `init list`
|
|
169
164
|
|
|
170
165
|
List all interview sessions.
|
|
@@ -209,7 +204,7 @@ ouroboros run [workflow] [OPTIONS] SEED_FILE
|
|
|
209
204
|
| Option | Description |
|
|
210
205
|
|--------|-------------|
|
|
211
206
|
| `-o/-O, --orchestrator/--no-orchestrator` | Use the agent-runtime orchestrator for execution (default: enabled) |
|
|
212
|
-
| `--runtime TEXT` | Agent runtime backend override (`claude`, `codex`). Uses configured default if omitted
|
|
207
|
+
| `--runtime TEXT` | Agent runtime backend override (`claude`, `codex`, `opencode`). Uses configured default if omitted |
|
|
213
208
|
| `-r, --resume TEXT` | Resume a previous orchestrator session by ID |
|
|
214
209
|
| `--mcp-config PATH` | Path to MCP client configuration YAML file |
|
|
215
210
|
| `--mcp-tool-prefix TEXT` | Prefix to add to all MCP tool names (e.g., `mcp_`) |
|
|
@@ -352,7 +347,7 @@ ouroboros config backend [BACKEND]
|
|
|
352
347
|
|
|
353
348
|
| Argument | Description |
|
|
354
349
|
|----------|-------------|
|
|
355
|
-
| `BACKEND` | Backend to switch to: `claude` or `codex`. Omit to show current |
|
|
350
|
+
| `BACKEND` | Backend to switch to: `claude` or `codex`. Omit to show current. For `opencode`, use `ouroboros setup` instead |
|
|
356
351
|
|
|
357
352
|
**Examples:**
|
|
358
353
|
|
|
@@ -631,8 +626,8 @@ ouroboros mcp serve [OPTIONS]
|
|
|
631
626
|
| `-p, --port INTEGER` | Port to bind to (default: 8080) |
|
|
632
627
|
| `-t, --transport TEXT` | Transport type: `stdio` or `sse` (default: stdio) |
|
|
633
628
|
| `--db TEXT` | Path to the EventStore database file |
|
|
634
|
-
| `--runtime TEXT` |
|
|
635
|
-
| `--llm-backend TEXT` | LLM backend for interview/seed/evaluation tools (`claude_code`, `litellm`, `codex
|
|
629
|
+
| `--runtime TEXT` | Agent runtime backend for orchestrator-driven tools (`claude`, `codex`, `opencode`). Affects which tool variants are instantiated |
|
|
630
|
+
| `--llm-backend TEXT` | LLM backend for interview/seed/evaluation tools (`claude_code`, `litellm`, `codex`, `opencode`). Affects which tool variants are instantiated |
|
|
636
631
|
|
|
637
632
|
**Examples:**
|
|
638
633
|
|
|
@@ -689,7 +684,7 @@ If Ouroboros is installed directly (not via `uvx`), use:
|
|
|
689
684
|
|
|
690
685
|
```yaml
|
|
691
686
|
orchestrator:
|
|
692
|
-
runtime_backend: claude # or "codex"
|
|
687
|
+
runtime_backend: claude # or "codex" or "opencode"
|
|
693
688
|
```
|
|
694
689
|
|
|
695
690
|
Override per-session with the `OUROBOROS_AGENT_RUNTIME` environment variable if needed.
|
|
@@ -706,8 +701,8 @@ ouroboros mcp info [OPTIONS]
|
|
|
706
701
|
|
|
707
702
|
| Option | Description |
|
|
708
703
|
|--------|-------------|
|
|
709
|
-
| `--runtime TEXT` | Agent runtime backend for orchestrator-driven tools (`claude`, `codex`). Affects which tool variants are instantiated |
|
|
710
|
-
| `--llm-backend TEXT` | LLM backend for interview/seed/evaluation tools (`claude_code`, `litellm`, `codex`). Affects which tool variants are instantiated |
|
|
704
|
+
| `--runtime TEXT` | Agent runtime backend for orchestrator-driven tools (`claude`, `codex`, `opencode`). Affects which tool variants are instantiated |
|
|
705
|
+
| `--llm-backend TEXT` | LLM backend for interview/seed/evaluation tools (`claude_code`, `litellm`, `codex`, `opencode`). Affects which tool variants are instantiated |
|
|
711
706
|
|
|
712
707
|
**Available Tools:**
|
|
713
708
|
|
|
@@ -722,7 +717,7 @@ ouroboros mcp info [OPTIONS]
|
|
|
722
717
|
## Typical Workflows
|
|
723
718
|
|
|
724
719
|
> For first-time setup and the complete onboarding flow, see **[Getting Started](getting-started.md)**.
|
|
725
|
-
> For runtime-specific configuration, see the [Claude Code](runtime-guides/claude-code.md)
|
|
720
|
+
> For runtime-specific configuration, see the [Claude Code](runtime-guides/claude-code.md), [Codex CLI](runtime-guides/codex.md), and [OpenCode](runtime-guides/opencode.md) runtime guides.
|
|
726
721
|
|
|
727
722
|
### Cancelling Stuck Executions
|
|
728
723
|
|
|
@@ -745,11 +740,12 @@ The table below covers the most commonly used variables. For the full list — i
|
|
|
745
740
|
| `ANTHROPIC_API_KEY` | — | Anthropic API key for Claude models |
|
|
746
741
|
| `OPENAI_API_KEY` | — | OpenAI API key for LiteLLM / Codex CLI |
|
|
747
742
|
| `OPENROUTER_API_KEY` | — | OpenRouter API key for consensus and LiteLLM |
|
|
748
|
-
| `OUROBOROS_AGENT_RUNTIME` | `orchestrator.runtime_backend` | Override the runtime backend (`claude`, `codex`) |
|
|
749
|
-
| `OUROBOROS_AGENT_PERMISSION_MODE` | `orchestrator.permission_mode` | Permission mode for
|
|
743
|
+
| `OUROBOROS_AGENT_RUNTIME` | `orchestrator.runtime_backend` | Override the runtime backend (`claude`, `codex`, `opencode`) |
|
|
744
|
+
| `OUROBOROS_AGENT_PERMISSION_MODE` | `orchestrator.permission_mode` | Permission mode for Claude Code / Codex runtimes (no-op for OpenCode) |
|
|
750
745
|
| `OUROBOROS_LLM_BACKEND` | `llm.backend` | Override the LLM-only flow backend |
|
|
751
746
|
| `OUROBOROS_CLI_PATH` | `orchestrator.cli_path` | Path to the Claude CLI binary |
|
|
752
747
|
| `OUROBOROS_CODEX_CLI_PATH` | `orchestrator.codex_cli_path` | Path to the Codex CLI binary |
|
|
748
|
+
| `OUROBOROS_OPENCODE_CLI_PATH` | `orchestrator.opencode_cli_path` | Path to the OpenCode CLI binary |
|
|
753
749
|
|
|
754
750
|
---
|
|
755
751
|
|
|
@@ -75,7 +75,7 @@ Controls how Ouroboros launches and communicates with the agent runtime backend.
|
|
|
75
75
|
|
|
76
76
|
```yaml
|
|
77
77
|
orchestrator:
|
|
78
|
-
runtime_backend: claude # "claude" | "codex" | "opencode"
|
|
78
|
+
runtime_backend: claude # "claude" | "codex" | "opencode"
|
|
79
79
|
permission_mode: acceptEdits # "default" | "acceptEdits" | "bypassPermissions"
|
|
80
80
|
opencode_permission_mode: bypassPermissions
|
|
81
81
|
cli_path: null # Path to Claude CLI binary; null = use SDK default
|
|
@@ -94,8 +94,6 @@ orchestrator:
|
|
|
94
94
|
| `opencode_cli_path` | `string \| null` | `null` | Absolute path to the OpenCode CLI binary (`~` is expanded). When `null`, resolved from `PATH` at runtime. Overridable via `OUROBOROS_OPENCODE_CLI_PATH`. |
|
|
95
95
|
| `default_max_turns` | `int >= 1` | `10` | Default maximum number of turns per agent execution task. |
|
|
96
96
|
|
|
97
|
-
> **OpenCode scope note:** The `opencode` runtime backend is **not yet implemented** — setting `runtime_backend: opencode` will raise `NotImplementedError` at runtime. The `opencode_*` options are listed here for forward-compatibility; support is planned for a future release.
|
|
98
|
-
|
|
99
97
|
---
|
|
100
98
|
|
|
101
99
|
## `llm`
|
|
@@ -35,7 +35,7 @@ That's it. `ooo interview` runs a Socratic interview that auto-generates a seed
|
|
|
35
35
|
|
|
36
36
|
### Alternative: Standalone CLI (`ouroboros`)
|
|
37
37
|
|
|
38
|
-
Use this path if you prefer a standalone terminal workflow, or are using a non-Claude runtime (e.g., Codex CLI).
|
|
38
|
+
Use this path if you prefer a standalone terminal workflow, or are using a non-Claude runtime (e.g., Codex CLI, OpenCode).
|
|
39
39
|
|
|
40
40
|
**Requires Python >= 3.12.**
|
|
41
41
|
|
|
@@ -82,13 +82,14 @@ pip install ouroboros-ai[claude] # + Claude Code runtime deps (anthropic, c
|
|
|
82
82
|
pip install ouroboros-ai[litellm] # + LiteLLM multi-provider support (100+ models)
|
|
83
83
|
pip install ouroboros-ai[mcp] # + MCP server/client runtime support
|
|
84
84
|
pip install ouroboros-ai[tui] # + Textual terminal UI
|
|
85
|
-
pip install ouroboros-ai[all] # Everything (claude + litellm + mcp + tui)
|
|
85
|
+
pip install ouroboros-ai[all] # Everything (claude + litellm + mcp + tui + dashboard)
|
|
86
86
|
|
|
87
87
|
ouroboros --version # verify CLI
|
|
88
88
|
```
|
|
89
89
|
|
|
90
90
|
> **Which extra do I need?** If you only use Claude Code as your runtime, `ouroboros-ai[claude]` is sufficient.
|
|
91
91
|
> For multi-model support via LiteLLM, use `ouroboros-ai[litellm]` or just grab everything with `ouroboros-ai[all]`.
|
|
92
|
+
> Legacy note: `ouroboros-ai[dashboard]` is still accepted as a compatibility extra during the extras transition.
|
|
92
93
|
|
|
93
94
|
**One-liner alternative** (auto-detects your runtime and installs matching extras):
|
|
94
95
|
```bash
|
|
@@ -114,6 +115,7 @@ uv run ouroboros --version # verify CLI
|
|
|
114
115
|
| Claude Code (`ooo`) | Claude Code with plugin support |
|
|
115
116
|
| Standalone CLI (`ouroboros`) | Python >= 3.12, API key (Anthropic or OpenAI) |
|
|
116
117
|
| Codex CLI backend | Python >= 3.12, `npm install -g @openai/codex`, OpenAI API key with access to GPT-5.4 |
|
|
118
|
+
| OpenCode backend | Python >= 3.12, `opencode` on PATH, API key for your configured provider |
|
|
117
119
|
|
|
118
120
|
---
|
|
119
121
|
|
|
@@ -137,7 +139,7 @@ export OPENAI_API_KEY="your-openai-key"
|
|
|
137
139
|
|
|
138
140
|
```yaml
|
|
139
141
|
orchestrator:
|
|
140
|
-
runtime_backend: claude # claude | codex
|
|
142
|
+
runtime_backend: claude # claude | codex | opencode
|
|
141
143
|
|
|
142
144
|
llm:
|
|
143
145
|
backend: claude_code # claude_code | codex | litellm
|
|
@@ -293,20 +295,21 @@ ooo run
|
|
|
293
295
|
|
|
294
296
|
## Choosing a Runtime Backend
|
|
295
297
|
|
|
296
|
-
Ouroboros delegates code execution to a pluggable runtime backend.
|
|
298
|
+
Ouroboros delegates code execution to a pluggable runtime backend. Three ship out of the box:
|
|
297
299
|
|
|
298
|
-
| | Claude Code | Codex CLI |
|
|
299
|
-
|
|
300
|
-
| **Best for** | Claude Code users; subscription billing | OpenAI ecosystem; pay-per-token billing |
|
|
301
|
-
| **Install** | `pip install ouroboros-ai[claude]` | `pip install ouroboros-ai` + `npm install -g @openai/codex` |
|
|
302
|
-
| **Skill shortcuts** | `ooo` inside Claude Code | `ooo` after `ouroboros setup --runtime codex` installs managed Codex skills |
|
|
303
|
-
| **Config value** | `claude` | `codex` |
|
|
300
|
+
| | Claude Code | Codex CLI | OpenCode |
|
|
301
|
+
|---|---|---|---|
|
|
302
|
+
| **Best for** | Claude Code users; subscription billing | OpenAI ecosystem; pay-per-token billing | Multi-provider flexibility; open-source tooling |
|
|
303
|
+
| **Install** | `pip install ouroboros-ai[claude]` | `pip install ouroboros-ai` + `npm install -g @openai/codex` | `pip install ouroboros-ai` + `opencode` on PATH |
|
|
304
|
+
| **Skill shortcuts** | `ooo` inside Claude Code | `ooo` after `ouroboros setup --runtime codex` installs managed Codex skills | `ooo` after `ouroboros setup --runtime opencode` |
|
|
305
|
+
| **Config value** | `claude` | `codex` | `opencode` |
|
|
304
306
|
|
|
305
|
-
|
|
307
|
+
All three backends run the same core workflow engine (seed execution, TUI). However, user-facing commands still differ: Claude Code has native in-session `ooo` workflows, while Codex CLI and OpenCode rely on `ouroboros setup --runtime <backend>` to configure the integration. The `ouroboros` CLI remains the most universal terminal path, and some advanced operations are still MCP/Claude-only.
|
|
306
308
|
|
|
307
309
|
For backend-specific configuration:
|
|
308
310
|
- [Claude Code runtime guide](runtime-guides/claude-code.md)
|
|
309
311
|
- [Codex CLI runtime guide](runtime-guides/codex.md)
|
|
312
|
+
- [OpenCode runtime guide](runtime-guides/opencode.md)
|
|
310
313
|
|
|
311
314
|
---
|
|
312
315
|
|
|
@@ -405,5 +408,6 @@ ouroboros cancel execution <session_id>
|
|
|
405
408
|
- [Configuration Reference](config-reference.md) -- all config keys and defaults
|
|
406
409
|
- [Claude Code runtime guide](runtime-guides/claude-code.md) -- backend-specific setup
|
|
407
410
|
- [Codex CLI runtime guide](runtime-guides/codex.md) -- backend-specific setup
|
|
411
|
+
- [OpenCode runtime guide](runtime-guides/opencode.md) -- backend-specific setup
|
|
408
412
|
|
|
409
413
|
Need help? Open an issue on [GitHub](https://github.com/Q00/ouroboros/issues).
|
|
@@ -13,7 +13,7 @@ The runtime backend is selected via the `orchestrator.runtime_backend` config ke
|
|
|
13
13
|
|
|
14
14
|
```yaml
|
|
15
15
|
orchestrator:
|
|
16
|
-
runtime_backend: claude # Supported values: claude | codex
|
|
16
|
+
runtime_backend: claude # Supported values: claude | codex | opencode
|
|
17
17
|
# The runtime abstraction layer also accepts custom
|
|
18
18
|
# adapters registered in runtime_factory.py
|
|
19
19
|
```
|
|
@@ -26,7 +26,7 @@ ouroboros run workflow --runtime codex seed.yaml
|
|
|
26
26
|
|
|
27
27
|
You can also override the configured backend with the `OUROBOROS_AGENT_RUNTIME` environment variable.
|
|
28
28
|
|
|
29
|
-
> **Extensibility:** Ouroboros uses a pluggable `AgentRuntime` protocol. Claude Code
|
|
29
|
+
> **Extensibility:** Ouroboros uses a pluggable `AgentRuntime` protocol. Claude Code, Codex CLI, and OpenCode are the three shipped backends; additional runtimes can be registered by implementing the protocol and extending `runtime_factory.py`. See [Architecture — How to add a new runtime adapter](architecture.md#how-to-add-a-new-runtime-adapter).
|
|
30
30
|
|
|
31
31
|
## Capability Matrix
|
|
32
32
|
|
|
@@ -34,39 +34,39 @@ You can also override the configured backend with the `OUROBOROS_AGENT_RUNTIME`
|
|
|
34
34
|
|
|
35
35
|
These capabilities are part of the Ouroboros core engine and work the same way regardless of runtime backend.
|
|
36
36
|
|
|
37
|
-
| Capability | Claude Code | Codex CLI | Notes |
|
|
38
|
-
|
|
39
|
-
| Seed file parsing | Yes | Yes | Same YAML schema, same validation |
|
|
40
|
-
| Acceptance criteria tree | Yes | Yes | Structured AC decomposition |
|
|
41
|
-
| Evaluation principles | Yes | Yes | Weighted scoring against principles |
|
|
42
|
-
| Exit conditions | Yes | Yes | Deterministic termination logic |
|
|
43
|
-
| Event sourcing (SQLite) | Yes | Yes | Full event log, replay support |
|
|
44
|
-
| Checkpoint / resume | Yes | Yes | `--resume <session_id>` |
|
|
45
|
-
| TUI dashboard | Yes | Yes | Textual-based progress view |
|
|
46
|
-
| Interview (Socratic seed creation) | Yes | Yes | `ouroboros init start ...` with the appropriate LLM backend |
|
|
47
|
-
| Dry-run validation | Yes | Yes | `--dry-run` validates without executing |
|
|
37
|
+
| Capability | Claude Code | Codex CLI | OpenCode | Notes |
|
|
38
|
+
|------------|:-----------:|:---------:|:--------:|-------|
|
|
39
|
+
| Seed file parsing | Yes | Yes | Yes | Same YAML schema, same validation |
|
|
40
|
+
| Acceptance criteria tree | Yes | Yes | Yes | Structured AC decomposition |
|
|
41
|
+
| Evaluation principles | Yes | Yes | Yes | Weighted scoring against principles |
|
|
42
|
+
| Exit conditions | Yes | Yes | Yes | Deterministic termination logic |
|
|
43
|
+
| Event sourcing (SQLite) | Yes | Yes | Yes | Full event log, replay support |
|
|
44
|
+
| Checkpoint / resume | Yes | Yes | Yes | `--resume <session_id>` |
|
|
45
|
+
| TUI dashboard | Yes | Yes | Yes | Textual-based progress view |
|
|
46
|
+
| Interview (Socratic seed creation) | Yes | Yes | Yes | `ouroboros init start ...` with the appropriate LLM backend |
|
|
47
|
+
| Dry-run validation | Yes | Yes | Yes | `--dry-run` validates without executing |
|
|
48
48
|
|
|
49
49
|
### Runtime Layer (differs by backend)
|
|
50
50
|
|
|
51
51
|
These capabilities depend on the runtime backend's native features and execution model.
|
|
52
52
|
|
|
53
|
-
| Capability | Claude Code | Codex CLI | Notes |
|
|
54
|
-
|
|
55
|
-
| **Authentication** | Max Plan subscription | OpenAI API key | No API key needed for Claude Code |
|
|
56
|
-
| **Underlying model** | Claude (Anthropic) | GPT-5.4+ (OpenAI) | Model choice follows the runtime |
|
|
57
|
-
| **Tool surface** | Read, Write, Edit, Bash, Glob, Grep | Codex-native tool set | Different tool implementations; same task outcomes |
|
|
58
|
-
| **Sandbox / permissions** | Claude Code permission system | Codex sandbox model | Each runtime manages its own safety boundaries |
|
|
59
|
-
| **Cost model** | Included in Max Plan | Per-token API charges | See [OpenAI pricing](https://openai.com/pricing) for Codex costs |
|
|
53
|
+
| Capability | Claude Code | Codex CLI | OpenCode | Notes |
|
|
54
|
+
|------------|:-----------:|:---------:|:--------:|-------|
|
|
55
|
+
| **Authentication** | Max Plan subscription | OpenAI API key | Provider API keys (configured in OpenCode) | No API key needed for Claude Code |
|
|
56
|
+
| **Underlying model** | Claude (Anthropic) | GPT-5.4+ (OpenAI) | Provider-dependent (OpenCode supports multiple providers) | Model choice follows the runtime |
|
|
57
|
+
| **Tool surface** | Read, Write, Edit, Bash, Glob, Grep | Codex-native tool set | Read, Write, Edit, Bash, Glob, Grep | Different tool implementations; same task outcomes |
|
|
58
|
+
| **Sandbox / permissions** | Claude Code permission system | Codex sandbox model | OpenCode permission system | Each runtime manages its own safety boundaries |
|
|
59
|
+
| **Cost model** | Included in Max Plan | Per-token API charges | Depends on configured provider | See [OpenAI pricing](https://openai.com/pricing) for Codex costs |
|
|
60
60
|
|
|
61
61
|
### Integration Surface (UX differences)
|
|
62
62
|
|
|
63
|
-
| Aspect | Claude Code | Codex CLI |
|
|
64
|
-
|
|
65
|
-
| **Primary UX** | In-session skills and MCP server | Session-oriented Ouroboros runtime over Codex CLI transport |
|
|
66
|
-
| **Skill shortcuts (`ooo`)** | Yes -- skills loaded into Claude Code session | Yes -- after `ouroboros setup --runtime codex` installs managed skills into `~/.codex/skills/`, rules into `~/.codex/rules/`, and the MCP/env hookup into `~/.codex/config.toml`. Keep role-specific Ouroboros model overrides in `~/.ouroboros/config.yaml` |
|
|
67
|
-
| **MCP integration** | Native MCP server support | Deterministic skill/MCP dispatch through the Ouroboros Codex adapter |
|
|
68
|
-
| **Session context** | Shares Claude Code session context | Preserved via runtime handles, native session IDs, and resume support |
|
|
69
|
-
| **Install extras** | `ouroboros-ai[claude]` | `ouroboros-ai` (base package) + `codex` on PATH |
|
|
63
|
+
| Aspect | Claude Code | Codex CLI | OpenCode |
|
|
64
|
+
|--------|-------------|-----------|----------|
|
|
65
|
+
| **Primary UX** | In-session skills and MCP server | Session-oriented Ouroboros runtime over Codex CLI transport | MCP server integration |
|
|
66
|
+
| **Skill shortcuts (`ooo`)** | Yes -- skills loaded into Claude Code session | Yes -- after `ouroboros setup --runtime codex` installs managed skills into `~/.codex/skills/`, rules into `~/.codex/rules/`, and the MCP/env hookup into `~/.codex/config.toml`. Keep role-specific Ouroboros model overrides in `~/.ouroboros/config.yaml` | Yes -- after `ouroboros setup --runtime opencode` |
|
|
67
|
+
| **MCP integration** | Native MCP server support | Deterministic skill/MCP dispatch through the Ouroboros Codex adapter | Native MCP server support |
|
|
68
|
+
| **Session context** | Shares Claude Code session context | Preserved via runtime handles, native session IDs, and resume support | Session IDs + resume via `--session` |
|
|
69
|
+
| **Install extras** | `ouroboros-ai[claude]` | `ouroboros-ai` (base package) + `codex` on PATH | `ouroboros-ai` (base package) + `opencode` on PATH |
|
|
70
70
|
|
|
71
71
|
## What Stays the Same
|
|
72
72
|
|
|
@@ -97,15 +97,18 @@ The table below covers the two currently shipped backends. Because Ouroboros use
|
|
|
97
97
|
|-----------|----------|
|
|
98
98
|
| Have a Claude Code Max Plan and want zero API key setup | Claude Code (`runtime_backend: claude`) |
|
|
99
99
|
| Want a Codex-backed Ouroboros session instead of a Claude Code session | Codex CLI (`runtime_backend: codex`) |
|
|
100
|
+
| Want to use OpenCode with multiple model providers | OpenCode (`runtime_backend: opencode`) |
|
|
100
101
|
| Want to use Anthropic's Claude models | Claude Code |
|
|
101
102
|
| Want to use OpenAI's GPT models | Codex CLI |
|
|
102
|
-
|
|
|
103
|
-
|
|
|
103
|
+
| Want to use multiple providers via a single runtime | OpenCode |
|
|
104
|
+
| Need MCP server integration | Claude Code or OpenCode |
|
|
105
|
+
| Want minimal Python dependencies | Codex CLI or OpenCode (base package only) |
|
|
104
106
|
| Want to integrate a custom or third-party AI coding agent | Implement the `AgentRuntime` protocol and register it in `runtime_factory.py` |
|
|
105
107
|
|
|
106
108
|
## Further Reading
|
|
107
109
|
|
|
108
110
|
- [Claude Code runtime guide](runtime-guides/claude-code.md)
|
|
109
111
|
- [Codex CLI runtime guide](runtime-guides/codex.md)
|
|
112
|
+
- [OpenCode runtime guide](runtime-guides/opencode.md)
|
|
110
113
|
- [Platform support matrix](platform-support.md) (OS and Python version compatibility)
|
|
111
114
|
- [Architecture overview](architecture.md) — including [How to add a new runtime adapter](architecture.md#how-to-add-a-new-runtime-adapter)
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
doc_metadata:
|
|
3
|
+
runtime_scope: [opencode]
|
|
4
|
+
-->
|
|
5
|
+
|
|
6
|
+
# Running Ouroboros with OpenCode
|
|
7
|
+
|
|
8
|
+
> For installation and first-run onboarding, see [Getting Started](../getting-started.md).
|
|
9
|
+
|
|
10
|
+
Ouroboros can use **OpenCode** as a runtime backend. [OpenCode](https://opencode.ai) is an open-source AI coding agent that supports multiple model providers (Anthropic, OpenAI, Google, and others). In Ouroboros, the OpenCode backend is presented as a **session-oriented runtime** with the same specification-first workflow harness (acceptance criteria, evaluation principles, deterministic exit conditions).
|
|
11
|
+
|
|
12
|
+
No additional Python SDK is required beyond the base `ouroboros-ai` package.
|
|
13
|
+
|
|
14
|
+
## Prerequisites
|
|
15
|
+
|
|
16
|
+
- **OpenCode** installed and on your `PATH` (see [install steps](#installing-opencode) below)
|
|
17
|
+
- An **API key** for your configured provider (e.g., `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`)
|
|
18
|
+
- **Python >= 3.12**
|
|
19
|
+
|
|
20
|
+
## Installing OpenCode
|
|
21
|
+
|
|
22
|
+
OpenCode is distributed as a standalone binary. Install via the official script:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
curl -fsSL https://opencode.ai/install | bash
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Verify the installation:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
opencode --version
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
For alternative install methods, see the [OpenCode documentation](https://opencode.ai/docs).
|
|
35
|
+
|
|
36
|
+
## Configuration
|
|
37
|
+
|
|
38
|
+
To select OpenCode as the runtime backend, set the following in your Ouroboros configuration:
|
|
39
|
+
|
|
40
|
+
```yaml
|
|
41
|
+
orchestrator:
|
|
42
|
+
runtime_backend: opencode
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Or pass the backend on the command line:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
uv run ouroboros run workflow --runtime opencode ~/.ouroboros/seeds/seed_abcd1234ef56.yaml
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Setup
|
|
52
|
+
|
|
53
|
+
Run the setup command to auto-configure:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
ouroboros setup --runtime opencode
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
This:
|
|
60
|
+
|
|
61
|
+
- Detects the `opencode` binary on your `PATH`
|
|
62
|
+
- Writes `orchestrator.runtime_backend: opencode` to `~/.ouroboros/config.yaml`
|
|
63
|
+
- Registers the Ouroboros MCP server in OpenCode's configuration
|
|
64
|
+
|
|
65
|
+
## How It Works
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
+-----------------+ +------------------+ +-----------------+
|
|
69
|
+
| Seed YAML | --> | Orchestrator | --> | OpenCode |
|
|
70
|
+
| (your task) | | (runtime_factory)| | (runtime) |
|
|
71
|
+
+-----------------+ +------------------+ +-----------------+
|
|
72
|
+
|
|
|
73
|
+
v
|
|
74
|
+
+------------------+
|
|
75
|
+
| Tools Available |
|
|
76
|
+
| - Read |
|
|
77
|
+
| - Write |
|
|
78
|
+
| - Edit |
|
|
79
|
+
| - Bash |
|
|
80
|
+
| - Glob |
|
|
81
|
+
| - Grep |
|
|
82
|
+
+------------------+
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The `OpenCodeRuntime` adapter launches `opencode run --format json` as a subprocess for each task execution. The orchestrator pipes the prompt via stdin and parses the structured JSON event stream from stdout.
|
|
86
|
+
|
|
87
|
+
> For a side-by-side comparison of all runtime backends, see the [runtime capability matrix](../runtime-capability-matrix.md).
|
|
88
|
+
|
|
89
|
+
## OpenCode-Specific Strengths
|
|
90
|
+
|
|
91
|
+
- **Multi-provider support** -- use Anthropic, OpenAI, Google, or other providers through a single runtime
|
|
92
|
+
- **Rich tool access** -- full suite of file, shell, and search tools (same surface as Claude Code)
|
|
93
|
+
- **Native MCP integration** -- OpenCode has built-in MCP server support
|
|
94
|
+
- **Open-source** -- fully open-source, allowing inspection and contribution
|
|
95
|
+
|
|
96
|
+
## CLI Options
|
|
97
|
+
|
|
98
|
+
### Workflow Commands
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Execute workflow (OpenCode runtime)
|
|
102
|
+
uv run ouroboros run workflow --runtime opencode ~/.ouroboros/seeds/seed_abcd1234ef56.yaml
|
|
103
|
+
|
|
104
|
+
# Debug output (show logs and agent output)
|
|
105
|
+
uv run ouroboros run workflow --runtime opencode --debug ~/.ouroboros/seeds/seed_abcd1234ef56.yaml
|
|
106
|
+
|
|
107
|
+
# Resume a previous session
|
|
108
|
+
uv run ouroboros run workflow --runtime opencode --resume <session_id> ~/.ouroboros/seeds/seed_abcd1234ef56.yaml
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Known Limitations
|
|
112
|
+
|
|
113
|
+
### Session pollution
|
|
114
|
+
|
|
115
|
+
Each task execution via `opencode run` creates a visible session in OpenCode's session history. Long-running workflows with many orchestrator steps will accumulate sessions. A future phase will reparent these sessions under the caller to prevent polluting the session picker (see GitHub #164 Phase 2).
|
|
116
|
+
|
|
117
|
+
### No interactive mode
|
|
118
|
+
|
|
119
|
+
The adapter uses `opencode run --format json` (non-interactive). Features that require interactive OpenCode sessions (e.g., manual approval prompts) are not available during Ouroboros execution.
|
|
120
|
+
|
|
121
|
+
## Troubleshooting
|
|
122
|
+
|
|
123
|
+
### OpenCode not found
|
|
124
|
+
|
|
125
|
+
Ensure `opencode` is installed and available on your `PATH`:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
which opencode
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
If not installed:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
curl -fsSL https://opencode.ai/install | bash
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### API key errors
|
|
138
|
+
|
|
139
|
+
Verify your provider API key is set:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# For Anthropic
|
|
143
|
+
echo $ANTHROPIC_API_KEY
|
|
144
|
+
|
|
145
|
+
# For OpenAI
|
|
146
|
+
echo $OPENAI_API_KEY
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### "Providers: warning" in health check
|
|
150
|
+
|
|
151
|
+
This is normal when using the orchestrator runtime backends. The warning refers to LiteLLM providers, which are not used in orchestrator mode.
|
|
152
|
+
|
|
153
|
+
### "EventStore not initialized"
|
|
154
|
+
|
|
155
|
+
The database will be created automatically at `~/.ouroboros/ouroboros.db`.
|
|
156
|
+
|
|
157
|
+
## Cost
|
|
158
|
+
|
|
159
|
+
Using OpenCode as the runtime backend incurs API charges from your configured provider. Costs depend on:
|
|
160
|
+
|
|
161
|
+
- Provider and model selected in OpenCode configuration
|
|
162
|
+
- Task complexity and token usage
|
|
163
|
+
- Number of tool calls and iterations
|
|
164
|
+
|
|
165
|
+
Refer to your provider's pricing page for current rates.
|