@peterwangze/claude-trigger-router 1.1.2 → 1.2.0
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.
- package/README.md +56 -3
- package/config/trigger.advanced.yaml +11 -0
- package/dist/cli.js +2124 -142
- package/dist/cli.js.map +4 -4
- package/docs/configuration-guide.md +33 -8
- package/docs/release-notes-v1.2.0.md +40 -0
- package/docs/releasing.md +2 -0
- package/docs/remote-client-guide.md +11 -12
- package/docs/server-maintainer-guide.md +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,6 +11,12 @@ Claude Trigger Router 是给 Claude Code 用的本地路由代理。
|
|
|
11
11
|
- 想在 Claude Code 外层增加配置校验、健康检查、治理观测和 UI 工作台
|
|
12
12
|
- 想从 `claude-code-router` 迁移到更清晰的 `Models + Router` 配置心智
|
|
13
13
|
|
|
14
|
+
## v1.2.0 发布定位
|
|
15
|
+
|
|
16
|
+
`v1.2.0` 是智能路由评测与治理增强版。它重点闭环多模型组合的可验证收益:用 `ctr eval --tasks` 固定任务契约,用 `ctr eval --run --models "sonnet;haiku"` 真实调用 CTR 跑多模型 A/B,再用 deterministic rubric 和质量维度解释不同模型在质量、速度、失败风险上的差异。
|
|
17
|
+
|
|
18
|
+
这个版本不把 CTR 宣称为完整云端平台或完整自动裁判系统。LLM 裁判、人工校准、UI benchmark 摘要、托管级一键部署、集群编排和更复杂模型池策略仍是后续演进事项。完整发布边界见 [docs/release-notes-v1.2.0.md](docs/release-notes-v1.2.0.md)。
|
|
19
|
+
|
|
14
20
|
## 功能概览
|
|
15
21
|
|
|
16
22
|
- **本地代理服务**:默认监听 `127.0.0.1:5678`,接管 Claude Code 上游请求。
|
|
@@ -19,6 +25,7 @@ Claude Trigger Router 是给 Claude Code 用的本地路由代理。
|
|
|
19
25
|
- **基础路由**:用 `Router.default`、`Router.think`、`Router.longContext` 等槽位指定不同任务的默认模型。
|
|
20
26
|
- **SmartRouter**:先用显式规则命中高确定性任务,也可以在规则未命中时让路由模型从候选模型中自动选择。
|
|
21
27
|
- **Governance 观测**:记录 trace、metrics、异常摘要和健康状态,帮助你理解路由选择和运行风险。
|
|
28
|
+
- **路由评测**:`ctr eval --tasks` 查看固定任务契约,`ctr eval --input results.json` 离线评分,`ctr eval --run --models "sonnet;haiku"` 真实调用 CTR 做多模型 A/B。
|
|
22
29
|
- **doctor 诊断**:检查配置、服务可启动性、鉴权安全状态、模型兼容策略和可选模型探测。
|
|
23
30
|
- **UI 工作台**:`ctr ui` 打开本地页面,查看服务上下文、远程状态、鉴权安全状态、配置草稿、compiled models、capability warnings、治理 trace、metrics 和 Health 摘要。
|
|
24
31
|
- **远程状态基础**:可配置 `Runtime.remote_service`,通过 `/api/remote-status` 查看远程服务健康、compiled model 摘要和治理告警摘要。默认用户不需要配置远程模式。
|
|
@@ -87,8 +94,9 @@ ctr start --daemon
|
|
|
87
94
|
- 如果配置了 `HOST: "0.0.0.0"` 但没有设置 `APIKEY` 或 active managed key,运行时会为了安全强制只监听 `127.0.0.1`。
|
|
88
95
|
- `APIKEY` 定位为 bootstrap/admin key;服务端启动后用它调用 `POST /api/auth/keys` 生成给远程使用者的 managed key。
|
|
89
96
|
- 远程日常 token 推荐同时授予 `client + read-only`:`client` 用于模型调用,`read-only` 用于 ready/status、compiled models 和 governance 观测接口。
|
|
90
|
-
- `admin` key 才能访问 `/ui
|
|
91
|
-
-
|
|
97
|
+
- `admin` key 才能访问 `/ui`、配置保存和 auth 管理。列表接口只返回 key 前后缀,secret 只在创建时返回一次。
|
|
98
|
+
- `operator` key 用于日常运维写操作,例如重启、治理指标快照/定时快照、异常阈值和归档删除;它不能读取配置、保存配置或管理 auth key。
|
|
99
|
+
- managed key 支持过期、撤销和 `quota.request_limit` / `quota.token_limit` / `quota.window_seconds`;窗口配额会持久化到本地状态文件,超限时 429 会返回 `quota.windowResetAt` 和 `Retry-After`。
|
|
92
100
|
- `GET /api/service-info` 会返回脱敏的 `auth` / `security` 摘要和 quota 用量;`GET /api/auth/audit` 可用 admin key 查看最近鉴权允许/拒绝记录。
|
|
93
101
|
- 公网入口仍建议放在 HTTPS 反向代理之后;远程浏览器访问 UI 时建议使用本地隧道、内网访问,或由反向代理处理认证。
|
|
94
102
|
|
|
@@ -295,6 +303,15 @@ Models:
|
|
|
295
303
|
supports_reasoning: false
|
|
296
304
|
supports_tools: false
|
|
297
305
|
supports_images: false
|
|
306
|
+
|
|
307
|
+
- id: long_context
|
|
308
|
+
api: "https://api.example.com/v1/messages"
|
|
309
|
+
key: "sk-xxx"
|
|
310
|
+
interface: "anthropic"
|
|
311
|
+
model: "vendor/long-context"
|
|
312
|
+
metadata:
|
|
313
|
+
context_window_tokens: 200000
|
|
314
|
+
safe_input_tokens: 180000
|
|
298
315
|
```
|
|
299
316
|
|
|
300
317
|
当前行为:
|
|
@@ -302,8 +319,10 @@ Models:
|
|
|
302
319
|
- `supports_reasoning: false`:忽略 `thinking`
|
|
303
320
|
- `supports_tools: false`:工具调用退化为文本表达
|
|
304
321
|
- `supports_images: false`:图片输入退化为文本描述
|
|
322
|
+
- `context_window_tokens`:模型总上下文窗口;路由会用 `input + max_tokens + thinking budget` 做容量保护
|
|
323
|
+
- `safe_input_tokens`:建议输入上限;当前请求超过已选模型上限时,会优先切到 `Router.longContext`
|
|
305
324
|
|
|
306
|
-
|
|
325
|
+
多模型上下文大小不一致时,建议给小窗口模型和长上下文模型都补上这两个字段,并配置 `Router.longContext`。不确定时可以先不配,等主路径跑通后再补;未声明上下文窗口的模型会保持原有兼容行为。
|
|
307
326
|
|
|
308
327
|
## UI 工作台
|
|
309
328
|
|
|
@@ -344,6 +363,37 @@ http://127.0.0.1:5678/ui
|
|
|
344
363
|
|
|
345
364
|
Health 摘要下方的 action 可以直接把 trace 表切到对应排查视图:cascade action 会筛选 `cascadeTriggered=true`,shadow action 会筛选 `shadowChecked=true`,其他 action 会回到近期 trace。
|
|
346
365
|
|
|
366
|
+
如果你想比较不同模型组合在固定任务上的质量和速度,可以先把多模型输出整理成 JSON,再运行离线评测:
|
|
367
|
+
|
|
368
|
+
```bash
|
|
369
|
+
ctr eval --tasks
|
|
370
|
+
ctr eval --input results.json
|
|
371
|
+
ctr eval --run --models "sonnet;haiku"
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
输入文件可以是数组,也可以是 `{ "results": [...] }`:
|
|
375
|
+
|
|
376
|
+
```json
|
|
377
|
+
[
|
|
378
|
+
{
|
|
379
|
+
"taskId": "coding_fix",
|
|
380
|
+
"model": "provider,model",
|
|
381
|
+
"output": "模型输出文本",
|
|
382
|
+
"latencyMs": 1200
|
|
383
|
+
}
|
|
384
|
+
]
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
`ctr eval --tasks` 会列出固定任务的 prompt、expected output、关键词、字符数、延迟预算、质量维度和 result template;加 `--json` 可导出给后续自动执行器或外部脚本。当前内置任务覆盖 quick reply、coding、architecture、long context、server auth/deployment 和 model pool incident。评测会输出按模型和任务聚合的 pass rate、quality、speed、latency、best run、维度均分和失败 findings;它是离线 deterministic rubric,不等同于完整人工或 LLM 裁判评测。
|
|
388
|
+
|
|
389
|
+
如果本机或远端 CTR 已启动,也可以显式自动跑固定任务集:
|
|
390
|
+
|
|
391
|
+
```bash
|
|
392
|
+
ctr eval --run --models "sonnet;haiku" --base-url http://127.0.0.1:5678 --api-key <client-or-bootstrap-key>
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
`--run` 会对每个模型逐个调用 `POST /v1/messages`,默认 `--concurrency 2`、`--timeout-ms 30000`、`--max-tokens 768`。多个模型用分号 `;` 分隔,因为 legacy 模型引用本身可能包含逗号。该模式会真实调用模型服务并消耗上游额度。
|
|
396
|
+
|
|
347
397
|
如果服务没有启动,`ctr ui` 会提示先运行:
|
|
348
398
|
|
|
349
399
|
```bash
|
|
@@ -428,6 +478,9 @@ GET /api/auth/audit
|
|
|
428
478
|
| `ctr stop` | 停止服务 |
|
|
429
479
|
| `ctr code` | 带 Trigger Router 环境启动 Claude Code |
|
|
430
480
|
| `ctr doctor` | 配置和服务诊断 |
|
|
481
|
+
| `ctr eval --tasks` | 查看固定评测任务、prompt 和 rubric |
|
|
482
|
+
| `ctr eval --input results.json` | 离线固定任务集评测 |
|
|
483
|
+
| `ctr eval --run --models "sonnet;haiku"` | 自动调用 CTR 后评测固定任务集 |
|
|
431
484
|
| `ctr ui` | 打开本地 UI 工作台 |
|
|
432
485
|
| `ctr version` | 查看版本 |
|
|
433
486
|
| `ctr upgrade` | 升级 |
|
|
@@ -25,12 +25,18 @@ Models:
|
|
|
25
25
|
interface: "openai"
|
|
26
26
|
model: "anthropic/claude-sonnet-4"
|
|
27
27
|
thinking: "auto"
|
|
28
|
+
metadata:
|
|
29
|
+
context_window_tokens: 200000
|
|
30
|
+
safe_input_tokens: 180000
|
|
28
31
|
|
|
29
32
|
- id: opus
|
|
30
33
|
api: "https://openrouter.ai/api/v1/chat/completions"
|
|
31
34
|
key: "sk-xxx"
|
|
32
35
|
interface: "openai"
|
|
33
36
|
model: "anthropic/claude-opus-4"
|
|
37
|
+
metadata:
|
|
38
|
+
context_window_tokens: 200000
|
|
39
|
+
safe_input_tokens: 180000
|
|
34
40
|
|
|
35
41
|
- id: deepseek_reasoner
|
|
36
42
|
api: "https://api.deepseek.com/chat/completions"
|
|
@@ -38,6 +44,9 @@ Models:
|
|
|
38
44
|
interface: "openai"
|
|
39
45
|
model: "deepseek-reasoner"
|
|
40
46
|
thinking: "high"
|
|
47
|
+
metadata:
|
|
48
|
+
context_window_tokens: 64000
|
|
49
|
+
safe_input_tokens: 56000
|
|
41
50
|
|
|
42
51
|
- id: ollama_qwen
|
|
43
52
|
api: "http://localhost:11434/v1/chat/completions"
|
|
@@ -140,6 +149,8 @@ SmartRouter:
|
|
|
140
149
|
session_ttl_ms: 3600000
|
|
141
150
|
fingerprint_similarity_threshold: 0.82
|
|
142
151
|
break_on_explicit_route: true
|
|
152
|
+
# Alignment 为显式开启项:Claude Code 已经携带会话上下文。
|
|
153
|
+
# 只有跨模型交接摘要值得额外一次调用成本时再开启。
|
|
143
154
|
alignment:
|
|
144
155
|
enabled: true
|
|
145
156
|
summarizer_model: "sonnet"
|