coderouter-cli 2.9.0__tar.gz → 2.9.2__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.9.0 → coderouter_cli-2.9.2}/CHANGELOG.md +128 -1
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/PKG-INFO +5 -3
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/README.en.md +4 -2
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/README.md +4 -2
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/config/schemas.py +579 -3
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/ingress/app.py +29 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/ingress/launcher_routes.py +476 -147
- coderouter_cli-2.9.2/coderouter/launcher_swap.py +466 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/routing/fallback.py +225 -5
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/README.en.md +8 -3
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/README.md +10 -4
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/launcher.en.md +100 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/launcher.md +100 -0
- coderouter_cli-2.9.2/docs/designs/launcher-model-swap.md +556 -0
- coderouter_cli-2.9.2/docs/guides/subagent-routing.en.md +387 -0
- coderouter_cli-2.9.2/docs/guides/subagent-routing.md +387 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/examples/README.md +2 -0
- coderouter_cli-2.9.2/examples/providers.swap.yaml +121 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/pyproject.toml +1 -1
- coderouter_cli-2.9.2/tests/test_launcher_readiness_restart.py +701 -0
- coderouter_cli-2.9.2/tests/test_launcher_swap.py +941 -0
- coderouter_cli-2.9.2/tests/test_launcher_swap_review.py +488 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/.gitignore +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/LICENSE +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/__init__.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/__main__.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/adapters/__init__.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/adapters/anthropic_native.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/adapters/base.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/adapters/openai_compat.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/adapters/registry.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/cli.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/cli_stats.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/config/__init__.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/config/capability_registry.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/config/env_file.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/config/loader.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/cost.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/data/__init__.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/data/model-capabilities.yaml +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/doctor.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/doctor_apply.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/env_security.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/errors.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/gguf_introspect.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/guards/__init__.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/guards/_fingerprint.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/guards/backend_health.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/guards/context_budget.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/guards/continuous_probe.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/guards/drift_actions.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/guards/drift_detection.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/guards/memory_budget.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/guards/memory_pressure.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/guards/self_healing.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/guards/tool_loop.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/hardware.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/ingress/__init__.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/ingress/anthropic_routes.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/ingress/dashboard_routes.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/ingress/metrics_routes.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/ingress/openai_routes.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/language_tax.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/launcher_speculative.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/logging.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/metrics/__init__.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/metrics/collector.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/metrics/prometheus.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/output_filters.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/plugins/__init__.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/plugins/base.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/plugins/loader.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/plugins/registry.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/routing/__init__.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/routing/adaptive.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/routing/auto_router.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/routing/budget.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/routing/capability.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/state/__init__.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/state/audit_log.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/state/replay.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/state/request_log.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/state/store.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/state/suggest_rules.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/token_estimation.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/token_estimation_accurate.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/translation/__init__.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/translation/anthropic.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/translation/convert.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/coderouter/translation/tool_repair.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/assets/dashboard-demo.png +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/claude-code-llamacpp-vllm.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/claude-code-llamacpp-vllm.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/external-agents.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/external-agents.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/gguf_dl.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/gguf_dl.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/hf-ollama-models.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/hf-ollama-models.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/install-backends.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/install-backends.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/launcher-quickstart.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/launcher-quickstart.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/llamacpp-direct.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/llamacpp-direct.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/lmstudio-direct.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/lmstudio-direct.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/backends/verify-ollama-0.23.1.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/concepts/architecture.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/concepts/architecture.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/concepts/context-budget.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/concepts/context-budget.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/concepts/continuous-probing.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/concepts/continuous-probing.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/concepts/drift-detection.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/concepts/drift-detection.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/concepts/partial-stitch.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/concepts/partial-stitch.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/designs/agent-cli-plugin-extraction.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/designs/external-agents-adapter.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/designs/orchestration-companion.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/designs/v1.5-dashboard-mockup.html +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/designs/v1.6-auto-router-verification.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/designs/v1.6-auto-router.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/guides/free-tier-guide.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/guides/free-tier-guide.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/guides/language-tax.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/guides/language-tax.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/guides/remote-access.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/guides/remote-access.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/guides/security.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/guides/security.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/guides/troubleshooting.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/guides/troubleshooting.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/guides/usage-guide.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/guides/usage-guide.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/low-memory-integration.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/low-memory-integration.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/openrouter-roster/CHANGES.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/openrouter-roster/README.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/openrouter-roster/latest.json +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/retrospectives/v0.4.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/retrospectives/v0.5-verify.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/retrospectives/v0.5.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/retrospectives/v0.6.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/retrospectives/v0.7.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/retrospectives/v1.0-verify.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/retrospectives/v1.0.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/start/quickstart.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/start/quickstart.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/start/when-do-i-need-coderouter.en.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/docs/start/when-do-i-need-coderouter.md +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/examples/.env.example +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/examples/providers-agent-cli.yaml +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/examples/providers-multiagent.yaml +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/examples/providers.context-budget-test.yaml +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/examples/providers.llamacpp-vllm.yaml +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/examples/providers.nvidia-nim.yaml +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/examples/providers.ollama-auto-custom.yaml +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/examples/providers.ollama-auto.yaml +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/examples/providers.ollama-free-chain.yaml +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/examples/providers.raspberrypi.yaml +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/examples/providers.yaml +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/scripts/demo_traffic.sh +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/scripts/openrouter_roster_diff.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/scripts/smoke_v2_2.sh +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/scripts/verify-providers.yaml +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/scripts/verify_ollama_0_23.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/scripts/verify_v0_5.sh +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/scripts/verify_v1_0.sh +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/__init__.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/conftest.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_adapter_anthropic.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_agent_cli.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_audit_log.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_auto_router.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_auto_router_cjk.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_backend_health.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_budget.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_capability.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_capability_degraded_payload.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_capability_registry.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_capability_registry_cache_control.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_capability_tool_choice.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_claude_code_suitability.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_cli.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_cli_bind_warning.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_cli_stats.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_config.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_config_shim_actions.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_context_budget.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_continuous_probe.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_dashboard_endpoint.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_doctor.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_doctor_apply.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_doctor_cache_probe.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_drift_actions.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_drift_detection.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_drift_detection_integration.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_env_file.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_env_security.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_errors.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_examples_yaml.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fallback.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fallback_anthropic.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fallback_cache_control.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fallback_cache_observed.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fallback_cache_strip.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fallback_empty_response.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fallback_misconfig_warn.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fallback_paid_gate.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fallback_thinking.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fallback_tool_choice_emulate.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fix_h1_prometheus_drift.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fix_h2_h6_translation.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fix_h3_client_reuse.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fix_h4_h5_guards.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fix_h7_probe_restore.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fix_h8_launcher_auth.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fix_mA_routing.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fix_mB_adapters.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fix_mC_convert.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fix_mD_logging_metrics.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fix_mE_config_validation.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_fix_mF_ingress.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_gguf_introspect.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_guards_tool_loop.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_hardware.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_ingress_anthropic.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_ingress_count_tokens.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_ingress_profile.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_language_tax.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_language_tax_integration.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_launcher_mtp.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_launcher_mtp_fallback.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_launcher_provider_sync.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_memory_budget.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_memory_pressure.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_metrics_cache.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_metrics_collector.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_metrics_cost.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_metrics_endpoint.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_metrics_jsonl.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_metrics_prometheus.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_metrics_prometheus_cache.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_models_passthrough.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_openai_compat.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_openrouter_roster_diff.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_output_filters.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_output_filters_adapters.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_partial_stitch.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_plugin_adapter.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_plugins_integration.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_plugins_loader.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_plugins_registry.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_reasoning_strip.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_repair_byte_fallback.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_request_log.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_role_normalization.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_routing_adaptive.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_self_healing.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_setup_sh.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_state_store.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_token_estimation.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_token_estimation_accurate.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_tokens_saved_metric.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_tool_repair.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_tool_repair_lenient.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_tool_repair_r4.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_toolrepair_bench.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_translation_anthropic.py +0 -0
- {coderouter_cli-2.9.0 → coderouter_cli-2.9.2}/tests/test_translation_reverse.py +0 -0
|
@@ -9,9 +9,136 @@ are kept verbatim where the Japanese text itself is the subject).
|
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
+
## [v2.9.2] — 2026-07-12 (config: no more dummy provider for swap-only setups)
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- **`providers` / `profiles` no longer require a dummy entry for swap-only
|
|
17
|
+
deployments.** Both top-level lists were `min_length=1` (or effectively
|
|
18
|
+
required), forcing an unreachable placeholder provider/profile (e.g.
|
|
19
|
+
`base_url: http://127.0.0.1:9`) into any config that only serves models
|
|
20
|
+
through `launcher.swap`. They are now optional (`providers: []` /
|
|
21
|
+
`profiles: []`, or omitted entirely) whenever `launcher.swap.enabled: true`
|
|
22
|
+
and `launcher.swap.models` has at least one entry — the injected
|
|
23
|
+
`launcher-swap-<name>` profile(s) already cover routing, and their
|
|
24
|
+
providers are registered at runtime on first on-demand spawn. Every other
|
|
25
|
+
deployment shape keeps the original fail-fast-at-load guarantee (now
|
|
26
|
+
enforced by `CodeRouterConfig._check_providers_and_profiles_nonempty`
|
|
27
|
+
rather than the field-level `min_length=1` it replaces), with an error
|
|
28
|
+
message pointing at the swap-only exemption. See
|
|
29
|
+
`tests/test_launcher_swap.py`
|
|
30
|
+
(`test_swap_only_config_loads_with_omitted_providers_and_profiles` and
|
|
31
|
+
neighbors) for the minimal swap-only config shape.
|
|
32
|
+
|
|
33
|
+
### Docs
|
|
34
|
+
|
|
35
|
+
- `docs/backends/launcher.md` / `.en.md` — added the `launcher.swap` (v2.9.1+)
|
|
36
|
+
reference: what it does, a minimal swap-only config (no `providers` /
|
|
37
|
+
`profiles`, verified against the real loader), a `launcher.swap.models[]`
|
|
38
|
+
field table, the Phase 2 schema-only fields, and behavioral notes
|
|
39
|
+
(auto-restart exclusion, streaming lease protection, catalog-miss
|
|
40
|
+
fallthrough, no simultaneous-load cap). Also documented the `launcher:`-level
|
|
41
|
+
`readiness_timeout_s` / `readiness_poll_interval_s` / `auto_restart*` fields
|
|
42
|
+
and the new `loading` process status in the configuration reference
|
|
43
|
+
section, and linked `docs/designs/launcher-model-swap.md` from "Related
|
|
44
|
+
docs" — closing the "残課題" noted in that design doc's §10.5.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## [v2.9.1] — 2026-07-12 (launcher model swap Phase 1 — llama-swap-style on-demand models)
|
|
49
|
+
|
|
50
|
+
**New: `launcher.swap`** — an opt-in, dependency-free equivalent of
|
|
51
|
+
[llama-swap](https://github.com/mostlygeek/llama-swap)'s core loop, built on
|
|
52
|
+
the existing embedded Launcher. Declare a static model catalog and CodeRouter
|
|
53
|
+
will **spawn the backing `llama-server` on demand** when a request names the
|
|
54
|
+
model, **hold the request until the backend passes its readiness probe**, and
|
|
55
|
+
**auto-unload the process after an idle TTL** (`swap-unload`, memory returns
|
|
56
|
+
to zero). Only cataloged models can ever be spawned; `model_path` is resolved
|
|
57
|
+
against `launcher.model_dirs` both at config load (fail-fast) and again at
|
|
58
|
+
spawn (defense in depth). Design + as-built record:
|
|
59
|
+
`docs/designs/launcher-model-swap.md`. Sample: `examples/providers.swap.yaml`.
|
|
60
|
+
Verified end-to-end on macOS (M3 Max, Metal): cold spawn → warm reuse →
|
|
61
|
+
catalog-miss fallthrough → TTL unload → respawn, all green
|
|
62
|
+
(`_run/swap-test/` kit).
|
|
63
|
+
|
|
64
|
+
### Added
|
|
65
|
+
|
|
66
|
+
- **`launcher.swap` config block** (`LauncherSwapConfig` / `SwapModelSpec`):
|
|
67
|
+
`enabled` (default `false` — zero impact until opted in), global
|
|
68
|
+
`ttl_seconds` (default 1800; `null` = never, `0` = unload at last release),
|
|
69
|
+
`readiness_timeout_s`, `sweep_interval_s`, `inject_auto_router_rules`, and
|
|
70
|
+
the static `models:` catalog (`name` / `backend` / `model_path` / fixed
|
|
71
|
+
`port` recommended / `num_ctx` / `extra_args` / speculative fields). Phase 2
|
|
72
|
+
fields (`group`, `est_weights_gb`, `memory_budget_gb`, `max_loaded`) are
|
|
73
|
+
schema-declared but not yet acted on.
|
|
74
|
+
- **`SwapManager`** (`coderouter/launcher_swap.py`): per-model
|
|
75
|
+
`asyncio.Lock` + lease accounting — concurrent requests for the same model
|
|
76
|
+
trigger exactly one spawn; streaming responses hold a lease for their whole
|
|
77
|
+
lifetime (a mid-stream process is never TTL-evicted); a failed spawn resets
|
|
78
|
+
to idle (no poisoning) and the next request retries.
|
|
79
|
+
- **Auto-generated routing**: with `default_profile: auto` and no explicit
|
|
80
|
+
`auto_router:` block, one exact-match rule per catalog model
|
|
81
|
+
(`id: swap:<name>`, `model_pattern = re.escape(name)`) is merged **ahead of
|
|
82
|
+
the bundled heuristics** (an explicitly named swap model beats
|
|
83
|
+
code-fence/image heuristics) while keeping the bundled rules and their
|
|
84
|
+
fallthrough intact. A user-declared `auto_router:` block keeps its full-
|
|
85
|
+
replacement semantics — swap rules are appended after user rules.
|
|
86
|
+
- **`FallbackEngine.deregister_provider`** — the long-missing inverse of
|
|
87
|
+
`register_provider`; TTL unload now removes the provider from its chain,
|
|
88
|
+
drops the cached adapter (closing its HTTP client), and leaves no dead-port
|
|
89
|
+
entries behind.
|
|
90
|
+
- **Launcher readiness gating** — spawned processes now report a new
|
|
91
|
+
`"loading"` status and are only registered as providers **after** the
|
|
92
|
+
backend passes a readiness probe (`GET /health` for llama.cpp/vllm, TCP
|
|
93
|
+
connect fallback otherwise; `launcher.readiness_timeout_s`, default 300 s).
|
|
94
|
+
Requests can no longer race a model that is still loading.
|
|
95
|
+
*Behavior change*: `POST /api/launcher/start` no longer performs the
|
|
96
|
+
provider sync synchronously (`provider_sync` in the response is always
|
|
97
|
+
`null`); watch `/api/launcher/processes` or the `provider sync:` log line.
|
|
98
|
+
- **Launcher auto-restart (opt-in)** — `launcher.auto_restart: true` enables
|
|
99
|
+
crash recovery with exponential backoff (`auto_restart_max_attempts`,
|
|
100
|
+
default 3); intentional stops (Stop button, shutdown, TTL unload) are
|
|
101
|
+
marked via `ManagedProcess.stopping` and never trigger a restart. Default
|
|
102
|
+
**off**, matching the opt-in stance of `restart_command`. Swap-managed
|
|
103
|
+
processes are excluded — `SwapManager` is their sole supervisor.
|
|
104
|
+
- Tests: `tests/test_launcher_readiness_restart.py` (21),
|
|
105
|
+
`tests/test_launcher_swap.py` (31), `tests/test_launcher_swap_review.py`
|
|
106
|
+
(15 regression tests from the adversarial review). Full suite: 1725 passed.
|
|
107
|
+
|
|
108
|
+
### Fixed
|
|
109
|
+
|
|
110
|
+
- **Launcher-spawned providers were registered before the model finished
|
|
111
|
+
loading**, so early requests failed against a half-up backend (readiness
|
|
112
|
+
gating above).
|
|
113
|
+
- **Crashed launcher processes stayed `status="error"` forever** with no
|
|
114
|
+
recovery path other than manual restart (auto-restart above).
|
|
115
|
+
- Adversarial-review fixes folded into the initial swap release: enabling
|
|
116
|
+
swap no longer silently discards the bundled auto-router rules; TTL unload
|
|
117
|
+
no longer leaks the generic `launcher-<backend>-<port>` provider (generic
|
|
118
|
+
registration is suppressed for swap-managed processes); swap processes are
|
|
119
|
+
exempt from launcher auto-restart (no dueling supervisors on a fixed
|
|
120
|
+
port); on-demand spawn keys off the **resolved profile**, not the raw
|
|
121
|
+
model string (no wasted spawns when routing goes elsewhere, and
|
|
122
|
+
catalog-mismatched model names hitting a swap profile still take a lease
|
|
123
|
+
so they cannot be unloaded mid-flight).
|
|
124
|
+
|
|
125
|
+
### Docs
|
|
126
|
+
|
|
127
|
+
- `docs/guides/subagent-routing.md` / `.en.md` — §6.1 measured-verification
|
|
128
|
+
results updated against the 2026-07-11/12 E2E artifacts (3/4 sub-agent
|
|
129
|
+
round trip + rerun evidence, `c6096ed` grok-fix reference, expected-log
|
|
130
|
+
notes), new §5(e) on running the main orchestrator on a 9B-class local
|
|
131
|
+
model (tool-support prerequisite, 9b→30b fallback chain, autocompact
|
|
132
|
+
caveat), §7 UNCONFIRMED items resolved as measured.
|
|
133
|
+
- `docs/designs/launcher-model-swap.md` — full design (phases, concurrency
|
|
134
|
+
model, security posture, §10 review decisions, §10.5 as-built record).
|
|
135
|
+
- `examples/providers.swap.yaml` + `examples/README.md` index row.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
12
139
|
## [v2.9.0] — 2026-07-11 (agent_cli extraction Phase 2c — in-core adapter removed)
|
|
13
140
|
|
|
14
|
-
**BREAKING.** Phase 2c of the agent_cli plugin extraction
|
|
141
|
+
**PR #73**. **BREAKING.** Phase 2c of the agent_cli plugin extraction
|
|
15
142
|
(`docs/designs/agent-cli-plugin-extraction.md` §5/§7): the in-core
|
|
16
143
|
`agent_cli` adapter branch is **removed** from `coderouter/adapters/registry.py`.
|
|
17
144
|
`kind: agent_cli` now resolves exclusively through the external plugin
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: coderouter-cli
|
|
3
|
-
Version: 2.9.
|
|
3
|
+
Version: 2.9.2
|
|
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
|
|
@@ -66,7 +66,7 @@ Description-Content-Type: text/markdown
|
|
|
66
66
|
## 何ができるか — 30 秒で
|
|
67
67
|
|
|
68
68
|
```
|
|
69
|
-
あなたのエージェント (Claude Code /
|
|
69
|
+
あなたのエージェント (Claude Code / codex / agy)
|
|
70
70
|
│
|
|
71
71
|
▼
|
|
72
72
|
┌─ CodeRouter ─┐
|
|
@@ -141,7 +141,7 @@ ANTHROPIC_BASE_URL=http://localhost:8088 ANTHROPIC_AUTH_TOKEN=dummy claude
|
|
|
141
141
|
| Claude Code + ローカル Ollama で tool calling が壊れる | **必須** — tool 修復 (+ 必要なら wire 変換) |
|
|
142
142
|
| Claude Code + ローカルで長時間回すと止まる | **必須級** — 6 系統ガード + self-healing |
|
|
143
143
|
| Ollama v0.14+ / LM Studio にネイティブ直結で動いてる | **便利** — 直結に無い fallback / ガード / 診断を追加 (passthrough で翻訳ゼロ) |
|
|
144
|
-
| codex /
|
|
144
|
+
| codex / agy + Ollama 直繋ぎで動いてる | オプション — フォールバックが欲しいなら |
|
|
145
145
|
| Claude API を直接叩いてて問題ない | 不要 |
|
|
146
146
|
|
|
147
147
|
詳細は → [要否判定ガイド](./docs/start/when-do-i-need-coderouter.md)
|
|
@@ -311,6 +311,8 @@ English: [Quickstart](./docs/start/quickstart.en.md) · [Usage guide](./docs/gui
|
|
|
311
311
|
- **テスト**: 1,500+ 本(ランタイム依存 5 個は v1 系から不変)
|
|
312
312
|
- **対応 OS**: macOS (Apple Silicon 推奨) / Linux / Windows WSL2
|
|
313
313
|
- **対応 backend**: Ollama / llama.cpp / LM Studio / vLLM / MLX-LM / OpenRouter / NVIDIA NIM / Anthropic API
|
|
314
|
+
- **外部エージェント CLI**: `agent_cli` provider として Claude Code / codex / grok / antigravity の4種を束ねて呼び出せる(要 `coderouter-plugin-agents`。詳細 → [external-agents ガイド](./docs/backends/external-agents.md))
|
|
315
|
+
- **プラグイン**: compress / memory / agents の3種を opt-in で追加可能(コアの依存は増えない。一覧・導入方法 → [docs/README.md](./docs/README.md#対応プラグイン--plugins))
|
|
314
316
|
- **ライセンス**: MIT
|
|
315
317
|
|
|
316
318
|
---
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
## What it does — in 30 seconds
|
|
22
22
|
|
|
23
23
|
```
|
|
24
|
-
Your agent (Claude Code /
|
|
24
|
+
Your agent (Claude Code / codex / agy)
|
|
25
25
|
│
|
|
26
26
|
▼
|
|
27
27
|
┌─ CodeRouter ──┐
|
|
@@ -77,7 +77,7 @@ That's it. Claude Code works as usual, but your local Ollama is answering behind
|
|
|
77
77
|
|---|---|
|
|
78
78
|
| Claude Code + local Ollama, tool calling breaks | **Yes** — wire translation + tool repair |
|
|
79
79
|
| Claude Code + local, dies after long sessions | **Helpful** — 6 guards + self-healing |
|
|
80
|
-
| codex /
|
|
80
|
+
| codex / agy + Ollama works fine | Optional — if you want fallback |
|
|
81
81
|
| Using Claude API directly, no issues | Not needed |
|
|
82
82
|
|
|
83
83
|
Full decision matrix → [Do I need CodeRouter?](./docs/start/when-do-i-need-coderouter.en.md)
|
|
@@ -247,6 +247,8 @@ Open `http://localhost:8088/dashboard` while debugging — most issues become vi
|
|
|
247
247
|
- **Tests**: 1,500+ (the 5 runtime deps have never grown since v1)
|
|
248
248
|
- **OS**: macOS (Apple Silicon recommended) / Linux / Windows WSL2
|
|
249
249
|
- **Backends**: Ollama / llama.cpp / LM Studio / vLLM / MLX-LM / OpenRouter / NVIDIA NIM / Anthropic API
|
|
250
|
+
- **External agent CLIs**: bundle Claude Code / codex / grok / antigravity as a single `agent_cli` provider (requires `coderouter-plugin-agents`; details → [external-agents guide](./docs/backends/external-agents.en.md))
|
|
251
|
+
- **Plugins**: compress / memory / agents, all opt-in with zero impact on core dependencies (list & install → [docs/README.en.md](./docs/README.en.md#plugins))
|
|
250
252
|
- **License**: MIT
|
|
251
253
|
|
|
252
254
|
---
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
## 何ができるか — 30 秒で
|
|
22
22
|
|
|
23
23
|
```
|
|
24
|
-
あなたのエージェント (Claude Code /
|
|
24
|
+
あなたのエージェント (Claude Code / codex / agy)
|
|
25
25
|
│
|
|
26
26
|
▼
|
|
27
27
|
┌─ CodeRouter ─┐
|
|
@@ -96,7 +96,7 @@ ANTHROPIC_BASE_URL=http://localhost:8088 ANTHROPIC_AUTH_TOKEN=dummy claude
|
|
|
96
96
|
| Claude Code + ローカル Ollama で tool calling が壊れる | **必須** — tool 修復 (+ 必要なら wire 変換) |
|
|
97
97
|
| Claude Code + ローカルで長時間回すと止まる | **必須級** — 6 系統ガード + self-healing |
|
|
98
98
|
| Ollama v0.14+ / LM Studio にネイティブ直結で動いてる | **便利** — 直結に無い fallback / ガード / 診断を追加 (passthrough で翻訳ゼロ) |
|
|
99
|
-
| codex /
|
|
99
|
+
| codex / agy + Ollama 直繋ぎで動いてる | オプション — フォールバックが欲しいなら |
|
|
100
100
|
| Claude API を直接叩いてて問題ない | 不要 |
|
|
101
101
|
|
|
102
102
|
詳細は → [要否判定ガイド](./docs/start/when-do-i-need-coderouter.md)
|
|
@@ -266,6 +266,8 @@ English: [Quickstart](./docs/start/quickstart.en.md) · [Usage guide](./docs/gui
|
|
|
266
266
|
- **テスト**: 1,500+ 本(ランタイム依存 5 個は v1 系から不変)
|
|
267
267
|
- **対応 OS**: macOS (Apple Silicon 推奨) / Linux / Windows WSL2
|
|
268
268
|
- **対応 backend**: Ollama / llama.cpp / LM Studio / vLLM / MLX-LM / OpenRouter / NVIDIA NIM / Anthropic API
|
|
269
|
+
- **外部エージェント CLI**: `agent_cli` provider として Claude Code / codex / grok / antigravity の4種を束ねて呼び出せる(要 `coderouter-plugin-agents`。詳細 → [external-agents ガイド](./docs/backends/external-agents.md))
|
|
270
|
+
- **プラグイン**: compress / memory / agents の3種を opt-in で追加可能(コアの依存は増えない。一覧・導入方法 → [docs/README.md](./docs/README.md#対応プラグイン--plugins))
|
|
269
271
|
- **ライセンス**: MIT
|
|
270
272
|
|
|
271
273
|
---
|