coderouter-cli 2.7.8__tar.gz → 2.7.10__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 (265) hide show
  1. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/CHANGELOG.md +190 -1
  2. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/PKG-INFO +1 -1
  3. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/adapters/agent_cli.py +430 -42
  4. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/config/schemas.py +47 -12
  5. coderouter_cli-2.7.10/docs/backends/external-agents.en.md +455 -0
  6. coderouter_cli-2.7.10/docs/backends/external-agents.md +455 -0
  7. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/designs/external-agents-adapter.md +43 -1
  8. coderouter_cli-2.7.10/examples/providers-agent-cli.yaml +287 -0
  9. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/pyproject.toml +1 -1
  10. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_agent_cli.py +655 -16
  11. coderouter_cli-2.7.8/docs/backends/external-agents.en.md +0 -233
  12. coderouter_cli-2.7.8/docs/backends/external-agents.md +0 -233
  13. coderouter_cli-2.7.8/examples/providers-agent-cli.yaml +0 -193
  14. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/.gitignore +0 -0
  15. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/LICENSE +0 -0
  16. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/README.en.md +0 -0
  17. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/README.md +0 -0
  18. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/__init__.py +0 -0
  19. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/__main__.py +0 -0
  20. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/adapters/__init__.py +0 -0
  21. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/adapters/anthropic_native.py +0 -0
  22. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/adapters/base.py +0 -0
  23. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/adapters/openai_compat.py +0 -0
  24. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/adapters/registry.py +0 -0
  25. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/cli.py +0 -0
  26. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/cli_stats.py +0 -0
  27. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/config/__init__.py +0 -0
  28. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/config/capability_registry.py +0 -0
  29. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/config/env_file.py +0 -0
  30. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/config/loader.py +0 -0
  31. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/cost.py +0 -0
  32. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/data/__init__.py +0 -0
  33. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/data/model-capabilities.yaml +0 -0
  34. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/doctor.py +0 -0
  35. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/doctor_apply.py +0 -0
  36. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/env_security.py +0 -0
  37. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/errors.py +0 -0
  38. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/gguf_introspect.py +0 -0
  39. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/__init__.py +0 -0
  40. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/_fingerprint.py +0 -0
  41. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/backend_health.py +0 -0
  42. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/context_budget.py +0 -0
  43. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/continuous_probe.py +0 -0
  44. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/drift_actions.py +0 -0
  45. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/drift_detection.py +0 -0
  46. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/memory_budget.py +0 -0
  47. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/memory_pressure.py +0 -0
  48. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/self_healing.py +0 -0
  49. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/tool_loop.py +0 -0
  50. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/hardware.py +0 -0
  51. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/ingress/__init__.py +0 -0
  52. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/ingress/anthropic_routes.py +0 -0
  53. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/ingress/app.py +0 -0
  54. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/ingress/dashboard_routes.py +0 -0
  55. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/ingress/launcher_routes.py +0 -0
  56. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/ingress/metrics_routes.py +0 -0
  57. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/ingress/openai_routes.py +0 -0
  58. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/language_tax.py +0 -0
  59. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/launcher_speculative.py +0 -0
  60. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/logging.py +0 -0
  61. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/metrics/__init__.py +0 -0
  62. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/metrics/collector.py +0 -0
  63. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/metrics/prometheus.py +0 -0
  64. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/output_filters.py +0 -0
  65. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/plugins/__init__.py +0 -0
  66. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/plugins/base.py +0 -0
  67. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/plugins/loader.py +0 -0
  68. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/plugins/registry.py +0 -0
  69. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/routing/__init__.py +0 -0
  70. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/routing/adaptive.py +0 -0
  71. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/routing/auto_router.py +0 -0
  72. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/routing/budget.py +0 -0
  73. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/routing/capability.py +0 -0
  74. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/routing/fallback.py +0 -0
  75. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/state/__init__.py +0 -0
  76. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/state/audit_log.py +0 -0
  77. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/state/replay.py +0 -0
  78. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/state/request_log.py +0 -0
  79. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/state/store.py +0 -0
  80. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/state/suggest_rules.py +0 -0
  81. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/token_estimation.py +0 -0
  82. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/token_estimation_accurate.py +0 -0
  83. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/translation/__init__.py +0 -0
  84. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/translation/anthropic.py +0 -0
  85. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/translation/convert.py +0 -0
  86. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/translation/tool_repair.py +0 -0
  87. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/README.en.md +0 -0
  88. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/README.md +0 -0
  89. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/assets/dashboard-demo.png +0 -0
  90. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/claude-code-llamacpp-vllm.en.md +0 -0
  91. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/claude-code-llamacpp-vllm.md +0 -0
  92. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/gguf_dl.en.md +0 -0
  93. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/gguf_dl.md +0 -0
  94. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/hf-ollama-models.en.md +0 -0
  95. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/hf-ollama-models.md +0 -0
  96. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/install-backends.en.md +0 -0
  97. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/install-backends.md +0 -0
  98. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/launcher-quickstart.en.md +0 -0
  99. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/launcher-quickstart.md +0 -0
  100. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/launcher.en.md +0 -0
  101. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/launcher.md +0 -0
  102. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/llamacpp-direct.en.md +0 -0
  103. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/llamacpp-direct.md +0 -0
  104. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/lmstudio-direct.en.md +0 -0
  105. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/lmstudio-direct.md +0 -0
  106. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/verify-ollama-0.23.1.md +0 -0
  107. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/architecture.en.md +0 -0
  108. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/architecture.md +0 -0
  109. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/context-budget.en.md +0 -0
  110. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/context-budget.md +0 -0
  111. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/continuous-probing.en.md +0 -0
  112. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/continuous-probing.md +0 -0
  113. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/drift-detection.en.md +0 -0
  114. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/drift-detection.md +0 -0
  115. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/partial-stitch.en.md +0 -0
  116. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/partial-stitch.md +0 -0
  117. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/designs/v1.5-dashboard-mockup.html +0 -0
  118. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/designs/v1.6-auto-router-verification.md +0 -0
  119. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/designs/v1.6-auto-router.md +0 -0
  120. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/free-tier-guide.en.md +0 -0
  121. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/free-tier-guide.md +0 -0
  122. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/language-tax.en.md +0 -0
  123. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/language-tax.md +0 -0
  124. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/remote-access.en.md +0 -0
  125. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/remote-access.md +0 -0
  126. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/security.en.md +0 -0
  127. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/security.md +0 -0
  128. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/troubleshooting.en.md +0 -0
  129. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/troubleshooting.md +0 -0
  130. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/usage-guide.en.md +0 -0
  131. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/usage-guide.md +0 -0
  132. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/low-memory-integration.en.md +0 -0
  133. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/low-memory-integration.md +0 -0
  134. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/openrouter-roster/CHANGES.md +0 -0
  135. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/openrouter-roster/README.md +0 -0
  136. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/openrouter-roster/latest.json +0 -0
  137. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/retrospectives/v0.4.md +0 -0
  138. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/retrospectives/v0.5-verify.md +0 -0
  139. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/retrospectives/v0.5.md +0 -0
  140. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/retrospectives/v0.6.md +0 -0
  141. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/retrospectives/v0.7.md +0 -0
  142. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/retrospectives/v1.0-verify.md +0 -0
  143. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/retrospectives/v1.0.md +0 -0
  144. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/start/quickstart.en.md +0 -0
  145. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/start/quickstart.md +0 -0
  146. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/start/when-do-i-need-coderouter.en.md +0 -0
  147. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/start/when-do-i-need-coderouter.md +0 -0
  148. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/.env.example +0 -0
  149. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/README.md +0 -0
  150. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers-multiagent.yaml +0 -0
  151. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.context-budget-test.yaml +0 -0
  152. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.llamacpp-vllm.yaml +0 -0
  153. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.nvidia-nim.yaml +0 -0
  154. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.ollama-auto-custom.yaml +0 -0
  155. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.ollama-auto.yaml +0 -0
  156. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.ollama-free-chain.yaml +0 -0
  157. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.raspberrypi.yaml +0 -0
  158. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.yaml +0 -0
  159. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/scripts/demo_traffic.sh +0 -0
  160. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/scripts/openrouter_roster_diff.py +0 -0
  161. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/scripts/smoke_v2_2.sh +0 -0
  162. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/scripts/verify-providers.yaml +0 -0
  163. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/scripts/verify_ollama_0_23.py +0 -0
  164. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/scripts/verify_v0_5.sh +0 -0
  165. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/scripts/verify_v1_0.sh +0 -0
  166. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/__init__.py +0 -0
  167. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/conftest.py +0 -0
  168. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_adapter_anthropic.py +0 -0
  169. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_audit_log.py +0 -0
  170. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_auto_router.py +0 -0
  171. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_auto_router_cjk.py +0 -0
  172. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_backend_health.py +0 -0
  173. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_budget.py +0 -0
  174. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_capability.py +0 -0
  175. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_capability_degraded_payload.py +0 -0
  176. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_capability_registry.py +0 -0
  177. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_capability_registry_cache_control.py +0 -0
  178. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_capability_tool_choice.py +0 -0
  179. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_claude_code_suitability.py +0 -0
  180. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_cli.py +0 -0
  181. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_cli_bind_warning.py +0 -0
  182. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_cli_stats.py +0 -0
  183. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_config.py +0 -0
  184. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_config_shim_actions.py +0 -0
  185. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_context_budget.py +0 -0
  186. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_continuous_probe.py +0 -0
  187. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_dashboard_endpoint.py +0 -0
  188. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_doctor.py +0 -0
  189. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_doctor_apply.py +0 -0
  190. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_doctor_cache_probe.py +0 -0
  191. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_drift_actions.py +0 -0
  192. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_drift_detection.py +0 -0
  193. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_drift_detection_integration.py +0 -0
  194. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_env_file.py +0 -0
  195. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_env_security.py +0 -0
  196. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_errors.py +0 -0
  197. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_examples_yaml.py +0 -0
  198. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback.py +0 -0
  199. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_anthropic.py +0 -0
  200. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_cache_control.py +0 -0
  201. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_cache_observed.py +0 -0
  202. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_cache_strip.py +0 -0
  203. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_empty_response.py +0 -0
  204. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_misconfig_warn.py +0 -0
  205. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_paid_gate.py +0 -0
  206. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_thinking.py +0 -0
  207. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_tool_choice_emulate.py +0 -0
  208. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_h1_prometheus_drift.py +0 -0
  209. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_h2_h6_translation.py +0 -0
  210. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_h3_client_reuse.py +0 -0
  211. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_h4_h5_guards.py +0 -0
  212. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_h7_probe_restore.py +0 -0
  213. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_h8_launcher_auth.py +0 -0
  214. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_mA_routing.py +0 -0
  215. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_mB_adapters.py +0 -0
  216. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_mC_convert.py +0 -0
  217. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_mD_logging_metrics.py +0 -0
  218. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_mE_config_validation.py +0 -0
  219. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_mF_ingress.py +0 -0
  220. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_gguf_introspect.py +0 -0
  221. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_guards_tool_loop.py +0 -0
  222. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_hardware.py +0 -0
  223. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_ingress_anthropic.py +0 -0
  224. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_ingress_count_tokens.py +0 -0
  225. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_ingress_profile.py +0 -0
  226. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_language_tax.py +0 -0
  227. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_language_tax_integration.py +0 -0
  228. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_launcher_mtp.py +0 -0
  229. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_launcher_mtp_fallback.py +0 -0
  230. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_launcher_provider_sync.py +0 -0
  231. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_memory_budget.py +0 -0
  232. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_memory_pressure.py +0 -0
  233. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_metrics_cache.py +0 -0
  234. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_metrics_collector.py +0 -0
  235. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_metrics_cost.py +0 -0
  236. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_metrics_endpoint.py +0 -0
  237. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_metrics_jsonl.py +0 -0
  238. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_metrics_prometheus.py +0 -0
  239. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_metrics_prometheus_cache.py +0 -0
  240. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_models_passthrough.py +0 -0
  241. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_openai_compat.py +0 -0
  242. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_openrouter_roster_diff.py +0 -0
  243. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_output_filters.py +0 -0
  244. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_output_filters_adapters.py +0 -0
  245. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_partial_stitch.py +0 -0
  246. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_plugins_integration.py +0 -0
  247. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_plugins_loader.py +0 -0
  248. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_plugins_registry.py +0 -0
  249. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_reasoning_strip.py +0 -0
  250. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_repair_byte_fallback.py +0 -0
  251. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_request_log.py +0 -0
  252. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_role_normalization.py +0 -0
  253. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_routing_adaptive.py +0 -0
  254. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_self_healing.py +0 -0
  255. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_setup_sh.py +0 -0
  256. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_state_store.py +0 -0
  257. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_token_estimation.py +0 -0
  258. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_token_estimation_accurate.py +0 -0
  259. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_tokens_saved_metric.py +0 -0
  260. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_tool_repair.py +0 -0
  261. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_tool_repair_lenient.py +0 -0
  262. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_tool_repair_r4.py +0 -0
  263. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_toolrepair_bench.py +0 -0
  264. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_translation_anthropic.py +0 -0
  265. {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_translation_reverse.py +0 -0
@@ -9,9 +9,198 @@ are kept verbatim where the Japanese text itself is the subject).
9
9
 
10
10
  ---
11
11
 
12
+ ## [v2.7.10] — 2026-07-11 (agent_cli Phase 1c: antigravity — Phase 1 complete)
13
+
14
+ Completes agent_cli Phase 1: `agent: antigravity` (the Google Antigravity
15
+ CLI, command `agy`) is now implemented, joining `claude` (1a), `codex`
16
+ (1b), and `grok` (1d) — all four Phase 1 backends are now in place. This
17
+ target replaces the originally-planned `gemini`: on the author's Mac, the
18
+ legacy Gemini CLI (`@google/gemini-cli` 0.50.x) now fails individual-account
19
+ OAuth outright with a verified `IneligibleTierError: This client is no
20
+ longer supported for Gemini Code Assist for individuals. To continue using
21
+ Gemini, please migrate to the Antigravity suite of products:
22
+ https://antigravity.google` (`reasonCode: UNSUPPORTED_CLIENT`,
23
+ `tierId: free-tier`) — Google discontinued Gemini CLI for individual
24
+ accounts on 2026-06-18. The same legacy CLI also still hits the
25
+ trusted-directory gate with exit 55 (`--skip-trust` /
26
+ `GEMINI_CLI_TRUST_WORKSPACE=true`), a pre-existing constraint unrelated to
27
+ the discontinuation. Google's stated successor is the Antigravity CLI
28
+ (`agy`) — a separate Go rewrite, not a fork of gemini-cli — which keeps
29
+ individual Google-account OAuth alive, including the free tier. Verified
30
+ against agy **1.1.1** (author's Mac, 2026-07-11), its flag surface differs
31
+ meaningfully from gemini-cli's: no `--output-format json` (plain-text
32
+ output only), `--mode plan|accept-edits` instead of an approval-mode flag,
33
+ a `--dangerously-skip-permissions` full-bypass flag, a CLI-side
34
+ `--print-timeout` (the first agent_cli target with its own timeout), no
35
+ `--max-turns`, and no stdin channel for the prompt at all — piping stdin to
36
+ `agy` hangs (field-verified). `agent: gemini` remains schema-declared but
37
+ is now rejected with a migration-pointer message instead of a generic
38
+ not-implemented one.
39
+
40
+ ### Added
41
+
42
+ - **`agent: antigravity` builder/parser in `AgentCliAdapter`**
43
+ (`coderouter/adapters/agent_cli.py`) — invokes the Antigravity CLI
44
+ one-shot as `agy -p <prompt> --model <model> --mode plan --print-timeout
45
+ <exec_timeout_s>s` (read_only default). The prompt rides on argv as the
46
+ value of `-p` — agy has no `--prompt-file` equivalent and hangs if stdin
47
+ is piped (field-verified), so this is the fourth prompt-delivery pattern
48
+ among the four backends (claude/codex use stdin, grok uses
49
+ `--prompt-file`, antigravity uses argv). Documented limitation: Linux's
50
+ `MAX_ARG_STRLEN` (~128KiB) caps prompt size, and the prompt is visible in
51
+ `ps` output — there is no way around this with agy's current flag
52
+ surface. Output is plain text: stdout is decoded UTF-8, defensively
53
+ stripped of ANSI escapes, and trimmed; an empty result raises a
54
+ retryable `AdapterError`. There is no `--output-format json`, so token
55
+ usage, session id, and structured errors are all unavailable — usage is
56
+ reported as all zeros (same treatment as grok), and
57
+ `coderouter_session_id` is never populated.
58
+ - **`sandbox_mode` → antigravity flag mapping** — `read_only` →
59
+ `--mode plan`; `edit` → `--mode accept-edits`; `full_auto` →
60
+ `--mode accept-edits --dangerously-skip-permissions`. As with the other
61
+ three backends, the effective mode is clamped to read-only whenever
62
+ `allow_file_writes=false`.
63
+ - **`--print-timeout` as a CLI-side first wall** — generated from
64
+ `AgentCliConfig.exec_timeout_s` (e.g. `exec_timeout_s=600` →
65
+ `--print-timeout 600s`), letting agy self-terminate before the outer
66
+ `asyncio.wait_for` + process-group `SIGKILL` fires. antigravity is the
67
+ only agent_cli target with a double timeout wall.
68
+ - **`max_turns` ignored for antigravity** — agy has no
69
+ `--max-turns`-equivalent flag; `AgentCliConfig.max_turns` has no effect
70
+ when `agent: antigravity`, same as codex.
71
+ - **`command` defaults to `"agy"`** — the only agent_cli target whose
72
+ default executable name differs from the `agent` field value (the binary
73
+ is named for the CLI, not the product).
74
+ - **5th `Literal` value on `AgentCliConfig.agent`** — `"antigravity"` joins
75
+ `claude`/`codex`/`gemini`/`grok`.
76
+
77
+ ### Changed
78
+
79
+ - **`agent: gemini` now rejected with a migration message** instead of the
80
+ generic "not implemented yet" wording — constructing the adapter with
81
+ `agent: gemini` now raises `AdapterError: Google discontinued Gemini CLI
82
+ for individual accounts (June 2026). Use agent='antigravity' instead.`
83
+ (`retryable=False`).
84
+ - **Schema docstrings** (`coderouter/config/schemas.py`) — `AgentCliConfig`
85
+ field descriptions updated for the four-backend reality
86
+ (claude/codex/antigravity/grok implemented, gemini rejected), including
87
+ the `command` and `max_turns` docstrings noting antigravity's `agy`
88
+ default and ignored `max_turns`.
89
+ - **Docs & examples** — `docs/backends/external-agents.md`/`.en.md` gain a
90
+ full antigravity section (config example, adapter argv, the
91
+ argv-vs-stdin-vs-`--prompt-file` prompt-delivery comparison across all
92
+ four backends, mode mapping table, plain-text parsing and zero usage,
93
+ the `--print-timeout` double wall, OAuth setup with the `agy models`
94
+ smoke check, the display-string model-name caveat including that Claude
95
+ models are reachable through agy, the stdin-pipe-hang warning, and the
96
+ version-pin caveat) and lead with the gemini-discontinuation story
97
+ (updated implementation-status wording: Phase 1 complete, all four
98
+ backends). The design doc `docs/designs/external-agents-adapter.md` gets
99
+ a new appendix §11.5 recording the gemini-to-antigravity delta (body
100
+ text left as the historical record); its header status line now reads
101
+ Phase 1 (1a/1b/1c/1d) complete. `examples/providers-agent-cli.yaml`
102
+ replaces the Phase 1c gemini preview block with a documented (still
103
+ commented-out) antigravity block, with the now-empty
104
+ "unimplemented preview" framing removed since nothing remains
105
+ unimplemented.
106
+
107
+ ## [v2.7.9] — 2026-07-11 (agent_cli Phase 1b: codex)
108
+
109
+ Adds the third target to the `agent_cli` adapter: `agent: codex` (the OpenAI
110
+ Codex CLI) is now implemented alongside `claude` (Phase 1a) and `grok`
111
+ (Phase 1d). The implementation was verified against the real CLI (codex-cli
112
+ 0.144.1, 2026-07-11), and one design-time assumption from the 2026-07
113
+ research did not survive contact with it: `codex exec` has no approval flag
114
+ at all (`-a`/`--ask-for-approval` doesn't exist in `exec --help` on
115
+ 0.144.1, since non-interactive execution has no approval prompt to control
116
+ in the first place), so the design's separate `edit`/`full_auto` mappings
117
+ (`-a on-request` / `-a never`) collapse into a single `-s workspace-write`
118
+ mapping — unlike claude/grok, codex does not distinguish `edit` from
119
+ `full_auto`. The verified JSONL `turn.completed.usage` payload also carries
120
+ a field the design didn't record, `reasoning_output_tokens`, which is now
121
+ normalized defensively into `completion_tokens_details.reasoning_tokens`.
122
+ Everything else (stdin prompt delivery, `--skip-git-repo-check`,
123
+ `--ephemeral`, the absence of `--max-turns`/`--timeout`, the ~8-day OAuth
124
+ staleness) matched the design closely. `gemini` remains schema-declared but
125
+ rejected (Phase 1c pending).
126
+
127
+ ### Added
128
+
129
+ - **`agent: codex` builder/parser in `AgentCliAdapter`**
130
+ (`coderouter/adapters/agent_cli.py`) — invokes the Codex CLI one-shot as
131
+ `codex exec --json --skip-git-repo-check --ephemeral -m <model>
132
+ -C <workdir> -s read-only -` (read_only default). The prompt is delivered
133
+ on stdin with an explicit trailing `-` sentinel — the same channel as
134
+ claude, unlike grok's `--prompt-file` delivery. Output is JSONL on
135
+ stdout (progress goes to stderr); the final answer is the `item.text` of
136
+ the **last** `item.completed` event whose `item.type=="agent_message"`.
137
+ Usage comes from `turn.completed.usage` and is normalized as
138
+ `prompt_tokens=input_tokens` / `completion_tokens=output_tokens`, with
139
+ `cached_input_tokens` kept as `prompt_tokens_details.cached_tokens` (a
140
+ subset of `input_tokens`, not added on top — verified 13810 ⊃ 9984) and
141
+ `reasoning_output_tokens` kept as
142
+ `completion_tokens_details.reasoning_tokens` when nonzero; multiple
143
+ `turn.completed` events, if seen, are summed. `thread_id` (from
144
+ `thread.started`) surfaces as `coderouter_session_id`. Parsing is
145
+ defensive line-by-line — a non-JSON line doesn't abort the rest of the
146
+ stream, but no valid `agent_message` (or empty stdout) raises a
147
+ retryable `AdapterError`, as does any `error` event or `turn.failed`.
148
+ The CLI is pre-1.0 and `--json`'s alias is still `--experimental-json`
149
+ (schema not frozen), so version pinning is recommended alongside the
150
+ defensive parsing.
151
+ - **`sandbox_mode` → codex flag mapping** — `read_only` → `-s read-only`;
152
+ `edit` → `-s workspace-write`; `full_auto` → `-s workspace-write` (same
153
+ as `edit` — `exec` has no approval flag in 0.144.1, and
154
+ `--dangerously-bypass-approvals-and-sandbox` is never used). As with
155
+ claude/grok, the effective mode is clamped to read-only whenever
156
+ `allow_file_writes=false`, regardless of `sandbox_mode`.
157
+ - **`--skip-git-repo-check` always passed** — CodeRouter's isolated workdir
158
+ is never a git repository, and codex's default "trusted directory" check
159
+ fails immediately outside one (exit 1, stderr `Not inside a trusted
160
+ directory and --skip-git-repo-check was not specified.` — field-verified).
161
+ The adapter always passes this flag, so that error should never surface
162
+ in normal operation.
163
+ - **`--ephemeral` always passed** — prevents the session from persisting to
164
+ disk, for the same stateless-transformation rationale as grok's
165
+ `--no-memory`. Not configurable.
166
+ - **`max_turns` ignored for codex** — `codex exec` has neither
167
+ `--max-turns` nor `--timeout`; `AgentCliConfig.max_turns` has no effect
168
+ when `agent: codex`, and `exec_timeout_s` + process-group `SIGKILL` is
169
+ the only time bound.
170
+ - **`coderouter_session_id` via `thread_id`** — same response-metadata
171
+ treatment as claude's `session_id` and grok's `sessionId`.
172
+
173
+ ### Changed
174
+
175
+ - **Unsupported-agent error message** — constructing the adapter with a
176
+ not-yet-implemented agent now lists all three implemented agents (e.g.
177
+ `agent 'gemini' is not implemented yet (implemented: claude, codex,
178
+ grok)`) instead of the two-agent wording from v2.7.8.
179
+ - **Schema docstrings** (`coderouter/config/schemas.py`) — `AgentCliConfig`
180
+ field descriptions updated for the three-agent reality, including the
181
+ `max_turns` docstring noting codex ignores it.
182
+ - **Docs & examples** — `docs/backends/external-agents.md`/`.en.md` gain a
183
+ full codex section (config example, adapter argv, stdin-vs-`--prompt-file`
184
+ contrast with grok, sandbox mapping table with the no-approval-flag-in-exec
185
+ note, JSONL schema and usage normalization including
186
+ `reasoning_output_tokens`, OAuth setup with the ~8-day staleness caveat
187
+ and `CODEX_API_KEY`/`OPENAI_API_KEY`/`CODEX_HOME`, and the pre-1.0
188
+ version-pin caveat) and updated implementation-status wording (claude +
189
+ codex + grok implemented; gemini-only rejected). The design doc
190
+ `docs/designs/external-agents-adapter.md` gets a new appendix §11.4
191
+ recording the verified deltas between the 2026-07 research and
192
+ codex-cli 0.144.1 (body text left as the historical record); its header
193
+ status line now lists Phase 1b alongside 1a/1d.
194
+ `examples/providers-agent-cli.yaml` promotes codex out of the
195
+ not-implemented preview into a documented (still commented-out, so
196
+ copying the file doesn't require codex to be installed) block with
197
+ `model: gpt-5.5`, `paid: false` for subscription OAuth, and
198
+ `passthrough_env: []`; the preview section at the bottom is retitled to
199
+ Phase 1c (gemini only), with codex removed from it.
200
+
12
201
  ## [v2.7.8] — 2026-07-10 (agent_cli Phase 1d: grok)
13
202
 
14
- Adds the second target to the `agent_cli` adapter: `agent: grok` (the xAI
203
+ **PR #68**. Adds the second target to the `agent_cli` adapter: `agent: grok` (the xAI
15
204
  Grok CLI) is now implemented alongside `claude` from Phase 1a. The
16
205
  implementation was verified against the real CLI (grok v0.2.93, [stable]
17
206
  channel, 2026-07-10), and several design-time assumptions from the 2026-07
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: coderouter-cli
3
- Version: 2.7.8
3
+ Version: 2.7.10
4
4
  Summary: Local-first, free-first, fallback-built-in LLM router. Claude Code / OpenAI compatible.
5
5
  Project-URL: Homepage, https://github.com/zephel01/CodeRouter
6
6
  Project-URL: Repository, https://github.com/zephel01/CodeRouter