ouroboros-ai 0.26.2.dev28__tar.gz → 0.26.2.dev32__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.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/PKG-INFO +1 -1
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/brownfield/SKILL.md +32 -3
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/setup/SKILL.md +35 -4
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/_version.py +2 -2
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evaluation/languages.py +31 -2
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/persistence/brownfield.py +2 -2
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/evaluation/test_languages.py +66 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.claude/settings.json +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.claude-plugin/.mcp.json +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.claude-plugin/marketplace.json +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.claude-plugin/plugin.json +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.env.example +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.github/ISSUE_TEMPLATE/question.yml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.github/workflows/dev-publish.yml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.github/workflows/lint.yml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.github/workflows/release.yml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.github/workflows/test.yml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.gitignore +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.mcp.json +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.ouroboros/mechanical.toml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.pre-commit-config.yaml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.python-version +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/CHANGELOG.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/CLAUDE.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/CODE_OF_CONDUCT.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/CONTRIBUTING.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/HANDOFF.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/LICENSE +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/README.ko.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/README.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/SECURITY.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/commands/cancel.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/commands/evaluate.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/commands/evolve.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/commands/help.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/commands/interview.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/commands/ralph.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/commands/run.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/commands/seed.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/commands/setup.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/commands/status.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/commands/tutorial.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/commands/unstuck.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/commands/welcome.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/.gitignore +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/Cargo.lock +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/Cargo.toml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/README.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/src/db.rs +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/src/main.rs +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/src/mock.rs +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/src/state.rs +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/src/views/dashboard.rs +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/src/views/execution.rs +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/src/views/lineage.rs +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/src/views/logs.rs +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/src/views/mod.rs +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/src/views/session_selector.rs +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/README.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/api/README.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/api/core.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/api/mcp.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/architecture.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/cli-reference.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/config-reference.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/contributing/architecture-overview.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/contributing/findings-registry.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/contributing/issue-quality-policy.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/contributing/key-patterns.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/contributing/testing-guide.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/examples/mcp-config.yaml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/getting-started.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/guides/evaluation-pipeline.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/guides/evolution-loop.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/guides/issue-176-subagent-mcp-inheritance.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/guides/seed-authoring.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/guides/tui-usage.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/images/PLACEHOLDER_README.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/images/ouroboros.png +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/platform-support.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/runtime-capability-matrix.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/runtime-guides/claude-code.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/runtime-guides/codex.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/examples/coordinator_test_seed.yaml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/examples/dummy_seed.yaml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/examples/parallel_subac_test_seed.yaml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/examples/subac_test_seed.yaml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/examples/task_manager/README.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/examples/task_manager/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/examples/task_manager/__main__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/examples/task_manager/cli.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/examples/task_manager/models.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/examples/task_manager/storage.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/examples/test_display.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/hooks/hooks.json +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/llms-full.txt +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/llms.txt +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/project-context.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/pyproject.toml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/scripts/drift-monitor.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/scripts/install.sh +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/scripts/keyword-detector.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/scripts/mcp-serve.sh +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/scripts/ralph-rewind.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/scripts/ralph.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/scripts/ralph.sh +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/scripts/session-start.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/scripts/sync-plugin-version.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/scripts/version-check.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/cancel/SKILL.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/evaluate/SKILL.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/evolve/SKILL.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/help/SKILL.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/interview/SKILL.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/pm/SKILL.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/qa/SKILL.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/ralph/SKILL.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/run/SKILL.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/seed/SKILL.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/status/SKILL.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/tutorial/SKILL.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/unstuck/SKILL.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/update/SKILL.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/skills/welcome/SKILL.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/__main__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/advocate.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/analysis-agent.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/architect.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/breadth-keeper.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/code-executor.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/codebase-explorer.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/consensus-reviewer.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/contrarian.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/evaluator.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/hacker.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/judge.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/loader.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/ontologist.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/ontology-analyst.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/qa-judge.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/research-agent.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/researcher.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/seed-architect.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/seed-closer.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/semantic-evaluator.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/simplifier.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/agents/socratic-interviewer.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/bigbang/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/bigbang/ambiguity.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/bigbang/brownfield.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/bigbang/explore.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/bigbang/interview.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/bigbang/pm_document.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/bigbang/pm_interview.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/bigbang/pm_seed.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/bigbang/question_classifier.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/bigbang/seed_generator.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/commands/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/commands/cancel.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/commands/config.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/commands/init.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/commands/mcp.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/commands/pm.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/commands/run.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/commands/setup.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/commands/status.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/commands/tui.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/formatters/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/formatters/panels.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/formatters/progress.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/formatters/tables.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/formatters/workflow_display.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/cli/main.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/codex/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/codex/artifacts.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/codex/ouroboros.md +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/codex_permissions.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/config/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/config/loader.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/config/models.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/core/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/core/ac_tree.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/core/context.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/core/errors.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/core/file_lock.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/core/git_workflow.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/core/lineage.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/core/ontology_aspect.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/core/ontology_questions.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/core/security.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/core/seed.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/core/text.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/core/types.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evaluation/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evaluation/artifact_collector.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evaluation/consensus.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evaluation/json_utils.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evaluation/mechanical.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evaluation/models.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evaluation/pipeline.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evaluation/semantic.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evaluation/trigger.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/events/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/events/base.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/events/decomposition.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/events/evaluation.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/events/interview.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/events/lineage.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/events/ontology.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evolution/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evolution/convergence.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evolution/loop.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evolution/projector.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evolution/reflect.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evolution/regression.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evolution/wonder.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/execution/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/execution/atomicity.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/execution/decomposition.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/execution/double_diamond.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/execution/subagent.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/client/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/client/adapter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/client/manager.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/client/protocol.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/errors.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/job_manager.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/resources/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/resources/handlers.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/server/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/server/adapter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/server/protocol.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/server/security.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/tools/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/tools/authoring_handlers.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/tools/brownfield_handler.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/tools/dashboard.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/tools/definitions.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/tools/evaluation_handlers.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/tools/evolution_handlers.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/tools/execution_handlers.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/tools/job_handlers.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/tools/pm_handler.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/tools/qa.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/tools/query_handlers.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/tools/registry.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/mcp/types.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/observability/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/observability/drift.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/observability/logging.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/observability/retrospective.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/adapter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/codex_cli_runtime.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/command_dispatcher.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/coordinator.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/dependency_analyzer.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/events.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/execution_runtime_scope.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/execution_strategy.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/heartbeat.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/level_context.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/mcp_config.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/mcp_tools.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/parallel_executor.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/parallel_executor_models.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/runner.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/runtime_factory.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/runtime_message_projection.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/session.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/orchestrator/workflow_state.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/persistence/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/persistence/checkpoint.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/persistence/event_store.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/persistence/migrations/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/persistence/migrations/runner.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/persistence/migrations/scripts/002_brownfield.sql +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/persistence/schema.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/persistence/uow.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/plugin/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/plugin/agents/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/plugin/agents/pool.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/plugin/agents/registry.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/plugin/orchestration/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/plugin/orchestration/router.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/plugin/orchestration/scheduler.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/plugin/skills/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/plugin/skills/docs.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/plugin/skills/executor.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/plugin/skills/keywords.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/plugin/skills/registry.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/pm/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/pm/renderer.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/providers/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/providers/anthropic_adapter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/providers/base.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/providers/claude_code_adapter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/providers/codex_cli_adapter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/providers/codex_cli_stream.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/providers/factory.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/providers/litellm_adapter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/py.typed +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/resilience/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/resilience/lateral.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/resilience/stagnation.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/routing/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/routing/complexity.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/routing/downgrade.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/routing/escalation.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/routing/router.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/routing/tiers.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/secondary/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/secondary/scheduler.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/secondary/todo_registry.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/strategies/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/strategies/devil_advocate.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/app.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/components/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/components/agents_panel.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/components/event_log.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/components/progress.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/components/token_tracker.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/events.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/screens/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/screens/confirm_rewind.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/screens/dashboard.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/screens/dashboard_v2.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/screens/dashboard_v3.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/screens/debug.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/screens/execution.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/screens/hud_dashboard.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/screens/lineage_detail.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/screens/lineage_selector.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/screens/logs.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/screens/session_selector.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/widgets/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/widgets/ac_progress.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/widgets/ac_tree.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/widgets/agent_activity.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/widgets/cost_tracker.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/widgets/drift_meter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/widgets/lineage_tree.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/widgets/parallel_graph.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/tui/widgets/phase_progress.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/verification/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/verification/extractor.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/verification/models.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/verification/verifier.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/conftest.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/e2e/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/e2e/conftest.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/e2e/test_cli_commands.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/e2e/test_full_workflow.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/e2e/test_session_persistence.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/fixtures/test_atomicity_seed.yml +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/integration/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/integration/conftest.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/integration/mcp/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/integration/mcp/conftest.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/integration/mcp/test_client_adapter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/integration/mcp/test_client_manager.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/integration/mcp/test_server_adapter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/integration/plugin/test_orchestration.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/integration/test_codex_cli_passthrough_smoke.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/integration/test_codex_skill_fallback.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/integration/test_codex_skill_smoke.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/integration/test_entry_point.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/agents/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/agents/test_loader.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/bigbang/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/bigbang/test_ambiguity.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/bigbang/test_brownfield.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/bigbang/test_classifier_context.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/bigbang/test_decide_later_items.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/bigbang/test_explore.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/bigbang/test_interview.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/bigbang/test_pm_document_generator.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/bigbang/test_pm_document_writer.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/bigbang/test_pm_interview.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/bigbang/test_pm_interview_brownfield_db.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/bigbang/test_pm_seed_ac12.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/bigbang/test_pm_seed_save.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/bigbang/test_question_classifier.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/bigbang/test_seed_generator.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/formatters/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/formatters/test_console.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/formatters/test_panels.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/formatters/test_progress.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/formatters/test_tables.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/formatters/test_workflow_display.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/test_cancel.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/test_init_pm_seed_detection.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/test_init_runtime.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/test_main.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/test_mcp_nested_guard.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/test_mcp_startup_cleanup.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/test_pm_brownfield.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/test_pm_overwrite.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/test_pm_select_repos.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/cli/test_setup.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/config/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/config/test_loader.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/config/test_models.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/core/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/core/test_ac_tree.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/core/test_context.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/core/test_errors.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/core/test_git_workflow.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/core/test_lineage.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/core/test_ontology_aspect.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/core/test_ontology_questions.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/core/test_security.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/core/test_seed.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/core/test_types.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/evaluation/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/evaluation/test_consensus.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/evaluation/test_json_utils.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/evaluation/test_mechanical.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/evaluation/test_models.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/evaluation/test_semantic.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/evaluation/test_trigger.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/events/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/events/test_base.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/events/test_decomposition_events.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/evolution/test_wonder_scope.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/execution/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/execution/test_atomicity.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/execution/test_decomposition.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/execution/test_double_diamond.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/execution/test_subagent_isolation.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/client/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/client/test_adapter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/client/test_manager.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/conftest.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/server/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/server/test_adapter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/server/test_security.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/test_errors.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/test_job_manager.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/test_types.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/tools/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/tools/conftest.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/tools/test_brownfield_handler.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/tools/test_definitions.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/tools/test_pm_handler.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/tools/test_pm_handler_generate.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/tools/test_pm_handler_pending_reframe.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/tools/test_qa_integration.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/mcp/tools/test_registry.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/observability/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/observability/test_drift.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/observability/test_logging.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/observability/test_retrospective.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_adapter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_codex_cli_runtime.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_codex_recursion_guard.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_command_dispatcher.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_coordinator.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_dependency_analyzer.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_events.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_execution_runtime_scope.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_execution_strategy.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_inflight_cancellation.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_level_context.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_mcp_config.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_mcp_tools.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_parallel_executor.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_parallel_executor_retry_resume.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_runner.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_runner_cancellation.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_runtime_factory.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_runtime_message_projection.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_session.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/orchestrator/test_workflow_state.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/persistence/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/persistence/test_brownfield_store.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/persistence/test_checkpoint.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/persistence/test_event_store.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/persistence/test_schema.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/persistence/test_uow.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/plugin/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/plugin/agents/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/plugin/agents/test_registry.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/plugin/orchestration/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/plugin/orchestration/test_model_router.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/plugin/skills/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/plugin/skills/test_keywords.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/plugin/skills/test_registry.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/pm/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/pm/test_renderer.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/providers/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/providers/test_base.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/providers/test_claude_code_adapter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/providers/test_codex_cli_adapter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/providers/test_factory.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/providers/test_litellm_adapter.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/resilience/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/resilience/test_lateral.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/resilience/test_stagnation.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/routing/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/routing/test_complexity.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/routing/test_downgrade.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/routing/test_escalation.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/routing/test_router.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/routing/test_tiers.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/scripts/test_keyword_detector.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/scripts/test_version_check.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/secondary/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/secondary/test_scheduler.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/secondary/test_todo_registry.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_artifact_collector.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_codex_artifacts.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_convergence.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_dashboard.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_dependencies_configured.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_evolve_rewind.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_evolve_step.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_graceful_shutdown.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_main_entry_point.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_module_structure.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_project_initialization.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_projector_rewind.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_ralph_parser.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_ralph_rewind.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_regression.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_tooling_configuration.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/test_verification.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/tui/__init__.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/tui/test_app.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/tui/test_cancelled_display.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/tui/test_events.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/tui/test_lineage_viewer.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/tui/test_screens.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/tui/test_session_selector_replay.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/tui/test_widgets.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tools/sync_github_project.py +0 -0
- {ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/uv.lock +0 -0
|
@@ -49,7 +49,18 @@ This may take a moment...
|
|
|
49
49
|
|
|
50
50
|
The scan response `text` already contains a pre-formatted numbered list with `[default]` markers. **Do NOT make any additional MCP calls to list or query repos.**
|
|
51
51
|
|
|
52
|
-
**Display the repos in a
|
|
52
|
+
**Display the repos in a plain-text 2-column grid** (NOT a markdown table). Use a code block so columns align. Example:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
Scan complete. 8 repositories registered.
|
|
56
|
+
|
|
57
|
+
1. repo-alpha 5. repo-epsilon
|
|
58
|
+
2. repo-bravo * 6. repo-foxtrot
|
|
59
|
+
3. repo-charlie 7. repo-golf *
|
|
60
|
+
4. repo-delta 8. repo-hotel
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Include `*` markers for defaults exactly as they appear in the scan response.
|
|
53
64
|
|
|
54
65
|
**If no repos found**, show:
|
|
55
66
|
```
|
|
@@ -59,7 +70,9 @@ Then stop.
|
|
|
59
70
|
|
|
60
71
|
**Step 2: Default Selection**
|
|
61
72
|
|
|
62
|
-
**IMMEDIATELY after showing the list**, use `AskUserQuestion` with the current default numbers from the scan response
|
|
73
|
+
**IMMEDIATELY after showing the list**, use `AskUserQuestion` with the current default numbers from the scan response.
|
|
74
|
+
|
|
75
|
+
**If defaults exist**, show them as the recommended option:
|
|
63
76
|
|
|
64
77
|
```json
|
|
65
78
|
{
|
|
@@ -75,7 +88,23 @@ Then stop.
|
|
|
75
88
|
}
|
|
76
89
|
```
|
|
77
90
|
|
|
78
|
-
|
|
91
|
+
**If no defaults exist**, do NOT show a "(Recommended)" option — offer "None" and "Select repos" instead:
|
|
92
|
+
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"questions": [{
|
|
96
|
+
"question": "Which repos to set as default for interviews? Enter numbers like '6, 18, 19'.",
|
|
97
|
+
"header": "Default Repos",
|
|
98
|
+
"options": [
|
|
99
|
+
{"label": "None", "description": "No default repos — interviews will run in greenfield mode"},
|
|
100
|
+
{"label": "Select repos", "description": "Type repo numbers to set as default"}
|
|
101
|
+
],
|
|
102
|
+
"multiSelect": false
|
|
103
|
+
}]
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
The user can select the recommended defaults (if any), choose "None", or type custom numbers.
|
|
79
108
|
|
|
80
109
|
After the user responds, use ONE MCP call to update all defaults at once:
|
|
81
110
|
|
|
@@ -365,13 +365,43 @@ This may take a moment...
|
|
|
365
365
|
|
|
366
366
|
The scan response `text` already contains a pre-formatted numbered list with `[default]` markers. **Do NOT make any additional MCP calls to list or query repos.**
|
|
367
367
|
|
|
368
|
-
**Display the
|
|
368
|
+
**Display the repos in a plain-text 2-column grid** (NOT a markdown table). Use a code block so columns align. Example:
|
|
369
|
+
|
|
370
|
+
```
|
|
371
|
+
Scan complete. 8 repositories registered.
|
|
372
|
+
|
|
373
|
+
1. repo-alpha 5. repo-epsilon
|
|
374
|
+
2. repo-bravo * 6. repo-foxtrot
|
|
375
|
+
3. repo-charlie 7. repo-golf *
|
|
376
|
+
4. repo-delta 8. repo-hotel
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
Include `*` markers for defaults exactly as they appear in the scan response. Do not summarize or truncate the list. The user needs to see all repo numbers to pick defaults.
|
|
369
380
|
|
|
370
381
|
**If no repos found**, skip the default selection prompt and proceed to Step 6.
|
|
371
382
|
|
|
372
383
|
**Default repo selection — IMMEDIATELY after showing the list:**
|
|
373
384
|
|
|
374
|
-
Use `AskUserQuestion` with the current default numbers from the scan response
|
|
385
|
+
Use `AskUserQuestion` with the current default numbers from the scan response.
|
|
386
|
+
|
|
387
|
+
**If defaults exist**, show them as the recommended option:
|
|
388
|
+
|
|
389
|
+
```json
|
|
390
|
+
{
|
|
391
|
+
"questions": [{
|
|
392
|
+
"question": "Which repos to set as default for interviews? Enter numbers like '6, 18, 19'.",
|
|
393
|
+
"header": "Default Repos",
|
|
394
|
+
"options": [
|
|
395
|
+
{"label": "<current default numbers> (Recommended)", "description": "<current default names>"},
|
|
396
|
+
{"label": "None", "description": "Clear all defaults — interviews will run in greenfield mode"},
|
|
397
|
+
{"label": "Select repos", "description": "Type repo numbers to set as default"}
|
|
398
|
+
],
|
|
399
|
+
"multiSelect": false
|
|
400
|
+
}]
|
|
401
|
+
}
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
**If no defaults exist**, do NOT show a "(Recommended)" option — offer "None" and "Select repos" instead:
|
|
375
405
|
|
|
376
406
|
```json
|
|
377
407
|
{
|
|
@@ -379,14 +409,15 @@ Use `AskUserQuestion` with the current default numbers from the scan response:
|
|
|
379
409
|
"question": "Which repos to set as default for interviews? Enter numbers like '6, 18, 19'.",
|
|
380
410
|
"header": "Default Repos",
|
|
381
411
|
"options": [
|
|
382
|
-
{"label": "
|
|
412
|
+
{"label": "None", "description": "No default repos — interviews will run in greenfield mode"},
|
|
413
|
+
{"label": "Select repos", "description": "Type repo numbers to set as default"}
|
|
383
414
|
],
|
|
384
415
|
"multiSelect": false
|
|
385
416
|
}]
|
|
386
417
|
}
|
|
387
418
|
```
|
|
388
419
|
|
|
389
|
-
|
|
420
|
+
The user can select the recommended defaults (if any), choose "None", or type custom numbers.
|
|
390
421
|
|
|
391
422
|
After the user responds, use ONE MCP call to update all defaults at once:
|
|
392
423
|
|
|
@@ -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.26.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 26, 2, '
|
|
21
|
+
__version__ = version = '0.26.2.dev32'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 26, 2, 'dev32')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
{ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/evaluation/languages.py
RENAMED
|
@@ -127,6 +127,9 @@ LANGUAGE_PRESETS: dict[str, LanguagePreset] = {
|
|
|
127
127
|
),
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
+
_MAVEN_WRAPPER = "./mvnw"
|
|
131
|
+
_MAVEN_WRAPPER_WINDOWS = "mvnw.cmd"
|
|
132
|
+
|
|
130
133
|
# Ordered list of (marker_file, preset_key) for detection priority.
|
|
131
134
|
# More specific markers come first (e.g. uv.lock before pyproject.toml).
|
|
132
135
|
_DETECTION_RULES: list[tuple[str, str]] = [
|
|
@@ -173,6 +176,25 @@ def detect_language(working_dir: Path) -> LanguagePreset | None:
|
|
|
173
176
|
return None
|
|
174
177
|
|
|
175
178
|
|
|
179
|
+
def _resolve_maven_command(working_dir: Path) -> str:
|
|
180
|
+
"""Resolve the safest Maven launcher for the current project/platform.
|
|
181
|
+
|
|
182
|
+
Prefers project-local wrapper scripts when they are runnable on the
|
|
183
|
+
current platform. Falls back to plain ``mvn`` when no suitable wrapper is
|
|
184
|
+
available.
|
|
185
|
+
"""
|
|
186
|
+
if os.name == "nt":
|
|
187
|
+
wrapper = working_dir / _MAVEN_WRAPPER_WINDOWS
|
|
188
|
+
if wrapper.is_file():
|
|
189
|
+
return _MAVEN_WRAPPER_WINDOWS
|
|
190
|
+
return "mvn"
|
|
191
|
+
|
|
192
|
+
wrapper = working_dir / "mvnw"
|
|
193
|
+
if wrapper.is_file() and os.access(wrapper, os.X_OK):
|
|
194
|
+
return _MAVEN_WRAPPER
|
|
195
|
+
return "mvn"
|
|
196
|
+
|
|
197
|
+
|
|
176
198
|
def _load_project_overrides(working_dir: Path) -> dict[str, Any] | None:
|
|
177
199
|
"""Load .ouroboros/mechanical.toml if it exists.
|
|
178
200
|
|
|
@@ -335,11 +357,18 @@ def build_mechanical_config(
|
|
|
335
357
|
# Start with auto-detected preset
|
|
336
358
|
preset = detect_language(working_dir)
|
|
337
359
|
|
|
360
|
+
build_command = preset.build_command if preset else None
|
|
361
|
+
test_command = preset.test_command if preset else None
|
|
362
|
+
if preset and preset.name == "java-maven":
|
|
363
|
+
maven_command = _resolve_maven_command(working_dir)
|
|
364
|
+
build_command = (maven_command, "clean", "compile")
|
|
365
|
+
test_command = (maven_command, "test")
|
|
366
|
+
|
|
338
367
|
# Base command values from preset (or all None)
|
|
339
368
|
current: dict[str, Any] = {
|
|
340
369
|
"lint": preset.lint_command if preset else None,
|
|
341
|
-
"build":
|
|
342
|
-
"test":
|
|
370
|
+
"build": build_command,
|
|
371
|
+
"test": test_command,
|
|
343
372
|
"static": preset.static_command if preset else None,
|
|
344
373
|
"coverage": preset.coverage_command if preset else None,
|
|
345
374
|
"timeout": 300,
|
{ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/src/ouroboros/persistence/brownfield.py
RENAMED
|
@@ -335,7 +335,7 @@ class BrownfieldStore:
|
|
|
335
335
|
limit: Maximum number of rows to return. ``None`` means no limit.
|
|
336
336
|
|
|
337
337
|
Returns:
|
|
338
|
-
List of BrownfieldRepo instances, ordered by
|
|
338
|
+
List of BrownfieldRepo instances, ordered by insertion order (rowid).
|
|
339
339
|
|
|
340
340
|
Raises:
|
|
341
341
|
PersistenceError: If the query fails.
|
|
@@ -345,7 +345,7 @@ class BrownfieldStore:
|
|
|
345
345
|
|
|
346
346
|
try:
|
|
347
347
|
async with engine.begin() as conn:
|
|
348
|
-
stmt = select(literal_column("rowid"), t).order_by(
|
|
348
|
+
stmt = select(literal_column("rowid"), t).order_by(literal_column("rowid"))
|
|
349
349
|
if offset > 0:
|
|
350
350
|
stmt = stmt.offset(offset)
|
|
351
351
|
if limit is not None:
|
{ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/tests/unit/evaluation/test_languages.py
RENAMED
|
@@ -54,6 +54,17 @@ class TestDetectLanguage:
|
|
|
54
54
|
preset = detect_language(tmp_path)
|
|
55
55
|
assert preset is not None
|
|
56
56
|
assert preset.name == "java-maven"
|
|
57
|
+
assert preset.build_command == ("mvn", "clean", "compile")
|
|
58
|
+
assert preset.test_command == ("mvn", "test")
|
|
59
|
+
|
|
60
|
+
def test_detect_java_maven_wrapper_does_not_change_preset(self, tmp_path: Path) -> None:
|
|
61
|
+
(tmp_path / "pom.xml").touch()
|
|
62
|
+
(tmp_path / "mvnw").touch()
|
|
63
|
+
preset = detect_language(tmp_path)
|
|
64
|
+
assert preset is not None
|
|
65
|
+
assert preset.name == "java-maven"
|
|
66
|
+
assert preset.build_command == ("mvn", "clean", "compile")
|
|
67
|
+
assert preset.test_command == ("mvn", "test")
|
|
57
68
|
|
|
58
69
|
def test_detect_node_npm(self, tmp_path: Path) -> None:
|
|
59
70
|
(tmp_path / "package.json").touch()
|
|
@@ -162,6 +173,12 @@ class TestParseCommand:
|
|
|
162
173
|
def test_allowed_executable(self) -> None:
|
|
163
174
|
assert _parse_command("cargo test") == ("cargo", "test")
|
|
164
175
|
|
|
176
|
+
def test_path_based_maven_wrapper_override_is_blocked(self) -> None:
|
|
177
|
+
assert _parse_command("./mvnw test") is None
|
|
178
|
+
|
|
179
|
+
def test_path_traversal_maven_wrapper_override_is_blocked(self) -> None:
|
|
180
|
+
assert _parse_command("../../tmp/mvnw test") is None
|
|
181
|
+
|
|
165
182
|
|
|
166
183
|
class TestBuildMechanicalConfig:
|
|
167
184
|
"""Tests for build_mechanical_config()."""
|
|
@@ -252,6 +269,55 @@ class TestBuildMechanicalConfig:
|
|
|
252
269
|
assert config.coverage_command is None
|
|
253
270
|
assert config.working_dir == tmp_path
|
|
254
271
|
|
|
272
|
+
def test_auto_detect_java_maven_prefers_executable_wrapper(self, tmp_path: Path) -> None:
|
|
273
|
+
(tmp_path / "pom.xml").touch()
|
|
274
|
+
wrapper = tmp_path / "mvnw"
|
|
275
|
+
wrapper.touch()
|
|
276
|
+
wrapper.chmod(0o755)
|
|
277
|
+
config = build_mechanical_config(tmp_path)
|
|
278
|
+
assert config.build_command == ("./mvnw", "clean", "compile")
|
|
279
|
+
assert config.test_command == ("./mvnw", "test")
|
|
280
|
+
|
|
281
|
+
def test_auto_detect_java_maven_falls_back_when_wrapper_not_executable(
|
|
282
|
+
self, tmp_path: Path
|
|
283
|
+
) -> None:
|
|
284
|
+
(tmp_path / "pom.xml").touch()
|
|
285
|
+
wrapper = tmp_path / "mvnw"
|
|
286
|
+
wrapper.touch()
|
|
287
|
+
wrapper.chmod(0o644)
|
|
288
|
+
config = build_mechanical_config(tmp_path)
|
|
289
|
+
assert config.build_command == ("mvn", "clean", "compile")
|
|
290
|
+
assert config.test_command == ("mvn", "test")
|
|
291
|
+
|
|
292
|
+
def test_auto_detect_java_maven_uses_windows_wrapper(self, tmp_path: Path, monkeypatch) -> None:
|
|
293
|
+
(tmp_path / "pom.xml").touch()
|
|
294
|
+
(tmp_path / "mvnw.cmd").touch()
|
|
295
|
+
monkeypatch.setattr("ouroboros.evaluation.languages.os.name", "nt")
|
|
296
|
+
config = build_mechanical_config(tmp_path)
|
|
297
|
+
assert config.build_command == ("mvnw.cmd", "clean", "compile")
|
|
298
|
+
assert config.test_command == ("mvnw.cmd", "test")
|
|
299
|
+
|
|
300
|
+
def test_auto_detect_java_maven_falls_back_when_wrapper_is_directory(
|
|
301
|
+
self, tmp_path: Path
|
|
302
|
+
) -> None:
|
|
303
|
+
(tmp_path / "pom.xml").touch()
|
|
304
|
+
wrapper = tmp_path / "mvnw"
|
|
305
|
+
wrapper.mkdir()
|
|
306
|
+
config = build_mechanical_config(tmp_path)
|
|
307
|
+
assert config.build_command == ("mvn", "clean", "compile")
|
|
308
|
+
assert config.test_command == ("mvn", "test")
|
|
309
|
+
|
|
310
|
+
def test_auto_detect_java_maven_falls_back_when_windows_wrapper_is_directory(
|
|
311
|
+
self, tmp_path: Path, monkeypatch
|
|
312
|
+
) -> None:
|
|
313
|
+
(tmp_path / "pom.xml").touch()
|
|
314
|
+
wrapper = tmp_path / "mvnw.cmd"
|
|
315
|
+
wrapper.mkdir()
|
|
316
|
+
monkeypatch.setattr("ouroboros.evaluation.languages.os.name", "nt")
|
|
317
|
+
config = build_mechanical_config(tmp_path)
|
|
318
|
+
assert config.build_command == ("mvn", "clean", "compile")
|
|
319
|
+
assert config.test_command == ("mvn", "test")
|
|
320
|
+
|
|
255
321
|
def test_no_toml_file_no_error(self, tmp_path: Path) -> None:
|
|
256
322
|
"""Missing .ouroboros/mechanical.toml is not an error."""
|
|
257
323
|
(tmp_path / "build.zig").touch()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.github/ISSUE_TEMPLATE/bug_report.yml
RENAMED
|
File without changes
|
|
File without changes
|
{ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/.github/ISSUE_TEMPLATE/feature_request.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/src/views/dashboard.rs
RENAMED
|
File without changes
|
{ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/src/views/execution.rs
RENAMED
|
File without changes
|
{ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/src/views/lineage.rs
RENAMED
|
File without changes
|
{ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/src/views/logs.rs
RENAMED
|
File without changes
|
{ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/crates/ouroboros-tui/src/views/mod.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/contributing/architecture-overview.md
RENAMED
|
File without changes
|
{ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/contributing/findings-registry.md
RENAMED
|
File without changes
|
{ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/docs/contributing/issue-quality-policy.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ouroboros_ai-0.26.2.dev28 → ouroboros_ai-0.26.2.dev32}/examples/parallel_subac_test_seed.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|