@jsonstudio/rcc 0.89.1552 → 0.89.1562
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/configsamples/provider/tabglm/config.v1.json +9 -14
- package/dist/build-info.js +3 -3
- package/dist/build-info.js.map +1 -1
- package/dist/cli/commands/camoufox.d.ts +34 -0
- package/dist/cli/commands/camoufox.js +107 -0
- package/dist/cli/commands/camoufox.js.map +1 -0
- package/dist/cli/commands/restart.js +3 -3
- package/dist/cli/commands/restart.js.map +1 -1
- package/dist/cli/commands/start.js +6 -5
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/register/camoufox-command.d.ts +20 -0
- package/dist/cli/register/camoufox-command.js +22 -0
- package/dist/cli/register/camoufox-command.js.map +1 -0
- package/dist/cli.js +11 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/validate.js +1 -1
- package/dist/commands/validate.js.map +1 -1
- package/dist/docs/daemon-admin-ui.html +144 -1
- package/dist/manager/modules/quota/provider-quota-daemon.events.js +115 -0
- package/dist/manager/modules/quota/provider-quota-daemon.events.js.map +1 -1
- package/dist/manager/modules/quota/provider-quota-daemon.js +1 -0
- package/dist/manager/modules/quota/provider-quota-daemon.js.map +1 -1
- package/dist/manager/quota/provider-quota-center.d.ts +7 -1
- package/dist/manager/quota/provider-quota-center.js +5 -1
- package/dist/manager/quota/provider-quota-center.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/quota-handler.js +1 -0
- package/dist/server/runtime/http-server/daemon-admin/quota-handler.js.map +1 -1
- package/dist/server/runtime/http-server/request-executor.js +42 -7
- package/dist/server/runtime/http-server/request-executor.js.map +1 -1
- package/dist/token-daemon/server-utils.js +1 -1
- package/dist/token-daemon/server-utils.js.map +1 -1
- package/dist/tools/provider-update/fetch-models.js +0 -1
- package/dist/tools/provider-update/fetch-models.js.map +1 -1
- package/dist/tools/provider-update/key-probe.js +0 -1
- package/dist/tools/provider-update/key-probe.js.map +1 -1
- package/docs/PROVIDERS_BUILTIN.md +3 -2
- package/docs/daemon-admin-ui.html +144 -1
- package/docs/providers/antigravity-fingerprint-ua-warmup.md +25 -0
- package/docs/providers/tabglm-claude-code-compat.md +31 -0
- package/docs/stop-message-auto.md +1 -0
- package/package.json +4 -5
- package/scripts/responses-compare-server.mjs +1 -1
|
@@ -63,6 +63,31 @@ RouteCodex 的版本号来源(从高到低):
|
|
|
63
63
|
2. 对被标记需要 reauth 的 alias 重新 OAuth:
|
|
64
64
|
- `routecodex oauth antigravity-auto <token-selector-or-path>`
|
|
65
65
|
- 或批量:`routecodex oauth reauth-required`
|
|
66
|
+
3. 如果 Google 提示需要二次验证(账户风控页),用对应 alias 的 profile 打开浏览器完成验证(“养号/解封”):
|
|
67
|
+
- `rcc camoufox ~/.routecodex/auth/antigravity-oauth-<alias>.json --url '<verify_url>'`
|
|
68
|
+
|
|
69
|
+
> 关键点:必须用 **同一个 alias 的 Camoufox profile** 打开验证页,否则容易造成“验证通过但指纹漂移 → 继续 403”。
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 1.1) 多账号并发:为什么会“一个号 403 牵连别的号”
|
|
74
|
+
|
|
75
|
+
### 现象
|
|
76
|
+
- 多个 Antigravity alias 同时跑(或者同一会话内快速切换 alias)时,某个 alias 触发 `verify your account` 之后,其他 alias 也开始陆续 403。
|
|
77
|
+
|
|
78
|
+
### 我们确认过的根因(与 Antigravity-Manager 行为对齐)
|
|
79
|
+
- Antigravity/Cloud Code Assist **对同一会话指纹(sessionId)跨账号切换极敏感**:同一个会话如果在短时间内换 OAuth cookie / device profile,极容易触发 Google 风控。
|
|
80
|
+
- Antigravity-Manager 的策略是 **session_id → account 绑定**:同一 session 不随便换账号;账号需要验证就让它失败并提示用户完成验证。
|
|
81
|
+
|
|
82
|
+
### RouteCodex 的修复策略(现在的默认行为)
|
|
83
|
+
- 当某个 Antigravity alias 命中 **403 verify** 时:
|
|
84
|
+
- Virtual Router 会将该 alias(同 runtimeKey 下的所有模型 key)立即标记为 `auth_verify` 冷却(默认 24h,可通过 OAuth 重新恢复)。
|
|
85
|
+
- 同一次请求的重试阶段,会 **避免命中任何 Antigravity alias**,只尝试非 Antigravity 的兜底池(例如 `gemini-cli`)。
|
|
86
|
+
- 当某个 Antigravity alias 命中 **429** 时:
|
|
87
|
+
- 重试阶段同样 **不在 Antigravity 内换号**,只走非 Antigravity 兜底(避免“429→换号→全家 403”)。
|
|
88
|
+
- 具体“换号”交给后续请求 + Virtual Router 健康/冷却机制(而不是在单次请求里瞬间轮询所有账号)。
|
|
89
|
+
|
|
90
|
+
> 经验:这条策略会让“单次请求”的 fallback 更克制,但能显著降低“多账号一起用 → 全部触发二次验证”的概率。
|
|
66
91
|
|
|
67
92
|
---
|
|
68
93
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# TabGLM(Anthropic)Claude Code 对齐(System Prompt compat)
|
|
2
|
+
|
|
3
|
+
tabglm 的 Anthropic 入口会对请求做“官方客户端”校验;当 `system` prompt 不符合 Claude Code 官方格式时,会返回:
|
|
4
|
+
|
|
5
|
+
- `HTTP 403` + `验证失败原因:System Prompt 不匹配 Claude Code 官方格式`
|
|
6
|
+
|
|
7
|
+
本仓库的修复原则是:**Host/CLI 不做硬编码**,通过 llmswitch-core 的 `compatibilityProfile` 在 compat 层完成对齐。
|
|
8
|
+
|
|
9
|
+
## 启用方式(推荐:只改 config)
|
|
10
|
+
|
|
11
|
+
在 `~/.routecodex/config.json`(或你的自定义 config)里为 tabglm provider 开启 compat profile:
|
|
12
|
+
|
|
13
|
+
- `virtualrouter.providers.tabglm.compatibilityProfile = "chat:claude-code"`
|
|
14
|
+
|
|
15
|
+
示例可参考:`configsamples/provider/tabglm/config.v1.json`
|
|
16
|
+
|
|
17
|
+
## compat 做了什么
|
|
18
|
+
|
|
19
|
+
当 `compatibilityProfile = chat:claude-code` 且协议为 `anthropic-messages` 时:
|
|
20
|
+
|
|
21
|
+
- 强制将请求体中的 `system` 设置为 Claude Code 官方字符串:
|
|
22
|
+
- `You are Claude Code, Anthropic's official CLI for Claude.`
|
|
23
|
+
- 可选:将原有 `system` 内容移入 `messages` 的开头(默认开启),避免丢失原始指令内容。
|
|
24
|
+
|
|
25
|
+
## 快照验证(black-box)
|
|
26
|
+
|
|
27
|
+
开启 `routecodex start --snap` 后,检查对应请求的 `provider-request.json`:
|
|
28
|
+
|
|
29
|
+
- `body.system` 是否为上述官方字符串
|
|
30
|
+
- 旧的 system 是否被移动到了 `body.messages[0].content` 前缀(如果原本存在)
|
|
31
|
+
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
- 删除上述所有字段。
|
|
45
45
|
- **会话标识要求**
|
|
46
46
|
- sticky state 依赖 `sessionId` / `conversationId`。`/v1/chat` 与 `/v1/responses` 默认通过请求头即可提供;`/v1/messages` 需要确保请求体中的 `metadata.user_id` 含有 `session_<uuid>` 片段(Claude/Antigravity 默认行为)。llmswitch-core 会在缺少 header/metadata.sessionId 时回退解析 `metadata.__raw_request_body.metadata.user_id`,自动恢复 sessionId 并写入 sticky 文件。若缺失上述字段,stopMessage 无法跨请求记忆次数。
|
|
47
|
+
- compaction 保护:当捕获到的上一跳请求被判定为“compaction 请求”时,stopMessage 不会触发(避免 compaction 流程被 stopMessage 反复续写干扰)。判定逻辑只对 **payload 起始处**的 sentinel 生效;在对话历史中粘贴包含 “Handoff Summary …” 等字样的文本,不应再误伤 stopMessage。
|
|
47
48
|
|
|
48
49
|
## 2. 路由层解析与指令清理
|
|
49
50
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsonstudio/rcc",
|
|
3
|
-
"version": "0.89.
|
|
3
|
+
"version": "0.89.1562",
|
|
4
4
|
"description": "Multi-provider OpenAI proxy server with anthropic/responses/chat support (release)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -45,8 +45,8 @@
|
|
|
45
45
|
"test:ci": "npm run test:ci:jest && npm run mock:regressions && npm run test:blackbox-antigravity-parity",
|
|
46
46
|
"test:ci:coverage": "npm run test:ci:jest:coverage",
|
|
47
47
|
"verify:repo-sanity": "node scripts/ci/repo-sanity.mjs",
|
|
48
|
-
"test:routing-instructions": "npm run jest:run -- --runTestsByPath tests/server/runtime/request-executor.single-attempt.spec.ts tests/server/runtime/executor-provider.retryable.spec.ts tests/providers/auth/tokenfile-auth.iflow.spec.ts tests/providers/auth/antigravity-user-agent.unit.test.ts tests/providers/auth/antigravity-fingerprint.unit.test.ts tests/providers/auth/antigravity-warmup.unit.test.ts tests/providers/core/runtime/gemini-cli-http-provider.unit.test.ts tests/providers/core/runtime/antigravity-quota-client.unit.test.ts tests/manager/quota/provider-quota-center.spec.ts tests/manager/quota/provider-quota-store.spec.ts tests/manager/quota/quota-manager-refresh.spec.ts tests/manager/quota/provider-quota-daemon-module.spec.ts tests/manager/quota/provider-key-normalization.spec.ts tests/server/http-server/daemon-admin.e2e.spec.ts tests/server/http-server/quota-view-injection.spec.ts tests/server/http-server/quota-refresh-triggers.e2e.spec.ts tests/server/http-server/hub-policy-injection.spec.ts tests/server/http-server/session-header-injection.spec.ts tests/server/http-server/session-dir.spec.ts tests/server/handlers/sse-timeout.spec.ts tests/utils/is-direct-execution.test.ts tests/utils/windows-netstat.test.ts tests/servertool/virtual-router-context-fallback.spec.ts tests/servertool/virtual-router-longcontext-fallback.spec.ts tests/servertool/virtual-router-series-cooldown.spec.ts tests/servertool/recursive-detection-guard.spec.ts tests/servertool/routing-instructions.spec.ts tests/servertool/stop-message-auto.spec.ts tests/servertool/stopmessage-session-scope.spec.ts tests/servertool/stopmessage-anthropic-stop-sequence.spec.ts tests/servertool/servertool-progress-logging.spec.ts tests/servertool/servertool-clock.spec.ts tests/sharedmodule/mcp-tool-descriptions.spec.ts tests/unified-hub/hub-v1-single-path-imports.spec.ts",
|
|
49
|
-
"test:cli": "npm run jest:run -- --runTestsByPath tests/cli/clean-command.spec.ts tests/cli/code-command.spec.ts tests/cli/config-command.spec.ts tests/cli/env-command.spec.ts tests/cli/env-output.spec.ts tests/cli/examples-command.spec.ts tests/cli/port-command.spec.ts tests/cli/port-utils.spec.ts tests/cli/restart-command.spec.ts tests/cli/smoke.spec.ts tests/cli/start-command.spec.ts tests/cli/status-command.spec.ts tests/cli/stop-command.spec.ts",
|
|
48
|
+
"test:routing-instructions": "npm run jest:run -- --runTestsByPath tests/server/runtime/request-executor.single-attempt.spec.ts tests/server/runtime/executor-provider.retryable.spec.ts tests/providers/auth/tokenfile-auth.iflow.spec.ts tests/providers/auth/antigravity-user-agent.unit.test.ts tests/providers/auth/antigravity-fingerprint.unit.test.ts tests/providers/auth/antigravity-warmup.unit.test.ts tests/providers/core/runtime/gemini-cli-http-provider.unit.test.ts tests/providers/core/runtime/antigravity-quota-client.unit.test.ts tests/manager/quota/provider-quota-center.spec.ts tests/manager/quota/provider-quota-store.spec.ts tests/manager/quota/quota-manager-refresh.spec.ts tests/manager/quota/provider-quota-daemon-module.spec.ts tests/manager/quota/provider-key-normalization.spec.ts tests/server/http-server/daemon-admin.e2e.spec.ts tests/server/http-server/quota-view-injection.spec.ts tests/server/http-server/quota-refresh-triggers.e2e.spec.ts tests/server/http-server/hub-policy-injection.spec.ts tests/server/http-server/session-header-injection.spec.ts tests/server/http-server/session-dir.spec.ts tests/server/handlers/sse-timeout.spec.ts tests/utils/is-direct-execution.test.ts tests/utils/windows-netstat.test.ts tests/servertool/virtual-router-context-fallback.spec.ts tests/servertool/virtual-router-longcontext-fallback.spec.ts tests/servertool/virtual-router-series-cooldown.spec.ts tests/servertool/recursive-detection-guard.spec.ts tests/servertool/routing-instructions.spec.ts tests/servertool/stop-message-auto.spec.ts tests/servertool/stopmessage-session-scope.spec.ts tests/servertool/stopmessage-anthropic-stop-sequence.spec.ts tests/servertool/stopmessage-compaction-false-positive.spec.ts tests/servertool/servertool-progress-logging.spec.ts tests/servertool/servertool-clock.spec.ts tests/compat/tabglm-claude-code-profile.spec.ts tests/compat/antigravity-thought-signature.spec.ts tests/sharedmodule/mcp-tool-descriptions.spec.ts tests/unified-hub/hub-v1-single-path-imports.spec.ts",
|
|
49
|
+
"test:cli": "npm run jest:run -- --runTestsByPath tests/cli/camoufox-command.spec.ts tests/cli/clean-command.spec.ts tests/cli/code-command.spec.ts tests/cli/config-command.spec.ts tests/cli/env-command.spec.ts tests/cli/env-output.spec.ts tests/cli/examples-command.spec.ts tests/cli/port-command.spec.ts tests/cli/port-utils.spec.ts tests/cli/restart-command.spec.ts tests/cli/smoke.spec.ts tests/cli/start-command.spec.ts tests/cli/status-command.spec.ts tests/cli/stop-command.spec.ts",
|
|
50
50
|
"test:watch": "npm run jest:run -- --watch",
|
|
51
51
|
"test:coverage": "npm run jest:run -- --coverage",
|
|
52
52
|
"test:integration": "npm run jest:run -- --testPathPattern=integration",
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
},
|
|
148
148
|
"dependencies": {
|
|
149
149
|
"@anthropic-ai/sdk": "^0.65.0",
|
|
150
|
-
"@jsonstudio/llms": "0.6.
|
|
150
|
+
"@jsonstudio/llms": "0.6.1449",
|
|
151
151
|
"@lmstudio/sdk": "^1.5.0",
|
|
152
152
|
"@radix-ui/react-switch": "^1.2.6",
|
|
153
153
|
"@types/socket.io": "^3.0.1",
|
|
@@ -161,7 +161,6 @@
|
|
|
161
161
|
"express": "^4.18.2",
|
|
162
162
|
"helmet": "^7.0.0",
|
|
163
163
|
"lmstudio": "^0.0.32",
|
|
164
|
-
"node-fetch": "^3.3.2",
|
|
165
164
|
"open": "^9.1.0",
|
|
166
165
|
"openai": "^5.23.0",
|
|
167
166
|
"ora": "^9.0.0",
|