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.
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/CHANGELOG.md +190 -1
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/PKG-INFO +1 -1
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/adapters/agent_cli.py +430 -42
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/config/schemas.py +47 -12
- coderouter_cli-2.7.10/docs/backends/external-agents.en.md +455 -0
- coderouter_cli-2.7.10/docs/backends/external-agents.md +455 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/designs/external-agents-adapter.md +43 -1
- coderouter_cli-2.7.10/examples/providers-agent-cli.yaml +287 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/pyproject.toml +1 -1
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_agent_cli.py +655 -16
- coderouter_cli-2.7.8/docs/backends/external-agents.en.md +0 -233
- coderouter_cli-2.7.8/docs/backends/external-agents.md +0 -233
- coderouter_cli-2.7.8/examples/providers-agent-cli.yaml +0 -193
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/.gitignore +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/LICENSE +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/README.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/README.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/__init__.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/__main__.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/adapters/__init__.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/adapters/anthropic_native.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/adapters/base.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/adapters/openai_compat.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/adapters/registry.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/cli.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/cli_stats.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/config/__init__.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/config/capability_registry.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/config/env_file.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/config/loader.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/cost.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/data/__init__.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/data/model-capabilities.yaml +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/doctor.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/doctor_apply.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/env_security.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/errors.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/gguf_introspect.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/__init__.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/_fingerprint.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/backend_health.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/context_budget.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/continuous_probe.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/drift_actions.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/drift_detection.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/memory_budget.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/memory_pressure.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/self_healing.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/guards/tool_loop.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/hardware.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/ingress/__init__.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/ingress/anthropic_routes.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/ingress/app.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/ingress/dashboard_routes.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/ingress/launcher_routes.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/ingress/metrics_routes.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/ingress/openai_routes.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/language_tax.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/launcher_speculative.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/logging.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/metrics/__init__.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/metrics/collector.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/metrics/prometheus.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/output_filters.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/plugins/__init__.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/plugins/base.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/plugins/loader.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/plugins/registry.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/routing/__init__.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/routing/adaptive.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/routing/auto_router.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/routing/budget.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/routing/capability.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/routing/fallback.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/state/__init__.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/state/audit_log.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/state/replay.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/state/request_log.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/state/store.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/state/suggest_rules.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/token_estimation.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/token_estimation_accurate.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/translation/__init__.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/translation/anthropic.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/translation/convert.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/coderouter/translation/tool_repair.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/README.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/README.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/assets/dashboard-demo.png +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/claude-code-llamacpp-vllm.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/claude-code-llamacpp-vllm.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/gguf_dl.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/gguf_dl.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/hf-ollama-models.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/hf-ollama-models.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/install-backends.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/install-backends.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/launcher-quickstart.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/launcher-quickstart.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/launcher.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/launcher.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/llamacpp-direct.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/llamacpp-direct.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/lmstudio-direct.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/lmstudio-direct.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/backends/verify-ollama-0.23.1.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/architecture.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/architecture.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/context-budget.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/context-budget.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/continuous-probing.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/continuous-probing.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/drift-detection.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/drift-detection.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/partial-stitch.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/concepts/partial-stitch.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/designs/v1.5-dashboard-mockup.html +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/designs/v1.6-auto-router-verification.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/designs/v1.6-auto-router.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/free-tier-guide.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/free-tier-guide.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/language-tax.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/language-tax.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/remote-access.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/remote-access.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/security.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/security.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/troubleshooting.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/troubleshooting.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/usage-guide.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/guides/usage-guide.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/low-memory-integration.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/low-memory-integration.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/openrouter-roster/CHANGES.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/openrouter-roster/README.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/openrouter-roster/latest.json +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/retrospectives/v0.4.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/retrospectives/v0.5-verify.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/retrospectives/v0.5.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/retrospectives/v0.6.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/retrospectives/v0.7.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/retrospectives/v1.0-verify.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/retrospectives/v1.0.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/start/quickstart.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/start/quickstart.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/start/when-do-i-need-coderouter.en.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/docs/start/when-do-i-need-coderouter.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/.env.example +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/README.md +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers-multiagent.yaml +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.context-budget-test.yaml +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.llamacpp-vllm.yaml +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.nvidia-nim.yaml +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.ollama-auto-custom.yaml +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.ollama-auto.yaml +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.ollama-free-chain.yaml +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.raspberrypi.yaml +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/examples/providers.yaml +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/scripts/demo_traffic.sh +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/scripts/openrouter_roster_diff.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/scripts/smoke_v2_2.sh +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/scripts/verify-providers.yaml +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/scripts/verify_ollama_0_23.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/scripts/verify_v0_5.sh +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/scripts/verify_v1_0.sh +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/__init__.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/conftest.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_adapter_anthropic.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_audit_log.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_auto_router.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_auto_router_cjk.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_backend_health.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_budget.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_capability.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_capability_degraded_payload.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_capability_registry.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_capability_registry_cache_control.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_capability_tool_choice.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_claude_code_suitability.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_cli.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_cli_bind_warning.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_cli_stats.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_config.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_config_shim_actions.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_context_budget.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_continuous_probe.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_dashboard_endpoint.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_doctor.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_doctor_apply.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_doctor_cache_probe.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_drift_actions.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_drift_detection.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_drift_detection_integration.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_env_file.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_env_security.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_errors.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_examples_yaml.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_anthropic.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_cache_control.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_cache_observed.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_cache_strip.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_empty_response.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_misconfig_warn.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_paid_gate.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_thinking.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fallback_tool_choice_emulate.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_h1_prometheus_drift.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_h2_h6_translation.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_h3_client_reuse.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_h4_h5_guards.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_h7_probe_restore.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_h8_launcher_auth.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_mA_routing.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_mB_adapters.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_mC_convert.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_mD_logging_metrics.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_mE_config_validation.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_fix_mF_ingress.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_gguf_introspect.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_guards_tool_loop.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_hardware.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_ingress_anthropic.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_ingress_count_tokens.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_ingress_profile.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_language_tax.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_language_tax_integration.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_launcher_mtp.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_launcher_mtp_fallback.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_launcher_provider_sync.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_memory_budget.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_memory_pressure.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_metrics_cache.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_metrics_collector.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_metrics_cost.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_metrics_endpoint.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_metrics_jsonl.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_metrics_prometheus.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_metrics_prometheus_cache.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_models_passthrough.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_openai_compat.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_openrouter_roster_diff.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_output_filters.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_output_filters_adapters.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_partial_stitch.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_plugins_integration.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_plugins_loader.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_plugins_registry.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_reasoning_strip.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_repair_byte_fallback.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_request_log.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_role_normalization.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_routing_adaptive.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_self_healing.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_setup_sh.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_state_store.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_token_estimation.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_token_estimation_accurate.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_tokens_saved_metric.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_tool_repair.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_tool_repair_lenient.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_tool_repair_r4.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_toolrepair_bench.py +0 -0
- {coderouter_cli-2.7.8 → coderouter_cli-2.7.10}/tests/test_translation_anthropic.py +0 -0
- {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.
|
|
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
|