coderouter-cli 2.5.0__py3-none-any.whl → 2.5.2__py3-none-any.whl
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.py +2 -2
- coderouter/config/capability_registry.py +1 -1
- coderouter/data/model-capabilities.yaml +2 -2
- coderouter/ingress/launcher_routes.py +54 -12
- coderouter/logging.py +2 -2
- coderouter/routing/capability.py +1 -1
- {coderouter_cli-2.5.0.dist-info → coderouter_cli-2.5.2.dist-info}/METADATA +17 -17
- {coderouter_cli-2.5.0.dist-info → coderouter_cli-2.5.2.dist-info}/RECORD +11 -11
- {coderouter_cli-2.5.0.dist-info → coderouter_cli-2.5.2.dist-info}/WHEEL +0 -0
- {coderouter_cli-2.5.0.dist-info → coderouter_cli-2.5.2.dist-info}/entry_points.txt +0 -0
- {coderouter_cli-2.5.0.dist-info → coderouter_cli-2.5.2.dist-info}/licenses/LICENSE +0 -0
coderouter/cli.py
CHANGED
|
@@ -61,7 +61,7 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
61
61
|
"binding the server. Repeat to layer multiple files. By "
|
|
62
62
|
"default, file values do NOT override variables already in "
|
|
63
63
|
"the environment (the shell `export` wins). See "
|
|
64
|
-
"docs/troubleshooting.md §5 for 1Password / direnv / sops "
|
|
64
|
+
"docs/guides/troubleshooting.md §5 for 1Password / direnv / sops "
|
|
65
65
|
"integration recipes."
|
|
66
66
|
),
|
|
67
67
|
)
|
|
@@ -116,7 +116,7 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
116
116
|
"POSIX file mode (0600 expected), .gitignore coverage, "
|
|
117
117
|
"and git-tracking state. Bare `--check-env` (no PATH) "
|
|
118
118
|
"looks for `./.env` then `~/.coderouter/.env`. "
|
|
119
|
-
"See docs/troubleshooting.md §5 for the threat model."
|
|
119
|
+
"See docs/guides/troubleshooting.md §5 for the threat model."
|
|
120
120
|
),
|
|
121
121
|
)
|
|
122
122
|
doctor.add_argument(
|
|
@@ -109,7 +109,7 @@ class RegistryCapabilities(BaseModel):
|
|
|
109
109
|
"harness. ``degraded`` = the model over-eagerly invokes "
|
|
110
110
|
"tools/skills when given Claude Code's system prompt — e.g. "
|
|
111
111
|
"Llama-3.3-70B treating small talk like ``こんにちは`` as "
|
|
112
|
-
"``Skill(hello)`` invocations (see docs/troubleshooting.md "
|
|
112
|
+
"``Skill(hello)`` invocations (see docs/guides/troubleshooting.md "
|
|
113
113
|
"§4-1 for the symptom log). ``ok`` = explicitly verified "
|
|
114
114
|
"clean. ``None`` = no opinion (treated as ``ok`` at the "
|
|
115
115
|
"startup check)."
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
# Claude Code's agentic-coding harness;
|
|
36
36
|
# "degraded" triggers a startup WARN when
|
|
37
37
|
# the provider is on a `claude-code-*`
|
|
38
|
-
# chain. See docs/troubleshooting.md §4-1.
|
|
38
|
+
# chain. See docs/guides/troubleshooting.md §4-1.
|
|
39
39
|
#
|
|
40
40
|
# First-match semantics: rules within a file are evaluated top-to-bottom
|
|
41
41
|
# per flag; the first rule whose glob matches AND declares that flag
|
|
@@ -153,7 +153,7 @@ rules:
|
|
|
153
153
|
# Llama-3.3-70B (verified 2026-04-24 against NVIDIA NIM) rewrites
|
|
154
154
|
# ``こんにちは`` into ``Skill(hello)`` invocations and fabricates
|
|
155
155
|
# ``AskUserQuestion("What is your name?")`` elicitations — see
|
|
156
|
-
# docs/articles/note-nvidia-nim.md §6-2 + docs/troubleshooting.md §4-1.
|
|
156
|
+
# docs/articles/note/note-nvidia-nim.md §6-2 + docs/guides/troubleshooting.md §4-1.
|
|
157
157
|
#
|
|
158
158
|
# Glob coverage: NIM uses ``meta/llama-3.3-70b-instruct``, OpenRouter
|
|
159
159
|
# uses ``meta-llama/llama-3.3-70b-instruct``, some local servers use
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"""Launcher routes — ``GET /launcher`` + ``/api/launcher/*``.
|
|
2
2
|
|
|
3
|
-
llama.cpp / vllm プロセス管理 UI。
|
|
3
|
+
llama.cpp / vllm / mlx プロセス管理 UI。
|
|
4
4
|
|
|
5
5
|
設計方針:
|
|
6
6
|
- ダッシュボードと同じ "1ファイル完結" スタイル (Tailwind CDN + inline JS)
|
|
7
7
|
- プロセスレジストリは app.state.launcher に持たせる (再起動で消えるが意図通り)
|
|
8
8
|
- option_profiles は providers.yaml の launcher: セクションで管理 → コード変更不要で拡張可
|
|
9
9
|
- 複数プロセスの同時起動に対応 (UUID ベースの ID 管理)
|
|
10
|
-
- llama.cpp / vllm
|
|
10
|
+
- llama.cpp / vllm / mlx いずれも同じ key-value args スキーマで統一
|
|
11
11
|
|
|
12
12
|
エンドポイント:
|
|
13
13
|
GET /launcher → HTML UI
|
|
@@ -62,7 +62,7 @@ class ManagedProcess:
|
|
|
62
62
|
|
|
63
63
|
id: str
|
|
64
64
|
name: str
|
|
65
|
-
backend: str # "llama.cpp" | "vllm"
|
|
65
|
+
backend: str # "llama.cpp" | "vllm" | "mlx"
|
|
66
66
|
model_path: str
|
|
67
67
|
port: int
|
|
68
68
|
options: dict[str, Any]
|
|
@@ -150,6 +150,7 @@ def _scan_models(model_dirs: list[str]) -> list[dict[str, Any]]:
|
|
|
150
150
|
_BACKEND_DEFAULTS: dict[str, str] = {
|
|
151
151
|
"llama.cpp": "llama-server",
|
|
152
152
|
"vllm": "python",
|
|
153
|
+
"mlx": "python", # mlx_lm.server (Apple Silicon 向け)
|
|
153
154
|
}
|
|
154
155
|
|
|
155
156
|
|
|
@@ -252,14 +253,32 @@ def _model_recommendation(size_gb: float, hw: dict[str, Any]) -> dict[str, str]:
|
|
|
252
253
|
return {"level": "warn", "label": "メモリ厳しい"}
|
|
253
254
|
|
|
254
255
|
|
|
255
|
-
def _suggest_launch_flags(
|
|
256
|
-
|
|
256
|
+
def _suggest_launch_flags(backend: str, size_gb: float,
|
|
257
|
+
hw: dict[str, Any]) -> str:
|
|
258
|
+
"""選択モデル + ハード + バックエンドから推奨起動フラグを提案する。
|
|
257
259
|
|
|
260
|
+
バックエンドごとにフラグ体系が違うため分岐する:
|
|
261
|
+
- llama.cpp : -ngl / --ctx-size / --threads を算出
|
|
262
|
+
- vllm : モデル config からの自動導出に任せる (空文字)
|
|
263
|
+
- mlx : 統合メモリ前提で起動時フラグ不要 (空文字)
|
|
258
264
|
あくまで目安。他プロセスのメモリ使用や量子化方式までは考慮しない。
|
|
259
265
|
"""
|
|
260
|
-
|
|
266
|
+
if backend == "mlx":
|
|
267
|
+
# MLX は統合メモリ + Metal 前提。llama.cpp の -ngl に相当する
|
|
268
|
+
# レイヤーオフロードの概念がなく、mlx_lm.server は起動時の
|
|
269
|
+
# 性能チューニングフラグを取らない。
|
|
270
|
+
return ""
|
|
271
|
+
if backend == "vllm":
|
|
272
|
+
# vllm の --max-model-len はモデルの実コンテキスト長に依存する。
|
|
273
|
+
# メモリ量だけのヒューリスティックで値を出すと、モデルの上限を
|
|
274
|
+
# 超えたときに vllm が起動を拒否する。空にしてエンジンの
|
|
275
|
+
# 自動導出 (モデル config) に任せるのが安全。
|
|
276
|
+
return ""
|
|
277
|
+
|
|
278
|
+
# llama.cpp (デフォルト)
|
|
261
279
|
usable = _usable_memory_gb(hw)
|
|
262
280
|
weights = size_gb * 1.15 # 重み + オーバーヘッド概算
|
|
281
|
+
threads = max(1, int(hw.get("cpu_count", 4)) - 2)
|
|
263
282
|
if hw.get("gpu") == "cpu":
|
|
264
283
|
ngl = 0
|
|
265
284
|
elif usable >= weights + 1.0:
|
|
@@ -312,8 +331,17 @@ def _build_cmd(
|
|
|
312
331
|
"--model", model_path,
|
|
313
332
|
"--port", str(port),
|
|
314
333
|
]
|
|
334
|
+
elif backend == "mlx":
|
|
335
|
+
cmd = [
|
|
336
|
+
exe, "-m", "mlx_lm.server",
|
|
337
|
+
"--model", model_path,
|
|
338
|
+
"--port", str(port),
|
|
339
|
+
]
|
|
315
340
|
else:
|
|
316
|
-
raise ValueError(
|
|
341
|
+
raise ValueError(
|
|
342
|
+
f"Unknown backend: {backend!r}. "
|
|
343
|
+
"Expected 'llama.cpp', 'vllm' or 'mlx'."
|
|
344
|
+
)
|
|
317
345
|
|
|
318
346
|
for flag, val in options.items():
|
|
319
347
|
if isinstance(val, bool):
|
|
@@ -610,17 +638,20 @@ async def api_logs(proc_id: str, request: Request, n: int = 100) -> dict[str, An
|
|
|
610
638
|
|
|
611
639
|
|
|
612
640
|
@router.get("/api/launcher/suggest")
|
|
613
|
-
async def api_suggest(model_path: str = ""
|
|
641
|
+
async def api_suggest(model_path: str = "",
|
|
642
|
+
backend: str = "llama.cpp") -> dict[str, Any]:
|
|
614
643
|
"""Suggest launch flags for the given model based on detected hardware.
|
|
615
644
|
|
|
616
645
|
クライアントの「推奨値」ボタンから呼ばれる。値はあくまで目安。
|
|
646
|
+
バックエンドごとにフラグ体系が違うため backend も受け取る。
|
|
617
647
|
"""
|
|
618
648
|
hw = await asyncio.to_thread(_detect_hardware)
|
|
619
649
|
size_gb = 0.0
|
|
620
650
|
if model_path:
|
|
621
651
|
size_gb = await asyncio.to_thread(_model_size_gb, model_path)
|
|
622
652
|
return {
|
|
623
|
-
"extra_args": _suggest_launch_flags(size_gb, hw),
|
|
653
|
+
"extra_args": _suggest_launch_flags(backend, size_gb, hw),
|
|
654
|
+
"backend": backend,
|
|
624
655
|
"hardware": hw,
|
|
625
656
|
"size_gb": round(size_gb, 2),
|
|
626
657
|
}
|
|
@@ -720,6 +751,7 @@ _LAUNCHER_HTML = r"""<!doctype html>
|
|
|
720
751
|
<select id="f-backend" onchange="onBackendChange()">
|
|
721
752
|
<option value="llama.cpp">llama.cpp</option>
|
|
722
753
|
<option value="vllm">vllm</option>
|
|
754
|
+
<option value="mlx">mlx</option>
|
|
723
755
|
</select>
|
|
724
756
|
<div id="binary-hint" class="mt-1 text-xs text-slate-500 min-h-[1.2rem]"></div>
|
|
725
757
|
</div>
|
|
@@ -894,14 +926,24 @@ _LAUNCHER_HTML = r"""<!doctype html>
|
|
|
894
926
|
window.suggestOptions = async () => {
|
|
895
927
|
const model = document.getElementById("f-model").value.trim();
|
|
896
928
|
if (!model) { showLaunchErr("先にモデルを選択してください"); return; }
|
|
929
|
+
const backend = document.getElementById("f-backend").value;
|
|
897
930
|
try {
|
|
898
931
|
const r = await fetch("/api/launcher/suggest?model_path="
|
|
899
|
-
+ encodeURIComponent(model)
|
|
932
|
+
+ encodeURIComponent(model)
|
|
933
|
+
+ "&backend=" + encodeURIComponent(backend));
|
|
900
934
|
const d = await r.json();
|
|
901
935
|
if (!r.ok) { showLaunchErr(d.detail || "推奨値の取得に失敗"); return; }
|
|
902
936
|
document.getElementById("f-extra").value = d.extra_args;
|
|
903
937
|
showLaunchErr("");
|
|
904
|
-
|
|
938
|
+
if (d.extra_args) {
|
|
939
|
+
statusMsg("推奨値を設定(目安): " + d.extra_args);
|
|
940
|
+
} else if (backend === "mlx") {
|
|
941
|
+
statusMsg("MLX は起動時の調整フラグ不要です(統合メモリで自動)");
|
|
942
|
+
} else if (backend === "vllm") {
|
|
943
|
+
statusMsg("vllm は起動時フラグ不要です(モデル設定から自動導出)");
|
|
944
|
+
} else {
|
|
945
|
+
statusMsg("このバックエンドは推奨フラグの自動設定対象外です");
|
|
946
|
+
}
|
|
905
947
|
} catch (e) {
|
|
906
948
|
showLaunchErr(e.message);
|
|
907
949
|
}
|
|
@@ -961,7 +1003,7 @@ _LAUNCHER_HTML = r"""<!doctype html>
|
|
|
961
1003
|
// Enable/disable launch button based on binary availability
|
|
962
1004
|
if (!info.found) {
|
|
963
1005
|
btn.disabled = true;
|
|
964
|
-
showLaunchErr(`⚠ "${esc(info.resolved)}"
|
|
1006
|
+
showLaunchErr(`⚠ "${esc(info.resolved)}" が見つかりません。選択中のバックエンド (${esc(backend)}) をインストールするか、providers.yaml の launcher.backends.${esc(backend)}.binary にフルパスを設定してください。`);
|
|
965
1007
|
} else {
|
|
966
1008
|
btn.disabled = false;
|
|
967
1009
|
// Clear error only if it was a binary-not-found error
|
coderouter/logging.py
CHANGED
|
@@ -779,7 +779,7 @@ def log_output_filter_applied(
|
|
|
779
779
|
# v1.7-B: chain-claude-code-suitability-degraded log shape
|
|
780
780
|
#
|
|
781
781
|
# Motivation (plan.md §11.B.4 #2):
|
|
782
|
-
# v1.6.2 documented in docs/troubleshooting.md §4-1 that putting
|
|
782
|
+
# v1.6.2 documented in docs/guides/troubleshooting.md §4-1 that putting
|
|
783
783
|
# Llama-3.3-70B at the head of a Claude-Code-facing chain causes
|
|
784
784
|
# over-eager tool invocation (small talk like ``こんにちは`` getting
|
|
785
785
|
# rewritten to ``Skill(hello)`` calls). Docs alone require the operator
|
|
@@ -805,7 +805,7 @@ def log_output_filter_applied(
|
|
|
805
805
|
_DEFAULT_CLAUDE_CODE_SUITABILITY_HINT: str = (
|
|
806
806
|
"move the degraded provider(s) to the tail of the chain or replace "
|
|
807
807
|
"with an agentic-coding-tuned model (e.g. qwen3-coder-480b-a35b-instruct); "
|
|
808
|
-
"see docs/troubleshooting.md §4-1"
|
|
808
|
+
"see docs/guides/troubleshooting.md §4-1"
|
|
809
809
|
)
|
|
810
810
|
|
|
811
811
|
|
coderouter/routing/capability.py
CHANGED
|
@@ -312,7 +312,7 @@ def anthropic_request_has_cache_control(request: AnthropicRequest) -> bool:
|
|
|
312
312
|
# v1.7-B: claude_code_suitability startup check
|
|
313
313
|
#
|
|
314
314
|
# Motivation (plan.md §11.B.4 #2):
|
|
315
|
-
# v1.6.2 documented in docs/troubleshooting.md §4-1 the "Llama-3.3-70B
|
|
315
|
+
# v1.6.2 documented in docs/guides/troubleshooting.md §4-1 the "Llama-3.3-70B
|
|
316
316
|
# over-eagerly invokes Skill() for small talk under Claude Code"
|
|
317
317
|
# symptom. v1.7-B promotes that hint from prose-only to a structured
|
|
318
318
|
# automatic startup WARN: at app startup we scan every profile whose
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: coderouter-cli
|
|
3
|
-
Version: 2.5.
|
|
3
|
+
Version: 2.5.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
|
|
@@ -54,7 +54,7 @@ Description-Content-Type: text/markdown
|
|
|
54
54
|
</p>
|
|
55
55
|
|
|
56
56
|
<p align="center">
|
|
57
|
-
<a href="./README.en.md">English</a> · <strong>日本語</strong> · <a href="./docs/quickstart.md">10 分で動かす</a> · <a href="./docs/architecture.md">設計詳細</a>
|
|
57
|
+
<a href="./README.en.md">English</a> · <strong>日本語</strong> · <a href="./docs/start/quickstart.md">10 分で動かす</a> · <a href="./docs/concepts/architecture.md">設計詳細</a>
|
|
58
58
|
</p>
|
|
59
59
|
|
|
60
60
|
---
|
|
@@ -121,7 +121,7 @@ ANTHROPIC_BASE_URL=http://localhost:8088 ANTHROPIC_AUTH_TOKEN=dummy claude
|
|
|
121
121
|
| codex / gemini-cli + Ollama 直繋ぎで動いてる | オプション — フォールバックが欲しいなら |
|
|
122
122
|
| Claude API を直接叩いてて問題ない | 不要 |
|
|
123
123
|
|
|
124
|
-
詳細は → [要否判定ガイド](./docs/when-do-i-need-coderouter.md)
|
|
124
|
+
詳細は → [要否判定ガイド](./docs/start/when-do-i-need-coderouter.md)
|
|
125
125
|
|
|
126
126
|
---
|
|
127
127
|
|
|
@@ -186,7 +186,7 @@ launcher:
|
|
|
186
186
|
"--max-model-len": 4096
|
|
187
187
|
```
|
|
188
188
|
|
|
189
|
-
詳細 → [Launcher ガイド](./docs/launcher.md)
|
|
189
|
+
詳細 → [Launcher ガイド](./docs/backends/launcher.md)
|
|
190
190
|
|
|
191
191
|
---
|
|
192
192
|
|
|
@@ -213,7 +213,7 @@ providers:
|
|
|
213
213
|
api_key_env: OPENROUTER_API_KEY
|
|
214
214
|
```
|
|
215
215
|
|
|
216
|
-
もっと詳しい設定 → [利用ガイド](./docs/usage-guide.md) · [設計詳細](./docs/architecture.md)
|
|
216
|
+
もっと詳しい設定 → [利用ガイド](./docs/guides/usage-guide.md) · [設計詳細](./docs/concepts/architecture.md)
|
|
217
217
|
|
|
218
218
|
---
|
|
219
219
|
|
|
@@ -221,15 +221,15 @@ providers:
|
|
|
221
221
|
|
|
222
222
|
| やりたいこと | ドキュメント |
|
|
223
223
|
|---|---|
|
|
224
|
-
| すぐ動かす | [Quickstart](./docs/quickstart.md) |
|
|
225
|
-
| 使いこなす | [利用ガイド](./docs/usage-guide.md) |
|
|
226
|
-
| 無料で回す | [無料枠ガイド](./docs/free-tier-guide.md) |
|
|
227
|
-
| llama.cpp / vllm を GUI で起動 | [Launcher ガイド](./docs/launcher.md) |
|
|
228
|
-
| 詰まった | [トラブルシューティング](./docs/troubleshooting.md) |
|
|
229
|
-
| 設計を知りたい | [アーキテクチャ詳細](./docs/architecture.md) |
|
|
224
|
+
| すぐ動かす | [Quickstart](./docs/start/quickstart.md) |
|
|
225
|
+
| 使いこなす | [利用ガイド](./docs/guides/usage-guide.md) |
|
|
226
|
+
| 無料で回す | [無料枠ガイド](./docs/guides/free-tier-guide.md) |
|
|
227
|
+
| llama.cpp / vllm を GUI で起動 | [Launcher ガイド](./docs/backends/launcher.md) |
|
|
228
|
+
| 詰まった | [トラブルシューティング](./docs/guides/troubleshooting.md) |
|
|
229
|
+
| 設計を知りたい | [アーキテクチャ詳細](./docs/concepts/architecture.md) |
|
|
230
230
|
| 全リリース履歴 | [CHANGELOG](./CHANGELOG.md) |
|
|
231
231
|
|
|
232
|
-
English: [Quickstart](./docs/quickstart.en.md) · [Usage guide](./docs/usage-guide.en.md) · [Free-tier](./docs/free-tier-guide.en.md) · [Troubleshooting](./docs/troubleshooting.en.md)
|
|
232
|
+
English: [Quickstart](./docs/start/quickstart.en.md) · [Usage guide](./docs/guides/usage-guide.en.md) · [Free-tier](./docs/guides/free-tier-guide.en.md) · [Troubleshooting](./docs/guides/troubleshooting.en.md)
|
|
233
233
|
|
|
234
234
|
---
|
|
235
235
|
|
|
@@ -239,10 +239,10 @@ English: [Quickstart](./docs/quickstart.en.md) · [Usage guide](./docs/usage-gui
|
|
|
239
239
|
|
|
240
240
|
| 症状 | 原因 | 詳細 |
|
|
241
241
|
|---|---|---|
|
|
242
|
-
| 401 エラー | API キー未設定 / `.env` に `export` 忘れ | [§1](./docs/troubleshooting.md#1-起動設定で踏みやすい-5-つの罠-v162-追加) |
|
|
243
|
-
| 返信が空 / 意味不明 | Ollama の `num_ctx` が 2048 に切り詰め | [§3](./docs/troubleshooting.md#3-ollama-初心者--サイレント失敗-5-症状-v07-c) |
|
|
244
|
-
| `<think>` タグが漏れる | `output_filters: [strip_thinking]` を付ける | [§3](./docs/troubleshooting.md#3-ollama-初心者--サイレント失敗-5-症状-v07-c) |
|
|
245
|
-
| Claude Code でツール呼び出しがおかしい | tool-call 修復が効いてない | [§4](./docs/troubleshooting.md#4-claude-code-連携で踏みやすい罠-v162-追加) |
|
|
242
|
+
| 401 エラー | API キー未設定 / `.env` に `export` 忘れ | [§1](./docs/guides/troubleshooting.md#1-起動設定で踏みやすい-5-つの罠-v162-追加) |
|
|
243
|
+
| 返信が空 / 意味不明 | Ollama の `num_ctx` が 2048 に切り詰め | [§3](./docs/guides/troubleshooting.md#3-ollama-初心者--サイレント失敗-5-症状-v07-c) |
|
|
244
|
+
| `<think>` タグが漏れる | `output_filters: [strip_thinking]` を付ける | [§3](./docs/guides/troubleshooting.md#3-ollama-初心者--サイレント失敗-5-症状-v07-c) |
|
|
245
|
+
| Claude Code でツール呼び出しがおかしい | tool-call 修復が効いてない | [§4](./docs/guides/troubleshooting.md#4-claude-code-連携で踏みやすい罠-v162-追加) |
|
|
246
246
|
|
|
247
247
|
`http://localhost:8088/dashboard` を開いておくと、ほとんどの問題が見て 10 秒でわかります。
|
|
248
248
|
|
|
@@ -268,7 +268,7 @@ CodeRouter は backend ルーター層として独立して動きます。`OPENA
|
|
|
268
268
|
|
|
269
269
|
## Security
|
|
270
270
|
|
|
271
|
-
シークレットは環境変数に置きます。[`docs/security.md`](./docs/security.md) に完全な方針と報告手順があります。
|
|
271
|
+
シークレットは環境変数に置きます。[`docs/security.md`](./docs/guides/security.md) に完全な方針と報告手順があります。
|
|
272
272
|
|
|
273
273
|
## License
|
|
274
274
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
coderouter/__init__.py,sha256=ghdjPrLtnRzY8fyQ4CJZI1UJKADyNTLtA3G7se8H7Ns,696
|
|
2
2
|
coderouter/__main__.py,sha256=-LCgxJnvgUV240HjQKv7ly-mn2NuKHpC4nCpvTHjeSU,130
|
|
3
|
-
coderouter/cli.py,sha256=
|
|
3
|
+
coderouter/cli.py,sha256=KE49IACJVw692H6dlfu1tAah1jQgbwH92F4lCkhRk6U,28168
|
|
4
4
|
coderouter/cli_stats.py,sha256=CCjzc1G4hTRHZ2gG1XhxhDpUkJnnl3NXbcbp1T18jpg,29894
|
|
5
5
|
coderouter/cost.py,sha256=jf70XTTjEfWddHkOohErqSo5TfmIG42zQpBT_5faPNA,5881
|
|
6
6
|
coderouter/doctor.py,sha256=2luNk6BHSRvpQStJnHcqzNvNi-SKdOuKV0WZdorZhVk,82854
|
|
7
7
|
coderouter/doctor_apply.py,sha256=r_J6xbu5-HivofPNriw4_vjNYs_VRs7GsGTS0oMEX10,24209
|
|
8
8
|
coderouter/env_security.py,sha256=FEBZnXfJ0xE39kmMMn39zk0W_DRRnmcB_REmP9f4xWo,14796
|
|
9
9
|
coderouter/errors.py,sha256=Xmq67lheyw8iv3Ox39jh2c4tvNI5RcUR4QkoxVDN6l4,1130
|
|
10
|
-
coderouter/logging.py,sha256=
|
|
10
|
+
coderouter/logging.py,sha256=U7QiGRaoQXTSGijc-jV9TebnbbzrD-snfnoZy73Nvwo,52737
|
|
11
11
|
coderouter/output_filters.py,sha256=LOOh68Kcn2LFDy1wPFynA6O_HGazV756q_79Z0_4Jww,19350
|
|
12
12
|
coderouter/token_estimation.py,sha256=1Ai1uT68hahpyr4LBhNyVRGq7y4yXItd6J4k5ApGX7M,5995
|
|
13
13
|
coderouter/adapters/__init__.py,sha256=7dIDSZ-FE_0iSqLSDc_lK1idRdLTKcM2hP9tCJipgPI,463
|
|
@@ -16,12 +16,12 @@ coderouter/adapters/base.py,sha256=H4uM6r_-95Xs1hCM_X4Zv3tq-xN3cXWLj83F-QjPNLw,8
|
|
|
16
16
|
coderouter/adapters/openai_compat.py,sha256=9qoJfLR2vVnyM8isb9G4j-Dk5QBHFlneOaBSY-P4UAg,17941
|
|
17
17
|
coderouter/adapters/registry.py,sha256=Syt3eDljWZAK5mfiJGvUMKaZYAfCRScp7PvV6pYt7mc,683
|
|
18
18
|
coderouter/config/__init__.py,sha256=FODEn74fN-qZnt4INPSHswqhOlEgpL6-_onxsitSx8g,274
|
|
19
|
-
coderouter/config/capability_registry.py,sha256=
|
|
19
|
+
coderouter/config/capability_registry.py,sha256=QRJLlzqKTdb2ndpWAHGZQJq23wczEfzSVanKnoqJrg4,15815
|
|
20
20
|
coderouter/config/env_file.py,sha256=CoMK27fuAXm-NtoLzXb8yN2E-wDFjHQuFwiIlmgTBQw,10356
|
|
21
21
|
coderouter/config/loader.py,sha256=FUEe8m4Tnmj_aul0vSctD8vKvNW-oLRoMRbTpSKqSmc,4077
|
|
22
22
|
coderouter/config/schemas.py,sha256=XsOGooItlHSXIfkE6LJbZY6vOo3uRkxUoTOt03mQARI,60423
|
|
23
23
|
coderouter/data/__init__.py,sha256=uNyfD9jaCvTWsBAWtaw1Fr25OSxzv3psGMfBjT1z0Cc,328
|
|
24
|
-
coderouter/data/model-capabilities.yaml,sha256=
|
|
24
|
+
coderouter/data/model-capabilities.yaml,sha256=S9jt6SC6-3s2-icZ_n-a14iEMnc2yB1C2R6q-N_tZWQ,19309
|
|
25
25
|
coderouter/guards/__init__.py,sha256=5qliYBqygvVPneej7nx0uSjxDKsz7t8VzvrDgVBJlvU,1170
|
|
26
26
|
coderouter/guards/_fingerprint.py,sha256=qsgNzIq9jv3FHrKL39nGJARp0cMenpN_QmWoJu87vU4,4835
|
|
27
27
|
coderouter/guards/backend_health.py,sha256=Xx5OpX1x7atxghmBNDVxtwGg62zQIOsk6FmrQV4ILa4,9113
|
|
@@ -36,7 +36,7 @@ coderouter/ingress/__init__.py,sha256=WQsCH2CGJCAhy0mS6GSEdeYZRkkQu2OHDsP4CJWTLu
|
|
|
36
36
|
coderouter/ingress/anthropic_routes.py,sha256=It2f7XGe3fgKQX01J2F5JOCoZr96t_Tx_kY2om99MVo,16894
|
|
37
37
|
coderouter/ingress/app.py,sha256=PcuTvUFNjr04EbsUOu8qdyKTdBzxkIJYB4xpz8dFfMo,12635
|
|
38
38
|
coderouter/ingress/dashboard_routes.py,sha256=rscoj89weHTfc8QmYk-fof-7062rhKFHVHRA8cDImDI,21931
|
|
39
|
-
coderouter/ingress/launcher_routes.py,sha256=
|
|
39
|
+
coderouter/ingress/launcher_routes.py,sha256=Jh-E6qFmHnr7ON4W6QanafxQIoojT4F034mybLvhTyQ,47548
|
|
40
40
|
coderouter/ingress/metrics_routes.py,sha256=M22dwOGn24P05Ge4W3c7d7mYytSGWjIR-pPSPOAiHJY,3965
|
|
41
41
|
coderouter/ingress/openai_routes.py,sha256=Zw1efPw9DI6GgV8ZcLrzS6Cda0KLrFkKn2GBZWSe6Vo,6322
|
|
42
42
|
coderouter/metrics/__init__.py,sha256=7Es351DPS7yLM0yVF_F0eesmiD83n7Zzhie44chht38,1465
|
|
@@ -50,7 +50,7 @@ coderouter/routing/__init__.py,sha256=g2vhutbozRx5QBThReqwPN3imk5qXdpDiaogILd3IR
|
|
|
50
50
|
coderouter/routing/adaptive.py,sha256=G2o377twGSjbUh65wiIFx6klnpFGjsD_nI3oDvcBwhY,21257
|
|
51
51
|
coderouter/routing/auto_router.py,sha256=4_sQR0ztSED9FgQSvQqgqSiydyQVY_qOSRvwyZ5BfRc,12909
|
|
52
52
|
coderouter/routing/budget.py,sha256=A3_i44tmS3SrqVNnoGkLKMsiYwI_Ug6m5-3gitVoQSM,8452
|
|
53
|
-
coderouter/routing/capability.py,sha256=
|
|
53
|
+
coderouter/routing/capability.py,sha256=DCDmiQ-78dkYonCM1WQBCMf6e6XI6VIv_cnuz9hdWT0,18443
|
|
54
54
|
coderouter/routing/fallback.py,sha256=P3f6Yna1EGnLAT-ZS5ADrrZ-qRWc-M5xvwEuan4rmcs,104568
|
|
55
55
|
coderouter/state/__init__.py,sha256=XoGcPmmBQSiZWML2S0juSveQ78xfhtdeCliNnVyzu7E,1088
|
|
56
56
|
coderouter/state/audit_log.py,sha256=JwGd0OkkDlkh0Fdc6SmnuyViwKzEaFA7Ux_VqHzakWE,8358
|
|
@@ -62,8 +62,8 @@ coderouter/translation/__init__.py,sha256=PYXN7XVEwpG1uC8RLy6fvnGbzEZhhrEuUapH8I
|
|
|
62
62
|
coderouter/translation/anthropic.py,sha256=JpvIWNXHUPVqOGvps7o_6ZADhXuJuvpU7RdMqQFtwwM,6421
|
|
63
63
|
coderouter/translation/convert.py,sha256=-qyzFzmmr9hhQV6_Sg75kJnvCZvHe3n7vRdaZtk_JqQ,47269
|
|
64
64
|
coderouter/translation/tool_repair.py,sha256=Ok2PF947Liegc5oaytfptv5MWMkpfJYQie-zdP1y3cY,9946
|
|
65
|
-
coderouter_cli-2.5.
|
|
66
|
-
coderouter_cli-2.5.
|
|
67
|
-
coderouter_cli-2.5.
|
|
68
|
-
coderouter_cli-2.5.
|
|
69
|
-
coderouter_cli-2.5.
|
|
65
|
+
coderouter_cli-2.5.2.dist-info/METADATA,sha256=FIs0I95zZ_y40oz1Vby5cFmlZMABs559jQyBBgikMq8,11521
|
|
66
|
+
coderouter_cli-2.5.2.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
67
|
+
coderouter_cli-2.5.2.dist-info/entry_points.txt,sha256=-dnLfD1YZ2WjH2zSdNCvlO65wYltM9bsHt9Fhg3yGss,51
|
|
68
|
+
coderouter_cli-2.5.2.dist-info/licenses/LICENSE,sha256=wkEzoR86jFw33jvfOHjULqmkGEfxTFMgMaJnpR8mPRw,1065
|
|
69
|
+
coderouter_cli-2.5.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|