ouroboros-ai 0.40.2.dev16__tar.gz → 0.40.2.dev18__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.
Files changed (1179) hide show
  1. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/PKG-INFO +1 -1
  2. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/architecture.md +4 -2
  3. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/config-reference.md +22 -4
  4. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/getting-started.md +3 -2
  5. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/runtime-capability-matrix.md +37 -35
  6. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/_version.py +2 -2
  7. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/__init__.py +5 -0
  8. ouroboros_ai-0.40.2.dev18/tests/integration/test_pi_native_smoke.py +113 -0
  9. ouroboros_ai-0.40.2.dev18/tests/unit/providers/test_public_exports.py +9 -0
  10. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude/settings.json +0 -0
  11. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/.mcp.json +0 -0
  12. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/SKILL_CAPABILITY_GUIDE.md +0 -0
  13. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/marketplace.json +0 -0
  14. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/plugin.json +0 -0
  15. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/auto/SKILL.md +0 -0
  16. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/brownfield/SKILL.md +0 -0
  17. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/cancel/SKILL.md +0 -0
  18. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/evaluate/SKILL.md +0 -0
  19. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/evolve/SKILL.md +0 -0
  20. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/help/SKILL.md +0 -0
  21. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/interview/SKILL.md +0 -0
  22. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/pm/SKILL.md +0 -0
  23. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/publish/SKILL.md +0 -0
  24. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/qa/SKILL.md +0 -0
  25. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/ralph/SKILL.md +0 -0
  26. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/resume-session/SKILL.md +0 -0
  27. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/run/SKILL.md +0 -0
  28. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/seed/SKILL.md +0 -0
  29. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/setup/SKILL.md +0 -0
  30. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/status/SKILL.md +0 -0
  31. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/tutorial/SKILL.md +0 -0
  32. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/unstuck/SKILL.md +0 -0
  33. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/update/SKILL.md +0 -0
  34. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.claude-plugin/skills/welcome/SKILL.md +0 -0
  35. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.codex/config.toml +0 -0
  36. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.codex/hooks.json +0 -0
  37. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.env.example +0 -0
  38. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  39. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  40. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  41. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  42. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  43. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.github/workflows/auto-boundary.yml +0 -0
  44. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.github/workflows/auto-perf-budget.yml +0 -0
  45. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.github/workflows/dev-publish.yml +0 -0
  46. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.github/workflows/lint.yml +0 -0
  47. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.github/workflows/max-turns-envelope.yml +0 -0
  48. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.github/workflows/release.yml +0 -0
  49. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.github/workflows/test.yml +0 -0
  50. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.gitignore +0 -0
  51. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.mcp.json +0 -0
  52. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.ouroboros/mechanical.toml +0 -0
  53. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.ouroboros/seeds/seed_73827177a2a3.yaml +0 -0
  54. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.ouroboros/seeds/seed_78c8e6e41813.yaml +0 -0
  55. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.pre-commit-config.yaml +0 -0
  56. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/.python-version +0 -0
  57. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/AGENTS.md +0 -0
  58. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/CHANGELOG.md +0 -0
  59. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/CLAUDE.md +0 -0
  60. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/CODE_OF_CONDUCT.md +0 -0
  61. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/CONTRIBUTING.md +0 -0
  62. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/Code-Review-Claude.md +0 -0
  63. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/Code-Review-Codex.md +0 -0
  64. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/HANDOFF.md +0 -0
  65. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/LICENSE +0 -0
  66. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/README.ko.md +0 -0
  67. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/README.md +0 -0
  68. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/README.zh-CN.md +0 -0
  69. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/SECURITY.md +0 -0
  70. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/UNINSTALL.md +0 -0
  71. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/commands/cancel.md +0 -0
  72. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/commands/evaluate.md +0 -0
  73. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/commands/evolve.md +0 -0
  74. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/commands/help.md +0 -0
  75. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/commands/interview.md +0 -0
  76. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/commands/ralph.md +0 -0
  77. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/commands/run.md +0 -0
  78. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/commands/seed.md +0 -0
  79. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/commands/setup.md +0 -0
  80. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/commands/status.md +0 -0
  81. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/commands/tutorial.md +0 -0
  82. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/commands/unstuck.md +0 -0
  83. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/commands/welcome.md +0 -0
  84. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/crates/ouroboros-tui/.gitignore +0 -0
  85. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/crates/ouroboros-tui/Cargo.lock +0 -0
  86. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/crates/ouroboros-tui/Cargo.toml +0 -0
  87. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/crates/ouroboros-tui/README.md +0 -0
  88. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/crates/ouroboros-tui/src/db.rs +0 -0
  89. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/crates/ouroboros-tui/src/main.rs +0 -0
  90. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/crates/ouroboros-tui/src/mock.rs +0 -0
  91. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/crates/ouroboros-tui/src/state.rs +0 -0
  92. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/crates/ouroboros-tui/src/views/dashboard.rs +0 -0
  93. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/crates/ouroboros-tui/src/views/execution.rs +0 -0
  94. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/crates/ouroboros-tui/src/views/lineage.rs +0 -0
  95. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/crates/ouroboros-tui/src/views/logs.rs +0 -0
  96. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/crates/ouroboros-tui/src/views/mod.rs +0 -0
  97. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/crates/ouroboros-tui/src/views/session_selector.rs +0 -0
  98. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/README.md +0 -0
  99. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/agentos/control-journal.md +0 -0
  100. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/agentos/fat-harness-baseline-metrics.md +0 -0
  101. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/agentos/issue-sequencing-graph.md +0 -0
  102. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/agentos/profile-taxonomy.md +0 -0
  103. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/agentos/projection-followups.md +0 -0
  104. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/agentos/projection-v1-scope.md +0 -0
  105. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/agentos/release-readiness.md +0 -0
  106. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/agentos/runtime-contract.md +0 -0
  107. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/agentos/traceguard-observation-protocol.md +0 -0
  108. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/agentos/traceguard-vs-legacy-benchmark.md +0 -0
  109. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/agentos/workflow-ir-projection-mapping.md +0 -0
  110. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/agentos/workflow-ir-v1.md +0 -0
  111. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/api/README.md +0 -0
  112. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/api/core.md +0 -0
  113. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/api/mcp.md +0 -0
  114. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/auto-interview-convergence-contract.md +0 -0
  115. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/auto-runtime-semantics.md +0 -0
  116. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/cli-reference.md +0 -0
  117. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/contributing/agent-os-kernel-terminology.md +0 -0
  118. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/contributing/architecture-overview.md +0 -0
  119. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/contributing/control-contract.md +0 -0
  120. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/contributing/control-plane-followups.md +0 -0
  121. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/contributing/findings-registry.md +0 -0
  122. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/contributing/issue-quality-policy.md +0 -0
  123. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/contributing/key-patterns.md +0 -0
  124. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/contributing/testing-guide.md +0 -0
  125. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/contributing/verifier-evidence-policy.md +0 -0
  126. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/contributing/watchdog-cancellation.md +0 -0
  127. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/events.md +0 -0
  128. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/examples/mcp-config.yaml +0 -0
  129. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/examples/workflows/design-code-verify.md +0 -0
  130. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/examples/workflows/research-to-deliverable.md +0 -0
  131. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/guides/agent-process-lifecycle.md +0 -0
  132. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/guides/evaluation-pipeline.md +0 -0
  133. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/guides/evolution-loop.md +0 -0
  134. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/guides/execution-vs-evaluation.md +0 -0
  135. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/guides/issue-176-subagent-mcp-inheritance.md +0 -0
  136. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/guides/mcp-best-practices.md +0 -0
  137. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/guides/mcp-bridge.md +0 -0
  138. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/guides/ooo-skill-dispatch-router.md +0 -0
  139. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/guides/opencode-subagent-bridge.md +0 -0
  140. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/guides/qa-backends.md +0 -0
  141. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/guides/seed-authoring.md +0 -0
  142. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/guides/tui-usage.md +0 -0
  143. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/guides/windows-wsl-troubleshooting.md +0 -0
  144. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/images/PLACEHOLDER_README.md +0 -0
  145. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/images/ouroboros.png +0 -0
  146. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/ooo-auto-analysis.md +0 -0
  147. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/ooo-auto-evolution-plan.md +0 -0
  148. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/platform-support.md +0 -0
  149. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/rfc/contract-ledger.md +0 -0
  150. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/rfc/disposable-memory.md +0 -0
  151. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/rfc/interview-hardening.md +0 -0
  152. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/rfc/interview-milestone-lateral-contract.md +0 -0
  153. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/rfc/mesh.md +0 -0
  154. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/rfc/plugin-artifact-state-hook-contract.md +0 -0
  155. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/rfc/plugin-tool-call-hook-contract.md +0 -0
  156. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/rfc/runtime-delegation-contract.md +0 -0
  157. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/rfc/runtime-timeout-contract.md +0 -0
  158. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/rfc/userlevel-plugins.md +0 -0
  159. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/rfc/verdict-envelope-v1.md +0 -0
  160. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/runtime-guides/claude-code.md +0 -0
  161. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/runtime-guides/codex.md +0 -0
  162. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/runtime-guides/copilot.md +0 -0
  163. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/runtime-guides/gemini.md +0 -0
  164. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/runtime-guides/goose.md +0 -0
  165. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/runtime-guides/hermes.md +0 -0
  166. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/runtime-guides/kiro.md +0 -0
  167. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/runtime-guides/opencode.md +0 -0
  168. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/docs/runtime-guides/skill-capability-guides.md +0 -0
  169. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/examples/coordinator_test_seed.yaml +0 -0
  170. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/examples/dummy_seed.yaml +0 -0
  171. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/examples/parallel_subac_test_seed.yaml +0 -0
  172. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/examples/subac_test_seed.yaml +0 -0
  173. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/examples/task_manager/README.md +0 -0
  174. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/examples/task_manager/__init__.py +0 -0
  175. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/examples/task_manager/__main__.py +0 -0
  176. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/examples/task_manager/cli.py +0 -0
  177. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/examples/task_manager/models.py +0 -0
  178. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/examples/task_manager/storage.py +0 -0
  179. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/examples/test_display.py +0 -0
  180. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/hooks/hooks.json +0 -0
  181. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/llms-full.txt +0 -0
  182. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/llms.txt +0 -0
  183. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/project-context.md +0 -0
  184. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/pyproject.toml +0 -0
  185. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/scripts/check-auto-boundary.py +0 -0
  186. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/scripts/check-auto-perf-budget.py +0 -0
  187. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/scripts/check-max-turns-envelope.py +0 -0
  188. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/scripts/drift-monitor.py +0 -0
  189. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/scripts/install.sh +0 -0
  190. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/scripts/keyword-detector.py +0 -0
  191. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/scripts/mcp-serve.sh +0 -0
  192. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/scripts/ralph-rewind.py +0 -0
  193. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/scripts/ralph.py +0 -0
  194. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/scripts/ralph.sh +0 -0
  195. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/scripts/session-start.py +0 -0
  196. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/scripts/sync-plugin-version.py +0 -0
  197. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/scripts/version-check.py +0 -0
  198. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/auto/SKILL.md +0 -0
  199. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/brownfield/SKILL.md +0 -0
  200. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/cancel/SKILL.md +0 -0
  201. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/evaluate/SKILL.md +0 -0
  202. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/evolve/SKILL.md +0 -0
  203. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/help/SKILL.md +0 -0
  204. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/interview/SKILL.md +0 -0
  205. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/pm/SKILL.md +0 -0
  206. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/publish/SKILL.md +0 -0
  207. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/qa/SKILL.md +0 -0
  208. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/ralph/SKILL.md +0 -0
  209. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/resume-session/SKILL.md +0 -0
  210. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/run/SKILL.md +0 -0
  211. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/seed/SKILL.md +0 -0
  212. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/setup/SKILL.md +0 -0
  213. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/status/SKILL.md +0 -0
  214. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/tutorial/SKILL.md +0 -0
  215. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/unstuck/SKILL.md +0 -0
  216. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/update/SKILL.md +0 -0
  217. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/skills/welcome/SKILL.md +0 -0
  218. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/__init__.py +0 -0
  219. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/__main__.py +0 -0
  220. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/__init__.py +0 -0
  221. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/advocate.md +0 -0
  222. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/analysis-agent.md +0 -0
  223. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/architect.md +0 -0
  224. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/breadth-keeper.md +0 -0
  225. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/code-executor.md +0 -0
  226. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/codebase-explorer.md +0 -0
  227. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/consensus-reviewer.md +0 -0
  228. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/contrarian.md +0 -0
  229. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/evaluator.md +0 -0
  230. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/hacker.md +0 -0
  231. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/judge.md +0 -0
  232. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/loader.py +0 -0
  233. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/ontologist.md +0 -0
  234. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/ontology-analyst.md +0 -0
  235. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/qa-judge.md +0 -0
  236. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/research-agent.md +0 -0
  237. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/researcher.md +0 -0
  238. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/seed-architect.md +0 -0
  239. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/seed-closer.md +0 -0
  240. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/semantic-evaluator.md +0 -0
  241. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/simplifier.md +0 -0
  242. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/agents/socratic-interviewer.md +0 -0
  243. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/__init__.py +0 -0
  244. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/adapters.py +0 -0
  245. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/answerer.py +0 -0
  246. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/auto_fill.py +0 -0
  247. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/blocker_attribution.py +0 -0
  248. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/checkpoint_commits.py +0 -0
  249. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/domain_inference.py +0 -0
  250. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/domain_profile.py +0 -0
  251. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/execution_acceptance.py +0 -0
  252. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/gap_detector.py +0 -0
  253. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/grading.py +0 -0
  254. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/handoff_contract.py +0 -0
  255. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/interview_driver.py +0 -0
  256. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/lateral_routing.py +0 -0
  257. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/ledger.py +0 -0
  258. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/ledger_seed.py +0 -0
  259. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/listeners.py +0 -0
  260. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/pipeline.py +0 -0
  261. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/policies.py +0 -0
  262. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/profiles/__init__.py +0 -0
  263. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/profiles/coding.py +0 -0
  264. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/profiles/research.py +0 -0
  265. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/progress.py +0 -0
  266. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/provenance.py +0 -0
  267. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/recovery_plan.py +0 -0
  268. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/repo_context.py +0 -0
  269. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/resume_render.py +0 -0
  270. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/safe_defaults.py +0 -0
  271. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/seed_repairer.py +0 -0
  272. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/seed_reviewer.py +0 -0
  273. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/state.py +0 -0
  274. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/task_class_application.py +0 -0
  275. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/task_classes.py +0 -0
  276. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/auto/worktree.py +0 -0
  277. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/backends/__init__.py +0 -0
  278. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/backends/capabilities.py +0 -0
  279. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/bigbang/__init__.py +0 -0
  280. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/bigbang/ambiguity.py +0 -0
  281. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/bigbang/brownfield.py +0 -0
  282. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/bigbang/explore.py +0 -0
  283. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/bigbang/interview.py +0 -0
  284. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/bigbang/pm_completion.py +0 -0
  285. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/bigbang/pm_document.py +0 -0
  286. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/bigbang/pm_interview.py +0 -0
  287. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/bigbang/pm_seed.py +0 -0
  288. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/bigbang/question_classifier.py +0 -0
  289. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/bigbang/seed_generator.py +0 -0
  290. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/claude_permissions.py +0 -0
  291. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/__init__.py +0 -0
  292. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/__init__.py +0 -0
  293. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/auto.py +0 -0
  294. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/cancel.py +0 -0
  295. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/codex.py +0 -0
  296. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/config.py +0 -0
  297. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/detect.py +0 -0
  298. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/init.py +0 -0
  299. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/job.py +0 -0
  300. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/mcp.py +0 -0
  301. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/mcp_doctor.py +0 -0
  302. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/plugin.py +0 -0
  303. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/plugin_dispatch.py +0 -0
  304. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/pm.py +0 -0
  305. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/qa.py +0 -0
  306. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/resume.py +0 -0
  307. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/run.py +0 -0
  308. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/setup.py +0 -0
  309. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/status.py +0 -0
  310. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/tui.py +0 -0
  311. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/uninstall.py +0 -0
  312. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/commands/workflow_ir.py +0 -0
  313. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/formatters/__init__.py +0 -0
  314. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/formatters/panels.py +0 -0
  315. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/formatters/progress.py +0 -0
  316. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/formatters/prompting.py +0 -0
  317. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/formatters/tables.py +0 -0
  318. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/formatters/workflow_display.py +0 -0
  319. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/jsonc.py +0 -0
  320. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/main.py +0 -0
  321. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/cli/opencode_config.py +0 -0
  322. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/codex/__init__.py +0 -0
  323. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/codex/artifacts.py +0 -0
  324. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/codex/cli_policy.py +0 -0
  325. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/codex/ouroboros.md +0 -0
  326. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/codex/runtime_profile.py +0 -0
  327. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/codex_permissions.py +0 -0
  328. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/config/__init__.py +0 -0
  329. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/config/_model_defaults.py +0 -0
  330. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/config/loader.py +0 -0
  331. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/config/models.py +0 -0
  332. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/copilot/__init__.py +0 -0
  333. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/copilot/cli_policy.py +0 -0
  334. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/copilot/model_discovery.py +0 -0
  335. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/copilot/runtime_profile.py +0 -0
  336. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/copilot_permissions.py +0 -0
  337. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/__init__.py +0 -0
  338. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/ac_tree.py +0 -0
  339. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/context.py +0 -0
  340. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/control_contract.py +0 -0
  341. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/directive.py +0 -0
  342. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/errors.py +0 -0
  343. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/file_lock.py +0 -0
  344. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/git_workflow.py +0 -0
  345. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/hitl_contract.py +0 -0
  346. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/hitl_resume.py +0 -0
  347. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/hitl_state.py +0 -0
  348. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/initial_context.py +0 -0
  349. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/json_utils.py +0 -0
  350. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/lineage.py +0 -0
  351. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/ontology_aspect.py +0 -0
  352. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/ontology_questions.py +0 -0
  353. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/project_paths.py +0 -0
  354. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/retry.py +0 -0
  355. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/runtime_transition.py +0 -0
  356. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/security.py +0 -0
  357. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/seed.py +0 -0
  358. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/seed_contract.py +0 -0
  359. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/seed_contract_prompt.py +0 -0
  360. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/text.py +0 -0
  361. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/ttl_cache.py +0 -0
  362. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/types.py +0 -0
  363. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/core/worktree.py +0 -0
  364. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evaluation/__init__.py +0 -0
  365. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evaluation/artifact_collector.py +0 -0
  366. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evaluation/checklist.py +0 -0
  367. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evaluation/consensus.py +0 -0
  368. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evaluation/detector.py +0 -0
  369. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evaluation/json_utils.py +0 -0
  370. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evaluation/languages.py +0 -0
  371. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evaluation/mechanical.py +0 -0
  372. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evaluation/models.py +0 -0
  373. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evaluation/pipeline.py +0 -0
  374. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evaluation/semantic.py +0 -0
  375. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evaluation/trigger.py +0 -0
  376. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evaluation/verification_artifacts.py +0 -0
  377. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/events/__init__.py +0 -0
  378. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/events/base.py +0 -0
  379. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/events/control.py +0 -0
  380. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/events/decomposition.py +0 -0
  381. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/events/evaluation.py +0 -0
  382. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/events/hitl.py +0 -0
  383. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/events/interview.py +0 -0
  384. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/events/io.py +0 -0
  385. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/events/io_recorder.py +0 -0
  386. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/events/lineage.py +0 -0
  387. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/events/ontology.py +0 -0
  388. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evolution/__init__.py +0 -0
  389. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evolution/convergence.py +0 -0
  390. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evolution/directive_mapping.py +0 -0
  391. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evolution/loop.py +0 -0
  392. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evolution/material_progress.py +0 -0
  393. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evolution/projector.py +0 -0
  394. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evolution/reflect.py +0 -0
  395. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evolution/regression.py +0 -0
  396. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evolution/watchdog.py +0 -0
  397. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/evolution/wonder.py +0 -0
  398. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/execution/__init__.py +0 -0
  399. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/execution/atomicity.py +0 -0
  400. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/execution/decomposition.py +0 -0
  401. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/execution/double_diamond.py +0 -0
  402. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/execution/subagent.py +0 -0
  403. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/harness/__init__.py +0 -0
  404. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/harness/claim_term_guard.py +0 -0
  405. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/harness/deliver_gate.py +0 -0
  406. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/harness/deliver_routing.py +0 -0
  407. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/harness/journal.py +0 -0
  408. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/harness/projection.py +0 -0
  409. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/harness/projection_builder.py +0 -0
  410. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/harness/run_snapshot.py +0 -0
  411. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/hermes/__init__.py +0 -0
  412. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/hermes/artifacts.py +0 -0
  413. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/__init__.py +0 -0
  414. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/bridge/__init__.py +0 -0
  415. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/bridge/bridge.py +0 -0
  416. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/bridge/config.py +0 -0
  417. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/bridge/factory.py +0 -0
  418. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/client/__init__.py +0 -0
  419. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/client/adapter.py +0 -0
  420. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/client/manager.py +0 -0
  421. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/client/protocol.py +0 -0
  422. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/errors.py +0 -0
  423. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/job_manager.py +0 -0
  424. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/resources/__init__.py +0 -0
  425. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/resources/handlers.py +0 -0
  426. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/server/__init__.py +0 -0
  427. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/server/adapter.py +0 -0
  428. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/server/protocol.py +0 -0
  429. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/server/security.py +0 -0
  430. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/__init__.py +0 -0
  431. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/ac_tree_hud_handler.py +0 -0
  432. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/ac_tree_hud_render.py +0 -0
  433. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/authoring_handlers.py +0 -0
  434. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/auto_handler.py +0 -0
  435. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/bridge_mixin.py +0 -0
  436. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/brownfield_handler.py +0 -0
  437. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/dashboard.py +0 -0
  438. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/definitions.py +0 -0
  439. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/evaluation_handlers.py +0 -0
  440. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/evolution_handlers.py +0 -0
  441. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/execution_handlers.py +0 -0
  442. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/job_handlers.py +0 -0
  443. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/pm_handler.py +0 -0
  444. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/projection_handlers.py +0 -0
  445. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/qa.py +0 -0
  446. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/query_handlers.py +0 -0
  447. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/ralph_handlers.py +0 -0
  448. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/registry.py +0 -0
  449. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/tools/subagent.py +0 -0
  450. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/mcp/types.py +0 -0
  451. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/observability/__init__.py +0 -0
  452. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/observability/drift.py +0 -0
  453. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/observability/logging.py +0 -0
  454. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/observability/retrospective.py +0 -0
  455. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/opencode/__init__.py +0 -0
  456. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/opencode/plugin/__init__.py +0 -0
  457. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/opencode/plugin/opencode-plugin.d.ts +0 -0
  458. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/opencode/plugin/ouroboros-bridge.test.ts +0 -0
  459. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/opencode/plugin/ouroboros-bridge.ts +0 -0
  460. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/opencode/plugin/package.json +0 -0
  461. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/opencode/plugin/tsconfig.json +0 -0
  462. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/__init__.py +0 -0
  463. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/adapter.py +0 -0
  464. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/agent_process.py +0 -0
  465. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/agent_runtime_context.py +0 -0
  466. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/baseline_metrics.py +0 -0
  467. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/baseline_metrics_capture.py +0 -0
  468. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/baseline_metrics_format.py +0 -0
  469. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/capabilities.py +0 -0
  470. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/codex_cli_runtime.py +0 -0
  471. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/command_dispatcher.py +0 -0
  472. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/context_governor.py +0 -0
  473. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/control_bus.py +0 -0
  474. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/control_plane.py +0 -0
  475. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/coordinator.py +0 -0
  476. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/copilot_cli_runtime.py +0 -0
  477. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/decomposition_params.py +0 -0
  478. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/dependency_analyzer.py +0 -0
  479. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/events.py +0 -0
  480. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/evidence_schema.py +0 -0
  481. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/execution_runtime_scope.py +0 -0
  482. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/execution_strategy.py +0 -0
  483. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/failure_taxonomy.py +0 -0
  484. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/gemini_cli_runtime.py +0 -0
  485. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/goose_runtime.py +0 -0
  486. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/heartbeat.py +0 -0
  487. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/hermes_runtime.py +0 -0
  488. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/kiro_adapter.py +0 -0
  489. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/level_context.py +0 -0
  490. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/mcp_config.py +0 -0
  491. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/mcp_tools.py +0 -0
  492. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/opencode_event_normalizer.py +0 -0
  493. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/opencode_runtime.py +0 -0
  494. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/parallel_executor.py +0 -0
  495. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/parallel_executor_models.py +0 -0
  496. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/phase_wrappers.py +0 -0
  497. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/pi_runtime.py +0 -0
  498. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/policy.py +0 -0
  499. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/profile_loader.py +0 -0
  500. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/profile_strategy.py +0 -0
  501. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/rate_limit.py +0 -0
  502. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/routing.py +0 -0
  503. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/runner.py +0 -0
  504. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/runtime_evidence.py +0 -0
  505. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/runtime_factory.py +0 -0
  506. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/runtime_message_projection.py +0 -0
  507. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/session.py +0 -0
  508. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/skill_intercept.py +0 -0
  509. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/stage.py +0 -0
  510. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/traceguard_benchmark_capture.py +0 -0
  511. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/verifier.py +0 -0
  512. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/workflow_ir.py +0 -0
  513. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/workflow_ir_adapter.py +0 -0
  514. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/workflow_lifecycle.py +0 -0
  515. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator/workflow_state.py +0 -0
  516. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/orchestrator_stage.py +0 -0
  517. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/persistence/__init__.py +0 -0
  518. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/persistence/brownfield.py +0 -0
  519. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/persistence/checkpoint.py +0 -0
  520. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/persistence/event_store.py +0 -0
  521. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/persistence/migrations/__init__.py +0 -0
  522. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/persistence/migrations/runner.py +0 -0
  523. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/persistence/migrations/scripts/001_initial.sql +0 -0
  524. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/persistence/migrations/scripts/002_brownfield.sql +0 -0
  525. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/persistence/schema.py +0 -0
  526. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/persistence/uow.py +0 -0
  527. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/__init__.py +0 -0
  528. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/agents/__init__.py +0 -0
  529. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/agents/pool.py +0 -0
  530. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/agents/registry.py +0 -0
  531. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/digest.py +0 -0
  532. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/firewall.py +0 -0
  533. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/hooks.py +0 -0
  534. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/ledger_adapter.py +0 -0
  535. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/lockfile.py +0 -0
  536. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/manifest.py +0 -0
  537. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/orchestration/__init__.py +0 -0
  538. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/orchestration/router.py +0 -0
  539. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/orchestration/scheduler.py +0 -0
  540. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/schemas/0.1/_source.json +0 -0
  541. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/schemas/0.1/audit-event.schema.json +0 -0
  542. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/schemas/0.1/plugin.schema.json +0 -0
  543. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/schemas/0.2/_source.json +0 -0
  544. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/schemas/0.2/audit-event.schema.json +0 -0
  545. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/schemas/0.2/plugin.schema.json +0 -0
  546. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/schemas/0.3/_source.json +0 -0
  547. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/schemas/0.3/audit-event.schema.json +0 -0
  548. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/schemas/0.3/plugin.schema.json +0 -0
  549. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/schemas/0.4/_source.json +0 -0
  550. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/schemas/0.4/audit-event.schema.json +0 -0
  551. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/schemas/0.4/plugin.schema.json +0 -0
  552. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/skills/__init__.py +0 -0
  553. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/skills/docs.py +0 -0
  554. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/skills/executor.py +0 -0
  555. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/skills/keywords.py +0 -0
  556. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/skills/registry.py +0 -0
  557. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/trust_store.py +0 -0
  558. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/plugin/userlevel_registry.py +0 -0
  559. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/pm/__init__.py +0 -0
  560. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/pm/handoff.py +0 -0
  561. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/pm/renderer.py +0 -0
  562. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/profiles/analysis.yaml +0 -0
  563. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/profiles/code.yaml +0 -0
  564. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/profiles/research.yaml +0 -0
  565. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/anthropic_adapter.py +0 -0
  566. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/base.py +0 -0
  567. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/claude_code_adapter.py +0 -0
  568. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/codex_cli_adapter.py +0 -0
  569. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/codex_cli_stream.py +0 -0
  570. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/copilot_cli_adapter.py +0 -0
  571. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/copilot_cli_stream.py +0 -0
  572. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/factory.py +0 -0
  573. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/gemini_cli_adapter.py +0 -0
  574. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/gemini_event_normalizer.py +0 -0
  575. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/goose_cli_adapter.py +0 -0
  576. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/hermes_cli_adapter.py +0 -0
  577. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/kiro_adapter.py +0 -0
  578. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/litellm_adapter.py +0 -0
  579. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/opencode_adapter.py +0 -0
  580. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/pi_llm_adapter.py +0 -0
  581. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/profiles.py +0 -0
  582. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/providers/tool_use_diagnostics.py +0 -0
  583. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/py.typed +0 -0
  584. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/ralph_loop.py +0 -0
  585. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/resilience/__init__.py +0 -0
  586. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/resilience/lateral.py +0 -0
  587. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/resilience/recovery.py +0 -0
  588. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/resilience/stagnation.py +0 -0
  589. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/router/__init__.py +0 -0
  590. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/router/command_parser.py +0 -0
  591. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/router/dispatch.py +0 -0
  592. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/router/registry.py +0 -0
  593. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/router/types.py +0 -0
  594. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/routing/__init__.py +0 -0
  595. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/routing/complexity.py +0 -0
  596. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/routing/downgrade.py +0 -0
  597. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/routing/escalation.py +0 -0
  598. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/routing/router.py +0 -0
  599. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/routing/tiers.py +0 -0
  600. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/runtime/__init__.py +0 -0
  601. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/runtime/controls.py +0 -0
  602. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/runtime/watchdog.py +0 -0
  603. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/sandbox.py +0 -0
  604. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/secondary/__init__.py +0 -0
  605. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/secondary/scheduler.py +0 -0
  606. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/secondary/todo_registry.py +0 -0
  607. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/skills/__init__.py +0 -0
  608. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/skills/artifacts.py +0 -0
  609. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/strategies/__init__.py +0 -0
  610. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/strategies/devil_advocate.py +0 -0
  611. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/__init__.py +0 -0
  612. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/app.py +0 -0
  613. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/components/__init__.py +0 -0
  614. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/components/agents_panel.py +0 -0
  615. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/components/event_log.py +0 -0
  616. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/components/progress.py +0 -0
  617. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/components/token_tracker.py +0 -0
  618. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/events.py +0 -0
  619. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/screens/__init__.py +0 -0
  620. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/screens/confirm_rewind.py +0 -0
  621. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/screens/dashboard.py +0 -0
  622. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/screens/dashboard_v2.py +0 -0
  623. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/screens/dashboard_v3.py +0 -0
  624. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/screens/debug.py +0 -0
  625. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/screens/execution.py +0 -0
  626. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/screens/hud_dashboard.py +0 -0
  627. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/screens/lineage_detail.py +0 -0
  628. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/screens/lineage_selector.py +0 -0
  629. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/screens/logs.py +0 -0
  630. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/screens/session_selector.py +0 -0
  631. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/widgets/__init__.py +0 -0
  632. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/widgets/ac_progress.py +0 -0
  633. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/widgets/ac_tree.py +0 -0
  634. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/widgets/agent_activity.py +0 -0
  635. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/widgets/cost_tracker.py +0 -0
  636. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/widgets/drift_meter.py +0 -0
  637. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/widgets/lineage_tree.py +0 -0
  638. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/widgets/parallel_graph.py +0 -0
  639. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/tui/widgets/phase_progress.py +0 -0
  640. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/verification/__init__.py +0 -0
  641. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/verification/extractor.py +0 -0
  642. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/verification/models.py +0 -0
  643. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/src/ouroboros/verification/verifier.py +0 -0
  644. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/__init__.py +0 -0
  645. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/_envelope_wiring.py +0 -0
  646. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/canonical/README.md +0 -0
  647. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/canonical/__init__.py +0 -0
  648. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/canonical/cli-todo/expected.yaml +0 -0
  649. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/canonical/cli-todo/goal.txt +0 -0
  650. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/canonical/conftest.py +0 -0
  651. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/canonical/test_canonical.py +0 -0
  652. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/canonical/test_conftest.py +0 -0
  653. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/conformance/__init__.py +0 -0
  654. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/conformance/workflow_ir/__init__.py +0 -0
  655. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/conformance/workflow_ir/fixtures.py +0 -0
  656. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/conformance/workflow_ir/test_negative_fixtures.py +0 -0
  657. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/conformance/workflow_ir/test_plugin_firewall_contract.py +0 -0
  658. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/conformance/workflow_ir/test_positive_fixtures.py +0 -0
  659. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/conftest.py +0 -0
  660. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/e2e/__init__.py +0 -0
  661. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/e2e/conftest.py +0 -0
  662. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/e2e/mcp_bridge_test_config.yaml +0 -0
  663. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/e2e/test_cli_commands.py +0 -0
  664. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/e2e/test_full_workflow.py +0 -0
  665. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/e2e/test_session_persistence.py +0 -0
  666. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/fixtures/plugins-fixture/README.md +0 -0
  667. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/fixtures/plugins-fixture/plugins/github-pr-ops/github_pr_ops/__init__.py +0 -0
  668. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/fixtures/plugins-fixture/plugins/github-pr-ops/github_pr_ops/__main__.py +0 -0
  669. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/fixtures/plugins-fixture/plugins/github-pr-ops/ouroboros.plugin.json +0 -0
  670. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/fixtures/projection/mechanical_evaluation_events.json +0 -0
  671. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/fixtures/router/skills/frontmatter-body/run/SKILL.md +0 -0
  672. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/fixtures/seeds/mechanical-eval-minimal.yaml +0 -0
  673. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/fixtures/test_atomicity_seed.yml +0 -0
  674. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/__init__.py +0 -0
  675. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/auto/__init__.py +0 -0
  676. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/auto/test_dispatch_to_seed_e2e.py +0 -0
  677. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/auto/test_domain_profile_plurality.py +0 -0
  678. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/auto/test_end_to_end_product.py +0 -0
  679. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/auto/test_interview_deadline_partial_product_regression.py +0 -0
  680. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/auto/test_status_unified.py +0 -0
  681. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/conftest.py +0 -0
  682. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/mcp/__init__.py +0 -0
  683. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/mcp/bridge/__init__.py +0 -0
  684. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/mcp/bridge/test_bridge_server_to_server.py +0 -0
  685. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/mcp/conftest.py +0 -0
  686. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/mcp/test_client_adapter.py +0 -0
  687. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/mcp/test_client_manager.py +0 -0
  688. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/mcp/test_server_adapter.py +0 -0
  689. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/orchestrator/__init__.py +0 -0
  690. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/orchestrator/test_agent_process_three_surface_acceptance.py +0 -0
  691. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/plugin/__init__.py +0 -0
  692. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/plugin/test_e2e.py +0 -0
  693. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/plugin/test_orchestration.py +0 -0
  694. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/plugin/test_wheel_packaging.py +0 -0
  695. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/test_cancel_subprocess_termination.py +0 -0
  696. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/test_codex_cli_passthrough_smoke.py +0 -0
  697. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/test_codex_skill_fallback.py +0 -0
  698. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/test_codex_skill_smoke.py +0 -0
  699. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/test_copilot_cli_smoke.py +0 -0
  700. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/test_entry_point.py +0 -0
  701. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/test_ir_projection_consistency.py +0 -0
  702. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/integration/test_mechanical_eval_projection.py +0 -0
  703. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/test-execution-plan.md +0 -0
  704. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/__init__.py +0 -0
  705. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/agents/__init__.py +0 -0
  706. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/agents/test_loader.py +0 -0
  707. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_821_acceptance_matrix.py +0 -0
  708. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_adapters_client_gates.py +0 -0
  709. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_adapters_ralph_poller.py +0 -0
  710. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_answer_source_log.py +0 -0
  711. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_answerer_via_domain_profile.py +0 -0
  712. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_auto_fill.py +0 -0
  713. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_auto_policies.py +0 -0
  714. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_auto_worktree.py +0 -0
  715. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_blocker_attribution.py +0 -0
  716. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_checkpoint_commits.py +0 -0
  717. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_cli_progress.py +0 -0
  718. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_domain_inference.py +0 -0
  719. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_domain_profile_coding_parity.py +0 -0
  720. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_domain_profile_contracts.py +0 -0
  721. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_execution_acceptance.py +0 -0
  722. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_handoff_contract.py +0 -0
  723. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_interview_driver_event_store_wiring.py +0 -0
  724. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_interview_pipeline.py +0 -0
  725. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_lateral_routing_safe_default.py +0 -0
  726. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_ledger_grading_answerer.py +0 -0
  727. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_ledger_seed.py +0 -0
  728. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_pipeline_deadline.py +0 -0
  729. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_pipeline_defaulted_sections_surface.py +0 -0
  730. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_pipeline_domain_profile.py +0 -0
  731. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_pipeline_evaluate.py +0 -0
  732. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_pipeline_interview_deadline_closure.py +0 -0
  733. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_pipeline_interview_observer_drain.py +0 -0
  734. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_pipeline_lateral.py +0 -0
  735. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_pipeline_oscillation_lateral.py +0 -0
  736. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_pipeline_partial_product_terminal.py +0 -0
  737. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_pipeline_provenance.py +0 -0
  738. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_pipeline_ralph_handoff.py +0 -0
  739. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_pipeline_runtime_probe_envelope.py +0 -0
  740. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_pipeline_task_class_envelope.py +0 -0
  741. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_pipeline_watchdog_integration.py +0 -0
  742. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_progress.py +0 -0
  743. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_recovery_plan.py +0 -0
  744. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_research_profile.py +0 -0
  745. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_run_starter_idempotency.py +0 -0
  746. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_runtime_semantics.py +0 -0
  747. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_safe_default_lateral_escalation.py +0 -0
  748. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_safe_default_observability.py +0 -0
  749. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_safe_defaults_domain_profile.py +0 -0
  750. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_safe_defaults_prompt_non_goals.py +0 -0
  751. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_seed_repairer_bounded.py +0 -0
  752. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_state.py +0 -0
  753. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_state_provenance.py +0 -0
  754. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_stop_reason_code.py +0 -0
  755. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_surface.py +0 -0
  756. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_task_class_application.py +0 -0
  757. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_task_classes.py +0 -0
  758. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/auto/test_user_preference_and_floor.py +0 -0
  759. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/backends/test_capabilities.py +0 -0
  760. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/__init__.py +0 -0
  761. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_ambiguity.py +0 -0
  762. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_brownfield.py +0 -0
  763. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_classifier_context.py +0 -0
  764. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_decide_later_items.py +0 -0
  765. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_explore.py +0 -0
  766. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_interview.py +0 -0
  767. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_interview_async_io.py +0 -0
  768. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_interview_no_web_search_hint.py +0 -0
  769. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_interview_research_prefix.py +0 -0
  770. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_interview_start_persist_failure.py +0 -0
  771. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_pm_completion.py +0 -0
  772. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_pm_document_generator.py +0 -0
  773. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_pm_document_writer.py +0 -0
  774. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_pm_interview.py +0 -0
  775. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_pm_interview_brownfield_db.py +0 -0
  776. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_pm_seed_ac12.py +0 -0
  777. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_pm_seed_save.py +0 -0
  778. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_question_classifier.py +0 -0
  779. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/bigbang/test_seed_generator.py +0 -0
  780. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/__init__.py +0 -0
  781. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/commands/test_tui_command.py +0 -0
  782. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/conftest.py +0 -0
  783. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/formatters/__init__.py +0 -0
  784. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/formatters/test_console.py +0 -0
  785. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/formatters/test_panels.py +0 -0
  786. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/formatters/test_progress.py +0 -0
  787. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/formatters/test_prompting.py +0 -0
  788. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/formatters/test_tables.py +0 -0
  789. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/formatters/test_workflow_display.py +0 -0
  790. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_auto_command.py +0 -0
  791. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_auto_domain_activation.py +0 -0
  792. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_auto_provenance.py +0 -0
  793. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_auto_runtime_dispatch.py +0 -0
  794. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_bridge_plugin_hardening.py +0 -0
  795. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_bridge_plugin_lifecycle.py +0 -0
  796. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_cancel.py +0 -0
  797. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_codex_command.py +0 -0
  798. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_config.py +0 -0
  799. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_debug_tool_started_callbacks.py +0 -0
  800. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_detached_auto_wait_command.py +0 -0
  801. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_detect_allowed_tools_wiring.py +0 -0
  802. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_doc_commands.py +0 -0
  803. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_init_hitl.py +0 -0
  804. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_init_pm_seed_detection.py +0 -0
  805. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_init_runtime.py +0 -0
  806. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_job_command.py +0 -0
  807. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_jsonc.py +0 -0
  808. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_main.py +0 -0
  809. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_mcp_doctor.py +0 -0
  810. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_mcp_nested_guard.py +0 -0
  811. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_mcp_shell_env.py +0 -0
  812. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_mcp_startup_cleanup.py +0 -0
  813. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_mcp_validate_transport_stderr.py +0 -0
  814. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_opencode_config.py +0 -0
  815. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_plugin_command.py +0 -0
  816. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_plugin_command_mutating.py +0 -0
  817. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_plugin_dispatch.py +0 -0
  818. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_pm.py +0 -0
  819. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_pm_brownfield.py +0 -0
  820. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_pm_completion.py +0 -0
  821. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_pm_interactive_logging.py +0 -0
  822. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_pm_missing_litellm.py +0 -0
  823. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_pm_overwrite.py +0 -0
  824. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_pm_runtime_adapter.py +0 -0
  825. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_pm_select_repos.py +0 -0
  826. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_resume.py +0 -0
  827. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_run_qa.py +0 -0
  828. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_setup.py +0 -0
  829. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_status.py +0 -0
  830. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_status_run.py +0 -0
  831. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/cli/test_uninstall.py +0 -0
  832. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/codex/test_cli_policy.py +0 -0
  833. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/config/__init__.py +0 -0
  834. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/config/test_loader.py +0 -0
  835. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/config/test_loader_env.py +0 -0
  836. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/config/test_models.py +0 -0
  837. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/copilot/__init__.py +0 -0
  838. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/copilot/test_cli_policy.py +0 -0
  839. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/copilot/test_model_discovery.py +0 -0
  840. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/copilot/test_permissions.py +0 -0
  841. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/__init__.py +0 -0
  842. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_ac_tree.py +0 -0
  843. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_context.py +0 -0
  844. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_control_contract.py +0 -0
  845. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_directive.py +0 -0
  846. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_errors.py +0 -0
  847. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_file_lock.py +0 -0
  848. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_git_workflow.py +0 -0
  849. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_hitl_contract.py +0 -0
  850. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_hitl_resume.py +0 -0
  851. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_hitl_state.py +0 -0
  852. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_initial_context.py +0 -0
  853. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_lineage.py +0 -0
  854. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_ontology_aspect.py +0 -0
  855. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_ontology_questions.py +0 -0
  856. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_project_paths.py +0 -0
  857. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_retry.py +0 -0
  858. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_runtime_transition.py +0 -0
  859. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_security.py +0 -0
  860. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_seed.py +0 -0
  861. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_seed_project_path_callers.py +0 -0
  862. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_ttl_cache.py +0 -0
  863. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_types.py +0 -0
  864. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/core/test_worktree.py +0 -0
  865. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/__init__.py +0 -0
  866. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_artifact_collector_file_prefix.py +0 -0
  867. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_checklist.py +0 -0
  868. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_consensus.py +0 -0
  869. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_detector.py +0 -0
  870. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_json_utils.py +0 -0
  871. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_languages.py +0 -0
  872. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_mechanical.py +0 -0
  873. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_models.py +0 -0
  874. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_pipeline_stage1_reuse.py +0 -0
  875. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_pipeline_trigger_consensus.py +0 -0
  876. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_review_fixes.py +0 -0
  877. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_semantic.py +0 -0
  878. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_trigger.py +0 -0
  879. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_trigger_consensus.py +0 -0
  880. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_verification_artifacts.py +0 -0
  881. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evaluation/test_verification_artifacts_allowed_tools_wiring.py +0 -0
  882. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/events/__init__.py +0 -0
  883. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/events/test_base.py +0 -0
  884. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/events/test_control_events.py +0 -0
  885. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/events/test_decomposition_events.py +0 -0
  886. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/events/test_hitl_events.py +0 -0
  887. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/events/test_io_events.py +0 -0
  888. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/events/test_io_recorder.py +0 -0
  889. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evolution/test_backend_drift.py +0 -0
  890. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evolution/test_directive_mapping.py +0 -0
  891. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evolution/test_evolve_step_agent_process_integration.py +0 -0
  892. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evolution/test_generation_watchdog.py +0 -0
  893. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evolution/test_material_progress.py +0 -0
  894. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/evolution/test_wonder_scope.py +0 -0
  895. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/execution/__init__.py +0 -0
  896. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/execution/test_atomicity.py +0 -0
  897. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/execution/test_decomposition.py +0 -0
  898. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/execution/test_double_diamond.py +0 -0
  899. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/execution/test_subagent_isolation.py +0 -0
  900. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/harness/__init__.py +0 -0
  901. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/harness/test_claim_term_guard.py +0 -0
  902. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/harness/test_deliver_gate.py +0 -0
  903. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/harness/test_deliver_routing.py +0 -0
  904. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/harness/test_journal_normalizer.py +0 -0
  905. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/harness/test_projection_builder.py +0 -0
  906. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/harness/test_projection_records.py +0 -0
  907. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/harness/test_run_snapshot.py +0 -0
  908. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/hermes/test_artifacts.py +0 -0
  909. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/__init__.py +0 -0
  910. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/bridge/__init__.py +0 -0
  911. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/bridge/test_bridge.py +0 -0
  912. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/bridge/test_config.py +0 -0
  913. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/bridge/test_factory.py +0 -0
  914. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/bridge/test_handler_wiring.py +0 -0
  915. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/bridge/test_stability.py +0 -0
  916. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/client/__init__.py +0 -0
  917. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/client/test_adapter.py +0 -0
  918. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/client/test_adapter_transport_lifecycle.py +0 -0
  919. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/client/test_manager.py +0 -0
  920. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/conftest.py +0 -0
  921. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/resources/test_handlers.py +0 -0
  922. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/server/__init__.py +0 -0
  923. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/server/test_adapter.py +0 -0
  924. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/server/test_adapter_max_turns_envelope_wiring.py +0 -0
  925. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/server/test_security.py +0 -0
  926. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/test_errors.py +0 -0
  927. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/test_job_manager.py +0 -0
  928. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/test_types.py +0 -0
  929. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/__init__.py +0 -0
  930. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/conftest.py +0 -0
  931. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_ac_tree_hud_footer.py +0 -0
  932. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_ac_tree_hud_handler.py +0 -0
  933. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_ac_tree_hud_handler_completed.py +0 -0
  934. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_ac_tree_hud_handler_cursor_changed.py +0 -0
  935. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_ac_tree_hud_handler_invalid_session.py +0 -0
  936. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_ac_tree_hud_handler_no_execution.py +0 -0
  937. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_ac_tree_hud_handler_waiting.py +0 -0
  938. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_ac_tree_hud_max_nodes.py +0 -0
  939. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_ac_tree_hud_render_depth2.py +0 -0
  940. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_ac_tree_hud_render_depth3.py +0 -0
  941. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_ac_tree_hud_status_icons.py +0 -0
  942. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_ac_tree_hud_truncation.py +0 -0
  943. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_authoring_allowed_tools_wiring.py +0 -0
  944. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_auto_handler_ralph_runtime.py +0 -0
  945. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_auto_handler_resume_lines.py +0 -0
  946. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_auto_interview_construction.py +0 -0
  947. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_bridge_mixin_runtime_context.py +0 -0
  948. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_brownfield_handler.py +0 -0
  949. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_checklist_verify.py +0 -0
  950. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_client_gates.py +0 -0
  951. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_definitions.py +0 -0
  952. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_definitions_runtime_context.py +0 -0
  953. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_evaluate_multi_ac.py +0 -0
  954. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_evolve_checkpoint_commits.py +0 -0
  955. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_evolve_step_bridge_aware.py +0 -0
  956. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_execute_seed_path_resolution.py +0 -0
  957. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_generate_seed_force_flag.py +0 -0
  958. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_handler_subagent_wiring.py +0 -0
  959. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_interview_allowed_tools_wiring.py +0 -0
  960. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_interview_completion_signal_prefix_guard.py +0 -0
  961. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_interview_done_streak.py +0 -0
  962. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_interview_lateral_review_advisory.py +0 -0
  963. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_interview_length_guard_envelope.py +0 -0
  964. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_interview_persists_session_on_failure.py +0 -0
  965. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_interview_reopen_seed_ready.py +0 -0
  966. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_interview_response_diagnostics.py +0 -0
  967. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_interview_strict_mcp_config_wiring.py +0 -0
  968. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_job_instance_cancel_keys.py +0 -0
  969. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_job_invalid_arguments.py +0 -0
  970. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_lateral_think_handler.py +0 -0
  971. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_mcp_manager_wiring.py +0 -0
  972. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_pm_handler.py +0 -0
  973. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_pm_handler_allowed_tools_wiring.py +0 -0
  974. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_pm_handler_pending_reframe.py +0 -0
  975. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_qa_allowed_tools_wiring.py +0 -0
  976. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_qa_parser.py +0 -0
  977. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_ralph_handler.py +0 -0
  978. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_registry.py +0 -0
  979. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_round5_fixes.py +0 -0
  980. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_start_auto.py +0 -0
  981. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_start_evaluate.py +0 -0
  982. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_start_execute_seed_idempotency.py +0 -0
  983. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_subagent.py +0 -0
  984. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/mcp/tools/test_unstuck_bridge_aware.py +0 -0
  985. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/observability/__init__.py +0 -0
  986. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/observability/test_drift.py +0 -0
  987. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/observability/test_logging.py +0 -0
  988. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/observability/test_retrospective.py +0 -0
  989. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/__init__.py +0 -0
  990. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_adapter.py +0 -0
  991. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_agent_process.py +0 -0
  992. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_agent_runtime_context.py +0 -0
  993. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_baseline_metrics.py +0 -0
  994. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_baseline_metrics_capture.py +0 -0
  995. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_baseline_metrics_format.py +0 -0
  996. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_capabilities.py +0 -0
  997. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_codex_cli_runtime.py +0 -0
  998. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_codex_recursion_guard.py +0 -0
  999. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_command_dispatcher.py +0 -0
  1000. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_context_governor.py +0 -0
  1001. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_control_bus.py +0 -0
  1002. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_control_plane.py +0 -0
  1003. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_coordinator.py +0 -0
  1004. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_copilot_cli_runtime.py +0 -0
  1005. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_decomposition_params.py +0 -0
  1006. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_dependency_analyzer.py +0 -0
  1007. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_events.py +0 -0
  1008. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_evidence_schema.py +0 -0
  1009. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_execution_runtime_scope.py +0 -0
  1010. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_execution_strategy.py +0 -0
  1011. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_failure_taxonomy.py +0 -0
  1012. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_gemini_cli_runtime.py +0 -0
  1013. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_goose_runtime.py +0 -0
  1014. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_hermes_runtime.py +0 -0
  1015. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_inflight_cancellation.py +0 -0
  1016. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_level_context.py +0 -0
  1017. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_mcp_config.py +0 -0
  1018. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_mcp_tools.py +0 -0
  1019. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_opencode_runtime.py +0 -0
  1020. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_parallel_executor.py +0 -0
  1021. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_parallel_executor_atomic_judgment.py +0 -0
  1022. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_parallel_executor_recursive_depth.py +0 -0
  1023. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_parallel_executor_retry_resume.py +0 -0
  1024. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_phase_wrappers.py +0 -0
  1025. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_pi_runtime.py +0 -0
  1026. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_policy.py +0 -0
  1027. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_profile_loader.py +0 -0
  1028. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_profile_strategy.py +0 -0
  1029. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_rate_limit.py +0 -0
  1030. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_rfc_v2_integration.py +0 -0
  1031. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_routing.py +0 -0
  1032. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_runner.py +0 -0
  1033. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_runner_allowed_tools_wiring.py +0 -0
  1034. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_runner_cancellation.py +0 -0
  1035. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_runtime_evidence.py +0 -0
  1036. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_runtime_factory.py +0 -0
  1037. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_runtime_message_projection.py +0 -0
  1038. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_sandbox_class.py +0 -0
  1039. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_seed_prompt.py +0 -0
  1040. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_session.py +0 -0
  1041. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_stage_resolution.py +0 -0
  1042. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_traceguard_benchmark_capture.py +0 -0
  1043. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_verifier.py +0 -0
  1044. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_workflow_ir.py +0 -0
  1045. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_workflow_ir_adapter.py +0 -0
  1046. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_workflow_ir_plugin_adapter.py +0 -0
  1047. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_workflow_lifecycle.py +0 -0
  1048. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_workflow_lifecycle_conformance.py +0 -0
  1049. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_workflow_lifecycle_events.py +0 -0
  1050. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_workflow_projection_boundary.py +0 -0
  1051. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/test_workflow_state.py +0 -0
  1052. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/orchestrator/workflow_ir_conformance_fixtures.py +0 -0
  1053. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/persistence/__init__.py +0 -0
  1054. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/persistence/test_brownfield_store.py +0 -0
  1055. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/persistence/test_checkpoint.py +0 -0
  1056. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/persistence/test_event_store.py +0 -0
  1057. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/persistence/test_schema.py +0 -0
  1058. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/persistence/test_uow.py +0 -0
  1059. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/__init__.py +0 -0
  1060. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/agents/__init__.py +0 -0
  1061. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/agents/test_registry.py +0 -0
  1062. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/orchestration/__init__.py +0 -0
  1063. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/orchestration/test_model_router.py +0 -0
  1064. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/skills/__init__.py +0 -0
  1065. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/skills/test_keywords.py +0 -0
  1066. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/skills/test_registry.py +0 -0
  1067. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/test_digest.py +0 -0
  1068. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/test_firewall.py +0 -0
  1069. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/test_hook_permission_scopes.py +0 -0
  1070. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/test_hooks_contract.py +0 -0
  1071. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/test_ledger_adapter.py +0 -0
  1072. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/test_lifecycle_observability.py +0 -0
  1073. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/test_lockfile.py +0 -0
  1074. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/test_manifest.py +0 -0
  1075. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/test_manifest_descriptor.py +0 -0
  1076. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/test_manifest_hook_validation.py +0 -0
  1077. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/test_manifest_schema_0_3.py +0 -0
  1078. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/test_manifest_schema_0_4.py +0 -0
  1079. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/test_trust_store.py +0 -0
  1080. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/plugin/test_userlevel_registry.py +0 -0
  1081. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/pm/__init__.py +0 -0
  1082. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/pm/test_renderer.py +0 -0
  1083. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/__init__.py +0 -0
  1084. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_anthropic_adapter_io_recorder.py +0 -0
  1085. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_base.py +0 -0
  1086. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_claude_code_adapter.py +0 -0
  1087. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_codex_cli_adapter.py +0 -0
  1088. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_copilot_cli_adapter.py +0 -0
  1089. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_factory.py +0 -0
  1090. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_factory_copilot.py +0 -0
  1091. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_gemini_cli_adapter.py +0 -0
  1092. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_goose_cli_adapter.py +0 -0
  1093. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_hermes_cli_adapter.py +0 -0
  1094. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_litellm_adapter.py +0 -0
  1095. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_litellm_adapter_io_recorder.py +0 -0
  1096. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_opencode_adapter.py +0 -0
  1097. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_pi_llm_adapter.py +0 -0
  1098. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_profiles.py +0 -0
  1099. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/providers/test_tool_use_diagnostics.py +0 -0
  1100. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/resilience/__init__.py +0 -0
  1101. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/resilience/test_lateral.py +0 -0
  1102. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/resilience/test_recovery.py +0 -0
  1103. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/resilience/test_stagnation.py +0 -0
  1104. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/router/__init__.py +0 -0
  1105. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/router/test_command_parser.py +0 -0
  1106. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/router/test_dispatch.py +0 -0
  1107. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/router/test_dispatch_result_shapes.py +0 -0
  1108. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/router/test_extract_first_argument.py +0 -0
  1109. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/router/test_invalid_dispatch_input_types.py +0 -0
  1110. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/router/test_malformed_unknown_dispatch_errors.py +0 -0
  1111. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/router/test_not_handled_resolution.py +0 -0
  1112. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/router/test_packaged_auto_dispatch.py +0 -0
  1113. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/router/test_registry.py +0 -0
  1114. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/router/test_repository_dispatch_guard.py +0 -0
  1115. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/router/test_router_resolution_pipeline.py +0 -0
  1116. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/router/test_typed_frontmatter_fields.py +0 -0
  1117. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/router/test_valid_dispatch_normalization.py +0 -0
  1118. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/routing/__init__.py +0 -0
  1119. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/routing/test_complexity.py +0 -0
  1120. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/routing/test_downgrade.py +0 -0
  1121. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/routing/test_escalation.py +0 -0
  1122. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/routing/test_router.py +0 -0
  1123. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/routing/test_tiers.py +0 -0
  1124. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/runtime/__init__.py +0 -0
  1125. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/runtime/test_controls.py +0 -0
  1126. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/runtime/test_watchdog.py +0 -0
  1127. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/scripts/__init__.py +0 -0
  1128. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/scripts/test_check_auto_boundary.py +0 -0
  1129. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/scripts/test_check_auto_perf_budget.py +0 -0
  1130. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/scripts/test_check_max_turns_envelope.py +0 -0
  1131. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/scripts/test_claude_hook_settings.py +0 -0
  1132. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/scripts/test_hook_script_stdio.py +0 -0
  1133. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/scripts/test_install_runtime_selection.py +0 -0
  1134. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/scripts/test_keyword_detector.py +0 -0
  1135. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/scripts/test_ralph_shell_project_dir.py +0 -0
  1136. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/scripts/test_session_start.py +0 -0
  1137. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/scripts/test_sync_plugin_version.py +0 -0
  1138. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/scripts/test_version_check.py +0 -0
  1139. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/secondary/__init__.py +0 -0
  1140. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/secondary/test_scheduler.py +0 -0
  1141. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/secondary/test_todo_registry.py +0 -0
  1142. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/skills/test_skill_artifacts.py +0 -0
  1143. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_artifact_collector.py +0 -0
  1144. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_claude_plugin_skill_guide.py +0 -0
  1145. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_codex_artifacts.py +0 -0
  1146. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_convergence.py +0 -0
  1147. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_dashboard.py +0 -0
  1148. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_dependencies_configured.py +0 -0
  1149. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_detached_auto_docs.py +0 -0
  1150. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_evolve_rewind.py +0 -0
  1151. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_evolve_step.py +0 -0
  1152. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_graceful_shutdown.py +0 -0
  1153. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_kiro_adapters.py +0 -0
  1154. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_lineage.py +0 -0
  1155. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_main_entry_point.py +0 -0
  1156. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_module_structure.py +0 -0
  1157. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_project_initialization.py +0 -0
  1158. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_projector_directives.py +0 -0
  1159. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_projector_rewind.py +0 -0
  1160. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_ralph_loop_budget.py +0 -0
  1161. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_ralph_loop_progress.py +0 -0
  1162. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_ralph_loop_timeout.py +0 -0
  1163. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_ralph_parser.py +0 -0
  1164. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_ralph_rewind.py +0 -0
  1165. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_ralph_shell.py +0 -0
  1166. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_regression.py +0 -0
  1167. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_runtime_skill_capability_docs.py +0 -0
  1168. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_tooling_configuration.py +0 -0
  1169. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/test_verification.py +0 -0
  1170. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/tui/__init__.py +0 -0
  1171. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/tui/test_app.py +0 -0
  1172. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/tui/test_cancelled_display.py +0 -0
  1173. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/tui/test_events.py +0 -0
  1174. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/tui/test_lineage_viewer.py +0 -0
  1175. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/tui/test_screens.py +0 -0
  1176. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/tui/test_session_selector_replay.py +0 -0
  1177. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tests/unit/tui/test_widgets.py +0 -0
  1178. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/tools/sync_github_project.py +0 -0
  1179. {ouroboros_ai-0.40.2.dev16 → ouroboros_ai-0.40.2.dev18}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ouroboros-ai
3
- Version: 0.40.2.dev16
3
+ Version: 0.40.2.dev18
4
4
  Summary: Specification-first workflow engine for AI coding agents. Works with Claude Code and Codex CLI.
5
5
  Author-email: Q00 <jqyu.lee@gmail.com>
6
6
  License-File: LICENSE
@@ -549,6 +549,8 @@ The orchestrator never inspects backend-specific internals — each adapter maps
549
549
  - **`GeminiCliRuntime`** (`backend="gemini"`) — Drives the Google Gemini CLI in stream-json mode. Module: `src/ouroboros/orchestrator/gemini_cli_runtime.py`
550
550
  - **`KiroAdapter`** (`backend="kiro"`) — Drives the Kiro CLI in headless mode. Module: `src/ouroboros/orchestrator/kiro_adapter.py`
551
551
  - **`CopilotCliLLMAdapter`** (`backend="copilot"`) — Drives the GitHub Copilot CLI via `copilot -p`, with live model discovery (queries `https://api.githubcopilot.com/models` at setup) and automatic hyphen-to-dotted model name mapping for cross-runtime config compatibility. Module: `src/ouroboros/providers/copilot_cli_adapter.py`
552
+ - **`PiRuntime`** (`backend="pi"`) — Drives the Pi CLI in documented JSON mode with skill dispatch, session resumption, and JSONL event normalization. Module: `src/ouroboros/orchestrator/pi_runtime.py`
553
+ - **`PiLLMAdapter`** (`backend="pi"`) — Exposes the Pi CLI for unstructured LLM-only flows such as interview and seed generation. Module: `src/ouroboros/providers/pi_llm_adapter.py`
552
554
 
553
555
  > Each runtime has different tool sets, permission models, and streaming semantics. Ouroboros normalizes these differences at the adapter boundary, but feature parity is not guaranteed across runtimes.
554
556
 
@@ -560,7 +562,7 @@ The orchestrator never inspects backend-specific internals — each adapter maps
560
562
  2. `orchestrator.runtime_backend` in `~/.ouroboros/config.yaml`
561
563
  3. Explicit `backend=` parameter
562
564
 
563
- Accepted aliases: `claude` / `claude_code`, `codex` / `codex_cli`, `opencode` / `opencode_cli`, `hermes` / `hermes_cli`, `gemini` / `gemini_cli`, `kiro` / `kiro_cli`, `copilot` / `copilot_cli`.
565
+ Accepted aliases: `claude` / `claude_code`, `codex` / `codex_cli`, `opencode` / `opencode_cli`, `hermes` / `hermes_cli`, `gemini` / `gemini_cli`, `kiro` / `kiro_cli`, `copilot` / `copilot_cli`, `pi` / `pi_cli`.
564
566
 
565
567
  For API details, see the source in `src/ouroboros/orchestrator/adapter.py`. For contributing a new runtime adapter, see [Contributing](contributing/).
566
568
 
@@ -605,4 +607,4 @@ For environment variables, `config.yaml` schema, and all configuration options,
605
607
  ---
606
608
 
607
609
  > For install instructions and first-run onboarding, see **[Getting Started](getting-started.md)**.
608
- > For backend-specific configuration, see the [Claude Code](runtime-guides/claude-code.md), [Codex CLI](runtime-guides/codex.md), [OpenCode](runtime-guides/opencode.md), [Hermes](runtime-guides/hermes.md), [Gemini](runtime-guides/gemini.md), [Kiro CLI](runtime-guides/kiro.md), and [GitHub Copilot CLI](runtime-guides/copilot.md) runtime guides.
610
+ > For backend-specific configuration, see the [Claude Code](runtime-guides/claude-code.md), [Codex CLI](runtime-guides/codex.md), [OpenCode](runtime-guides/opencode.md), [Hermes](runtime-guides/hermes.md), [Gemini](runtime-guides/gemini.md), [Kiro CLI](runtime-guides/kiro.md), and [GitHub Copilot CLI](runtime-guides/copilot.md) runtime guides. For Pi's JSON-mode contract, see the [Pi JSON mode documentation](https://pi.dev/docs/latest/json).
@@ -182,7 +182,7 @@ Controls how Ouroboros launches and communicates with the agent runtime backend.
182
182
 
183
183
  ```yaml
184
184
  orchestrator:
185
- runtime_backend: claude # "claude" | "codex" | "opencode" | "hermes" | "gemini" | "kiro" | "copilot"
185
+ runtime_backend: claude # "claude" | "codex" | "opencode" | "hermes" | "gemini" | "kiro" | "copilot" | "pi"
186
186
  permission_mode: acceptEdits # "default" | "acceptEdits" | "bypassPermissions"
187
187
  opencode_permission_mode: bypassPermissions
188
188
  max_parallel_workers: 3 # Maximum concurrent AC workers
@@ -190,12 +190,13 @@ orchestrator:
190
190
  codex_cli_path: null # Path to Codex CLI binary; null = resolve from PATH
191
191
  opencode_cli_path: null # Path to OpenCode CLI binary; null = resolve from PATH
192
192
  copilot_cli_path: null # Path to Copilot CLI binary; null = resolve from PATH
193
+ pi_cli_path: null # Path to Pi CLI binary; null = resolve from PATH
193
194
  default_max_turns: 10
194
195
  ```
195
196
 
196
197
  | Option | Type | Default | Description |
197
198
  |--------|------|---------|-------------|
198
- | `runtime_backend` | `"claude"` \| `"codex"` \| `"opencode"` \| `"hermes"` \| `"gemini"` \| `"kiro"` \| `"copilot"` | `"claude"` | The agent runtime backend used for workflow execution. Overridable via `OUROBOROS_AGENT_RUNTIME`. See [runtime capability matrix](runtime-capability-matrix.md). |
199
+ | `runtime_backend` | `"claude"` \| `"codex"` \| `"opencode"` \| `"hermes"` \| `"gemini"` \| `"kiro"` \| `"copilot"` \| `"pi"` | `"claude"` | The agent runtime backend used for workflow execution. Overridable via `OUROBOROS_AGENT_RUNTIME`. See [runtime capability matrix](runtime-capability-matrix.md). |
199
200
  | `permission_mode` | `"default"` \| `"acceptEdits"` \| `"bypassPermissions"` | `"acceptEdits"` | Permission mode for Claude and Codex runtimes. Overridable via `OUROBOROS_AGENT_PERMISSION_MODE`. |
200
201
  | `opencode_permission_mode` | `"default"` \| `"acceptEdits"` \| `"bypassPermissions"` | `"bypassPermissions"` | Permission mode when using the OpenCode runtime. Overridable via `OUROBOROS_OPENCODE_PERMISSION_MODE`. |
201
202
  | `max_parallel_workers` | `int >= 1` | `3` | Maximum concurrent Acceptance Criteria workers for parallel execution. Overridable via `OUROBOROS_MAX_PARALLEL_WORKERS`. Invalid explicit values fail instead of falling back to the default. |
@@ -203,6 +204,7 @@ orchestrator:
203
204
  | `codex_cli_path` | `string \| null` | `null` | Absolute path to the Codex CLI binary (`~` is expanded). When `null`, resolved from `PATH` at runtime. Overridable via `OUROBOROS_CODEX_CLI_PATH`. |
204
205
  | `opencode_cli_path` | `string \| null` | `null` | Absolute path to the OpenCode CLI binary (`~` is expanded). When `null`, resolved from `PATH` at runtime. Overridable via `OUROBOROS_OPENCODE_CLI_PATH`. |
205
206
  | `copilot_cli_path` | `string \| null` | `null` | Absolute path to the GitHub Copilot CLI binary (`~` is expanded). When `null`, resolved from `PATH` at runtime. Overridable via `OUROBOROS_COPILOT_CLI_PATH`. |
207
+ | `pi_cli_path` | `string \| null` | `null` | Absolute path to the Pi CLI binary (`~` is expanded). When `null`, resolved from `PATH` at runtime. Overridable via `OUROBOROS_PI_CLI_PATH`. |
206
208
  | `default_max_turns` | `int >= 1` | `10` | Default maximum number of turns per agent execution task. |
207
209
 
208
210
  ---
@@ -224,7 +226,7 @@ llm:
224
226
 
225
227
  | Option | Type | Default | Description |
226
228
  |--------|------|---------|-------------|
227
- | `backend` | `"claude"` \| `"claude_code"` \| `"litellm"` \| `"codex"` \| `"opencode"` \| `"hermes"` \| `"gemini"` \| `"kiro"` \| `"copilot"` | `"claude_code"` | Default backend for LLM-only flows. Overridable via `OUROBOROS_LLM_BACKEND`. |
229
+ | `backend` | `"claude"` \| `"claude_code"` \| `"litellm"` \| `"codex"` \| `"opencode"` \| `"hermes"` \| `"gemini"` \| `"kiro"` \| `"copilot"` \| `"pi"` | `"claude_code"` | Default backend for LLM-only flows. Overridable via `OUROBOROS_LLM_BACKEND`. |
228
230
  | `permission_mode` | `"default"` \| `"acceptEdits"` \| `"bypassPermissions"` | `"default"` | Permission mode for non-OpenCode LLM flows. Overridable via `OUROBOROS_LLM_PERMISSION_MODE`. |
229
231
  | `opencode_permission_mode` | `"default"` \| `"acceptEdits"` \| `"bypassPermissions"` | `"acceptEdits"` | Permission mode for OpenCode-backed LLM flows. Overridable via `OUROBOROS_OPENCODE_PERMISSION_MODE`. |
230
232
  | `qa_model` | `string` | `"claude-sonnet-4-20250514"` | Model used for post-execution QA verdict generation. Overridable via `OUROBOROS_QA_MODEL`. |
@@ -593,13 +595,14 @@ All environment variables have higher priority than the corresponding `config.ya
593
595
 
594
596
  | Variable | Overrides | Description |
595
597
  |----------|-----------|-------------|
596
- | `OUROBOROS_AGENT_RUNTIME` | `orchestrator.runtime_backend` | Active runtime backend (`claude`, `codex`, `opencode`, `hermes`, `gemini`, `kiro`, `copilot`). |
598
+ | `OUROBOROS_AGENT_RUNTIME` | `orchestrator.runtime_backend` | Active runtime backend (`claude`, `codex`, `opencode`, `hermes`, `gemini`, `kiro`, `copilot`, `pi`). |
597
599
  | `OUROBOROS_AGENT_PERMISSION_MODE` | `orchestrator.permission_mode` | Permission mode for non-OpenCode runtimes. |
598
600
  | `OUROBOROS_OPENCODE_PERMISSION_MODE` | `orchestrator.opencode_permission_mode` | Permission mode when using OpenCode runtime. |
599
601
  | `OUROBOROS_MAX_PARALLEL_WORKERS` | `orchestrator.max_parallel_workers` | Maximum concurrent Acceptance Criteria workers for parallel execution. Must be a positive integer. |
600
602
  | `OUROBOROS_CLI_PATH` | `orchestrator.cli_path` | Path to the Claude CLI binary. |
601
603
  | `OUROBOROS_CODEX_CLI_PATH` | `orchestrator.codex_cli_path` | Path to the Codex CLI binary. |
602
604
  | `OUROBOROS_OPENCODE_CLI_PATH` | `orchestrator.opencode_cli_path` | Path to the OpenCode CLI binary. |
605
+ | `OUROBOROS_PI_CLI_PATH` | `orchestrator.pi_cli_path` | Path to the Pi CLI binary. |
603
606
  | `OUROBOROS_SKIP_VERSION_CHECK` | *(none)* | Controls the Claude Agent SDK per-call version compatibility check. Defaults to `"1"` (skip the check, saving ~0.3-0.8 s per LLM call). Set to `"0"` to re-enable the check for debugging version-mismatch issues. Maps to `CLAUDE_AGENT_SDK_SKIP_VERSION_CHECK` internally. |
604
607
 
605
608
  ### LLM Flow
@@ -751,6 +754,20 @@ clarification:
751
754
 
752
755
  The Copilot CLI runtime is unique in that `ouroboros setup --runtime copilot` **live-discovers the available models** from the GitHub Copilot models API at setup time and writes the chosen default into the config above. Re-run setup after GitHub publishes new models. Authentication uses `gh auth login`; no separate API key is required. Hyphenated Anthropic IDs (for example `claude-opus-4-6`) used elsewhere in your config are auto-mapped to the dotted Copilot form (`claude-opus-4.6`) at runtime, so existing per-role overrides keep working when you switch backends. See [Copilot CLI runtime guide](runtime-guides/copilot.md) for full details.
753
756
 
757
+ ### Pi CLI Runtime
758
+
759
+ ```yaml
760
+ # ~/.ouroboros/config.yaml
761
+ orchestrator:
762
+ runtime_backend: pi
763
+ pi_cli_path: null # omit if `pi` is already on PATH
764
+
765
+ llm:
766
+ backend: pi
767
+ ```
768
+
769
+ Pi is available as an agent runtime backend and, when the Pi LLM adapter is installed, an LLM-only backend for unstructured interview and seed-generation flows. The Pi LLM adapter rejects structured `response_format` requests, so schema-dependent flows such as QA should continue to use a backend with structured output support. The runtime uses documented JSON mode (`pi --mode json <prompt>`) and preserves Pi native session IDs for targeted resume.
770
+
754
771
  ### Full Config Skeleton
755
772
 
756
773
  ```yaml
@@ -762,6 +779,7 @@ orchestrator:
762
779
  cli_path: null
763
780
  codex_cli_path: null
764
781
  opencode_cli_path: null
782
+ pi_cli_path: null
765
783
  default_max_turns: 10
766
784
 
767
785
  llm:
@@ -163,6 +163,7 @@ Use WSL 2 for the supported Windows path, then run the Linux install commands fr
163
163
  | OpenCode backend | Python >= 3.12, `opencode` on PATH, provider configured in OpenCode |
164
164
  | Kiro CLI backend | Python >= 3.12, `kiro-cli` on PATH (signed in to Kiro), `pip install ouroboros-ai[claude]` (shares the Claude extras for the Agent SDK types). Then `ouroboros setup --runtime kiro` to register the Ouroboros MCP server in `~/.kiro/settings/mcp.json` |
165
165
  | GitHub Copilot CLI backend | Python >= 3.12, `copilot` on PATH, `gh` on PATH (`gh auth login`), `pip install 'ouroboros-ai[mcp]'` (or `pipx`/`uv tool` install). Then `ouroboros setup --runtime copilot` to live-discover available models, pick a default, and register the Ouroboros MCP server in `~/.copilot/mcp-config.json` |
166
+ | Pi CLI backend | Python >= 3.12, `pi` on PATH or `orchestrator.pi_cli_path` configured. Use `runtime_backend: pi` for workflow execution and `llm.backend: pi` only for unstructured LLM flows such as interview and seed generation |
166
167
 
167
168
  ---
168
169
 
@@ -186,10 +187,10 @@ export OPENAI_API_KEY="your-openai-key"
186
187
 
187
188
  ```yaml
188
189
  orchestrator:
189
- runtime_backend: claude # claude | codex | opencode | hermes | gemini | kiro | copilot
190
+ runtime_backend: claude # claude | codex | opencode | hermes | gemini | kiro | copilot | pi
190
191
 
191
192
  llm:
192
- backend: claude_code # claude_code | codex | litellm | kiro | copilot
193
+ backend: claude_code # claude_code | codex | litellm | kiro | copilot | pi
193
194
 
194
195
  logging:
195
196
  level: info
@@ -13,7 +13,7 @@ The runtime backend is selected via the `orchestrator.runtime_backend` config ke
13
13
 
14
14
  ```yaml
15
15
  orchestrator:
16
- runtime_backend: claude # Supported values: claude | codex | opencode | hermes | kiro | copilot
16
+ runtime_backend: claude # Supported values: claude | codex | opencode | hermes | kiro | copilot | pi
17
17
  # The runtime abstraction layer also accepts custom
18
18
  # adapters registered in runtime_factory.py
19
19
  ```
@@ -26,7 +26,7 @@ ouroboros run workflow --runtime codex seed.yaml
26
26
 
27
27
  You can also override the configured backend with the `OUROBOROS_AGENT_RUNTIME` environment variable.
28
28
 
29
- > **Extensibility:** Ouroboros uses a pluggable `AgentRuntime` protocol. Claude Code, Codex CLI, OpenCode, Hermes, Kiro CLI, and GitHub Copilot CLI are the natively shipped backends; additional runtimes can be registered by implementing the protocol and extending `runtime_factory.py`. See [Architecture — How to add a new runtime adapter](architecture.md#how-to-add-a-new-runtime-adapter).
29
+ > **Extensibility:** Ouroboros uses a pluggable `AgentRuntime` protocol. Claude Code, Codex CLI, OpenCode, Hermes, Kiro CLI, GitHub Copilot CLI, and Pi CLI are the natively shipped backends; additional runtimes can be registered by implementing the protocol and extending `runtime_factory.py`. See [Architecture — How to add a new runtime adapter](architecture.md#how-to-add-a-new-runtime-adapter).
30
30
 
31
31
  ## Capability Matrix
32
32
 
@@ -34,41 +34,41 @@ You can also override the configured backend with the `OUROBOROS_AGENT_RUNTIME`
34
34
 
35
35
  These capabilities are part of the Ouroboros core engine and work the same way regardless of runtime backend.
36
36
 
37
- | Capability | Claude Code | Codex CLI | OpenCode | Hermes | Kiro CLI | Copilot CLI | Notes |
38
- | ---------------------------------- | :---------: | :-------: | :------: | :----: | :------: | :---------: | ----------------------------------------------------------- |
39
- | Seed file parsing | Yes | Yes | Yes | Yes | Yes | Yes | Same YAML schema, same validation |
40
- | Acceptance criteria tree | Yes | Yes | Yes | Yes | Yes | Yes | Structured AC decomposition |
41
- | Evaluation principles | Yes | Yes | Yes | Yes | Yes | Yes | Weighted scoring against principles |
42
- | Exit conditions | Yes | Yes | Yes | Yes | Yes | Yes | Deterministic termination logic |
43
- | Event sourcing (SQLite) | Yes | Yes | Yes | Yes | Yes | Yes | Full event log, replay support |
44
- | Checkpoint / resume | Yes | Yes | Yes | Yes | Partial | No | `--resume <session_id>` everywhere; Kiro forwards to `--resume-id` **when the caller supplies the id** — headless does not surface session ids, so automatic checkpoint/resume is future work; Copilot CLI does not expose a resume API |
45
- | TUI dashboard | Yes | Yes | Yes | Yes | Yes | Yes | Textual-based progress view |
46
- | Interview (Socratic seed creation) | Yes | Yes | Yes | Yes | Yes | Yes | `ouroboros init start ...` with the appropriate LLM backend |
47
- | Dry-run validation | Yes | Yes | Yes | Yes | Yes | Yes | `--dry-run` validates without executing |
48
- | Live model discovery | No | No | No | No | No | Yes | Only Copilot queries its provider's models API at setup time and lets you pick a default from the live list |
37
+ | Capability | Claude Code | Codex CLI | OpenCode | Hermes | Kiro CLI | Copilot CLI | Pi CLI | Notes |
38
+ | ---------------------------------- | :---------: | :-------: | :------: | :----: | :------: | :---------: | :----: | ----------------------------------------------------------- |
39
+ | Seed file parsing | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Same YAML schema, same validation |
40
+ | Acceptance criteria tree | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Structured AC decomposition |
41
+ | Evaluation principles | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Weighted scoring against principles |
42
+ | Exit conditions | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Deterministic termination logic |
43
+ | Event sourcing (SQLite) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Full event log, replay support |
44
+ | Checkpoint / resume | Yes | Yes | Yes | Yes | Partial | No | Yes | `--resume <session_id>` everywhere; Kiro forwards to `--resume-id` **when the caller supplies the id** — headless does not surface session ids, so automatic checkpoint/resume is future work; Copilot CLI does not expose a resume API; Pi resumes with its native `--session` flag |
45
+ | TUI dashboard | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Textual-based progress view |
46
+ | Interview (Socratic seed creation) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | `ouroboros init start ...` with the appropriate LLM backend |
47
+ | Dry-run validation | Yes | Yes | Yes | Yes | Yes | Yes | Yes | `--dry-run` validates without executing |
48
+ | Live model discovery | No | No | No | No | No | Yes | No | Only Copilot queries its provider's models API at setup time and lets you pick a default from the live list |
49
49
 
50
50
  ### Runtime Layer (differs by backend)
51
51
 
52
52
  These capabilities depend on the runtime backend's native features and execution model.
53
53
 
54
- | Capability | Claude Code | Codex CLI | OpenCode | Hermes | Kiro CLI | Copilot CLI | Notes |
55
- | ------------------------- | :---------------------------------: | :-------------------: | :-------------------------------------------------------: | :------------------------------------------------------------------------: | :--------------------------: | :-----------------------------------------------------------------------: | ---------------------------------------------------------------- |
56
- | **Authentication** | Max Plan subscription | OpenAI API key | Provider API keys (configured in OpenCode) | NousResearch (or compatible provider) API key or local model | Kiro AWS sign-in | GitHub Copilot subscription via `gh auth login` | No API key needed for Claude Code, Kiro, or Copilot |
57
- | **Underlying model** | Claude (Anthropic) | GPT-5.4+ (OpenAI) | Provider-dependent (OpenCode supports multiple providers) | Provider-dependent (Hermes supports multiple providers) or Any local model | Claude (via AWS) + others | Live-discovered (Claude, GPT-5, etc.; whatever your subscription grants) | Copilot is the only runtime with a live model picker |
58
- | **Tool surface** | Read, Write, Edit, Bash, Glob, Grep | Codex-native tool set | Read, Write, Edit, Bash, Glob, Grep | Custom skills via MCP + run cmd | Kiro-native tool set | Read, Write, Edit, Bash, Glob, Grep (via `--available-tools` allowlist) | Different tool implementations; same task outcomes |
59
- | **Sandbox / permissions** | Claude Code permission system | Codex sandbox model | OpenCode permission system | Hermes permission system | `--trust-tools` / `--trust-all-tools` | `--add-dir <CWD>` boundary + `--allow-tool` envelope | Each runtime manages its own safety boundaries |
60
- | **Cost model** | Included in Max Plan | Per-token API charges | Depends on configured provider | Depends on API/Local | Included in Kiro plan | Included in Copilot subscription | See [OpenAI pricing](https://openai.com/pricing) for Codex costs |
61
- | **Declared capabilities** | skill_dispatch, targeted_resume, structured_output | all three | all three | all three | skill_dispatch only; `targeted_resume=False` (headless does not surface session ids), `structured_output=False` (plain-text stdio) | skill_dispatch only; `targeted_resume=False` (no resume API); `structured_output=False` (no `--output-schema`, JSON via prompt directive) | See `RuntimeCapabilities` on the adapter |
54
+ | Capability | Claude Code | Codex CLI | OpenCode | Hermes | Kiro CLI | Copilot CLI | Pi CLI | Notes |
55
+ | ------------------------- | :---------------------------------: | :-------------------: | :-------------------------------------------------------: | :------------------------------------------------------------------------: | :--------------------------: | :-----------------------------------------------------------------------: | :-----------------------------: | ---------------------------------------------------------------- |
56
+ | **Authentication** | Max Plan subscription | OpenAI API key | Provider API keys (configured in OpenCode) | NousResearch (or compatible provider) API key or local model | Kiro AWS sign-in | GitHub Copilot subscription via `gh auth login` | Pi CLI account/session | No API key needed for Claude Code, Kiro, Copilot, or Pi CLI |
57
+ | **Underlying model** | Claude (Anthropic) | GPT-5.4+ (OpenAI) | Provider-dependent (OpenCode supports multiple providers) | Provider-dependent (Hermes supports multiple providers) or Any local model | Claude (via AWS) + others | Live-discovered (Claude, GPT-5, etc.; whatever your subscription grants) | Pi-selected or `--model` value | Copilot is the only runtime with a live model picker |
58
+ | **Tool surface** | Read, Write, Edit, Bash, Glob, Grep | Codex-native tool set | Read, Write, Edit, Bash, Glob, Grep | Custom skills via MCP + run cmd | Kiro-native tool set | Read, Write, Edit, Bash, Glob, Grep (via `--available-tools` allowlist) | Pi-native tool set | Different tool implementations; same task outcomes |
59
+ | **Sandbox / permissions** | Claude Code permission system | Codex sandbox model | OpenCode permission system | Hermes permission system | `--trust-tools` / `--trust-all-tools` | `--add-dir <CWD>` boundary + `--allow-tool` envelope | Pi CLI permission model | Each runtime manages its own safety boundaries |
60
+ | **Cost model** | Included in Max Plan | Per-token API charges | Depends on configured provider | Depends on API/Local | Included in Kiro plan | Included in Copilot subscription | Depends on Pi account/provider | See [OpenAI pricing](https://openai.com/pricing) for Codex costs |
61
+ | **Declared capabilities** | skill_dispatch, targeted_resume, structured_output | all three | all three | all three | skill_dispatch only; `targeted_resume=False` (headless does not surface session ids), `structured_output=False` (plain-text stdio) | skill_dispatch only; `targeted_resume=False` (no resume API); `structured_output=False` (no `--output-schema`, JSON via prompt directive) | all three | See `RuntimeCapabilities` on the adapter |
62
62
 
63
63
  ### Integration Surface (UX differences)
64
64
 
65
- | Aspect | Claude Code | Codex CLI | OpenCode | Hermes | Kiro CLI | Copilot CLI |
66
- | --------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
67
- | **Primary UX** | In-session skills and MCP server | Session-oriented Ouroboros runtime over Codex CLI transport | MCP server integration | In-session skills and MCP server | In-session skills and MCP server (Kiro headless mode) | In-session skills and MCP server (Copilot CLI session) |
68
- | **Skill shortcuts (`ooo`)** | Yes -- skills loaded into Claude Code session | Yes -- after `ouroboros setup --runtime codex` installs managed skills into `~/.codex/skills/`, rules into `~/.codex/rules/`, and the MCP/env hookup into `~/.codex/config.toml`. Keep role-specific Ouroboros model overrides in `~/.ouroboros/config.yaml` | Yes -- after `ouroboros setup --runtime opencode` | Yes -- after `ouroboros setup --runtime hermes` | Yes -- after `ouroboros setup --runtime kiro` the Ouroboros MCP server is registered in `~/.kiro/settings/mcp.json` with `OUROBOROS_RUNTIME=kiro` / `OUROBOROS_LLM_BACKEND=kiro` baked in | Yes -- after `ouroboros setup --runtime copilot` the MCP server is registered in `~/.copilot/mcp-config.json` with `OUROBOROS_AGENT_RUNTIME=copilot` / `OUROBOROS_LLM_BACKEND=copilot` baked in |
69
- | **MCP integration** | Native MCP server support | Deterministic skill/MCP dispatch through the Ouroboros Codex adapter | Native MCP server support | Native MCP server support | Native MCP server support; `SkillInterceptor` routes `ooo <skill>` prefixes before spawning Kiro subprocess | Native MCP server support; restart required after first registration so Copilot binds the new child |
70
- | **Session context** | Shares Claude Code session context | Preserved via runtime handles, native session IDs, and resume support | Session IDs + resume via `--session` | Preserved via session IDs and internal parser | Headless runs do not surface session IDs; callers may pass an externally sourced `--resume-id`, but automatic targeted resume is not declared yet | Copilot CLI does not expose a session resume API; checkpointing happens at the Ouroboros lineage layer |
71
- | **Install extras** | `ouroboros-ai[claude]` | `ouroboros-ai` (base package) + `codex` on PATH | `ouroboros-ai` (base package) + `opencode` on PATH | `ouroboros-ai` (base package) + `hermes` on PATH | `ouroboros-ai[claude]` + `kiro-cli` on PATH | `ouroboros-ai[mcp]` + `copilot` on PATH + `gh` on PATH (for live model discovery) |
65
+ | Aspect | Claude Code | Codex CLI | OpenCode | Hermes | Kiro CLI | Copilot CLI | Pi CLI |
66
+ | --------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------- |
67
+ | **Primary UX** | In-session skills and MCP server | Session-oriented Ouroboros runtime over Codex CLI transport | MCP server integration | In-session skills and MCP server | In-session skills and MCP server (Kiro headless mode) | In-session skills and MCP server (Copilot CLI session) | Pi CLI JSON-mode runtime |
68
+ | **Skill shortcuts (`ooo`)** | Yes -- skills loaded into Claude Code session | Yes -- after `ouroboros setup --runtime codex` installs managed skills into `~/.codex/skills/`, rules into `~/.codex/rules/`, and the MCP/env hookup into `~/.codex/config.toml`. Keep role-specific Ouroboros model overrides in `~/.ouroboros/config.yaml` | Yes -- after `ouroboros setup --runtime opencode` | Yes -- after `ouroboros setup --runtime hermes` | Yes -- after `ouroboros setup --runtime kiro` the Ouroboros MCP server is registered in `~/.kiro/settings/mcp.json` with `OUROBOROS_RUNTIME=kiro` / `OUROBOROS_LLM_BACKEND=kiro` baked in | Yes -- after `ouroboros setup --runtime copilot` the MCP server is registered in `~/.copilot/mcp-config.json` with `OUROBOROS_AGENT_RUNTIME=copilot` / `OUROBOROS_LLM_BACKEND=copilot` baked in | Yes -- `SkillInterceptor` routes `ooo <skill>` prefixes before spawning Pi |
69
+ | **MCP integration** | Native MCP server support | Deterministic skill/MCP dispatch through the Ouroboros Codex adapter | Native MCP server support | Native MCP server support | Native MCP server support; `SkillInterceptor` routes `ooo <skill>` prefixes before spawning Kiro subprocess | Native MCP server support; restart required after first registration so Copilot binds the new child | Deterministic skill/MCP dispatch through the Ouroboros Pi adapter |
70
+ | **Session context** | Shares Claude Code session context | Preserved via runtime handles, native session IDs, and resume support | Session IDs + resume via `--session` | Preserved via session IDs and internal parser | Headless runs do not surface session IDs; callers may pass an externally sourced `--resume-id`, but automatic targeted resume is not declared yet | Copilot CLI does not expose a session resume API; checkpointing happens at the Ouroboros lineage layer | Native Pi session IDs preserved through runtime handles |
71
+ | **Install extras** | `ouroboros-ai[claude]` | `ouroboros-ai` (base package) + `codex` on PATH | `ouroboros-ai` (base package) + `opencode` on PATH | `ouroboros-ai` (base package) + `hermes` on PATH | `ouroboros-ai[claude]` + `kiro-cli` on PATH | `ouroboros-ai[mcp]` + `copilot` on PATH + `gh` on PATH (for live model discovery) | `ouroboros-ai` (base package) + `pi` on PATH |
72
72
 
73
73
  ## What Stays the Same
74
74
 
@@ -104,12 +104,12 @@ demote a persisted `opencode_mode == "plugin"` to `subprocess` for the
104
104
  authoring handlers, because a `_subagent` envelope would have no receiver
105
105
  outside an active OpenCode bridge plugin session.
106
106
 
107
- | Phase | `claude` | `codex` | `opencode` | `hermes` | `gemini` | `kiro` | `copilot` |
108
- | ----------------------- | :------: | :-----: | :--------: | :------: | :------: | :----: | :-------: |
109
- | 1. Interview authoring | in-process | in-process | in-process | in-process | in-process | in-process | in-process |
110
- | 2. Seed generation | in-process | in-process | in-process | in-process | in-process | in-process | in-process |
111
- | 3. Seed repair | in-process | in-process | in-process | in-process | in-process | in-process | in-process |
112
- | 4. Run handoff (Seed →) | claude adapter | codex adapter | opencode adapter (see entry-point note below) | hermes adapter | gemini adapter | kiro adapter | copilot adapter |
107
+ | Phase | `claude` | `codex` | `opencode` | `hermes` | `gemini` | `kiro` | `copilot` | `pi` |
108
+ | ----------------------- | :------: | :-----: | :--------: | :------: | :------: | :----: | :-------: | :--: |
109
+ | 1. Interview authoring | in-process | in-process | in-process | in-process | in-process | in-process | in-process | in-process |
110
+ | 2. Seed generation | in-process | in-process | in-process | in-process | in-process | in-process | in-process | in-process |
111
+ | 3. Seed repair | in-process | in-process | in-process | in-process | in-process | in-process | in-process | in-process |
112
+ | 4. Run handoff (Seed →) | claude adapter | codex adapter | opencode adapter (see entry-point note below) | hermes adapter | gemini adapter | kiro adapter | copilot adapter | pi adapter |
113
113
 
114
114
  > **Run-handoff `opencode_mode` differs by entry point.** The CLI
115
115
  > entry point [`cli/commands/auto.py`](https://github.com/Q00/ouroboros/blob/main/src/ouroboros/cli/commands/auto.py)
@@ -160,6 +160,7 @@ The table below covers the three currently shipped backends. Because Ouroboros u
160
160
  | Want to use the Hermes Agent (open source local & API agent) | Hermes (`runtime_backend: hermes`) |
161
161
  | Want to use Kiro CLI (AWS-provided coding agent, browser-free headless) | Kiro (`runtime_backend: kiro`) |
162
162
  | Have a GitHub Copilot subscription and want the live model picker | Copilot CLI (`runtime_backend: copilot`) |
163
+ | Want to use the Pi coding agent through JSON mode | Pi CLI (`runtime_backend: pi`) |
163
164
  | Want to use Anthropic's Claude models | Claude Code or Copilot CLI (Claude models exposed via Copilot subscription) |
164
165
  | Want to use OpenAI's GPT models | Codex CLI or Copilot CLI |
165
166
  | Want to use multiple providers via a single runtime | OpenCode or Copilot CLI (Copilot multiplexes Anthropic + OpenAI under one auth) |
@@ -175,5 +176,6 @@ The table below covers the three currently shipped backends. Because Ouroboros u
175
176
  - [OpenCode runtime guide](runtime-guides/opencode.md)
176
177
  - [Kiro CLI runtime guide](runtime-guides/kiro.md)
177
178
  - [GitHub Copilot CLI runtime guide](runtime-guides/copilot.md)
179
+ - [Pi JSON mode documentation](https://pi.dev/docs/latest/json)
178
180
  - [Platform support matrix](platform-support.md) (OS and Python version compatibility)
179
181
  - [Architecture overview](architecture.md) — including [How to add a new runtime adapter](architecture.md#how-to-add-a-new-runtime-adapter)
@@ -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.40.2.dev16'
22
- __version_tuple__ = version_tuple = (0, 40, 2, 'dev16')
21
+ __version__ = version = '0.40.2.dev18'
22
+ __version_tuple__ = version_tuple = (0, 40, 2, 'dev18')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -47,6 +47,10 @@ def __getattr__(name: str) -> object:
47
47
  from ouroboros.providers.goose_cli_adapter import GooseCliLLMAdapter
48
48
 
49
49
  return GooseCliLLMAdapter
50
+ if name == "PiLLMAdapter":
51
+ from ouroboros.providers.pi_llm_adapter import PiLLMAdapter
52
+
53
+ return PiLLMAdapter
50
54
  raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
51
55
 
52
56
 
@@ -66,6 +70,7 @@ __all__ = [
66
70
  "OpenCodeLLMAdapter",
67
71
  "HermesCliLLMAdapter",
68
72
  "GooseCliLLMAdapter",
73
+ "PiLLMAdapter",
69
74
  "LiteLLMAdapter",
70
75
  # Factory helpers
71
76
  "create_llm_adapter",
@@ -0,0 +1,113 @@
1
+ """Opt-in smoke test for the native Pi CLI runtime.
2
+
3
+ Skipped by default so regular CI does not require a real Pi installation,
4
+ credentials, or network access. To run locally, install/authenticate the Pi CLI
5
+ and set ``OUROBOROS_PI_NATIVE_SMOKE=1``.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import os
11
+ from pathlib import Path
12
+ import shutil
13
+ import subprocess
14
+ from typing import NamedTuple
15
+
16
+ import pytest
17
+
18
+ from ouroboros.config import get_pi_cli_path
19
+ from ouroboros.orchestrator.runtime_factory import create_agent_runtime
20
+
21
+ SMOKE_ENABLED = os.environ.get("OUROBOROS_PI_NATIVE_SMOKE", "").strip() == "1"
22
+ REFERENCE_REPO_ENV = "OUROBOROS_PI_REFERENCE_REPO"
23
+
24
+
25
+ class GitSnapshot(NamedTuple):
26
+ """Minimal repository state used to detect smoke-test side effects."""
27
+
28
+ head: str
29
+ status: str
30
+
31
+
32
+ def _reference_repo_path() -> Path | None:
33
+ raw_path = os.environ.get(REFERENCE_REPO_ENV, "").strip()
34
+ if not raw_path:
35
+ return None
36
+ return Path(raw_path).expanduser()
37
+
38
+
39
+ def _git_snapshot(path: Path | None) -> GitSnapshot | None:
40
+ if path is None or not path.exists():
41
+ return None
42
+
43
+ head = subprocess.run(
44
+ ["git", "-C", str(path), "rev-parse", "HEAD"],
45
+ check=True,
46
+ capture_output=True,
47
+ text=True,
48
+ ).stdout.strip()
49
+ status = subprocess.run(
50
+ [
51
+ "git",
52
+ "-C",
53
+ str(path),
54
+ "status",
55
+ "--porcelain=v1",
56
+ "--untracked-files=all",
57
+ ],
58
+ check=True,
59
+ capture_output=True,
60
+ text=True,
61
+ ).stdout
62
+ return GitSnapshot(head=head, status=status)
63
+
64
+
65
+ def _configured_pi_cli_path() -> str | None:
66
+ configured_path = get_pi_cli_path()
67
+ if not configured_path:
68
+ return None
69
+ return configured_path
70
+
71
+
72
+ @pytest.fixture()
73
+ def reference_repo_snapshot() -> GitSnapshot | None:
74
+ reference_repo = _reference_repo_path()
75
+ before = _git_snapshot(reference_repo)
76
+ yield before
77
+ after = _git_snapshot(reference_repo)
78
+ assert after == before, f"{reference_repo} was modified by the Pi smoke test"
79
+
80
+
81
+ @pytest.mark.integration
82
+ @pytest.mark.asyncio
83
+ @pytest.mark.skipif(
84
+ not SMOKE_ENABLED,
85
+ reason="set OUROBOROS_PI_NATIVE_SMOKE=1 to enable the real Pi CLI smoke test",
86
+ )
87
+ async def test_real_pi_cli_runtime_returns_response_without_reference_repo_side_effects(
88
+ tmp_path: Path,
89
+ reference_repo_snapshot: GitSnapshot | None,
90
+ ) -> None:
91
+ del reference_repo_snapshot
92
+ if shutil.which("pi") is None and _configured_pi_cli_path() is None:
93
+ pytest.skip("Pi CLI is not on PATH and no Pi CLI path is configured via env/config")
94
+
95
+ runtime = create_agent_runtime(
96
+ backend="pi",
97
+ cwd=tmp_path,
98
+ permission_mode="acceptEdits",
99
+ )
100
+
101
+ result = await runtime.execute_task_to_result(
102
+ 'Reply with exactly the word "ready" and nothing else.',
103
+ tools=[],
104
+ system_prompt="You are running a smoke test. Return only the requested word.",
105
+ )
106
+
107
+ assert runtime.runtime_backend == "pi"
108
+ assert result.is_ok, f"Pi CLI returned error: {result.error}"
109
+ task_result = result.value
110
+ assert task_result.success is True
111
+ assert task_result.final_message.strip()
112
+ assert "ready" in task_result.final_message.lower()
113
+ assert task_result.messages
@@ -0,0 +1,9 @@
1
+ """Regression tests for provider package public exports."""
2
+
3
+ import ouroboros.providers as providers
4
+ from ouroboros.providers.pi_llm_adapter import PiLLMAdapter
5
+
6
+
7
+ def test_pi_llm_adapter_is_package_exported() -> None:
8
+ assert providers.PiLLMAdapter is PiLLMAdapter
9
+ assert "PiLLMAdapter" in providers.__all__