coderouter-cli 2.4.0__py3-none-any.whl → 2.5.1__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/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
 
@@ -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
@@ -268,10 +268,10 @@ def _rule_small_window_low_sensitivity(
268
268
  f"requires more evidence before promoting the provider."
269
269
  ),
270
270
  yaml_snippet=(
271
- f"profiles:\n"
272
- f" - name: default\n"
273
- f" drift_detection_sensitivity: low # was: normal or high\n"
274
- f" drift_detection_window_size: 30 # larger window = more stable"
271
+ "profiles:\n"
272
+ " - name: default\n"
273
+ " drift_detection_sensitivity: low # was: normal or high\n"
274
+ " drift_detection_window_size: 30 # larger window = more stable"
275
275
  ),
276
276
  evidence={
277
277
  "provider": p.provider,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: coderouter-cli
3
- Version: 2.4.0
3
+ Version: 2.5.1
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
 
@@ -141,7 +141,7 @@ ANTHROPIC_BASE_URL=http://localhost:8088 ANTHROPIC_AUTH_TOKEN=dummy claude
141
141
  | ガード | 何から守るか |
142
142
  |---|---|
143
143
  | **Context Budget** | メッセージが溜まりすぎて context window 溢れ → 自動 trim |
144
- | **Drift Detection** | モデルの応答品質が徐々に劣化 → 別 provider に切替 or KV cache flush |
144
+ | **Drift Detection** | モデルの応答品質が徐々に劣化 → 別 provider に切替 or KV cache flush (6 シグナル、`goal_mode` で目標達成停滞も検知) |
145
145
  | **Self-healing** | backend が落ちた → 自動除外 + restart + 回復 probe で自動復帰 |
146
146
  | **Tool Loop Guard** | 同じツールを無限に呼び続ける → 検知して停止 |
147
147
  | **Memory Pressure** | GPU メモリ不足を検知 → 軽量モデルに切替 |
@@ -154,9 +154,40 @@ ANTHROPIC_BASE_URL=http://localhost:8088 ANTHROPIC_AUTH_TOKEN=dummy claude
154
154
  | **`coderouter doctor`** | プロバイダの問題を 6 プローブで即診断 + 修正パッチ出力 |
155
155
  | **`/dashboard`** | ブラウザで今何が起きてるかリアルタイム確認 |
156
156
  | **`coderouter audit`** | guard 発火履歴を検索 |
157
- | **`coderouter replay`** | provider 切替の効果を統計比較 (A/B 分析) |
157
+ | **`coderouter replay`** | provider 切替の効果を統計比較 (A/B 分析) / `--suggest-rules` でルール最適化提案 |
158
158
  | **Continuous Probe** | idle 時も定期的に backend を監視 |
159
159
 
160
+ ### Launcher — llama.cpp / vllm 起動 UI
161
+
162
+ `http://localhost:8088/launcher` で開けるブラウザ UI。llama.cpp や vllm を GUI で起動・管理できます。
163
+
164
+ | 機能 | 詳細 |
165
+ |---|---|
166
+ | **モデルスキャン** | `model_dirs` に指定したフォルダを再帰スキャンして `.gguf` / `.safetensors` をリスト化 |
167
+ | **オプションプロファイル** | `providers.yaml` に名前付きプリセットを定義 → ドロップダウンで選択するだけ |
168
+ | **複数プロセス管理** | llama.cpp と vllm を同時に起動し、ポートごとに独立管理 |
169
+ | **ログビューア** | 各プロセスの stdout/stderr をブラウザ内でリアルタイム確認 |
170
+
171
+ ```yaml
172
+ # providers.yaml に追記するだけで有効になる
173
+ launcher:
174
+ model_dirs:
175
+ - ~/models
176
+ option_profiles:
177
+ llama.cpp:
178
+ - name: "GPU フル活用"
179
+ args:
180
+ "-ngl": 99
181
+ "--ctx-size": 4096
182
+ vllm:
183
+ - name: "標準"
184
+ args:
185
+ "--dtype": "auto"
186
+ "--max-model-len": 4096
187
+ ```
188
+
189
+ 詳細 → [Launcher ガイド](./docs/backends/launcher.md)
190
+
160
191
  ---
161
192
 
162
193
  ## 設定例 (最小)
@@ -182,7 +213,7 @@ providers:
182
213
  api_key_env: OPENROUTER_API_KEY
183
214
  ```
184
215
 
185
- もっと詳しい設定 → [利用ガイド](./docs/usage-guide.md) · [設計詳細](./docs/architecture.md)
216
+ もっと詳しい設定 → [利用ガイド](./docs/guides/usage-guide.md) · [設計詳細](./docs/concepts/architecture.md)
186
217
 
187
218
  ---
188
219
 
@@ -190,14 +221,15 @@ providers:
190
221
 
191
222
  | やりたいこと | ドキュメント |
192
223
  |---|---|
193
- | すぐ動かす | [Quickstart](./docs/quickstart.md) |
194
- | 使いこなす | [利用ガイド](./docs/usage-guide.md) |
195
- | 無料で回す | [無料枠ガイド](./docs/free-tier-guide.md) |
196
- | 詰まった | [トラブルシューティング](./docs/troubleshooting.md) |
197
- | 設計を知りたい | [アーキテクチャ詳細](./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) |
198
230
  | 全リリース履歴 | [CHANGELOG](./CHANGELOG.md) |
199
231
 
200
- 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)
201
233
 
202
234
  ---
203
235
 
@@ -207,10 +239,10 @@ English: [Quickstart](./docs/quickstart.en.md) · [Usage guide](./docs/usage-gui
207
239
 
208
240
  | 症状 | 原因 | 詳細 |
209
241
  |---|---|---|
210
- | 401 エラー | API キー未設定 / `.env` に `export` 忘れ | [§1](./docs/troubleshooting.md#1-起動設定で踏みやすい-5-つの罠-v162-追加) |
211
- | 返信が空 / 意味不明 | Ollama の `num_ctx` が 2048 に切り詰め | [§3](./docs/troubleshooting.md#3-ollama-初心者--サイレント失敗-5-症状-v07-c) |
212
- | `<think>` タグが漏れる | `output_filters: [strip_thinking]` を付ける | [§3](./docs/troubleshooting.md#3-ollama-初心者--サイレント失敗-5-症状-v07-c) |
213
- | 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-追加) |
214
246
 
215
247
  `http://localhost:8088/dashboard` を開いておくと、ほとんどの問題が見て 10 秒でわかります。
216
248
 
@@ -236,7 +268,7 @@ CodeRouter は backend ルーター層として独立して動きます。`OPENA
236
268
 
237
269
  ## Security
238
270
 
239
- シークレットは環境変数に置きます。[`docs/security.md`](./docs/security.md) に完全な方針と報告手順があります。
271
+ シークレットは環境変数に置きます。[`docs/security.md`](./docs/guides/security.md) に完全な方針と報告手順があります。
240
272
 
241
273
  ## License
242
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=lSrQBj7iYz39EbPfBNm8l-ZGe-dPIHUd_wG0KPTvpiQ,28154
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=R8rcK0Bn3BbEfFVeewGy3Ip_GeyNZmNnJycug0Z_u98,52723
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=F6DetVL5oM03R4QeK1g6h_Q_zrXH0opnYDp3duZmkN4,15808
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
- coderouter/config/schemas.py,sha256=1vTYTYIe_vbjbgBKJ8hbrpU12K5l3XCKXAJE85HWebA,55853
22
+ coderouter/config/schemas.py,sha256=XsOGooItlHSXIfkE6LJbZY6vOo3uRkxUoTOt03mQARI,60423
23
23
  coderouter/data/__init__.py,sha256=uNyfD9jaCvTWsBAWtaw1Fr25OSxzv3psGMfBjT1z0Cc,328
24
- coderouter/data/model-capabilities.yaml,sha256=2ztY4PUbGN_cWG-UUB-iPy-baeVFnGV8OcZHJUfZE7c,19290
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
@@ -34,8 +34,9 @@ coderouter/guards/self_healing.py,sha256=_fT_EJvTTp5VSi-qAP93J_1LkgPK5jkzsyrUHdK
34
34
  coderouter/guards/tool_loop.py,sha256=EzeMcmU7BLeTW2jsRVevU81l5rhWcn1oUr7EpzgXjVM,15209
35
35
  coderouter/ingress/__init__.py,sha256=WQsCH2CGJCAhy0mS6GSEdeYZRkkQu2OHDsP4CJWTLug,155
36
36
  coderouter/ingress/anthropic_routes.py,sha256=It2f7XGe3fgKQX01J2F5JOCoZr96t_Tx_kY2om99MVo,16894
37
- coderouter/ingress/app.py,sha256=FBgn9Vujn-xesmeUzQcaPhtdvAYfs9cIQSMBgs0V_XI,12110
38
- coderouter/ingress/dashboard_routes.py,sha256=jVFc_4Q67YrP0VIppuQfBLnLvnvaCWJJ4z7aZsHmu1s,21822
37
+ coderouter/ingress/app.py,sha256=PcuTvUFNjr04EbsUOu8qdyKTdBzxkIJYB4xpz8dFfMo,12635
38
+ coderouter/ingress/dashboard_routes.py,sha256=rscoj89weHTfc8QmYk-fof-7062rhKFHVHRA8cDImDI,21931
39
+ coderouter/ingress/launcher_routes.py,sha256=T3uMmpUaFsc0k5jKyUIUPbSGCUBbzgIUMIPqEpNV3j4,45762
39
40
  coderouter/ingress/metrics_routes.py,sha256=M22dwOGn24P05Ge4W3c7d7mYytSGWjIR-pPSPOAiHJY,3965
40
41
  coderouter/ingress/openai_routes.py,sha256=Zw1efPw9DI6GgV8ZcLrzS6Cda0KLrFkKn2GBZWSe6Vo,6322
41
42
  coderouter/metrics/__init__.py,sha256=7Es351DPS7yLM0yVF_F0eesmiD83n7Zzhie44chht38,1465
@@ -49,20 +50,20 @@ coderouter/routing/__init__.py,sha256=g2vhutbozRx5QBThReqwPN3imk5qXdpDiaogILd3IR
49
50
  coderouter/routing/adaptive.py,sha256=G2o377twGSjbUh65wiIFx6klnpFGjsD_nI3oDvcBwhY,21257
50
51
  coderouter/routing/auto_router.py,sha256=4_sQR0ztSED9FgQSvQqgqSiydyQVY_qOSRvwyZ5BfRc,12909
51
52
  coderouter/routing/budget.py,sha256=A3_i44tmS3SrqVNnoGkLKMsiYwI_Ug6m5-3gitVoQSM,8452
52
- coderouter/routing/capability.py,sha256=ziIDuE5keH_jxYDlXSKufRVxxSYOAvUxJ6Rw5QkYDDU,18436
53
+ coderouter/routing/capability.py,sha256=DCDmiQ-78dkYonCM1WQBCMf6e6XI6VIv_cnuz9hdWT0,18443
53
54
  coderouter/routing/fallback.py,sha256=P3f6Yna1EGnLAT-ZS5ADrrZ-qRWc-M5xvwEuan4rmcs,104568
54
55
  coderouter/state/__init__.py,sha256=XoGcPmmBQSiZWML2S0juSveQ78xfhtdeCliNnVyzu7E,1088
55
56
  coderouter/state/audit_log.py,sha256=JwGd0OkkDlkh0Fdc6SmnuyViwKzEaFA7Ux_VqHzakWE,8358
56
57
  coderouter/state/replay.py,sha256=Z_YHKroTKZdrL8qObFxcoLOAQWWXZvXFdLfxzvBhEJg,11230
57
58
  coderouter/state/request_log.py,sha256=bR814sOn--U_sKVtbezwS3bkZaNt4FGnboX75_2LLiU,5908
58
59
  coderouter/state/store.py,sha256=h-rsMJq8GILsOfCP94nI40cuHaj4Vqycsm9UNN77REI,7445
59
- coderouter/state/suggest_rules.py,sha256=z9a9dTUm-l7mvRV48G7_tWtV2p24F0bQo2ijz8kf_2k,16674
60
+ coderouter/state/suggest_rules.py,sha256=FvdhEvao5NvdKp9zs8AkcoFKHY4yqqXY2HekvSjpDFA,16670
60
61
  coderouter/translation/__init__.py,sha256=PYXN7XVEwpG1uC8RLy6fvnGbzEZhhrEuUapH8IYOtG8,1788
61
62
  coderouter/translation/anthropic.py,sha256=JpvIWNXHUPVqOGvps7o_6ZADhXuJuvpU7RdMqQFtwwM,6421
62
63
  coderouter/translation/convert.py,sha256=-qyzFzmmr9hhQV6_Sg75kJnvCZvHe3n7vRdaZtk_JqQ,47269
63
64
  coderouter/translation/tool_repair.py,sha256=Ok2PF947Liegc5oaytfptv5MWMkpfJYQie-zdP1y3cY,9946
64
- coderouter_cli-2.4.0.dist-info/METADATA,sha256=nCXZKj29kM_o53ajIWgOI9PaGx_k4nBtIw-WvO_6MsU,10067
65
- coderouter_cli-2.4.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
66
- coderouter_cli-2.4.0.dist-info/entry_points.txt,sha256=-dnLfD1YZ2WjH2zSdNCvlO65wYltM9bsHt9Fhg3yGss,51
67
- coderouter_cli-2.4.0.dist-info/licenses/LICENSE,sha256=wkEzoR86jFw33jvfOHjULqmkGEfxTFMgMaJnpR8mPRw,1065
68
- coderouter_cli-2.4.0.dist-info/RECORD,,
65
+ coderouter_cli-2.5.1.dist-info/METADATA,sha256=3ltKBldo-TSDI97pvjmhs6esu7OwjZvsBtKD5Ll3F04,11521
66
+ coderouter_cli-2.5.1.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
67
+ coderouter_cli-2.5.1.dist-info/entry_points.txt,sha256=-dnLfD1YZ2WjH2zSdNCvlO65wYltM9bsHt9Fhg3yGss,51
68
+ coderouter_cli-2.5.1.dist-info/licenses/LICENSE,sha256=wkEzoR86jFw33jvfOHjULqmkGEfxTFMgMaJnpR8mPRw,1065
69
+ coderouter_cli-2.5.1.dist-info/RECORD,,