ouroboros-ai 0.25.3.dev1__tar.gz → 0.25.3.dev2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ouroboros-ai might be problematic. Click here for more details.
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/PKG-INFO +1 -1
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/cli-reference.md +8 -8
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/running-with-claude-code.md +1 -1
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/_version.py +2 -2
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/bigbang/ambiguity.py +31 -18
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/init.py +8 -13
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/e2e/test_cli_commands.py +3 -3
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/bigbang/test_ambiguity.py +62 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/test_main.py +1 -1
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.claude/settings.json +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.claude-plugin/.mcp.json +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.claude-plugin/marketplace.json +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.claude-plugin/plugin.json +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.env.example +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.github/workflows/dev-publish.yml +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.github/workflows/lint.yml +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.github/workflows/release.yml +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.github/workflows/test.yml +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.gitignore +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.mcp.json +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.pre-commit-config.yaml +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/.python-version +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/CHANGELOG.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/CLAUDE.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/CONTRIBUTING.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/HANDOFF.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/LICENSE +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/README.ko.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/README.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/architect.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/contrarian.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/evaluator.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/hacker.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/ontologist.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/qa-judge.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/researcher.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/seed-architect.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/simplifier.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/agents/socratic-interviewer.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/cancel.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/evaluate.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/evolve.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/help.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/interview.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/ralph.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/run.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/seed.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/setup.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/status.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/tutorial.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/unstuck.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/commands/welcome.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/.gitignore +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/Cargo.lock +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/Cargo.toml +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/README.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/db.rs +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/main.rs +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/mock.rs +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/state.rs +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/dashboard.rs +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/execution.rs +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/lineage.rs +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/logs.rs +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/mod.rs +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/session_selector.rs +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/README.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/api/README.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/api/coordinator-agent-design.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/api/core.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/api/mcp.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/api/parallel-dx-design.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/api/parallel-execution.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/architecture.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/contributing/architecture-overview.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/contributing/key-patterns.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/contributing/testing-guide.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/examples/mcp-config.yaml +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/getting-started.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/guides/cli-usage.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/guides/common-workflows.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/guides/issue-176-subagent-mcp-inheritance.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/guides/language-support.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/guides/quick-start.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/guides/seed-authoring.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/guides/tui-usage.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/images/ouroboros.png +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/ontological-framework/HANDOFF.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/ontological-framework/aop-design.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/ontological-framework/architecture.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/ontological-framework/requirements.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/coordinator_test_seed.yaml +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/dummy_seed.yaml +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/parallel_subac_test_seed.yaml +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/subac_test_seed.yaml +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/task_manager/README.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/task_manager/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/task_manager/__main__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/task_manager/cli.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/task_manager/models.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/task_manager/storage.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/examples/test_display.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/hooks/hooks.json +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/playground/src/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/playground/src/config.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/playground/src/models.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/project-context.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/pyproject.toml +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/scripts/drift-monitor.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/scripts/keyword-detector.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/scripts/ralph-rewind.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/scripts/ralph.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/scripts/ralph.sh +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/scripts/session-start.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/scripts/version-check.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/cancel/SKILL.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/evaluate/SKILL.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/evolve/SKILL.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/help/SKILL.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/interview/SKILL.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/qa/SKILL.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/ralph/SKILL.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/run/SKILL.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/seed/SKILL.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/setup/SKILL.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/status/SKILL.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/tutorial/SKILL.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/unstuck/SKILL.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/update/SKILL.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/skills/welcome/SKILL.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/__main__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/advocate.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/analysis-agent.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/architect.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/code-executor.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/codebase-explorer.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/consensus-reviewer.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/contrarian.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/evaluator.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/hacker.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/judge.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/loader.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/ontologist.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/ontology-analyst.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/qa-judge.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/research-agent.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/researcher.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/seed-architect.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/semantic-evaluator.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/simplifier.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/agents/socratic-interviewer.md +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/bigbang/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/bigbang/explore.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/bigbang/interview.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/bigbang/seed_generator.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/cancel.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/config.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/mcp.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/run.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/status.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/commands/tui.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/formatters/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/formatters/panels.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/formatters/progress.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/formatters/tables.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/formatters/workflow_display.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/cli/main.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/config/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/config/loader.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/config/models.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/ac_tree.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/context.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/errors.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/file_lock.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/git_workflow.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/lineage.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/ontology_aspect.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/ontology_questions.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/security.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/seed.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/text.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/core/types.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/artifact_collector.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/consensus.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/json_utils.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/languages.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/mechanical.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/models.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/pipeline.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/semantic.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evaluation/trigger.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/events/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/events/base.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/events/decomposition.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/events/evaluation.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/events/interview.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/events/lineage.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/events/ontology.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evolution/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evolution/convergence.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evolution/loop.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evolution/projector.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evolution/reflect.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evolution/regression.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/evolution/wonder.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/execution/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/execution/atomicity.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/execution/decomposition.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/execution/double_diamond.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/execution/subagent.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/client/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/client/adapter.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/client/manager.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/client/protocol.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/errors.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/job_manager.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/resources/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/resources/handlers.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/server/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/server/adapter.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/server/protocol.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/server/security.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/tools/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/tools/dashboard.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/tools/definitions.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/tools/qa.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/tools/registry.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/mcp/types.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/observability/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/observability/drift.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/observability/logging.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/observability/retrospective.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/adapter.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/coordinator.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/dependency_analyzer.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/events.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/execution_strategy.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/level_context.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/mcp_config.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/mcp_tools.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/parallel_executor.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/runner.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/session.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/orchestrator/workflow_state.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/checkpoint.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/event_store.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/migrations/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/migrations/runner.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/schema.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/persistence/uow.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/agents/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/agents/pool.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/agents/registry.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/orchestration/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/orchestration/router.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/orchestration/scheduler.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/skills/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/skills/docs.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/skills/executor.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/skills/keywords.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/plugin/skills/registry.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/providers/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/providers/anthropic_adapter.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/providers/base.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/providers/claude_code_adapter.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/providers/litellm_adapter.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/py.typed +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/resilience/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/resilience/lateral.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/resilience/stagnation.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/routing/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/routing/complexity.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/routing/downgrade.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/routing/escalation.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/routing/router.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/routing/tiers.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/secondary/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/secondary/scheduler.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/secondary/todo_registry.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/strategies/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/strategies/devil_advocate.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/app.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/components/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/components/agents_panel.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/components/event_log.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/components/progress.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/components/token_tracker.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/events.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/confirm_rewind.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/dashboard.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/dashboard_v2.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/dashboard_v3.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/debug.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/execution.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/hud_dashboard.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/lineage_detail.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/lineage_selector.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/logs.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/screens/session_selector.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/ac_progress.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/ac_tree.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/agent_activity.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/cost_tracker.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/drift_meter.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/lineage_tree.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/parallel_graph.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/tui/widgets/phase_progress.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/verification/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/verification/extractor.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/verification/models.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/src/ouroboros/verification/verifier.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/conftest.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/e2e/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/e2e/conftest.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/e2e/test_full_workflow.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/e2e/test_session_persistence.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/fixtures/test_atomicity_seed.yml +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/mcp/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/mcp/conftest.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/mcp/test_client_adapter.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/mcp/test_client_manager.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/mcp/test_server_adapter.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/plugin/test_orchestration.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/integration/test_entry_point.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/agents/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/agents/test_loader.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/bigbang/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/bigbang/test_explore.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/bigbang/test_interview.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/bigbang/test_seed_generator.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/formatters/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/formatters/test_console.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/formatters/test_panels.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/formatters/test_progress.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/formatters/test_tables.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/formatters/test_workflow_display.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/test_cancel.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/cli/test_mcp_startup_cleanup.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/config/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/config/test_loader.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/config/test_models.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_ac_tree.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_context.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_errors.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_git_workflow.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_ontology_aspect.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_ontology_questions.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_security.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_seed.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/core/test_types.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/evaluation/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/evaluation/test_consensus.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/evaluation/test_languages.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/evaluation/test_mechanical.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/evaluation/test_models.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/evaluation/test_semantic.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/evaluation/test_trigger.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/events/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/events/test_base.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/events/test_decomposition_events.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/execution/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/execution/test_atomicity.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/execution/test_decomposition.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/execution/test_double_diamond.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/execution/test_subagent_isolation.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/client/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/client/test_adapter.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/client/test_manager.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/conftest.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/server/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/server/test_adapter.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/server/test_security.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/test_errors.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/test_job_manager.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/test_types.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/tools/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/tools/test_definitions.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/tools/test_qa_integration.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/mcp/tools/test_registry.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/observability/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/observability/test_drift.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/observability/test_logging.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/observability/test_retrospective.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_adapter.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_coordinator.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_events.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_execution_strategy.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_inflight_cancellation.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_level_context.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_mcp_config.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_mcp_tools.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_runner.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_runner_cancellation.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_session.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/orchestrator/test_workflow_state.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/persistence/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/persistence/test_checkpoint.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/persistence/test_event_store.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/persistence/test_schema.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/persistence/test_uow.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/plugin/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/plugin/agents/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/plugin/agents/test_registry.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/plugin/orchestration/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/plugin/orchestration/test_model_router.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/plugin/skills/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/plugin/skills/test_registry.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/providers/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/providers/test_base.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/providers/test_claude_code_adapter.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/providers/test_litellm_adapter.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/resilience/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/resilience/test_lateral.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/resilience/test_stagnation.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/routing/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/routing/test_complexity.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/routing/test_downgrade.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/routing/test_escalation.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/routing/test_router.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/routing/test_tiers.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/scripts/test_keyword_detector.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/scripts/test_version_check.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/secondary/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/secondary/test_scheduler.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/secondary/test_todo_registry.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_artifact_collector.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_convergence.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_dashboard.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_dependencies_configured.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_evolve_rewind.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_evolve_step.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_main_entry_point.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_module_structure.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_project_initialization.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_projector_rewind.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_ralph_parser.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_ralph_rewind.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_regression.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_tooling_configuration.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/test_verification.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/tui/__init__.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/tui/test_app.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/tui/test_cancelled_display.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/tui/test_events.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/tui/test_lineage_viewer.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/tui/test_screens.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tests/unit/tui/test_widgets.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/tools/sync_github_project.py +0 -0
- {ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/uv.lock +0 -0
|
@@ -83,7 +83,7 @@ ouroboros init [start] [OPTIONS] [CONTEXT]
|
|
|
83
83
|
|--------|-------------|
|
|
84
84
|
| `-r, --resume TEXT` | Resume an existing interview by ID |
|
|
85
85
|
| `--state-dir DIRECTORY` | Custom directory for interview state files |
|
|
86
|
-
| `-o, --orchestrator` | Use Claude Code (Max Plan) instead of
|
|
86
|
+
| `-o, --orchestrator` | Use Claude Code (Max Plan) instead of Anthropic API. No API key required |
|
|
87
87
|
| `-d, --debug` | Show verbose logs including debug messages |
|
|
88
88
|
|
|
89
89
|
**Examples:**
|
|
@@ -493,21 +493,21 @@ ouroboros run seed.yaml
|
|
|
493
493
|
ouroboros monitor
|
|
494
494
|
```
|
|
495
495
|
|
|
496
|
-
### Using
|
|
496
|
+
### Using Anthropic API (Default Non-Orchestrator Path)
|
|
497
497
|
|
|
498
|
-
Requires
|
|
498
|
+
Requires `ANTHROPIC_API_KEY`.
|
|
499
499
|
|
|
500
500
|
```bash
|
|
501
501
|
# 1. Initialize configuration
|
|
502
502
|
ouroboros config init
|
|
503
503
|
|
|
504
|
-
# 2.
|
|
505
|
-
|
|
504
|
+
# 2. Export your API key
|
|
505
|
+
export ANTHROPIC_API_KEY=your-key-here
|
|
506
506
|
|
|
507
507
|
# 3. Start interview
|
|
508
508
|
ouroboros init "Build a REST API for task management"
|
|
509
509
|
|
|
510
|
-
# 4. Execute workflow (use --no-orchestrator for
|
|
510
|
+
# 4. Execute workflow (use --no-orchestrator for the standard path)
|
|
511
511
|
ouroboros run seed.yaml --no-orchestrator
|
|
512
512
|
```
|
|
513
513
|
|
|
@@ -517,8 +517,8 @@ ouroboros run seed.yaml --no-orchestrator
|
|
|
517
517
|
|
|
518
518
|
| Variable | Description |
|
|
519
519
|
|----------|-------------|
|
|
520
|
-
| `OPENROUTER_API_KEY` | OpenRouter API key for LiteLLM |
|
|
521
|
-
| `ANTHROPIC_API_KEY` | Anthropic API key for
|
|
520
|
+
| `OPENROUTER_API_KEY` | OpenRouter API key for optional LiteLLM-based integrations |
|
|
521
|
+
| `ANTHROPIC_API_KEY` | Anthropic API key for direct Anthropic-backed interview mode |
|
|
522
522
|
| `OPENAI_API_KEY` | OpenAI API key for LiteLLM |
|
|
523
523
|
|
|
524
524
|
---
|
|
@@ -136,7 +136,7 @@ The orchestrator uses `claude-agent-sdk` which connects directly to your authent
|
|
|
136
136
|
# Start interactive interview (Claude Code)
|
|
137
137
|
uv run ouroboros init start --orchestrator "Your idea here"
|
|
138
138
|
|
|
139
|
-
# Start interactive interview (
|
|
139
|
+
# Start interactive interview (Anthropic API - needs ANTHROPIC_API_KEY)
|
|
140
140
|
uv run ouroboros init start "Your idea here"
|
|
141
141
|
|
|
142
142
|
# Resume an interrupted interview
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.25.3.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 25, 3, '
|
|
31
|
+
__version__ = version = '0.25.3.dev2'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 25, 3, 'dev2')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -20,12 +20,7 @@ import structlog
|
|
|
20
20
|
from ouroboros.bigbang.interview import InterviewState
|
|
21
21
|
from ouroboros.core.errors import ProviderError
|
|
22
22
|
from ouroboros.core.types import Result
|
|
23
|
-
from ouroboros.providers.base import CompletionConfig, Message, MessageRole
|
|
24
|
-
|
|
25
|
-
try:
|
|
26
|
-
from ouroboros.providers.litellm_adapter import LiteLLMAdapter
|
|
27
|
-
except ImportError:
|
|
28
|
-
LiteLLMAdapter = None # type: ignore[assignment,misc]
|
|
23
|
+
from ouroboros.providers.base import CompletionConfig, LLMAdapter, Message, MessageRole
|
|
29
24
|
|
|
30
25
|
log = structlog.get_logger()
|
|
31
26
|
|
|
@@ -138,7 +133,7 @@ class AmbiguityScorer:
|
|
|
138
133
|
max_retries: Maximum retry attempts, or None for unlimited (default).
|
|
139
134
|
|
|
140
135
|
Example:
|
|
141
|
-
scorer = AmbiguityScorer(llm_adapter=
|
|
136
|
+
scorer = AmbiguityScorer(llm_adapter=some_adapter)
|
|
142
137
|
|
|
143
138
|
result = await scorer.score(interview_state)
|
|
144
139
|
if result.is_ok:
|
|
@@ -151,7 +146,7 @@ class AmbiguityScorer:
|
|
|
151
146
|
questions = scorer.generate_clarification_questions(ambiguity.breakdown)
|
|
152
147
|
"""
|
|
153
148
|
|
|
154
|
-
llm_adapter:
|
|
149
|
+
llm_adapter: LLMAdapter
|
|
155
150
|
model: str = DEFAULT_MODEL
|
|
156
151
|
temperature: float = SCORING_TEMPERATURE
|
|
157
152
|
initial_max_tokens: int = 2048
|
|
@@ -414,17 +409,14 @@ Analyze each component and provide scores with justifications."""
|
|
|
414
409
|
except json.JSONDecodeError as e:
|
|
415
410
|
raise ValueError(f"Invalid JSON response: {e}") from e
|
|
416
411
|
|
|
417
|
-
#
|
|
418
|
-
|
|
412
|
+
# Numeric score fields must be present. Missing justifications are recoverable.
|
|
413
|
+
required_score_fields = [
|
|
419
414
|
"goal_clarity_score",
|
|
420
|
-
"goal_clarity_justification",
|
|
421
415
|
"constraint_clarity_score",
|
|
422
|
-
"constraint_clarity_justification",
|
|
423
416
|
"success_criteria_clarity_score",
|
|
424
|
-
"success_criteria_clarity_justification",
|
|
425
417
|
]
|
|
426
418
|
|
|
427
|
-
for field_name in
|
|
419
|
+
for field_name in required_score_fields:
|
|
428
420
|
if field_name not in data:
|
|
429
421
|
raise ValueError(f"Missing required field: {field_name}")
|
|
430
422
|
|
|
@@ -433,6 +425,15 @@ Analyze each component and provide scores with justifications."""
|
|
|
433
425
|
score = float(value)
|
|
434
426
|
return max(0.0, min(1.0, score))
|
|
435
427
|
|
|
428
|
+
def justification_for(field_name: str, component_name: str) -> str:
|
|
429
|
+
value = data.get(field_name)
|
|
430
|
+
if value is None:
|
|
431
|
+
return f"{component_name} justification not provided by model."
|
|
432
|
+
text = str(value).strip()
|
|
433
|
+
if not text:
|
|
434
|
+
return f"{component_name} justification not provided by model."
|
|
435
|
+
return text
|
|
436
|
+
|
|
436
437
|
# Select weights based on project type
|
|
437
438
|
if is_brownfield:
|
|
438
439
|
goal_weight = BROWNFIELD_GOAL_CLARITY_WEIGHT
|
|
@@ -450,7 +451,10 @@ Analyze each component and provide scores with justifications."""
|
|
|
450
451
|
name="Context Clarity",
|
|
451
452
|
clarity_score=clamp_score(data["context_clarity_score"]),
|
|
452
453
|
weight=BROWNFIELD_CONTEXT_CLARITY_WEIGHT,
|
|
453
|
-
justification=
|
|
454
|
+
justification=justification_for(
|
|
455
|
+
"context_clarity_justification",
|
|
456
|
+
"Context Clarity",
|
|
457
|
+
),
|
|
454
458
|
)
|
|
455
459
|
|
|
456
460
|
return ScoreBreakdown(
|
|
@@ -458,19 +462,28 @@ Analyze each component and provide scores with justifications."""
|
|
|
458
462
|
name="Goal Clarity",
|
|
459
463
|
clarity_score=clamp_score(data["goal_clarity_score"]),
|
|
460
464
|
weight=goal_weight,
|
|
461
|
-
justification=
|
|
465
|
+
justification=justification_for(
|
|
466
|
+
"goal_clarity_justification",
|
|
467
|
+
"Goal Clarity",
|
|
468
|
+
),
|
|
462
469
|
),
|
|
463
470
|
constraint_clarity=ComponentScore(
|
|
464
471
|
name="Constraint Clarity",
|
|
465
472
|
clarity_score=clamp_score(data["constraint_clarity_score"]),
|
|
466
473
|
weight=constraint_weight,
|
|
467
|
-
justification=
|
|
474
|
+
justification=justification_for(
|
|
475
|
+
"constraint_clarity_justification",
|
|
476
|
+
"Constraint Clarity",
|
|
477
|
+
),
|
|
468
478
|
),
|
|
469
479
|
success_criteria_clarity=ComponentScore(
|
|
470
480
|
name="Success Criteria Clarity",
|
|
471
481
|
clarity_score=clamp_score(data["success_criteria_clarity_score"]),
|
|
472
482
|
weight=criteria_weight,
|
|
473
|
-
justification=
|
|
483
|
+
justification=justification_for(
|
|
484
|
+
"success_criteria_clarity_justification",
|
|
485
|
+
"Success Criteria Clarity",
|
|
486
|
+
),
|
|
474
487
|
),
|
|
475
488
|
context_clarity=context_clarity,
|
|
476
489
|
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""Init command for starting interactive interview.
|
|
2
2
|
|
|
3
3
|
This command initiates the Big Bang phase interview process.
|
|
4
|
-
Supports both
|
|
4
|
+
Supports both direct Anthropic API and Claude Code (Max Plan) modes.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import asyncio
|
|
@@ -27,13 +27,9 @@ from ouroboros.bigbang.seed_generator import SeedGenerator
|
|
|
27
27
|
from ouroboros.cli.formatters import console
|
|
28
28
|
from ouroboros.cli.formatters.panels import print_error, print_info, print_success, print_warning
|
|
29
29
|
from ouroboros.observability import LoggingConfig, configure_logging
|
|
30
|
+
from ouroboros.providers.anthropic_adapter import AnthropicAdapter
|
|
30
31
|
from ouroboros.providers.base import LLMAdapter
|
|
31
32
|
|
|
32
|
-
try:
|
|
33
|
-
from ouroboros.providers.litellm_adapter import LiteLLMAdapter
|
|
34
|
-
except ImportError:
|
|
35
|
-
LiteLLMAdapter = None # type: ignore[assignment,misc]
|
|
36
|
-
|
|
37
33
|
|
|
38
34
|
class SeedGenerationResult(Enum):
|
|
39
35
|
"""Result of seed generation attempt."""
|
|
@@ -140,7 +136,7 @@ def _get_adapter(
|
|
|
140
136
|
"""Get the appropriate LLM adapter.
|
|
141
137
|
|
|
142
138
|
Args:
|
|
143
|
-
use_orchestrator: If True, use Claude Code (Max Plan). Otherwise
|
|
139
|
+
use_orchestrator: If True, use Claude Code (Max Plan). Otherwise Anthropic API.
|
|
144
140
|
for_interview: If True, enable Read/Glob/Grep tools for codebase exploration.
|
|
145
141
|
debug: If True, show streaming messages (thinking, tool use).
|
|
146
142
|
|
|
@@ -160,8 +156,7 @@ def _get_adapter(
|
|
|
160
156
|
on_message=_make_message_callback(debug),
|
|
161
157
|
)
|
|
162
158
|
return ClaudeCodeAdapter()
|
|
163
|
-
|
|
164
|
-
return LiteLLMAdapter()
|
|
159
|
+
return AnthropicAdapter()
|
|
165
160
|
|
|
166
161
|
|
|
167
162
|
async def _run_interview_loop(
|
|
@@ -262,7 +257,7 @@ async def _run_interview(
|
|
|
262
257
|
initial_context: Initial context or idea for the interview.
|
|
263
258
|
resume_id: Optional interview ID to resume.
|
|
264
259
|
state_dir: Optional custom state directory.
|
|
265
|
-
use_orchestrator: If True, use Claude Code (Max Plan) instead of
|
|
260
|
+
use_orchestrator: If True, use Claude Code (Max Plan) instead of Anthropic API.
|
|
266
261
|
"""
|
|
267
262
|
# Initialize components
|
|
268
263
|
llm_adapter = _get_adapter(use_orchestrator, for_interview=True, debug=debug)
|
|
@@ -500,7 +495,7 @@ def start(
|
|
|
500
495
|
typer.Option(
|
|
501
496
|
"--orchestrator",
|
|
502
497
|
"-o",
|
|
503
|
-
help="Use Claude Code (Max Plan) instead of
|
|
498
|
+
help="Use Claude Code (Max Plan) instead of Anthropic API. No API key required.",
|
|
504
499
|
),
|
|
505
500
|
] = False,
|
|
506
501
|
debug: Annotated[
|
|
@@ -553,7 +548,7 @@ def start(
|
|
|
553
548
|
if orchestrator:
|
|
554
549
|
print_info("Using Claude Code (Max Plan) - no API key required")
|
|
555
550
|
else:
|
|
556
|
-
print_info("Using
|
|
551
|
+
print_info("Using Anthropic API - ANTHROPIC_API_KEY required")
|
|
557
552
|
|
|
558
553
|
# Run interview
|
|
559
554
|
try:
|
|
@@ -581,7 +576,7 @@ def list_interviews(
|
|
|
581
576
|
] = None,
|
|
582
577
|
) -> None:
|
|
583
578
|
"""List all interview sessions."""
|
|
584
|
-
llm_adapter =
|
|
579
|
+
llm_adapter = AnthropicAdapter()
|
|
585
580
|
engine = InterviewEngine(
|
|
586
581
|
llm_adapter=llm_adapter,
|
|
587
582
|
state_dir=state_dir or Path.home() / ".ouroboros" / "data",
|
|
@@ -74,7 +74,7 @@ class TestInitCommand:
|
|
|
74
74
|
) -> None:
|
|
75
75
|
"""Test init start with context argument."""
|
|
76
76
|
# Mock the LLM adapter and asyncio.run
|
|
77
|
-
with patch("ouroboros.cli.commands.init.
|
|
77
|
+
with patch("ouroboros.cli.commands.init.AnthropicAdapter") as mock_adapter_class:
|
|
78
78
|
mock_adapter = MagicMock()
|
|
79
79
|
mock_adapter.complete = mock_interview_llm_provider.complete
|
|
80
80
|
mock_adapter_class.return_value = mock_adapter
|
|
@@ -107,7 +107,7 @@ class TestInitCommand:
|
|
|
107
107
|
|
|
108
108
|
def test_init_list_no_interviews(self, temp_state_dir: Path) -> None:
|
|
109
109
|
"""Test init list when no interviews exist."""
|
|
110
|
-
with patch("ouroboros.cli.commands.init.
|
|
110
|
+
with patch("ouroboros.cli.commands.init.AnthropicAdapter"):
|
|
111
111
|
with patch("ouroboros.cli.commands.init.asyncio.run") as mock_run:
|
|
112
112
|
mock_run.return_value = []
|
|
113
113
|
|
|
@@ -121,7 +121,7 @@ class TestInitCommand:
|
|
|
121
121
|
|
|
122
122
|
def test_init_resume_missing_interview(self, temp_state_dir: Path) -> None:
|
|
123
123
|
"""Test init resume with non-existent interview ID."""
|
|
124
|
-
with patch("ouroboros.cli.commands.init.
|
|
124
|
+
with patch("ouroboros.cli.commands.init.AnthropicAdapter") as mock_adapter_class:
|
|
125
125
|
mock_adapter = MagicMock()
|
|
126
126
|
mock_adapter_class.return_value = mock_adapter
|
|
127
127
|
|
|
@@ -665,6 +665,68 @@ class TestAmbiguityScorerParseResponse:
|
|
|
665
665
|
with pytest.raises(ValueError, match="Missing required field"):
|
|
666
666
|
scorer._parse_scoring_response(response)
|
|
667
667
|
|
|
668
|
+
def test_parse_response_missing_success_justification_uses_fallback(self) -> None:
|
|
669
|
+
"""_parse_scoring_response tolerates missing success justification."""
|
|
670
|
+
mock_adapter = MagicMock()
|
|
671
|
+
scorer = AmbiguityScorer(llm_adapter=mock_adapter)
|
|
672
|
+
|
|
673
|
+
response = (
|
|
674
|
+
'{"goal_clarity_score": 0.9, "goal_clarity_justification": "Good goal.", '
|
|
675
|
+
'"constraint_clarity_score": 0.8, "constraint_clarity_justification": '
|
|
676
|
+
'"Clear constraints.", "success_criteria_clarity_score": 0.7}'
|
|
677
|
+
)
|
|
678
|
+
|
|
679
|
+
breakdown = scorer._parse_scoring_response(response)
|
|
680
|
+
|
|
681
|
+
assert breakdown.success_criteria_clarity.clarity_score == 0.7
|
|
682
|
+
assert (
|
|
683
|
+
breakdown.success_criteria_clarity.justification
|
|
684
|
+
== "Success Criteria Clarity justification not provided by model."
|
|
685
|
+
)
|
|
686
|
+
|
|
687
|
+
def test_parse_response_missing_goal_justification_uses_fallback(self) -> None:
|
|
688
|
+
"""_parse_scoring_response tolerates missing goal justification."""
|
|
689
|
+
mock_adapter = MagicMock()
|
|
690
|
+
scorer = AmbiguityScorer(llm_adapter=mock_adapter)
|
|
691
|
+
|
|
692
|
+
response = (
|
|
693
|
+
'{"goal_clarity_score": 0.85, "constraint_clarity_score": 0.75, '
|
|
694
|
+
'"constraint_clarity_justification": "Good constraints.", '
|
|
695
|
+
'"success_criteria_clarity_score": 0.65, '
|
|
696
|
+
'"success_criteria_clarity_justification": "Clear criteria."}'
|
|
697
|
+
)
|
|
698
|
+
|
|
699
|
+
breakdown = scorer._parse_scoring_response(response)
|
|
700
|
+
|
|
701
|
+
assert breakdown.goal_clarity.clarity_score == 0.85
|
|
702
|
+
assert (
|
|
703
|
+
breakdown.goal_clarity.justification
|
|
704
|
+
== "Goal Clarity justification not provided by model."
|
|
705
|
+
)
|
|
706
|
+
|
|
707
|
+
def test_parse_brownfield_response_missing_context_justification_uses_fallback(self) -> None:
|
|
708
|
+
"""_parse_scoring_response tolerates missing brownfield context justification."""
|
|
709
|
+
mock_adapter = MagicMock()
|
|
710
|
+
scorer = AmbiguityScorer(llm_adapter=mock_adapter)
|
|
711
|
+
|
|
712
|
+
response = (
|
|
713
|
+
'{"goal_clarity_score": 0.9, "goal_clarity_justification": "Good goal.", '
|
|
714
|
+
'"constraint_clarity_score": 0.8, "constraint_clarity_justification": '
|
|
715
|
+
'"Clear constraints.", "success_criteria_clarity_score": 0.7, '
|
|
716
|
+
'"success_criteria_clarity_justification": "Clear criteria.", '
|
|
717
|
+
'"context_clarity_score": 0.6}'
|
|
718
|
+
)
|
|
719
|
+
|
|
720
|
+
breakdown = scorer._parse_scoring_response(response, is_brownfield=True)
|
|
721
|
+
|
|
722
|
+
assert breakdown.context_clarity is not None
|
|
723
|
+
assert breakdown.context_clarity.clarity_score == 0.6
|
|
724
|
+
assert breakdown.context_clarity.weight == 0.15
|
|
725
|
+
assert (
|
|
726
|
+
breakdown.context_clarity.justification
|
|
727
|
+
== "Context Clarity justification not provided by model."
|
|
728
|
+
)
|
|
729
|
+
|
|
668
730
|
def test_parse_response_invalid_json(self) -> None:
|
|
669
731
|
"""_parse_scoring_response raises error for invalid JSON."""
|
|
670
732
|
mock_adapter = MagicMock()
|
|
@@ -240,7 +240,7 @@ class TestShorthandCommands:
|
|
|
240
240
|
|
|
241
241
|
def test_init_list_subcommand_still_works(self) -> None:
|
|
242
242
|
"""Test backward compat: 'ouroboros init list' still routes to list."""
|
|
243
|
-
with patch("ouroboros.cli.commands.init.
|
|
243
|
+
with patch("ouroboros.cli.commands.init.AnthropicAdapter"):
|
|
244
244
|
with patch("ouroboros.cli.commands.init.asyncio.run") as mock_run:
|
|
245
245
|
mock_run.return_value = []
|
|
246
246
|
result = runner.invoke(app, ["init", "list"])
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/dashboard.rs
RENAMED
|
File without changes
|
{ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/execution.rs
RENAMED
|
File without changes
|
{ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/lineage.rs
RENAMED
|
File without changes
|
{ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/crates/ouroboros-tui/src/views/logs.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
|
|
File without changes
|
|
File without changes
|
{ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/contributing/architecture-overview.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
|
{ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/ontological-framework/aop-design.md
RENAMED
|
File without changes
|
{ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/ontological-framework/architecture.md
RENAMED
|
File without changes
|
{ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/docs/ontological-framework/requirements.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ouroboros_ai-0.25.3.dev1 → ouroboros_ai-0.25.3.dev2}/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
|