@peterwangze/claude-trigger-router 1.0.7 → 1.1.1
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 +263 -185
- package/dist/cli.js +843 -132
- package/dist/cli.js.map +4 -4
- package/package.json +74 -74
package/README.md
CHANGED
|
@@ -1,12 +1,66 @@
|
|
|
1
1
|
# Claude Trigger Router
|
|
2
2
|
|
|
3
|
-
Claude Code
|
|
3
|
+
Claude Trigger Router 是给 Claude Code 用的本地路由代理。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
你可以把它理解成 Claude Code 和上游模型之间的一层本地服务:Claude Code 仍然照常使用,但请求会先经过 `ctr`,再按你的配置转发到 OpenAI、Anthropic、OpenRouter、DeepSeek 或其他 OpenAI-compatible 接口。
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
-
|
|
7
|
+
它适合这些场景:
|
|
8
|
+
|
|
9
|
+
- 想用统一配置管理多个模型和供应商
|
|
10
|
+
- 想让日常任务走便宜/快的模型,复杂任务自动切到更强模型
|
|
11
|
+
- 想在 Claude Code 外层增加配置校验、健康检查、治理观测和 UI 工作台
|
|
12
|
+
- 想从 `claude-code-router` 迁移到更清晰的 `Models + Router` 配置心智
|
|
13
|
+
|
|
14
|
+
## 功能概览
|
|
15
|
+
|
|
16
|
+
- **本地代理服务**:默认监听 `127.0.0.1:5678`,接管 Claude Code 上游请求。
|
|
17
|
+
- **统一模型配置**:用 `Models[]` 描述模型接入项,路由直接引用 `Models[].id`。
|
|
18
|
+
- **协议兼容**:支持 `openai` / `anthropic` 两类接口协议,OpenRouter、DeepSeek 等 OpenAI-compatible 服务按 `openai` 配。
|
|
19
|
+
- **基础路由**:用 `Router.default`、`Router.think`、`Router.longContext` 等槽位指定不同任务的默认模型。
|
|
20
|
+
- **SmartRouter**:先用显式规则命中高确定性任务,也可以在规则未命中时让路由模型从候选模型中自动选择。
|
|
21
|
+
- **Governance 观测**:记录 trace、metrics、异常摘要和健康状态,帮助你理解路由选择和运行风险。
|
|
22
|
+
- **doctor 诊断**:检查配置、服务可启动性、模型兼容策略和可选模型探测。
|
|
23
|
+
- **UI 工作台**:`ctr ui` 打开本地页面,查看服务上下文、远程状态、配置草稿、compiled models、capability warnings、治理 trace、metrics 和 Health 摘要。
|
|
24
|
+
- **远程状态基础**:可配置 `Runtime.remote_service`,通过 `/api/remote-status` 查看远程服务健康、compiled model 摘要和治理告警摘要。默认用户不需要配置远程模式。
|
|
25
|
+
|
|
26
|
+
## 部署模式与边界
|
|
27
|
+
|
|
28
|
+
当前配置里可以用 `Runtime.mode` 表达部署心智:
|
|
29
|
+
|
|
30
|
+
- `local`:默认模式。你的机器上运行一个本地 `ctr` 服务,Claude Code 通过本地代理访问上游模型。
|
|
31
|
+
- `server`:把 `ctr` 作为远程路由服务运行。它暴露 `/api/service-info`、`/api/remote-status`、`/api/registration`、`/ui` 等服务端状态和管理入口。
|
|
32
|
+
- `cloud`:保留给托管/云端形态的配置语义;当前 npm 包仍按自托管进程运行,不包含托管控制面或集群编排。
|
|
33
|
+
|
|
34
|
+
已落地的远程能力聚焦在“远程服务连接配置、状态查询和注册摘要”。它不会默认替代本地代理主路径,也不会自动启用尚未实现的集群、节点调度或托管控制面。
|
|
35
|
+
|
|
36
|
+
如果要把当前机器作为远程 `server` 暴露给其他客户端,最小配置仍然是普通的 `Models + Router.default`,再加上服务端监听和鉴权:
|
|
37
|
+
|
|
38
|
+
```yaml
|
|
39
|
+
HOST: "0.0.0.0"
|
|
40
|
+
PORT: 5678
|
|
41
|
+
APIKEY: "change-me"
|
|
42
|
+
|
|
43
|
+
Runtime:
|
|
44
|
+
mode: "server"
|
|
45
|
+
|
|
46
|
+
Models:
|
|
47
|
+
- id: sonnet
|
|
48
|
+
api: "https://openrouter.ai/api/v1/chat/completions"
|
|
49
|
+
key: "sk-xxx"
|
|
50
|
+
interface: "openai"
|
|
51
|
+
model: "anthropic/claude-sonnet-4"
|
|
52
|
+
|
|
53
|
+
Router:
|
|
54
|
+
default: "sonnet"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
启动方式:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
ctr start --daemon
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
注意:如果配置了 `HOST: "0.0.0.0"` 但没有设置 `APIKEY`,运行时会为了安全强制只监听 `127.0.0.1`。远程客户端里的 `Runtime.remote_service.auth_token` 应该填写服务端的 `APIKEY`,并建议把公网入口放在 HTTPS 反向代理之后。启用 `APIKEY` 后 `/ui` 也会受认证保护;远程浏览器访问 UI 时建议使用本地隧道、内网访问,或由反向代理处理认证。
|
|
10
64
|
|
|
11
65
|
## 安装
|
|
12
66
|
|
|
@@ -14,45 +68,66 @@ Claude Code 的本地路由代理。
|
|
|
14
68
|
npm install -g @peterwangze/claude-trigger-router
|
|
15
69
|
```
|
|
16
70
|
|
|
17
|
-
|
|
71
|
+
安装后确认命令可用:
|
|
18
72
|
|
|
19
73
|
```bash
|
|
20
74
|
ctr version
|
|
21
75
|
ctr help
|
|
22
76
|
```
|
|
23
77
|
|
|
24
|
-
##
|
|
78
|
+
## 5 分钟跑起来
|
|
25
79
|
|
|
26
|
-
|
|
80
|
+
首次使用最推荐走交互式 setup:
|
|
27
81
|
|
|
28
82
|
```bash
|
|
29
83
|
ctr setup
|
|
30
84
|
```
|
|
31
85
|
|
|
32
|
-
`ctr setup`
|
|
86
|
+
`ctr setup` 会自动处理:
|
|
33
87
|
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
88
|
+
- 复用已有 `~/.claude-trigger-router/config.yaml`
|
|
89
|
+
- 探测并迁移旧 `claude-code-router` 配置
|
|
90
|
+
- 在没有可用配置时询问“本地使用”还是“连接远程服务”
|
|
91
|
+
- 本地使用时创建最小可用配置
|
|
92
|
+
- 连接远程服务时写入 `Runtime.remote_service`,不要求你先填写本地 provider/model
|
|
93
|
+
- 本地使用时,引导填写默认模型 ID、接口地址、API Key 和模型名
|
|
94
|
+
- 本地使用时,可选追加复杂任务模型,并生成 SmartRouter 起步模板
|
|
38
95
|
- 保存配置后启动本地服务
|
|
39
96
|
|
|
40
|
-
|
|
97
|
+
本地使用路径完成后按这个顺序使用:
|
|
41
98
|
|
|
42
|
-
|
|
99
|
+
```bash
|
|
100
|
+
ctr status
|
|
101
|
+
ctr code
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
`ctr code` 会带着本地代理环境启动 Claude Code。之后你在 Claude Code 里的请求会经过本地 Trigger Router。
|
|
105
|
+
|
|
106
|
+
如果 setup 选择的是“连接远程服务”,当前主要用于生成远程服务连接配置并检查远程状态;首次日常使用仍建议先跑通本地 `Models + Router.default` 主路径。
|
|
43
107
|
|
|
44
|
-
|
|
108
|
+
## 手动配置
|
|
109
|
+
|
|
110
|
+
如果你更喜欢手动编辑,可以先生成模板:
|
|
45
111
|
|
|
46
112
|
```bash
|
|
47
113
|
ctr init --force
|
|
48
114
|
```
|
|
49
115
|
|
|
50
|
-
|
|
116
|
+
配置文件位置:
|
|
117
|
+
|
|
118
|
+
```text
|
|
119
|
+
~/.claude-trigger-router/config.yaml
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
最小可用配置如下:
|
|
51
123
|
|
|
52
124
|
```yaml
|
|
53
125
|
HOST: "127.0.0.1"
|
|
54
126
|
PORT: 5678
|
|
55
127
|
|
|
128
|
+
LOG: true
|
|
129
|
+
LOG_LEVEL: "debug"
|
|
130
|
+
|
|
56
131
|
Models:
|
|
57
132
|
- id: sonnet
|
|
58
133
|
api: "https://openrouter.ai/api/v1/chat/completions"
|
|
@@ -65,50 +140,48 @@ Router:
|
|
|
65
140
|
default: "sonnet"
|
|
66
141
|
```
|
|
67
142
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
- 必要运行时字段已补齐
|
|
71
|
-
- `Models[0]` 已是可校验的最小接入结构
|
|
72
|
-
- `Router.default` 已指向默认模型 ID
|
|
73
|
-
- 修改最少必要字段后即可直接 `ctr start`
|
|
74
|
-
|
|
75
|
-
最少只需要关心这几个字段:
|
|
76
|
-
|
|
77
|
-
- `api`:目标接口地址
|
|
78
|
-
- `key`:API Key
|
|
79
|
-
- `interface`:接口类型,当前支持 `openai` / `anthropic`
|
|
80
|
-
- `thinking`:可选,支持的模型才需要配置
|
|
143
|
+
你第一次通常只需要改:
|
|
81
144
|
|
|
82
|
-
|
|
145
|
+
- `Models[0].api`:上游接口地址
|
|
146
|
+
- `Models[0].key`:API Key
|
|
147
|
+
- `Models[0].interface`:接口协议,通常是 `openai` 或 `anthropic`
|
|
148
|
+
- `Models[0].model`:上游真实模型名
|
|
149
|
+
- `Router.default`:默认使用哪个 `Models[].id`
|
|
83
150
|
|
|
84
|
-
|
|
151
|
+
改完后启动:
|
|
85
152
|
|
|
86
|
-
|
|
87
|
-
|
|
153
|
+
```bash
|
|
154
|
+
ctr start
|
|
155
|
+
ctr code
|
|
156
|
+
```
|
|
88
157
|
|
|
89
|
-
|
|
158
|
+
后台运行:
|
|
90
159
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
160
|
+
```bash
|
|
161
|
+
ctr start --daemon
|
|
162
|
+
ctr status
|
|
163
|
+
ctr code
|
|
164
|
+
```
|
|
94
165
|
|
|
95
|
-
##
|
|
166
|
+
## `interface` 怎么选
|
|
96
167
|
|
|
97
|
-
|
|
168
|
+
`interface` 表示上游接口协议,不是厂商名。
|
|
98
169
|
|
|
99
|
-
|
|
100
|
-
- 代码审查
|
|
101
|
-
- 长文档评审
|
|
102
|
-
- 复杂推理
|
|
170
|
+
常见写法:
|
|
103
171
|
|
|
104
|
-
|
|
172
|
+
| 服务 | interface |
|
|
173
|
+
|---|---|
|
|
174
|
+
| OpenAI 官方 | `openai` |
|
|
175
|
+
| Anthropic 官方 | `anthropic` |
|
|
176
|
+
| OpenRouter | `openai` |
|
|
177
|
+
| DeepSeek | `openai` |
|
|
178
|
+
| 其他 OpenAI-compatible 服务 | `openai` |
|
|
105
179
|
|
|
106
|
-
|
|
180
|
+
路由层会负责请求格式转换,你不需要自己按不同供应商手写消息体。
|
|
107
181
|
|
|
108
|
-
|
|
109
|
-
- 命中显式规则的请求,优先切到规则指定模型
|
|
182
|
+
## 配多个模型
|
|
110
183
|
|
|
111
|
-
|
|
184
|
+
每个 `Models[]` 项都是一个可被路由引用的模型接入项:
|
|
112
185
|
|
|
113
186
|
```yaml
|
|
114
187
|
Models:
|
|
@@ -118,12 +191,25 @@ Models:
|
|
|
118
191
|
interface: "openai"
|
|
119
192
|
model: "anthropic/claude-sonnet-4"
|
|
120
193
|
|
|
121
|
-
- id:
|
|
122
|
-
api: "https://
|
|
194
|
+
- id: reasoner
|
|
195
|
+
api: "https://api.deepseek.com/chat/completions"
|
|
123
196
|
key: "sk-xxx"
|
|
124
197
|
interface: "openai"
|
|
125
|
-
model: "
|
|
198
|
+
model: "deepseek-reasoner"
|
|
199
|
+
thinking: "high"
|
|
200
|
+
|
|
201
|
+
Router:
|
|
202
|
+
default: "sonnet"
|
|
203
|
+
think: "reasoner"
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
推荐所有路由字段都引用 `Models[].id`,比如上面的 `sonnet`、`reasoner`。
|
|
207
|
+
|
|
208
|
+
## 显式规则路由
|
|
126
209
|
|
|
210
|
+
适合能用关键词稳定识别的任务,例如架构设计、代码审查、长文档评审。
|
|
211
|
+
|
|
212
|
+
```yaml
|
|
127
213
|
Router:
|
|
128
214
|
default: "sonnet"
|
|
129
215
|
|
|
@@ -137,45 +223,16 @@ SmartRouter:
|
|
|
137
223
|
patterns:
|
|
138
224
|
- type: exact
|
|
139
225
|
keywords: ["架构设计", "system design"]
|
|
140
|
-
model: "
|
|
226
|
+
model: "reasoner"
|
|
141
227
|
```
|
|
142
228
|
|
|
143
|
-
|
|
229
|
+
规则命中时优先使用规则指定模型;没命中时回到 `Router.default`。
|
|
144
230
|
|
|
145
|
-
|
|
231
|
+
## 智能模型选择
|
|
146
232
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
- 通用编程 vs 深度推理
|
|
150
|
-
- 日常修复 vs 架构设计
|
|
151
|
-
- 常规回答 vs 长上下文分析
|
|
152
|
-
|
|
153
|
-
你提供一个路由模型和一组候选模型,路由器会在规则未命中时,从候选模型里自动挑一个更合适的目标。
|
|
154
|
-
|
|
155
|
-
- 规则负责稳定命中
|
|
156
|
-
- 智能兜底负责补上规则没覆盖到的模糊任务
|
|
157
|
-
|
|
158
|
-
示例:
|
|
233
|
+
如果任务边界比较模糊,可以让 SmartRouter 用一个路由模型从候选模型中选择:
|
|
159
234
|
|
|
160
235
|
```yaml
|
|
161
|
-
Models:
|
|
162
|
-
- id: sonnet
|
|
163
|
-
api: "https://openrouter.ai/api/v1/chat/completions"
|
|
164
|
-
key: "sk-xxx"
|
|
165
|
-
interface: "openai"
|
|
166
|
-
model: "anthropic/claude-sonnet-4"
|
|
167
|
-
|
|
168
|
-
- id: reasoner
|
|
169
|
-
api: "https://api.deepseek.com/chat/completions"
|
|
170
|
-
key: "sk-xxx"
|
|
171
|
-
interface: "openai"
|
|
172
|
-
model: "deepseek-reasoner"
|
|
173
|
-
thinking: "high"
|
|
174
|
-
|
|
175
|
-
Router:
|
|
176
|
-
default: "sonnet"
|
|
177
|
-
think: "reasoner"
|
|
178
|
-
|
|
179
236
|
SmartRouter:
|
|
180
237
|
enabled: true
|
|
181
238
|
router_model: "sonnet"
|
|
@@ -183,164 +240,185 @@ SmartRouter:
|
|
|
183
240
|
- model: "sonnet"
|
|
184
241
|
description: "通用编程、代码生成、日常调试"
|
|
185
242
|
- model: "reasoner"
|
|
186
|
-
description: "
|
|
243
|
+
description: "复杂推理、严谨分析、架构设计"
|
|
187
244
|
```
|
|
188
245
|
|
|
189
|
-
|
|
246
|
+
推荐心智:
|
|
190
247
|
|
|
191
248
|
- `Router.default` 负责默认去向
|
|
192
|
-
-
|
|
193
|
-
-
|
|
249
|
+
- `SmartRouter.rules` 负责高确定性任务
|
|
250
|
+
- `SmartRouter.candidates` 负责规则未命中时的智能兜底
|
|
194
251
|
|
|
195
|
-
|
|
252
|
+
## capability hint
|
|
196
253
|
|
|
197
|
-
|
|
198
|
-
- 再让智能兜底处理剩余的模糊任务
|
|
254
|
+
如果你明确知道某个模型能力受限,可以配置 `metadata`:
|
|
199
255
|
|
|
200
|
-
|
|
256
|
+
```yaml
|
|
257
|
+
Models:
|
|
258
|
+
- id: text_only
|
|
259
|
+
api: "https://api.example.com/v1/chat/completions"
|
|
260
|
+
key: "sk-xxx"
|
|
261
|
+
interface: "openai"
|
|
262
|
+
model: "vendor/text-only"
|
|
263
|
+
metadata:
|
|
264
|
+
supports_reasoning: false
|
|
265
|
+
supports_tools: false
|
|
266
|
+
supports_images: false
|
|
267
|
+
```
|
|
201
268
|
|
|
202
|
-
|
|
269
|
+
当前行为:
|
|
203
270
|
|
|
204
|
-
|
|
271
|
+
- `supports_reasoning: false`:忽略 `thinking`
|
|
272
|
+
- `supports_tools: false`:工具调用退化为文本表达
|
|
273
|
+
- `supports_images: false`:图片输入退化为文本描述
|
|
205
274
|
|
|
206
|
-
|
|
207
|
-
- Anthropic 官方:`interface: anthropic`
|
|
208
|
-
- OpenRouter:`interface: openai`
|
|
209
|
-
- DeepSeek 兼容接口:`interface: openai`
|
|
210
|
-
- 其他 OpenAI-compatible 服务:`interface: openai`
|
|
275
|
+
不确定时可以先不配,等主路径跑通后再补。
|
|
211
276
|
|
|
212
|
-
##
|
|
277
|
+
## UI 工作台
|
|
213
278
|
|
|
214
|
-
|
|
279
|
+
启动服务后运行:
|
|
215
280
|
|
|
216
281
|
```bash
|
|
217
|
-
ctr
|
|
218
|
-
ctr init
|
|
282
|
+
ctr ui
|
|
219
283
|
```
|
|
220
284
|
|
|
221
|
-
|
|
285
|
+
默认打开:
|
|
222
286
|
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
ctr start --daemon
|
|
226
|
-
ctr status
|
|
227
|
-
ctr restart
|
|
228
|
-
ctr restart --daemon
|
|
229
|
-
ctr stop
|
|
287
|
+
```text
|
|
288
|
+
http://127.0.0.1:5678/ui
|
|
230
289
|
```
|
|
231
290
|
|
|
232
|
-
|
|
291
|
+
当前 UI 分成两层:
|
|
233
292
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
```
|
|
293
|
+
- **使用者工作台**:查看和编辑配置草稿、模型、路由、compiled preview 和保存结果。
|
|
294
|
+
- **维护者工作台**:查看 Governance trace、Health 摘要、metrics、异常阈值、快照和归档。
|
|
237
295
|
|
|
238
|
-
|
|
296
|
+
首屏状态区会显示:
|
|
239
297
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
ctr ui
|
|
245
|
-
```
|
|
298
|
+
- 本地服务 ready 状态、端口、模型数和 `Router.default`
|
|
299
|
+
- `Runtime.mode` 与当前服务角色
|
|
300
|
+
- 远程服务状态摘要
|
|
301
|
+
- Registration 模型和上游服务摘要
|
|
246
302
|
|
|
247
|
-
|
|
303
|
+
维护者工作台里的 Health 摘要来自 `GET /api/governance/health`,用于快速判断近期治理状态:
|
|
248
304
|
|
|
249
|
-
|
|
305
|
+
- `idle`:还没有 trace 样本,先让请求经过路由服务
|
|
306
|
+
- `healthy`:当前窗口没有治理告警
|
|
307
|
+
- `watch`:存在 warning,需要关注级联、影子监督或延迟趋势
|
|
308
|
+
- `critical`:存在 critical 告警,应优先查看异常列表和最近 trace
|
|
250
309
|
|
|
251
|
-
|
|
252
|
-
ctr doctor
|
|
253
|
-
```
|
|
310
|
+
同一份摘要也会出现在 `GET /api/governance/metrics` 的 `health` 字段里。异常数量按总告警数展示,并同时给出 critical / warning 明细,避免只看到单类告警而低估风险。
|
|
254
311
|
|
|
255
|
-
`
|
|
312
|
+
Health 摘要下方的 action 可以直接把 trace 表切到对应排查视图:cascade action 会筛选 `cascadeTriggered=true`,shadow action 会筛选 `shadowChecked=true`,其他 action 会回到近期 trace。
|
|
256
313
|
|
|
257
|
-
|
|
258
|
-
- 自动修复低风险、可确定补全的结构问题
|
|
259
|
-
- 确认修复后的配置是否还能通过本地校验并让服务启动
|
|
260
|
-
- 用可理解的说明展示当前模型的兼容策略与请求编译方式
|
|
261
|
-
- 预览 capability 配置可能触发的运行时降级,例如 thinking 忽略、工具降级为文本、图片降级为文本
|
|
262
|
-
- 在征得你同意后,对配置中的模型发送最小探测请求,确认模型是否真实可用
|
|
263
|
-
|
|
264
|
-
其中模型探测会消耗少量额度,所以 doctor 会先征求你的确认。探测失败时,doctor 会优先给出面向用户的失败说明和处理建议,再保留原始远端报错供继续排查。
|
|
265
|
-
|
|
266
|
-
## 推荐使用顺序
|
|
267
|
-
|
|
268
|
-
首次使用:
|
|
314
|
+
如果服务没有启动,`ctr ui` 会提示先运行:
|
|
269
315
|
|
|
270
316
|
```bash
|
|
271
|
-
ctr
|
|
272
|
-
ctr version
|
|
273
|
-
ctr setup
|
|
274
|
-
ctr status
|
|
275
|
-
ctr code
|
|
317
|
+
ctr start
|
|
276
318
|
```
|
|
277
319
|
|
|
278
|
-
|
|
320
|
+
或:
|
|
279
321
|
|
|
280
322
|
```bash
|
|
281
|
-
ctr
|
|
282
|
-
ctr start
|
|
283
|
-
ctr code
|
|
323
|
+
ctr start --daemon
|
|
284
324
|
```
|
|
285
325
|
|
|
286
|
-
|
|
326
|
+
## doctor 诊断
|
|
327
|
+
|
|
328
|
+
配置不确定、服务起不来、模型不可用、迁移后想体检,都可以运行:
|
|
287
329
|
|
|
288
330
|
```bash
|
|
289
|
-
ctr
|
|
290
|
-
ctr status
|
|
291
|
-
ctr ui
|
|
292
|
-
ctr code
|
|
331
|
+
ctr doctor
|
|
293
332
|
```
|
|
294
333
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
- `ctr restart` 当前默认按后台模式重启
|
|
298
|
-
- `ctr restart --daemon` 只是更显式的等价写法
|
|
334
|
+
它会检查:
|
|
299
335
|
|
|
300
|
-
|
|
336
|
+
- 配置文件是否存在或能否解析
|
|
337
|
+
- 缺失字段和低风险结构问题
|
|
338
|
+
- 配置是否能通过本地校验
|
|
339
|
+
- 服务是否可启动
|
|
340
|
+
- 当前服务上下文:`local` / `server` / `cloud`
|
|
341
|
+
- 如果启用了 `Runtime.remote_service`,会单独检查远程服务可达和 ready 状态
|
|
342
|
+
- 模型兼容策略和请求编译方式
|
|
343
|
+
- capability hint 可能触发的运行时降级
|
|
344
|
+
- 在你确认后,对模型发送最小探测请求
|
|
301
345
|
|
|
302
|
-
|
|
346
|
+
模型探测会消耗少量额度,所以 doctor 会先征求确认。如果当前是远程客户端配置且没有本地 `Models`,doctor 会跳过本地模型探测。
|
|
303
347
|
|
|
304
|
-
|
|
305
|
-
- 会优先提供迁移选项
|
|
306
|
-
- 迁移后的新配置会落到 `~/.claude-trigger-router/config.yaml`
|
|
348
|
+
## 远程服务状态
|
|
307
349
|
|
|
308
|
-
|
|
350
|
+
默认情况下,你只需要本地模式,不需要配置远程服务。
|
|
309
351
|
|
|
310
|
-
|
|
311
|
-
- 路由规则直接引用 `Models[].id`
|
|
312
|
-
- 不再让用户到处手写 `provider,model`
|
|
352
|
+
如果你已经有一个远程 Trigger Router 服务,可以通过 `ctr setup` 选择“连接远程服务”,或手动配置远程目标:
|
|
313
353
|
|
|
314
|
-
|
|
354
|
+
```yaml
|
|
355
|
+
Runtime:
|
|
356
|
+
mode: "local"
|
|
357
|
+
remote_service:
|
|
358
|
+
enabled: true
|
|
359
|
+
base_url: "https://router.example.com"
|
|
360
|
+
auth_token: "${CTR_REMOTE_AUTH_TOKEN}" # 对应远程服务端 APIKEY
|
|
361
|
+
|
|
362
|
+
Router: {}
|
|
363
|
+
```
|
|
315
364
|
|
|
316
|
-
|
|
365
|
+
启用后,服务状态接口会返回远程健康、compiled model 摘要和治理告警摘要:
|
|
317
366
|
|
|
318
|
-
```
|
|
319
|
-
|
|
367
|
+
```text
|
|
368
|
+
GET /api/remote-status
|
|
320
369
|
```
|
|
321
370
|
|
|
322
|
-
|
|
371
|
+
相关服务端状态接口:
|
|
323
372
|
|
|
324
373
|
```text
|
|
325
|
-
|
|
374
|
+
GET /api/service-info
|
|
375
|
+
GET /api/remote-status
|
|
376
|
+
GET /api/registration
|
|
326
377
|
```
|
|
327
378
|
|
|
328
|
-
|
|
379
|
+
这条能力当前作为远程接入基础 contract 提供,用于服务发现、状态检查和注册摘要;它不表示已经自动把 Claude Code 请求转发到远端。首次使用仍建议从本地 `ctr setup -> ctr start -> ctr code` 开始。
|
|
329
380
|
|
|
330
|
-
|
|
381
|
+
## 常用命令
|
|
331
382
|
|
|
332
|
-
|
|
383
|
+
| 命令 | 用途 |
|
|
384
|
+
|---|---|
|
|
385
|
+
| `ctr setup` | 首次配置、复用、迁移、修复配置 |
|
|
386
|
+
| `ctr init --force` | 生成最小配置模板 |
|
|
387
|
+
| `ctr start` | 前台启动本地服务 |
|
|
388
|
+
| `ctr start --daemon` | 后台启动本地服务 |
|
|
389
|
+
| `ctr status` | 查看服务状态 |
|
|
390
|
+
| `ctr restart` | 重启服务,默认按后台模式 |
|
|
391
|
+
| `ctr stop` | 停止服务 |
|
|
392
|
+
| `ctr code` | 带 Trigger Router 环境启动 Claude Code |
|
|
393
|
+
| `ctr doctor` | 配置和服务诊断 |
|
|
394
|
+
| `ctr ui` | 打开本地 UI 工作台 |
|
|
395
|
+
| `ctr version` | 查看版本 |
|
|
396
|
+
| `ctr upgrade` | 升级 |
|
|
333
397
|
|
|
334
|
-
|
|
398
|
+
## 旧配置迁移
|
|
399
|
+
|
|
400
|
+
如果你之前使用 `claude-code-router`:
|
|
335
401
|
|
|
336
|
-
|
|
402
|
+
```bash
|
|
403
|
+
ctr setup
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
setup 会自动探测旧配置,并优先提供迁移选项。迁移后的配置会写入:
|
|
407
|
+
|
|
408
|
+
```text
|
|
409
|
+
~/.claude-trigger-router/config.yaml
|
|
410
|
+
```
|
|
337
411
|
|
|
338
|
-
|
|
412
|
+
迁移后的推荐心智是:
|
|
339
413
|
|
|
340
|
-
- `
|
|
414
|
+
- 每个模型写成一个 `Models[]` 项
|
|
415
|
+
- 路由引用 `Models[].id`
|
|
416
|
+
- 少写旧式 `provider,model`
|
|
341
417
|
|
|
342
|
-
|
|
418
|
+
## 更多示例和文档
|
|
343
419
|
|
|
344
|
-
-
|
|
345
|
-
-
|
|
346
|
-
-
|
|
420
|
+
- 最小示例:`config/trigger.example.yaml`
|
|
421
|
+
- 高级示例:`config/trigger.advanced.yaml`
|
|
422
|
+
- 配置细节:`docs/configuration-guide.md`
|
|
423
|
+
- Models 迁移:`docs/models-migration-guide.md`
|
|
424
|
+
- 发布验证:`docs/releasing.md`
|