@jsonstudio/rcc 0.89.1348 → 0.89.1488

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.
Files changed (126) hide show
  1. package/README.md +51 -1427
  2. package/configsamples/config.json +12 -4
  3. package/dist/build-info.js +2 -2
  4. package/dist/cli/commands/config.js +3 -0
  5. package/dist/cli/commands/config.js.map +1 -1
  6. package/dist/cli/commands/init.js +3 -0
  7. package/dist/cli/commands/init.js.map +1 -1
  8. package/dist/cli/config/bundled-docs.js +2 -2
  9. package/dist/cli/config/bundled-docs.js.map +1 -1
  10. package/dist/cli/config/init-config.d.ts +2 -1
  11. package/dist/cli/config/init-config.js +33 -1
  12. package/dist/cli/config/init-config.js.map +1 -1
  13. package/dist/client/gemini/gemini-protocol-client.js +2 -1
  14. package/dist/client/gemini/gemini-protocol-client.js.map +1 -1
  15. package/dist/client/gemini-cli/gemini-cli-protocol-client.js +67 -16
  16. package/dist/client/gemini-cli/gemini-cli-protocol-client.js.map +1 -1
  17. package/dist/client/openai/chat-protocol-client.js +2 -1
  18. package/dist/client/openai/chat-protocol-client.js.map +1 -1
  19. package/dist/client/responses/responses-protocol-client.js +2 -1
  20. package/dist/client/responses/responses-protocol-client.js.map +1 -1
  21. package/dist/error-handling/quiet-error-handling-center.js +46 -8
  22. package/dist/error-handling/quiet-error-handling-center.js.map +1 -1
  23. package/dist/manager/modules/quota/antigravity-quota-manager.d.ts +4 -0
  24. package/dist/manager/modules/quota/antigravity-quota-manager.js +130 -2
  25. package/dist/manager/modules/quota/antigravity-quota-manager.js.map +1 -1
  26. package/dist/manager/modules/quota/provider-quota-daemon.events.js +67 -4
  27. package/dist/manager/modules/quota/provider-quota-daemon.events.js.map +1 -1
  28. package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js +9 -6
  29. package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js.map +1 -1
  30. package/dist/modules/llmswitch/bridge.js +17 -4
  31. package/dist/modules/llmswitch/bridge.js.map +1 -1
  32. package/dist/modules/llmswitch/core-loader.d.ts +1 -1
  33. package/dist/modules/llmswitch/core-loader.js +15 -3
  34. package/dist/modules/llmswitch/core-loader.js.map +1 -1
  35. package/dist/providers/auth/antigravity-userinfo-helper.d.ts +5 -2
  36. package/dist/providers/auth/antigravity-userinfo-helper.js +63 -8
  37. package/dist/providers/auth/antigravity-userinfo-helper.js.map +1 -1
  38. package/dist/providers/auth/gemini-cli-userinfo-helper.js +66 -4
  39. package/dist/providers/auth/gemini-cli-userinfo-helper.js.map +1 -1
  40. package/dist/providers/auth/oauth-lifecycle.js +112 -1
  41. package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
  42. package/dist/providers/auth/tokenfile-auth.d.ts +14 -0
  43. package/dist/providers/auth/tokenfile-auth.js +125 -2
  44. package/dist/providers/auth/tokenfile-auth.js.map +1 -1
  45. package/dist/providers/core/config/camoufox-launcher.d.ts +5 -0
  46. package/dist/providers/core/config/camoufox-launcher.js +5 -0
  47. package/dist/providers/core/config/camoufox-launcher.js.map +1 -1
  48. package/dist/providers/core/config/service-profiles.js +7 -18
  49. package/dist/providers/core/config/service-profiles.js.map +1 -1
  50. package/dist/providers/core/runtime/base-provider.d.ts +0 -5
  51. package/dist/providers/core/runtime/base-provider.js +26 -112
  52. package/dist/providers/core/runtime/base-provider.js.map +1 -1
  53. package/dist/providers/core/runtime/gemini-cli-http-provider.d.ts +6 -0
  54. package/dist/providers/core/runtime/gemini-cli-http-provider.js +409 -100
  55. package/dist/providers/core/runtime/gemini-cli-http-provider.js.map +1 -1
  56. package/dist/providers/core/runtime/http-request-executor.d.ts +3 -0
  57. package/dist/providers/core/runtime/http-request-executor.js +110 -38
  58. package/dist/providers/core/runtime/http-request-executor.js.map +1 -1
  59. package/dist/providers/core/runtime/http-transport-provider.d.ts +3 -0
  60. package/dist/providers/core/runtime/http-transport-provider.js +89 -39
  61. package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
  62. package/dist/providers/core/runtime/rate-limit-manager.d.ts +1 -12
  63. package/dist/providers/core/runtime/rate-limit-manager.js +4 -77
  64. package/dist/providers/core/runtime/rate-limit-manager.js.map +1 -1
  65. package/dist/providers/core/utils/http-client.js +20 -43
  66. package/dist/providers/core/utils/http-client.js.map +1 -1
  67. package/dist/runtime/wasm-runtime/wasm-config.d.ts +73 -0
  68. package/dist/runtime/wasm-runtime/wasm-config.js +124 -0
  69. package/dist/runtime/wasm-runtime/wasm-config.js.map +1 -0
  70. package/dist/runtime/wasm-runtime/wasm-loader.d.ts +40 -0
  71. package/dist/runtime/wasm-runtime/wasm-loader.js +62 -0
  72. package/dist/runtime/wasm-runtime/wasm-loader.js.map +1 -0
  73. package/dist/server/handlers/handler-utils.js +5 -1
  74. package/dist/server/handlers/handler-utils.js.map +1 -1
  75. package/dist/server/handlers/responses-handler.js +1 -1
  76. package/dist/server/handlers/responses-handler.js.map +1 -1
  77. package/dist/server/runtime/http-server/index.js +121 -30
  78. package/dist/server/runtime/http-server/index.js.map +1 -1
  79. package/dist/server/runtime/http-server/request-executor.js +50 -6
  80. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  81. package/dist/server/runtime/http-server/routes.js +4 -1
  82. package/dist/server/runtime/http-server/routes.js.map +1 -1
  83. package/dist/utils/strip-internal-keys.d.ts +12 -0
  84. package/dist/utils/strip-internal-keys.js +28 -0
  85. package/dist/utils/strip-internal-keys.js.map +1 -0
  86. package/docs/CHAT_PROCESS_PROTOCOL_AND_PIPELINE.md +221 -0
  87. package/docs/antigravity-gemini-format-cleanup.md +143 -0
  88. package/docs/antigravity-routing-contract.md +31 -0
  89. package/docs/chat-semantic-expansion-plan.md +8 -6
  90. package/docs/glm-chat-completions.md +1 -1
  91. package/docs/llms-wasm-migration.md +331 -0
  92. package/docs/llms-wasm-module-boundaries.md +588 -0
  93. package/docs/llms-wasm-replay-baseline.md +171 -0
  94. package/docs/plans/llms-wasm-migration-plan.md +401 -0
  95. package/docs/servertool-framework.md +65 -0
  96. package/docs/v2-architecture/README.md +6 -8
  97. package/docs/verified-configs/README.md +60 -0
  98. package/docs/verified-configs/v0.45.0/README.md +244 -0
  99. package/docs/verified-configs/v0.45.0/lmstudio-5521-gpt-oss-20b-mlx.json +135 -0
  100. package/docs/verified-configs/v0.45.0/merged-config.5521.json +1205 -0
  101. package/docs/verified-configs/v0.45.0/merged-config.qwen-5522.json +1559 -0
  102. package/docs/verified-configs/v0.45.0/qwen-5522-qwen3-coder-plus-final.json +221 -0
  103. package/docs/verified-configs/v0.45.0/qwen-5522-qwen3-coder-plus-fixed.json +242 -0
  104. package/docs/verified-configs/v0.45.0/qwen-5522-qwen3-coder-plus.json +242 -0
  105. package/package.json +17 -11
  106. package/scripts/antigravity-token-bridge.mjs +283 -0
  107. package/scripts/build-core.mjs +3 -1
  108. package/scripts/ci/repo-sanity.mjs +138 -0
  109. package/scripts/mock-provider/run-regressions.mjs +157 -1
  110. package/scripts/run-bg.sh +0 -14
  111. package/scripts/tests/ci-jest.mjs +119 -0
  112. package/scripts/tools-dev/responses-debug-client/README.md +23 -0
  113. package/scripts/tools-dev/responses-debug-client/payloads/poem.json +13 -0
  114. package/scripts/tools-dev/responses-debug-client/payloads/sample-no-tools.json +98 -0
  115. package/scripts/tools-dev/responses-debug-client/payloads/text.json +13 -0
  116. package/scripts/tools-dev/responses-debug-client/payloads/tool.json +27 -0
  117. package/scripts/tools-dev/responses-debug-client/run.mjs +65 -0
  118. package/scripts/tools-dev/responses-debug-client/src/index.ts +281 -0
  119. package/scripts/tools-dev/run-llmswitch-chat.mjs +53 -0
  120. package/scripts/tools-dev/server-tools-dev/run-web-fetch.mjs +65 -0
  121. package/scripts/vendor-core.mjs +13 -3
  122. package/scripts/test-fc-responses.mjs +0 -66
  123. package/scripts/test-guidance.mjs +0 -100
  124. package/scripts/test-iflow-web-search.mjs +0 -141
  125. package/scripts/test-iflow.mjs +0 -379
  126. package/scripts/test-tool-exec.mjs +0 -26
@@ -0,0 +1,143 @@
1
+ ---
2
+ title: Antigravity Gemini 格式清理要求
3
+ date: 2026-01-25
4
+ tags:
5
+ - routecodex
6
+ - antigravity
7
+ - gemini
8
+ - claude
9
+ status: active
10
+ ---
11
+
12
+ # Antigravity Gemini 格式清理要求(gcli2api 对齐)
13
+
14
+ > [!summary]
15
+ > 本文汇总当前 **antigravity** 走 Gemini 协议时的格式清理要求,覆盖 **Gemini 系列** 与 **Claude 系列** 的关键输出/请求规范、UA/Headers 规范、工具历史一致性要求等。
16
+ > 本次改动已生效:历史 `functionCall` 强制补 `thoughtSignature: "skip_thought_signature_validator"`。
17
+
18
+ ## 1) 适用范围
19
+ - **Gemini 系列**:`gemini-3-pro-low / gemini-3-pro-high` 等 Gemini 协议模型。
20
+ - **Claude 系列**:`claude-*` 走 antigravity/兼容层的 Gemini 路由时的兼容字段统一。
21
+
22
+ ---
23
+
24
+ ## 2) UA 与 Headers(Antigravity Tools 对齐)
25
+ - **Antigravity 分支**:
26
+ - **JSON wrapper 内保留**:`requestId / requestType / userAgent / project / request`
27
+ - **不发送 Gemini CLI header triplet**:`x-goog-api-client / client-metadata`(避免与 Antigravity Tools 行为不一致)
28
+ - **不注入 session_id**(保持协议最小化)
29
+ - **非 Antigravity 分支**(Gemini CLI 常规):
30
+ - 仍可维持稳定 header triplet(用于 Gemini CLI 兼容)
31
+
32
+ > [!note]
33
+ > Antigravity 路径的 User-Agent 由 wrapper 里的 `userAgent: "antigravity"` 控制,Header 仅保留必要的 HTTP 通用头。
34
+
35
+ ---
36
+
37
+ ## 3) 工具与历史一致性(核心要求)
38
+
39
+ > [!important]
40
+ > **历史中出现的工具调用必须与当前请求 tools 对齐**。历史中不得出现当前 tools 列表中不存在的工具调用。
41
+
42
+ - **历史工具清理**:
43
+ - 对 **history 中出现但当前 tools 不存在** 的 `functionCall`/`functionResponse` 做 **移除或降级为纯文本**。
44
+ - 保持 **tools 列表与历史工具调用**的 **一一对应**。
45
+ - **工具名合法性**:
46
+ - Gemini 对函数名字符集/形状严格校验;不合法名称需 **清理或过滤**。
47
+ - **工具 schema 对齐**:
48
+ - 历史 `functionCall.args` 必须与当前工具 schema 对齐。
49
+ - 对 `args` 做 **结构修正**:Gemini 期望 `functionCall.args` 为对象(Struct),非对象需包 `value`。
50
+
51
+ ---
52
+
53
+ ## 4) Gemini 协议的格式清理要点
54
+
55
+ ### 4.1 functionCall 历史补签名
56
+ - **新增要求(已生效)**:
57
+ - 历史 `functionCall` **必须包含**:
58
+ - `thoughtSignature: "skip_thought_signature_validator"`
59
+ - 这是 gcli2api 的行为:即使没有真实签名,也需要该字段以通过 Cloud Code 严格校验。
60
+
61
+ ### 4.2 工具 schema 输出
62
+ - **始终输出工具 schema**(Gemini 需要工具声明来校验 `functionCall`/`functionResponse`)。
63
+ - `toolConfig.functionCallingConfig`:
64
+ - `NONE / ANY / ALLOWED` 按 `tool_choice` 映射。
65
+
66
+ ### 4.3 Content 清理
67
+ - 统一 `contents` 结构,确保每条 entry 的 parts 合法。
68
+ - 对无效 part 做降级或过滤,避免 Gemini 侧 malformed。
69
+
70
+ ---
71
+
72
+ ## 5) Claude 系列在 Antigravity 中的兼容统一
73
+
74
+ - Claude-thinking / 非 thinking 输出在 antigravity 侧 **统一形态**:
75
+ - 保证与 Gemini/OpenAI 响应结构一致的 **content 形状**。
76
+ - 保持 **history/tool 行为与 Gemini 同步**(同样遵循历史工具一致性要求)。
77
+
78
+ ---
79
+
80
+ ## 6) 当前已生效的关键修复(含 2026-01-26 更新)
81
+
82
+ - ✅ **历史 functionCall 强制补 `thoughtSignature`**(gcli2api 行为一致)。
83
+ - ✅ **history/tool 对齐清理**:历史工具调用不再允许与当前 tools 不一致。
84
+ - ✅ **args 结构修正**:非对象 args 包装到 `{ value }`。
85
+ - ✅ **UA/Headers 与 Antigravity Tools 对齐**(wrapper 保留 identity,移除 Gemini CLI triplet)。
86
+ - ✅ **兼容层保留 wrapper 字段**:`chat:gemini` 的 `shallow_pick` 允许 `request / requestId / requestType / userAgent / project`。
87
+ - ✅ **上游 request 不含 metadata**:避免 `Unknown name "metadata" at 'request'`。
88
+ - ✅ **baseURL 对齐 prod**:`https://cloudcode-pa.googleapis.com`。
89
+
90
+ ---
91
+
92
+ ## 6.1) Request Wrapper 结构(Antigravity)
93
+
94
+ ```json
95
+ {
96
+ "model": "gemini-3-pro",
97
+ "project": "your-project-id",
98
+ "requestId": "agent-...",
99
+ "requestType": "agent|web_search|image_gen",
100
+ "userAgent": "antigravity",
101
+ "request": {
102
+ "contents": [...],
103
+ "systemInstruction": {...},
104
+ "tools": [...],
105
+ "generationConfig": {...},
106
+ "safetySettings": [...]
107
+ }
108
+ }
109
+ ```
110
+
111
+ > [!important]
112
+ > `request` 内部 **禁止** `metadata` 字段。
113
+
114
+ ---
115
+
116
+ ## 6.2) 多账号 alias 策略(Antigravity)
117
+
118
+ - **默认策略**:按 **model 维度**挑选“最佳账号”(剩余配额最高)。
119
+ - **不做轮询**:只有当该 alias 的该 model **为空** 才切换。
120
+ - **model 空判定**:
121
+ - quota `<= 0`
122
+ - 或 **429 冷却移出账号池 ≥ 30s**
123
+ - **数据来源**:quota 池(antigravity quota snapshot 注入到 `quotaView`)。
124
+ - **模型族分开**:每个 model 单独选择最佳 alias。
125
+
126
+ > [!note]
127
+ > “最佳账号推荐”来自 quota 池的剩余额度排序,优先消耗高配额账号以提升稳定性与命中率。
128
+
129
+ ---
130
+
131
+ ## 7) 验证方式(建议)
132
+
133
+ - 对比两条请求(首条无历史、次条带历史):
134
+ - `provider-request.json` 中 **`functionCall` 必须带 `thoughtSignature`**。
135
+ - `tools` 与历史 functionCall **必须一一对齐**。
136
+ - `args` 必须为对象(Struct)。
137
+
138
+ ---
139
+
140
+ ## 8) 备注
141
+
142
+ > [!note]
143
+ > 本次修改已验证生效。若后续仍出现 429 或 Cloud Code 严格校验失败,优先检查 **history 中工具清理是否遗漏** 或 **functionCall/Response 的结构化字段是否存在差异**。
@@ -0,0 +1,31 @@
1
+ # Antigravity 429 + sticky-queue contract (standard behavior)
2
+
3
+ This document defines the *default* behavior for Antigravity routing under transient 429s. It is a hard requirement
4
+ for the "standard" execution path; any alternative behavior is considered legacy compatibility.
5
+
6
+ ## Contract (3 rules)
7
+
8
+ 1) **Success sticks**
9
+ Once an alias is selected for a `(providerId=antigravity, modelId)` group, routing keeps selecting that alias
10
+ until the alias becomes unavailable (error / cooldown / blacklist).
11
+
12
+ 2) **429 cools down + rotates to tail**
13
+ For capacity-style 429s (e.g. upstream "model capacity exhausted"), routing:
14
+ - immediately applies a short cooldown to the failing `providerKey` (alias-level for Antigravity), and
15
+ - on retry, rotates the failing alias to the tail of the sticky-queue, so the next attempt prefers a different alias.
16
+
17
+ 3) **Fallback only when exhausted**
18
+ Retrying stays within Antigravity for the same model as long as any usable alias remains.
19
+ Only when all aliases are excluded/cooling/blacklisted does routing fall back to other providers/routes.
20
+
21
+ ## Where this is implemented
22
+
23
+ - **Retry hint plumbing (excludedProviderKeys)**: `src/server/runtime/http-server/request-executor.ts`
24
+ - **Sticky-queue selection + alias rotation**:
25
+ - `sharedmodule/llmswitch-core/src/router/virtual-router/engine-selection/alias-selection.ts`
26
+ - `sharedmodule/llmswitch-core/src/router/virtual-router/engine-selection/tier-selection.ts`
27
+ - `sharedmodule/llmswitch-core/src/router/virtual-router/engine-selection/tier-selection-select.ts`
28
+ - **Capacity-style 429 cooldown (alias-level for Antigravity)**:
29
+ - `src/manager/modules/quota/provider-quota-daemon.model-backoff.ts`
30
+ - `src/manager/modules/quota/provider-quota-daemon.events.ts`
31
+
@@ -2,6 +2,8 @@
2
2
 
3
3
  > 目标:让 llmswitch-core 中的 Chat Process / Standardized 桥承接四种协议的语义,不再依赖 metadata 透传 “raw payload”,并按顺序分阶段完成。
4
4
 
5
+ > 术语约定:本文中的 “chat process” 指代码层面的 `chat_process` 阶段(工具治理/路由/协议重建的必经处理段)。
6
+
5
7
  ### 阶段 0:现状确认
6
8
 
7
9
  1. **协议扫描**
@@ -9,7 +11,7 @@
9
11
  - `responses-mapper.ts`:resume/include/store 等通过 `metadata.responsesContext/responseFormat` 储存。
10
12
  - `anthropic-mapper.ts`:system blocks、tool alias、内容 shape 等塞进 `metadata.extraFields`。
11
13
  - `gemini-mapper.ts`:systemInstruction、safetySettings、generationConfig、toolConfig 均在 metadata/parameters。
12
- 2. **chat-process / standardized 桥**
14
+ 2. **chat process / standardized 桥**
13
15
  - 只理解 `messages/tools/toolOutputs/parameters`,其余通通进 `metadata.capturedContext`。
14
16
 
15
17
  ### 阶段 1:扩展 Chat Process + Standardized 桥
@@ -20,13 +22,13 @@
20
22
  - **协议专属命名空间**:`semantics.responses` / `semantics.anthropic` / `semantics.gemini`。每个命名空间内定义稳定 contract,禁止随意往里塞 provider extras。
21
23
  - **providerExtras** 仅用于临时透传,默认禁止业务逻辑读取,后续接线完成后应趋近于空。
22
24
  - `chatEnvelopeToStandardized` / `standardizedToChatEnvelope` 深拷贝 `semantics`。
23
- 2. **chat-process 适配**
25
+ 2. **chat process 适配**
24
26
  - `runHubChatProcess`、工具治理、路由决策只读 `request.semantics`;除 mapper/bridge 外,任何模块不得写入 `semantics`。
25
27
  - Metadata 退回诊断角色:仅保留 `missingFields/providerMetadata` 等调试字段,`capturedContext` 禁止再夹带业务语义。
26
28
  3. **模块测试**
27
- - 新增 spec:构造 `ChatEnvelope` (含 system/responses/anthropic/gemini),执行标准化→还原→chat-process,断言 `semantics` 原样保留。
29
+ - 新增 spec:构造 `ChatEnvelope` (含 system/responses/anthropic/gemini),执行标准化→还原→chat process,断言 `semantics` 原样保留。
28
30
 
29
- > 完成该阶段后,chat-process 成为“语义承接层”,为后续接线提供可靠落点。
31
+ > 完成该阶段后,chat process 成为“语义承接层”,为后续接线提供可靠落点。
30
32
 
31
33
  ### 阶段 2:协议语义接线(分批)
32
34
 
@@ -69,10 +71,10 @@
69
71
  ### 注意事项
70
72
 
71
73
  - **严格顺序**:阶段 1 完成并通过黑盒测试后,才能启动阶段 2 的任何接线工作。
72
- - **只读语义**:除 Semantic Mapper / Bridge 外,任何模块不得写 `semantics`; chat-process 之后的所有节点禁止从 metadata/raw 读取业务语义。
74
+ - **只读语义**:除 Semantic Mapper / Bridge 外,任何模块不得写 `semantics`; chat process 之后的所有节点禁止从 metadata/raw 读取业务语义。
73
75
  - **最小增量**:每个协议接线尽量独立 PR/commit,便于回滚。
74
76
  - **兼容期双写**:阶段 2 中需维护 semantics & metadata 双写(写 semantics → 同步旧字段);读路径优先 semantics,metadata 仅保底兼容,直到阶段 3 清理完成。
75
- - **验证方式**:所有语义字段必须能在 `StandardizedRequest.semantics` 中观测到,且 chat-process/路由/工具治理仅依赖该结构。
77
+ - **验证方式**:所有语义字段必须能在 `StandardizedRequest.semantics` 中观测到,且 chat process/路由/工具治理仅依赖该结构。
76
78
 
77
79
  ### 审查建议
78
80