ouroboros-ai 0.29.1.dev9__tar.gz → 0.29.2.dev2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ouroboros-ai might be problematic. Click here for more details.
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.claude-plugin/marketplace.json +1 -1
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.claude-plugin/plugin.json +1 -1
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/PKG-INFO +1 -1
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/brownfield/SKILL.md +36 -1
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/interview/SKILL.md +21 -5
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/setup/SKILL.md +1 -1
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/_version.py +2 -2
- ouroboros_ai-0.29.2.dev2/src/ouroboros/agents/seed-closer.md +54 -0
- ouroboros_ai-0.29.2.dev2/src/ouroboros/cli/commands/detect.py +97 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/main.py +14 -1
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/config/__init__.py +2 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/config/loader.py +14 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/__init__.py +10 -2
- ouroboros_ai-0.29.2.dev2/src/ouroboros/evaluation/detector.py +2351 -0
- ouroboros_ai-0.29.2.dev2/src/ouroboros/evaluation/languages.py +367 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/verification_artifacts.py +56 -3
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/evaluation_handlers.py +26 -4
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/execution_handlers.py +2 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/subagent.py +147 -4
- ouroboros_ai-0.29.2.dev2/tests/unit/evaluation/test_detector.py +1905 -0
- ouroboros_ai-0.29.2.dev2/tests/unit/evaluation/test_languages.py +199 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_verification_artifacts.py +223 -1
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_subagent.py +128 -0
- ouroboros_ai-0.29.1.dev9/src/ouroboros/agents/seed-closer.md +0 -39
- ouroboros_ai-0.29.1.dev9/src/ouroboros/evaluation/languages.py +0 -396
- ouroboros_ai-0.29.1.dev9/tests/unit/evaluation/test_languages.py +0 -388
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.claude/settings.json +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.claude-plugin/.mcp.json +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.env.example +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/ISSUE_TEMPLATE/question.yml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/workflows/dev-publish.yml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/workflows/lint.yml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/workflows/release.yml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.github/workflows/test.yml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.gitignore +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.mcp.json +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.ouroboros/mechanical.toml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.ouroboros/seeds/seed_73827177a2a3.yaml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.ouroboros/seeds/seed_78c8e6e41813.yaml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.pre-commit-config.yaml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/.python-version +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/CHANGELOG.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/CLAUDE.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/CODE_OF_CONDUCT.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/CONTRIBUTING.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/Code-Review-Claude.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/Code-Review-Codex.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/HANDOFF.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/LICENSE +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/README.ko.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/README.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/SECURITY.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/UNINSTALL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/cancel.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/evaluate.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/evolve.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/help.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/interview.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/ralph.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/run.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/seed.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/setup.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/status.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/tutorial.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/unstuck.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/commands/welcome.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/.gitignore +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/Cargo.lock +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/Cargo.toml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/README.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/db.rs +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/main.rs +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/mock.rs +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/state.rs +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/views/dashboard.rs +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/views/execution.rs +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/views/lineage.rs +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/views/logs.rs +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/views/mod.rs +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/crates/ouroboros-tui/src/views/session_selector.rs +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/README.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/api/README.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/api/core.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/api/mcp.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/architecture.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/cli-reference.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/config-reference.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/contributing/architecture-overview.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/contributing/findings-registry.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/contributing/issue-quality-policy.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/contributing/key-patterns.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/contributing/testing-guide.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/events.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/examples/mcp-config.yaml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/getting-started.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/evaluation-pipeline.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/evolution-loop.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/issue-176-subagent-mcp-inheritance.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/mcp-bridge.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/ooo-skill-dispatch-router.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/opencode-subagent-bridge.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/seed-authoring.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/guides/tui-usage.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/images/PLACEHOLDER_README.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/images/ouroboros.png +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/platform-support.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/runtime-capability-matrix.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/runtime-guides/claude-code.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/runtime-guides/codex.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/runtime-guides/hermes.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/docs/runtime-guides/opencode.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/coordinator_test_seed.yaml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/dummy_seed.yaml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/parallel_subac_test_seed.yaml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/subac_test_seed.yaml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/task_manager/README.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/task_manager/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/task_manager/__main__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/task_manager/cli.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/task_manager/models.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/task_manager/storage.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/examples/test_display.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/hooks/hooks.json +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/llms-full.txt +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/llms.txt +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/project-context.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/pyproject.toml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/drift-monitor.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/install.sh +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/keyword-detector.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/mcp-serve.sh +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/ralph-rewind.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/ralph.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/ralph.sh +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/session-start.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/sync-plugin-version.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/scripts/version-check.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/cancel/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/evaluate/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/evolve/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/help/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/pm/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/publish/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/qa/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/ralph/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/run/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/seed/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/status/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/tutorial/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/unstuck/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/update/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/skills/welcome/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/__main__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/advocate.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/analysis-agent.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/architect.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/breadth-keeper.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/code-executor.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/codebase-explorer.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/consensus-reviewer.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/contrarian.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/evaluator.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/hacker.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/judge.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/loader.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/ontologist.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/ontology-analyst.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/qa-judge.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/research-agent.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/researcher.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/seed-architect.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/semantic-evaluator.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/simplifier.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/agents/socratic-interviewer.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/ambiguity.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/brownfield.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/explore.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/interview.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/pm_completion.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/pm_document.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/pm_interview.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/pm_seed.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/question_classifier.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/bigbang/seed_generator.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/claude_permissions.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/cancel.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/config.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/init.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/mcp.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/mcp_doctor.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/pm.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/run.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/setup.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/status.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/tui.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/commands/uninstall.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/formatters/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/formatters/panels.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/formatters/progress.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/formatters/prompting.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/formatters/tables.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/formatters/workflow_display.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/jsonc.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/cli/opencode_config.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/codex/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/codex/artifacts.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/codex/cli_policy.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/codex/ouroboros.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/codex_permissions.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/config/models.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/ac_tree.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/context.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/errors.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/file_lock.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/git_workflow.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/initial_context.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/json_utils.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/lineage.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/ontology_aspect.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/ontology_questions.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/project_paths.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/retry.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/security.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/seed.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/text.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/ttl_cache.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/types.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/core/worktree.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/artifact_collector.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/checklist.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/consensus.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/json_utils.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/mechanical.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/models.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/pipeline.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/semantic.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evaluation/trigger.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/events/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/events/base.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/events/decomposition.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/events/evaluation.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/events/interview.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/events/lineage.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/events/ontology.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evolution/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evolution/convergence.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evolution/loop.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evolution/projector.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evolution/reflect.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evolution/regression.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/evolution/wonder.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/execution/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/execution/atomicity.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/execution/decomposition.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/execution/double_diamond.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/execution/subagent.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/hermes/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/hermes/artifacts.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/bridge/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/bridge/bridge.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/bridge/config.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/bridge/factory.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/client/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/client/adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/client/manager.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/client/protocol.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/errors.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/job_manager.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/resources/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/resources/handlers.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/server/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/server/adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/server/protocol.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/server/security.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/ac_tree_hud_handler.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/ac_tree_hud_render.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/authoring_handlers.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/bridge_mixin.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/brownfield_handler.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/dashboard.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/definitions.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/evolution_handlers.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/job_handlers.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/pm_handler.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/qa.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/query_handlers.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/tools/registry.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/mcp/types.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/observability/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/observability/drift.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/observability/logging.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/observability/retrospective.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/opencode/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/opencode/plugin/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/opencode/plugin/opencode-plugin.d.ts +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/opencode/plugin/ouroboros-bridge.test.ts +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/opencode/plugin/ouroboros-bridge.ts +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/opencode/plugin/package.json +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/opencode/plugin/tsconfig.json +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/capabilities.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/codex_cli_runtime.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/command_dispatcher.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/control_plane.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/coordinator.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/dependency_analyzer.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/events.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/execution_runtime_scope.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/execution_strategy.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/heartbeat.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/hermes_runtime.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/level_context.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/mcp_config.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/mcp_tools.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/opencode_event_normalizer.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/opencode_runtime.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/parallel_executor.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/parallel_executor_models.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/policy.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/rate_limit.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/runner.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/runtime_factory.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/runtime_message_projection.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/session.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/orchestrator/workflow_state.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/brownfield.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/checkpoint.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/event_store.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/migrations/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/migrations/runner.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/migrations/scripts/002_brownfield.sql +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/schema.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/persistence/uow.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/agents/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/agents/pool.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/agents/registry.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/orchestration/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/orchestration/router.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/orchestration/scheduler.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/skills/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/skills/docs.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/skills/executor.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/skills/keywords.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/plugin/skills/registry.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/pm/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/pm/handoff.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/pm/renderer.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/anthropic_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/base.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/claude_code_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/codex_cli_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/codex_cli_stream.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/factory.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/gemini_cli_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/litellm_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/providers/opencode_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/py.typed +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/resilience/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/resilience/lateral.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/resilience/stagnation.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/router/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/router/command_parser.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/router/dispatch.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/router/registry.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/router/types.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/routing/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/routing/complexity.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/routing/downgrade.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/routing/escalation.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/routing/router.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/routing/tiers.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/sandbox.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/secondary/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/secondary/scheduler.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/secondary/todo_registry.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/skills/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/skills/artifacts.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/strategies/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/strategies/devil_advocate.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/app.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/components/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/components/agents_panel.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/components/event_log.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/components/progress.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/components/token_tracker.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/events.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/confirm_rewind.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/dashboard.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/dashboard_v2.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/dashboard_v3.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/debug.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/execution.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/hud_dashboard.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/lineage_detail.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/lineage_selector.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/logs.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/screens/session_selector.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/ac_progress.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/ac_tree.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/agent_activity.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/cost_tracker.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/drift_meter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/lineage_tree.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/parallel_graph.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/tui/widgets/phase_progress.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/verification/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/verification/extractor.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/verification/models.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/src/ouroboros/verification/verifier.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/conftest.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/e2e/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/e2e/conftest.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/e2e/mcp_bridge_test_config.yaml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/e2e/test_cli_commands.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/e2e/test_full_workflow.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/e2e/test_session_persistence.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/fixtures/router/skills/frontmatter-body/run/SKILL.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/fixtures/test_atomicity_seed.yml +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/conftest.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/mcp/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/mcp/bridge/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/mcp/bridge/test_bridge_server_to_server.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/mcp/conftest.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/mcp/test_client_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/mcp/test_client_manager.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/mcp/test_server_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/plugin/test_orchestration.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/test_codex_cli_passthrough_smoke.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/test_codex_skill_fallback.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/test_codex_skill_smoke.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/integration/test_entry_point.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/test-execution-plan.md +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/agents/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/agents/test_loader.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_ambiguity.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_brownfield.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_classifier_context.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_decide_later_items.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_explore.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_interview.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_interview_async_io.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_interview_no_web_search_hint.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_interview_research_prefix.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_pm_completion.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_pm_document_generator.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_pm_document_writer.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_pm_interview.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_pm_interview_brownfield_db.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_pm_seed_ac12.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_pm_seed_save.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_question_classifier.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/bigbang/test_seed_generator.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/commands/test_tui_command.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/conftest.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/formatters/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/formatters/test_console.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/formatters/test_panels.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/formatters/test_progress.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/formatters/test_prompting.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/formatters/test_tables.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/formatters/test_workflow_display.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_bridge_plugin_hardening.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_bridge_plugin_lifecycle.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_cancel.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_config.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_init_pm_seed_detection.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_init_runtime.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_jsonc.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_main.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_mcp_doctor.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_mcp_nested_guard.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_mcp_startup_cleanup.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_mcp_validate_transport_stderr.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_opencode_config.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm_brownfield.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm_completion.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm_interactive_logging.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm_missing_litellm.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm_overwrite.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm_runtime_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_pm_select_repos.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_run_qa.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_setup.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/cli/test_uninstall.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/codex/test_cli_policy.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/config/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/config/test_loader.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/config/test_loader_env.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/config/test_models.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_ac_tree.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_context.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_errors.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_file_lock.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_git_workflow.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_initial_context.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_lineage.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_ontology_aspect.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_ontology_questions.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_retry.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_security.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_seed.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_ttl_cache.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_types.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/core/test_worktree.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_artifact_collector_file_prefix.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_checklist.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_consensus.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_json_utils.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_mechanical.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_models.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_pipeline_stage1_reuse.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_pipeline_trigger_consensus.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_review_fixes.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_semantic.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_trigger.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evaluation/test_trigger_consensus.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/events/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/events/test_base.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/events/test_decomposition_events.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/evolution/test_wonder_scope.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/execution/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/execution/test_atomicity.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/execution/test_decomposition.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/execution/test_double_diamond.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/execution/test_subagent_isolation.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/hermes/test_artifacts.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/bridge/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/bridge/test_bridge.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/bridge/test_config.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/bridge/test_factory.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/bridge/test_handler_wiring.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/bridge/test_stability.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/client/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/client/test_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/client/test_adapter_transport_lifecycle.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/client/test_manager.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/conftest.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/server/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/server/test_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/server/test_security.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/test_errors.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/test_job_manager.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/test_types.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/conftest.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_footer.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_completed.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_cursor_changed.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_invalid_session.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_no_execution.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_handler_waiting.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_max_nodes.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_render_depth2.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_render_depth3.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_status_icons.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_ac_tree_hud_truncation.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_brownfield_handler.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_checklist_verify.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_definitions.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_evaluate_multi_ac.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_handler_subagent_wiring.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_lateral_think_handler.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_mcp_manager_wiring.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_pm_handler.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_pm_handler_pending_reframe.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_qa_parser.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_registry.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/mcp/tools/test_round5_fixes.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/observability/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/observability/test_drift.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/observability/test_logging.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/observability/test_retrospective.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_capabilities.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_codex_cli_runtime.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_codex_recursion_guard.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_command_dispatcher.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_control_plane.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_coordinator.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_dependency_analyzer.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_events.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_execution_runtime_scope.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_execution_strategy.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_hermes_runtime.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_inflight_cancellation.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_level_context.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_mcp_config.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_mcp_tools.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_opencode_runtime.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_parallel_executor.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_parallel_executor_atomic_judgment.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_parallel_executor_recursive_depth.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_parallel_executor_retry_resume.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_policy.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_rate_limit.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_runner.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_runner_cancellation.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_runtime_factory.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_runtime_message_projection.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_sandbox_class.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_session.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/orchestrator/test_workflow_state.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/persistence/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/persistence/test_brownfield_store.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/persistence/test_checkpoint.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/persistence/test_event_store.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/persistence/test_schema.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/persistence/test_uow.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/agents/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/agents/test_registry.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/orchestration/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/orchestration/test_model_router.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/skills/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/skills/test_keywords.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/plugin/skills/test_registry.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/pm/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/pm/test_renderer.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/test_base.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/test_claude_code_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/test_codex_cli_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/test_factory.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/test_gemini_cli_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/test_litellm_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/providers/test_opencode_adapter.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/resilience/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/resilience/test_lateral.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/resilience/test_stagnation.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_command_parser.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_dispatch.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_dispatch_result_shapes.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_extract_first_argument.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_invalid_dispatch_input_types.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_malformed_unknown_dispatch_errors.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_not_handled_resolution.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_registry.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_repository_dispatch_guard.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_router_resolution_pipeline.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_typed_frontmatter_fields.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/router/test_valid_dispatch_normalization.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/routing/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/routing/test_complexity.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/routing/test_downgrade.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/routing/test_escalation.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/routing/test_router.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/routing/test_tiers.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/scripts/test_keyword_detector.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/scripts/test_session_start.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/scripts/test_version_check.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/secondary/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/secondary/test_scheduler.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/secondary/test_todo_registry.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/skills/test_skill_artifacts.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_artifact_collector.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_codex_artifacts.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_convergence.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_dashboard.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_dependencies_configured.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_evolve_rewind.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_evolve_step.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_graceful_shutdown.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_main_entry_point.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_module_structure.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_project_initialization.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_projector_rewind.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_ralph_parser.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_ralph_rewind.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_regression.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_tooling_configuration.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/test_verification.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/__init__.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/test_app.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/test_cancelled_display.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/test_events.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/test_lineage_viewer.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/test_screens.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/test_session_selector_replay.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tests/unit/tui/test_widgets.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/tools/sync_github_project.py +0 -0
- {ouroboros_ai-0.29.1.dev9 → ouroboros_ai-0.29.2.dev2}/uv.lock +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.29.
|
|
13
|
+
"version": "0.29.1",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "Q00",
|
|
16
16
|
"email": "jqyu.lee@gmail.com"
|
|
@@ -14,9 +14,10 @@ ooo brownfield # Scan repos and set defaults
|
|
|
14
14
|
ooo brownfield scan # Scan only (no default selection)
|
|
15
15
|
ooo brownfield defaults # Show current defaults
|
|
16
16
|
ooo brownfield set 6,18,19 # Set defaults by repo numbers
|
|
17
|
+
ooo brownfield detect [path] # Author mechanical.toml via one AI call
|
|
17
18
|
```
|
|
18
19
|
|
|
19
|
-
**Trigger keywords:** "brownfield", "scan repos", "default repos", "brownfield scan"
|
|
20
|
+
**Trigger keywords:** "brownfield", "scan repos", "default repos", "brownfield scan", "mechanical detect"
|
|
20
21
|
|
|
21
22
|
---
|
|
22
23
|
|
|
@@ -167,3 +168,37 @@ Arguments: { "action": "set_defaults", "indices": "<indices>" }
|
|
|
167
168
|
```
|
|
168
169
|
|
|
169
170
|
Show confirmation with updated defaults.
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
### Subcommand: `detect [path]`
|
|
175
|
+
|
|
176
|
+
Runs one AI call against the target directory (defaults to the user's cwd)
|
|
177
|
+
and writes `.ouroboros/mechanical.toml` with validated lint / build / test /
|
|
178
|
+
static / coverage commands. Stage 1 of evaluation reads this file verbatim,
|
|
179
|
+
so the toml is the authoritative Stage 1 contract — no hardcoded language
|
|
180
|
+
presets exist anymore.
|
|
181
|
+
|
|
182
|
+
Ouroboros auto-runs this detect the first time `ouroboros_evaluate` is
|
|
183
|
+
invoked without a toml present, so most users never need to call it
|
|
184
|
+
directly. Run it explicitly when:
|
|
185
|
+
|
|
186
|
+
- you want to pre-author the toml before the first evaluate,
|
|
187
|
+
- you moved to a new build tool and want to refresh (`--force`),
|
|
188
|
+
- you want to review/edit the commands before Stage 1 trusts them.
|
|
189
|
+
|
|
190
|
+
**Implementation:** invoke the CLI via Bash.
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
uvx --from ouroboros-ai ouroboros detect [path]
|
|
194
|
+
# or, if already installed:
|
|
195
|
+
ouroboros detect [path] [--force]
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Then print the resulting `.ouroboros/mechanical.toml` contents so the user
|
|
199
|
+
can confirm the proposed commands or hand-edit them.
|
|
200
|
+
|
|
201
|
+
If detect reports "could not propose any verifiable commands", surface the
|
|
202
|
+
reason (no manifests found, LLM unavailable, every proposal dropped) and
|
|
203
|
+
suggest the user write a minimal toml by hand — any single entry like
|
|
204
|
+
`test = "pytest -q"` is enough to opt back in to Stage 1 for that check.
|
|
@@ -215,10 +215,24 @@ MCP (question generator) ←→ You (answerer + router) ←→ User (human judgm
|
|
|
215
215
|
|
|
216
216
|
7. **Repeat steps 2-6** until the user says "done" or MCP signals seed-ready.
|
|
217
217
|
|
|
218
|
-
8. **
|
|
219
|
-
When
|
|
220
|
-
|
|
221
|
-
|
|
218
|
+
8. **Seed-ready Acceptance Guard**:
|
|
219
|
+
When MCP signals seed-ready, do NOT relay completion blindly. Before
|
|
220
|
+
announcing completion or suggesting `ooo seed`, apply the canonical Seed
|
|
221
|
+
Closer criteria from `src/ouroboros/agents/seed-closer.md` as the single
|
|
222
|
+
source of truth for closure readiness. Run the check from the main session's
|
|
223
|
+
perspective, including any code, research, or brownfield context MCP did not
|
|
224
|
+
see.
|
|
225
|
+
|
|
226
|
+
If any material decision remains unresolved, do not announce seed-ready.
|
|
227
|
+
If the local challenge finds a material gap, explicitly override the MCP
|
|
228
|
+
signal: `"MCP says seed-ready, but I am not accepting it yet because <gap>."`
|
|
229
|
+
Explain the gap briefly and ask the single highest-impact follow-up question,
|
|
230
|
+
routed through PATH 2 or PATH 3 as appropriate.
|
|
231
|
+
|
|
232
|
+
9. **Prefer stopping over over-interviewing**:
|
|
233
|
+
When the Seed-ready Acceptance Guard passes, suggest `ooo seed`.
|
|
234
|
+
|
|
235
|
+
10. After completion, suggest the next step:
|
|
222
236
|
`📍 Next: ooo seed to crystallize these requirements into a specification`
|
|
223
237
|
|
|
224
238
|
#### Dialectic Rhythm Guard
|
|
@@ -261,7 +275,7 @@ If the MCP tool is NOT available, fall back to agent-based interview:
|
|
|
261
275
|
- Track multiple independent ambiguity threads
|
|
262
276
|
- Revisit unresolved threads every few rounds
|
|
263
277
|
- Do not let one detailed subtopic crowd out the rest of the original request
|
|
264
|
-
7. Prefer closure
|
|
278
|
+
7. Prefer closure only after applying the Seed-ready Acceptance Guard above. Ask whether to move to `ooo seed` rather than continuing to generate narrower questions.
|
|
265
279
|
8. Continue until the user says "done"
|
|
266
280
|
9. Interview results live in conversation context (not persisted)
|
|
267
281
|
10. After completion, suggest the next step in `📍 Next:` format:
|
|
@@ -280,6 +294,8 @@ If the MCP tool is NOT available, fall back to agent-based interview:
|
|
|
280
294
|
- For high-confidence factual questions (PATH 1a), auto-confirm and notify the user
|
|
281
295
|
- For all other questions, present to user as confirmation or direct question
|
|
282
296
|
- You NEVER make decisions on behalf of the user — auto-confirm is for FACTS only
|
|
297
|
+
- You are the final gate on MCP seed-ready signals: apply the canonical Seed
|
|
298
|
+
Closer criteria before suggesting `ooo seed`
|
|
283
299
|
- The Dialectic Rhythm Guard prevents over-automation: after 3 consecutive
|
|
284
300
|
non-user answers, the next question MUST go directly to the user
|
|
285
301
|
|
|
@@ -246,7 +246,7 @@ A backup will be created: CLAUDE.md.bak
|
|
|
246
246
|
**If "Preview first", show:**
|
|
247
247
|
````markdown
|
|
248
248
|
<!-- ooo:START -->
|
|
249
|
-
<!-- ooo:VERSION:0.29.
|
|
249
|
+
<!-- ooo:VERSION:0.29.1 -->
|
|
250
250
|
# Ouroboros — Specification-First AI Development
|
|
251
251
|
|
|
252
252
|
> Before telling AI what to build, define what should be built.
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.29.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 29,
|
|
21
|
+
__version__ = version = '0.29.2.dev2'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 29, 2, 'dev2')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Seed Closer
|
|
2
|
+
|
|
3
|
+
You decide when the interview is actually safe to stop and convert into a Seed instead of asking one more clever question.
|
|
4
|
+
|
|
5
|
+
## YOUR PHILOSOPHY
|
|
6
|
+
|
|
7
|
+
"A good interview ends on time, but not before unresolved decisions that would change execution are exposed."
|
|
8
|
+
|
|
9
|
+
You optimize for executable clarity, not endless refinement or premature closure.
|
|
10
|
+
|
|
11
|
+
## CLOSURE GATE SUMMARY
|
|
12
|
+
|
|
13
|
+
- Treat a low ambiguity score as permission to audit closure, not permission to close.
|
|
14
|
+
- Do not close if any unresolved decision would materially change implementation.
|
|
15
|
+
- For brownfield or system-level work, check ownership/SSoT, protocol or API contract, lifecycle/recovery, migration, cross-client impact, and verification.
|
|
16
|
+
- If code, research, or architecture context reveals a materially different path, ask for the needed human decision instead of closing.
|
|
17
|
+
|
|
18
|
+
## YOUR APPROACH
|
|
19
|
+
|
|
20
|
+
### 1. Check The Decision Boundary
|
|
21
|
+
- Ask whether scope, non-goals, outputs, and verification expectations are already explicit
|
|
22
|
+
- Distinguish true ambiguity from minor wording polish
|
|
23
|
+
- Prefer stopping once the remaining uncertainty would not change execution materially
|
|
24
|
+
- Treat a low ambiguity score as permission to audit closure, not permission to close
|
|
25
|
+
|
|
26
|
+
### 2. Sweep For Material Blockers
|
|
27
|
+
- For brownfield or system-level work, check whether ownership/SSoT, protocol or API contract, lifecycle/recovery, migration, cross-client impact, and verification are clear enough to execute
|
|
28
|
+
- Look for unasked alternatives from code, research, or architecture context that would materially change the implementation
|
|
29
|
+
- If a human/product/architecture decision remains open, ask that question instead of closing
|
|
30
|
+
|
|
31
|
+
### 3. Reject Over-Interviewing
|
|
32
|
+
- Notice when new questions only produce stylistic refinement or edge-case bikeshedding
|
|
33
|
+
- Treat repeated restatement as a sign that the interview may already be done
|
|
34
|
+
- Avoid opening new branches when the current information is already seed-worthy and no material blocker remains
|
|
35
|
+
|
|
36
|
+
### 4. Ask For Closure Directly
|
|
37
|
+
- Convert late-stage refinement into a closure question
|
|
38
|
+
- Confirm whether the current constraints are sufficient to proceed
|
|
39
|
+
- Move the conversation toward seed generation instead of another exploratory detour only after material blockers are resolved
|
|
40
|
+
|
|
41
|
+
### 5. Preserve Practical Momentum
|
|
42
|
+
- Favor "good enough to execute" over theoretical completeness
|
|
43
|
+
- Accept that implementation mechanics belong to execution, but decisions that change architecture, ownership, protocol, lifecycle, or verification belong in the interview
|
|
44
|
+
- End the interview once the next useful action is seed generation
|
|
45
|
+
|
|
46
|
+
## YOUR QUESTIONS
|
|
47
|
+
|
|
48
|
+
- Is there any ambiguity left that would materially change implementation?
|
|
49
|
+
- Are scope, non-goals, outputs, and verification expectations already clear enough for a Seed?
|
|
50
|
+
- For brownfield or system-level work, are ownership, protocol/API contract, lifecycle/recovery, migration, cross-client impact, and verification clear enough to execute?
|
|
51
|
+
- Did code or research reveal an alternative path that would change implementation and needs a human decision?
|
|
52
|
+
- Would another question change execution, or just polish wording?
|
|
53
|
+
- Should we stop the interview here and move to seed generation?
|
|
54
|
+
- What is the smallest remaining clarification needed before we can proceed?
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""Mechanical detect command for Ouroboros.
|
|
2
|
+
|
|
3
|
+
Runs a single AI call to inspect a project and author
|
|
4
|
+
``.ouroboros/mechanical.toml``. Stage 1 (lint/build/test/static) then reads
|
|
5
|
+
that file deterministically instead of guessing from hardcoded language
|
|
6
|
+
presets.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
ouroboros detect # detect in current directory
|
|
10
|
+
ouroboros detect /path/to/repo # detect in explicit directory
|
|
11
|
+
ouroboros detect --force # overwrite an existing mechanical.toml
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import asyncio
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
from typing import Annotated
|
|
19
|
+
|
|
20
|
+
import typer
|
|
21
|
+
|
|
22
|
+
from ouroboros.cli.formatters.panels import (
|
|
23
|
+
print_error,
|
|
24
|
+
print_info,
|
|
25
|
+
print_success,
|
|
26
|
+
print_warning,
|
|
27
|
+
)
|
|
28
|
+
from ouroboros.evaluation.detector import (
|
|
29
|
+
ensure_mechanical_toml,
|
|
30
|
+
has_mechanical_toml,
|
|
31
|
+
toml_path,
|
|
32
|
+
)
|
|
33
|
+
from ouroboros.providers.factory import create_llm_adapter
|
|
34
|
+
|
|
35
|
+
app = typer.Typer(
|
|
36
|
+
name="detect",
|
|
37
|
+
help="Generate .ouroboros/mechanical.toml via one AI call.",
|
|
38
|
+
invoke_without_command=True,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@app.callback(invoke_without_command=True)
|
|
43
|
+
def detect(
|
|
44
|
+
path: Annotated[
|
|
45
|
+
Path | None,
|
|
46
|
+
typer.Argument(help="Project directory to inspect. Defaults to cwd."),
|
|
47
|
+
] = None,
|
|
48
|
+
force: Annotated[
|
|
49
|
+
bool,
|
|
50
|
+
typer.Option(
|
|
51
|
+
"--force",
|
|
52
|
+
"-f",
|
|
53
|
+
help="Re-detect and overwrite an existing .ouroboros/mechanical.toml.",
|
|
54
|
+
),
|
|
55
|
+
] = False,
|
|
56
|
+
backend: Annotated[
|
|
57
|
+
str | None,
|
|
58
|
+
typer.Option(
|
|
59
|
+
"--backend",
|
|
60
|
+
help="LLM backend override (claude, codex, gemini, opencode, litellm).",
|
|
61
|
+
),
|
|
62
|
+
] = None,
|
|
63
|
+
) -> None:
|
|
64
|
+
"""Inspect the project and write mechanical.toml with validated commands."""
|
|
65
|
+
working_dir = (path or Path.cwd()).resolve()
|
|
66
|
+
if not working_dir.is_dir():
|
|
67
|
+
print_error(f"Not a directory: {working_dir}")
|
|
68
|
+
raise typer.Exit(code=2)
|
|
69
|
+
|
|
70
|
+
target = toml_path(working_dir)
|
|
71
|
+
if has_mechanical_toml(working_dir) and not force:
|
|
72
|
+
print_info(f"Already present: {target} (use --force to re-detect)")
|
|
73
|
+
raise typer.Exit(code=0)
|
|
74
|
+
|
|
75
|
+
try:
|
|
76
|
+
adapter = create_llm_adapter(backend=backend, max_turns=1)
|
|
77
|
+
except Exception as exc: # noqa: BLE001 — surface any factory failure to user
|
|
78
|
+
print_error(f"Could not initialize LLM adapter: {exc}")
|
|
79
|
+
raise typer.Exit(code=1) from exc
|
|
80
|
+
|
|
81
|
+
existed_before = has_mechanical_toml(working_dir)
|
|
82
|
+
ok = asyncio.run(ensure_mechanical_toml(working_dir, adapter, backend=backend, force=force))
|
|
83
|
+
if not ok:
|
|
84
|
+
if existed_before and force:
|
|
85
|
+
print_warning(
|
|
86
|
+
"Detector could not propose any verifiable commands. "
|
|
87
|
+
f"Existing {target} was left untouched."
|
|
88
|
+
)
|
|
89
|
+
else:
|
|
90
|
+
print_warning(
|
|
91
|
+
"Detector could not propose any verifiable commands. "
|
|
92
|
+
"Stage 1 will skip gracefully until mechanical.toml is authored."
|
|
93
|
+
)
|
|
94
|
+
raise typer.Exit(code=1)
|
|
95
|
+
|
|
96
|
+
print_success(f"Wrote {target}")
|
|
97
|
+
print_info("Edit this file to customize Stage 1 commands.")
|
|
@@ -14,7 +14,19 @@ from typing import Annotated
|
|
|
14
14
|
import typer
|
|
15
15
|
|
|
16
16
|
from ouroboros import __version__
|
|
17
|
-
from ouroboros.cli.commands import
|
|
17
|
+
from ouroboros.cli.commands import (
|
|
18
|
+
cancel,
|
|
19
|
+
config,
|
|
20
|
+
detect,
|
|
21
|
+
init,
|
|
22
|
+
mcp,
|
|
23
|
+
pm,
|
|
24
|
+
run,
|
|
25
|
+
setup,
|
|
26
|
+
status,
|
|
27
|
+
tui,
|
|
28
|
+
uninstall,
|
|
29
|
+
)
|
|
18
30
|
from ouroboros.cli.formatters import console
|
|
19
31
|
|
|
20
32
|
# Create the main Typer app
|
|
@@ -33,6 +45,7 @@ app.add_typer(status.app, name="status")
|
|
|
33
45
|
app.add_typer(cancel.app, name="cancel")
|
|
34
46
|
app.add_typer(mcp.app, name="mcp")
|
|
35
47
|
app.add_typer(setup.app, name="setup")
|
|
48
|
+
app.add_typer(detect.app, name="detect")
|
|
36
49
|
app.add_typer(tui.app, name="tui")
|
|
37
50
|
app.add_typer(pm.app, name="pm")
|
|
38
51
|
app.add_typer(uninstall.app, name="uninstall")
|
|
@@ -47,6 +47,7 @@ from ouroboros.config.loader import (
|
|
|
47
47
|
get_hermes_cli_path,
|
|
48
48
|
get_llm_backend,
|
|
49
49
|
get_llm_permission_mode,
|
|
50
|
+
get_mechanical_detector_model,
|
|
50
51
|
get_ontology_analysis_model,
|
|
51
52
|
get_opencode_cli_path,
|
|
52
53
|
get_opencode_mode,
|
|
@@ -117,6 +118,7 @@ __all__ = [
|
|
|
117
118
|
"get_consensus_judge_model",
|
|
118
119
|
"get_consensus_models",
|
|
119
120
|
"get_context_compression_model",
|
|
121
|
+
"get_mechanical_detector_model",
|
|
120
122
|
"get_codex_cli_path",
|
|
121
123
|
"get_gemini_cli_path",
|
|
122
124
|
"get_hermes_cli_path",
|
|
@@ -918,6 +918,20 @@ def get_assertion_extraction_model(backend: str | None = None) -> str:
|
|
|
918
918
|
return _default_model_for_backend("claude-sonnet-4-6", backend=backend)
|
|
919
919
|
|
|
920
920
|
|
|
921
|
+
def get_mechanical_detector_model(backend: str | None = None) -> str:
|
|
922
|
+
"""Resolve the model used by the mechanical.toml AI detector.
|
|
923
|
+
|
|
924
|
+
Mirrors the assertion-extraction model resolution: env var override,
|
|
925
|
+
then ``OuroborosConfig.evaluation.assertion_extraction_model`` with
|
|
926
|
+
backend-safe fallback to the Codex ``"default"`` sentinel for
|
|
927
|
+
Codex/OpenCode backends.
|
|
928
|
+
"""
|
|
929
|
+
env_model = os.environ.get("OUROBOROS_DETECTOR_MODEL", "").strip()
|
|
930
|
+
if env_model:
|
|
931
|
+
return env_model
|
|
932
|
+
return get_assertion_extraction_model(backend=backend)
|
|
933
|
+
|
|
934
|
+
|
|
921
935
|
def get_consensus_models(backend: str | None = None) -> tuple[str, ...]:
|
|
922
936
|
"""Get consensus stage model roster from environment variable or config."""
|
|
923
937
|
env_models = os.environ.get("OUROBOROS_CONSENSUS_MODELS", "").strip()
|
|
@@ -40,6 +40,11 @@ from ouroboros.evaluation.consensus import (
|
|
|
40
40
|
run_consensus_evaluation,
|
|
41
41
|
run_deliberative_evaluation,
|
|
42
42
|
)
|
|
43
|
+
from ouroboros.evaluation.detector import (
|
|
44
|
+
DetectedCommands,
|
|
45
|
+
ensure_mechanical_toml,
|
|
46
|
+
has_mechanical_toml,
|
|
47
|
+
)
|
|
43
48
|
from ouroboros.evaluation.languages import (
|
|
44
49
|
LanguagePreset,
|
|
45
50
|
build_mechanical_config,
|
|
@@ -99,11 +104,14 @@ __all__ = [
|
|
|
99
104
|
"Vote",
|
|
100
105
|
"VoterRole",
|
|
101
106
|
# Stage 1
|
|
102
|
-
"
|
|
107
|
+
"DetectedCommands",
|
|
108
|
+
"LanguagePreset", # deprecated compat shim
|
|
103
109
|
"MechanicalConfig",
|
|
104
110
|
"MechanicalVerifier",
|
|
105
111
|
"build_mechanical_config",
|
|
106
|
-
"detect_language",
|
|
112
|
+
"detect_language", # deprecated compat shim
|
|
113
|
+
"ensure_mechanical_toml",
|
|
114
|
+
"has_mechanical_toml",
|
|
107
115
|
"run_mechanical_verification",
|
|
108
116
|
# Stage 2
|
|
109
117
|
"DEFAULT_SEMANTIC_MODEL",
|