@jsonstudio/rcc 0.89.1189 → 0.89.1348

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 (337) hide show
  1. package/README.md +17 -0
  2. package/configsamples/config.json +426 -0
  3. package/configsamples/config.reference.json +58 -0
  4. package/configsamples/provider/crs/config.v1.json +46 -0
  5. package/configsamples/provider/glm/config.v1.json +81 -0
  6. package/configsamples/provider/glm-anthropic/config.v1.json +45 -0
  7. package/configsamples/provider/iflow/config.v1.json +74 -0
  8. package/configsamples/provider/kimi/config.v1.json +41 -0
  9. package/configsamples/provider/lmstudio/config.v1.json +101 -0
  10. package/configsamples/provider/mimo/config.v1.json +35 -0
  11. package/configsamples/provider/modelscope/config.v1.json +96 -0
  12. package/configsamples/provider/qwen/config.v1.json +38 -0
  13. package/configsamples/provider/tab/config.v1.json +50 -0
  14. package/configsamples/provider/tabglm/config.v1.json +49 -0
  15. package/dist/build-info.js +2 -2
  16. package/dist/cli/commands/code.js +12 -6
  17. package/dist/cli/commands/code.js.map +1 -1
  18. package/dist/cli/commands/config.d.ts +2 -1
  19. package/dist/cli/commands/config.js +74 -103
  20. package/dist/cli/commands/config.js.map +1 -1
  21. package/dist/cli/commands/examples.js +6 -6
  22. package/dist/cli/commands/examples.js.map +1 -1
  23. package/dist/cli/commands/init.d.ts +28 -0
  24. package/dist/cli/commands/init.js +91 -0
  25. package/dist/cli/commands/init.js.map +1 -0
  26. package/dist/cli/commands/port.js +10 -2
  27. package/dist/cli/commands/port.js.map +1 -1
  28. package/dist/cli/commands/restart.js +5 -2
  29. package/dist/cli/commands/restart.js.map +1 -1
  30. package/dist/cli/commands/start.js +25 -22
  31. package/dist/cli/commands/start.js.map +1 -1
  32. package/dist/cli/commands/status.js +1 -0
  33. package/dist/cli/commands/status.js.map +1 -1
  34. package/dist/cli/commands/stop.js +1 -0
  35. package/dist/cli/commands/stop.js.map +1 -1
  36. package/dist/cli/config/bundled-docs.d.ts +20 -0
  37. package/dist/cli/config/bundled-docs.js +91 -0
  38. package/dist/cli/config/bundled-docs.js.map +1 -0
  39. package/dist/cli/config/init-config.d.ts +36 -0
  40. package/dist/cli/config/init-config.js +180 -0
  41. package/dist/cli/config/init-config.js.map +1 -0
  42. package/dist/cli/config/init-provider-catalog.d.ts +8 -0
  43. package/dist/cli/config/init-provider-catalog.js +187 -0
  44. package/dist/cli/config/init-provider-catalog.js.map +1 -0
  45. package/dist/cli/register/init-command.d.ts +3 -0
  46. package/dist/cli/register/init-command.js +5 -0
  47. package/dist/cli/register/init-command.js.map +1 -0
  48. package/dist/cli.js +28 -3
  49. package/dist/cli.js.map +1 -1
  50. package/dist/client/gemini-cli/gemini-cli-protocol-client.js +1 -1
  51. package/dist/client/gemini-cli/gemini-cli-protocol-client.js.map +1 -1
  52. package/dist/config/risk-control-config.d.ts +94 -0
  53. package/dist/config/risk-control-config.js +196 -0
  54. package/dist/config/risk-control-config.js.map +1 -0
  55. package/dist/constants/index.d.ts +6 -0
  56. package/dist/constants/index.js +13 -0
  57. package/dist/constants/index.js.map +1 -1
  58. package/dist/docs/daemon-admin-ui.html +2113 -190
  59. package/dist/index.js +0 -1
  60. package/dist/index.js.map +1 -1
  61. package/dist/manager/modules/health/index.d.ts +1 -1
  62. package/dist/manager/modules/quota/antigravity-quota-manager.d.ts +70 -0
  63. package/dist/manager/modules/quota/antigravity-quota-manager.js +442 -0
  64. package/dist/manager/modules/quota/antigravity-quota-manager.js.map +1 -0
  65. package/dist/manager/modules/quota/index.d.ts +3 -127
  66. package/dist/manager/modules/quota/index.js +2 -1093
  67. package/dist/manager/modules/quota/index.js.map +1 -1
  68. package/dist/manager/modules/quota/provider-key-normalization.d.ts +3 -0
  69. package/dist/manager/modules/quota/provider-key-normalization.js +155 -0
  70. package/dist/manager/modules/quota/provider-key-normalization.js.map +1 -0
  71. package/dist/manager/modules/quota/provider-quota-daemon.cooldown.d.ts +9 -0
  72. package/dist/manager/modules/quota/provider-quota-daemon.cooldown.js +115 -0
  73. package/dist/manager/modules/quota/provider-quota-daemon.cooldown.js.map +1 -0
  74. package/dist/manager/modules/quota/provider-quota-daemon.d.ts +77 -0
  75. package/dist/manager/modules/quota/provider-quota-daemon.events.d.ts +12 -0
  76. package/dist/manager/modules/quota/provider-quota-daemon.events.js +237 -0
  77. package/dist/manager/modules/quota/provider-quota-daemon.events.js.map +1 -0
  78. package/dist/manager/modules/quota/provider-quota-daemon.js +404 -0
  79. package/dist/manager/modules/quota/provider-quota-daemon.js.map +1 -0
  80. package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.d.ts +11 -0
  81. package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js +189 -0
  82. package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js.map +1 -0
  83. package/dist/manager/modules/quota/provider-quota-daemon.snapshot.d.ts +8 -0
  84. package/dist/manager/modules/quota/provider-quota-daemon.snapshot.js +96 -0
  85. package/dist/manager/modules/quota/provider-quota-daemon.snapshot.js.map +1 -0
  86. package/dist/manager/modules/quota/provider-quota-daemon.view.d.ts +19 -0
  87. package/dist/manager/modules/quota/provider-quota-daemon.view.js +37 -0
  88. package/dist/manager/modules/quota/provider-quota-daemon.view.js.map +1 -0
  89. package/dist/manager/modules/routing/index.d.ts +1 -0
  90. package/dist/manager/modules/routing/index.js +11 -25
  91. package/dist/manager/modules/routing/index.js.map +1 -1
  92. package/dist/manager/quota/provider-quota-center.d.ts +2 -0
  93. package/dist/manager/quota/provider-quota-center.js +80 -82
  94. package/dist/manager/quota/provider-quota-center.js.map +1 -1
  95. package/dist/modules/llmswitch/bridge.d.ts +16 -18
  96. package/dist/modules/llmswitch/bridge.js +314 -71
  97. package/dist/modules/llmswitch/bridge.js.map +1 -1
  98. package/dist/modules/llmswitch/core-loader.d.ts +4 -2
  99. package/dist/modules/llmswitch/core-loader.js +32 -20
  100. package/dist/modules/llmswitch/core-loader.js.map +1 -1
  101. package/dist/modules/pipeline/utils/colored-logger.js +3 -2
  102. package/dist/modules/pipeline/utils/colored-logger.js.map +1 -1
  103. package/dist/modules/pipeline/utils/debug-logger.js +1 -1
  104. package/dist/modules/pipeline/utils/debug-logger.js.map +1 -1
  105. package/dist/providers/auth/iflow-cookie-auth.js +0 -2
  106. package/dist/providers/auth/iflow-cookie-auth.js.map +1 -1
  107. package/dist/providers/auth/oauth-lifecycle.js +2 -23
  108. package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
  109. package/dist/providers/core/config/camoufox-launcher.js +35 -4
  110. package/dist/providers/core/config/camoufox-launcher.js.map +1 -1
  111. package/dist/providers/core/runtime/antigravity-quota-client.js +6 -3
  112. package/dist/providers/core/runtime/antigravity-quota-client.js.map +1 -1
  113. package/dist/providers/core/runtime/base-provider.d.ts +2 -2
  114. package/dist/providers/core/runtime/base-provider.js +74 -69
  115. package/dist/providers/core/runtime/base-provider.js.map +1 -1
  116. package/dist/providers/core/runtime/gemini-cli-http-provider.js +6 -4
  117. package/dist/providers/core/runtime/gemini-cli-http-provider.js.map +1 -1
  118. package/dist/providers/core/runtime/http-request-executor.js +2 -2
  119. package/dist/providers/core/runtime/http-request-executor.js.map +1 -1
  120. package/dist/providers/core/runtime/http-transport-provider.d.ts +14 -0
  121. package/dist/providers/core/runtime/http-transport-provider.js +111 -5
  122. package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
  123. package/dist/providers/core/runtime/provider-error-classifier.js +10 -0
  124. package/dist/providers/core/runtime/provider-error-classifier.js.map +1 -1
  125. package/dist/providers/core/runtime/provider-factory.js +7 -5
  126. package/dist/providers/core/runtime/provider-factory.js.map +1 -1
  127. package/dist/providers/core/runtime/provider-runtime-metadata.d.ts +6 -0
  128. package/dist/providers/core/runtime/provider-runtime-metadata.js.map +1 -1
  129. package/dist/providers/core/runtime/responses-provider.d.ts +1 -7
  130. package/dist/providers/core/runtime/responses-provider.js +12 -93
  131. package/dist/providers/core/runtime/responses-provider.js.map +1 -1
  132. package/dist/providers/core/strategies/oauth-auth-code-flow.js +12 -8
  133. package/dist/providers/core/strategies/oauth-auth-code-flow.js.map +1 -1
  134. package/dist/providers/core/utils/http-client.js +16 -3
  135. package/dist/providers/core/utils/http-client.js.map +1 -1
  136. package/dist/providers/core/utils/provider-error-logger.d.ts +1 -1
  137. package/dist/providers/core/utils/provider-error-reporter.d.ts +3 -1
  138. package/dist/providers/core/utils/provider-error-reporter.js +3 -0
  139. package/dist/providers/core/utils/provider-error-reporter.js.map +1 -1
  140. package/dist/providers/core/utils/snapshot-writer.js +1 -4
  141. package/dist/providers/core/utils/snapshot-writer.js.map +1 -1
  142. package/dist/providers/mock/mock-provider-runtime.js +57 -27
  143. package/dist/providers/mock/mock-provider-runtime.js.map +1 -1
  144. package/dist/scripts/camoufox/launch-auth.mjs +193 -58
  145. package/dist/server/handlers/handler-utils.js +3 -2
  146. package/dist/server/handlers/handler-utils.js.map +1 -1
  147. package/dist/server/runtime/http-server/daemon-admin/auth-handler.d.ts +2 -0
  148. package/dist/server/runtime/http-server/daemon-admin/auth-handler.js +103 -0
  149. package/dist/server/runtime/http-server/daemon-admin/auth-handler.js.map +1 -0
  150. package/dist/server/runtime/http-server/daemon-admin/auth-session.d.ts +5 -0
  151. package/dist/server/runtime/http-server/daemon-admin/auth-session.js +77 -0
  152. package/dist/server/runtime/http-server/daemon-admin/auth-session.js.map +1 -0
  153. package/dist/server/runtime/http-server/daemon-admin/auth-store.d.ts +18 -0
  154. package/dist/server/runtime/http-server/daemon-admin/auth-store.js +89 -0
  155. package/dist/server/runtime/http-server/daemon-admin/auth-store.js.map +1 -0
  156. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js +1 -2
  157. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js.map +1 -1
  158. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js +226 -24
  159. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js.map +1 -1
  160. package/dist/server/runtime/http-server/daemon-admin/quota-handler.js +47 -8
  161. package/dist/server/runtime/http-server/daemon-admin/quota-handler.js.map +1 -1
  162. package/dist/server/runtime/http-server/daemon-admin/restart-handler.js +1 -1
  163. package/dist/server/runtime/http-server/daemon-admin/restart-handler.js.map +1 -1
  164. package/dist/server/runtime/http-server/daemon-admin/stats-handler.js +1 -1
  165. package/dist/server/runtime/http-server/daemon-admin/stats-handler.js.map +1 -1
  166. package/dist/server/runtime/http-server/daemon-admin/status-handler.js +68 -4
  167. package/dist/server/runtime/http-server/daemon-admin/status-handler.js.map +1 -1
  168. package/dist/server/runtime/http-server/daemon-admin-routes.d.ts +3 -4
  169. package/dist/server/runtime/http-server/daemon-admin-routes.js +9 -14
  170. package/dist/server/runtime/http-server/daemon-admin-routes.js.map +1 -1
  171. package/dist/server/runtime/http-server/executor-metadata.js +1 -1
  172. package/dist/server/runtime/http-server/executor-metadata.js.map +1 -1
  173. package/dist/server/runtime/http-server/executor-response.js +0 -16
  174. package/dist/server/runtime/http-server/executor-response.js.map +1 -1
  175. package/dist/server/runtime/http-server/hub-shadow-compare.d.ts +18 -0
  176. package/dist/server/runtime/http-server/hub-shadow-compare.js +256 -0
  177. package/dist/server/runtime/http-server/hub-shadow-compare.js.map +1 -0
  178. package/dist/server/runtime/http-server/index.d.ts +7 -2
  179. package/dist/server/runtime/http-server/index.js +287 -49
  180. package/dist/server/runtime/http-server/index.js.map +1 -1
  181. package/dist/server/runtime/http-server/middleware.js +19 -1
  182. package/dist/server/runtime/http-server/middleware.js.map +1 -1
  183. package/dist/server/runtime/http-server/request-executor.js +10 -19
  184. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  185. package/dist/server/runtime/http-server/routes.js +8 -2
  186. package/dist/server/runtime/http-server/routes.js.map +1 -1
  187. package/dist/server/runtime/http-server/session-dir.d.ts +2 -0
  188. package/dist/server/runtime/http-server/session-dir.js +59 -0
  189. package/dist/server/runtime/http-server/session-dir.js.map +1 -0
  190. package/dist/server/runtime/http-server/types.d.ts +0 -4
  191. package/dist/server/utils/utf8-chunk-buffer.js +6 -3
  192. package/dist/server/utils/utf8-chunk-buffer.js.map +1 -1
  193. package/dist/server/utils/warmup-storm-tracker.js +1 -1
  194. package/dist/server/utils/warmup-storm-tracker.js.map +1 -1
  195. package/dist/server-factory.d.ts +6 -28
  196. package/dist/server-factory.js +8 -93
  197. package/dist/server-factory.js.map +1 -1
  198. package/dist/token-daemon/index.js +2 -2
  199. package/dist/token-daemon/index.js.map +1 -1
  200. package/dist/token-daemon/provider-registry.js +0 -1
  201. package/dist/token-daemon/provider-registry.js.map +1 -1
  202. package/dist/token-daemon/server-utils.js +8 -9
  203. package/dist/token-daemon/server-utils.js.map +1 -1
  204. package/dist/token-daemon/token-utils.js +1 -1
  205. package/dist/token-daemon/token-utils.js.map +1 -1
  206. package/dist/tools/semantic-replay.js +2 -2
  207. package/dist/tools/semantic-replay.js.map +1 -1
  208. package/dist/tools/stats-request-events.d.ts +1 -1
  209. package/dist/tools/stats-usage.js +6 -3
  210. package/dist/tools/stats-usage.js.map +1 -1
  211. package/dist/utils/errorsamples.d.ts +5 -0
  212. package/dist/utils/errorsamples.js +27 -0
  213. package/dist/utils/errorsamples.js.map +1 -0
  214. package/dist/utils/llms-engine-shadow.d.ts +19 -0
  215. package/dist/utils/llms-engine-shadow.js +209 -0
  216. package/dist/utils/llms-engine-shadow.js.map +1 -0
  217. package/dist/utils/runtime-versions.d.ts +1 -0
  218. package/dist/utils/runtime-versions.js +39 -0
  219. package/dist/utils/runtime-versions.js.map +1 -0
  220. package/docs/ARCHITECTURE.md +402 -0
  221. package/docs/CODEX_AND_CLAUDE_CODE.md +69 -0
  222. package/docs/CONFIG_ARCHITECTURE.md +517 -0
  223. package/docs/ERROR_HANDLING_AUDIT.md +0 -0
  224. package/docs/GCLI2API_PARITY_GAPS.md +98 -0
  225. package/docs/INSTALLATION_AND_QUICKSTART.md +74 -0
  226. package/docs/INSTRUCTION_MARKUP.md +89 -0
  227. package/docs/MODULE_ENHANCEMENT_SYSTEM.md +666 -0
  228. package/docs/PORTS.md +36 -0
  229. package/docs/PROVIDERS_BUILTIN.md +111 -0
  230. package/docs/PROVIDER_TYPES.md +55 -0
  231. package/docs/SERVERTOOL_CLOCK_DESIGN.md +233 -0
  232. package/docs/USAGE_HANDLING_ANALYSIS.md +335 -0
  233. package/docs/USER_CONFIG_PARSER_CHANGES.md +175 -0
  234. package/docs/V3_INBOUND_OUTBOUND_DESIGN.md +86 -0
  235. package/docs/VIRTUAL_ROUTER_PRIORITY_AND_HEALTH.md +125 -0
  236. package/docs/anthropic-request-golden-samples.md +50 -0
  237. package/docs/ccr-alignment-enhancetool.md +105 -0
  238. package/docs/chat-glm-500-analysis.md +79 -0
  239. package/docs/chat-request-golden-samples.md +42 -0
  240. package/docs/chat-semantic-expansion-plan.md +82 -0
  241. package/docs/cli-command-inventory.md +76 -0
  242. package/docs/codex-samples-replay.md +50 -0
  243. package/docs/daemon-admin-api-design.md +350 -0
  244. package/docs/daemon-admin-module-structure.md +169 -0
  245. package/docs/daemon-admin-ui.html +3394 -0
  246. package/docs/debug-system-design.md +734 -0
  247. package/docs/debugging/gemini-sse-root-cause.md +52 -0
  248. package/docs/debugging/sse_encoding_failure_analysis.md +53 -0
  249. package/docs/dry-run/README.md +721 -0
  250. package/docs/error-handling-v2.md +92 -0
  251. package/docs/exec-command-guard-policy.example.v1.json +42 -0
  252. package/docs/fixes/gemini-protocol-mapping.md +57 -0
  253. package/docs/fixes/oauth-portal-timing-fix.md +202 -0
  254. package/docs/fixes/web-search-hop3-fix.md +265 -0
  255. package/docs/glm-api-reference.md +390 -0
  256. package/docs/glm-chat-completions.md +1779 -0
  257. package/docs/glm-history-inline-images.md +44 -0
  258. package/docs/golden-ci-library.md +66 -0
  259. package/docs/lmstudio-dry-run-summary.md +203 -0
  260. package/docs/lmstudio-tool-calling.md +214 -0
  261. package/docs/mapping-tables/anthropic-to-openai.json +290 -0
  262. package/docs/mapping-tables/iflow-to-openai.json +215 -0
  263. package/docs/mapping-tables/openai-passthrough.json +190 -0
  264. package/docs/mapping-tables/openai-to-iflow.json +227 -0
  265. package/docs/monitoring/Design.md +61 -0
  266. package/docs/multi-token-auth-guide.md +66 -0
  267. package/docs/oauth-authentication-guide.md +168 -0
  268. package/docs/oauth-iflow-implementation.md +153 -0
  269. package/docs/pipeline-routing-report.md +209 -0
  270. package/docs/plans/manager-daemon/PLAN.md +86 -0
  271. package/docs/plans/provider-config-v2-plan.md +176 -0
  272. package/docs/plans/provider-runtime-manager-plan.md +209 -0
  273. package/docs/plans/transparent-429-failover.md +89 -0
  274. package/docs/plans/unified-hub-framework-v1.md +245 -0
  275. package/docs/provider-config-v2-ui-design.md +181 -0
  276. package/docs/provider-quota-design.md +129 -0
  277. package/docs/providers/gemini-provider.md +62 -0
  278. package/docs/providers/lmstudio-v2-migration-report.md +102 -0
  279. package/docs/providers/provider-composite-design.md +142 -0
  280. package/docs/providers/provider-composite-testing.md +98 -0
  281. package/docs/providers/provider-type-only-migration.md +111 -0
  282. package/docs/rccx-wasm-migration.md +74 -0
  283. package/docs/refactoring/architecture-comparison-diagram.md +140 -0
  284. package/docs/refactoring/compatibility-v2-architecture-design.md +738 -0
  285. package/docs/refactoring/workflow-compatibility-refactoring-design.md +361 -0
  286. package/docs/reports/routing-classification-report.json +24 -0
  287. package/docs/reports/routing-classification-report.md +18 -0
  288. package/docs/reports/thinking-keywords-report.json +19 -0
  289. package/docs/responses/README.md +156 -0
  290. package/docs/responses-generic-provider.md +86 -0
  291. package/docs/responses-passthrough-provider-design.md +202 -0
  292. package/docs/routing-awrr-health-weighted-round-robin.md +179 -0
  293. package/docs/routing-instructions.md +393 -0
  294. package/docs/stop-message-auto.md +225 -0
  295. package/docs/streaming-flow.html +30 -0
  296. package/docs/streaming-flow.md +182 -0
  297. package/docs/token-daemon-preview.html +490 -0
  298. package/docs/token-refresh-daemon-plan.md +269 -0
  299. package/docs/transformation-tables/Gemini-FinishReason/345/256/214/346/225/264/350/275/254/346/215/242/350/241/250.json +233 -0
  300. package/docs/transformation-tables/README.md +225 -0
  301. package/docs/transformation-tables/claude-code-router-anthropic-to-gemini.json +283 -0
  302. package/docs/transformation-tables/claude-code-router-anthropic-to-openai.json +208 -0
  303. package/docs/transformation-tables/claude-code-router-openai-to-anthropic.json +261 -0
  304. package/docs/transformation-tables/claude-code-router-openai-to-gemini.json +208 -0
  305. package/docs/transformation-tables/claude-code-router-openai-to-lmstudio.json +182 -0
  306. package/docs/transformation-tables/claude-code-router-openai-to-ollama.json +250 -0
  307. package/docs/transformation-tables/claude-code-router-openai-to-textgenwebui.json +295 -0
  308. package/docs/transformation-tables/claude-code-router-provider-conversions.json +193 -0
  309. package/docs/transformation-tables//345/256/214/346/225/264/347/232/204/345/267/245/345/205/267/346/211/247/350/241/214/346/265/201/347/250/213/350/275/254/346/215/242/350/241/250.json +299 -0
  310. package/docs/transformation-tables//345/257/271/350/257/235/345/216/206/345/217/262/347/273/264/346/212/244/345/210/206/346/236/220.md +134 -0
  311. package/docs/transformation-tables//345/267/245/345/205/267/350/260/203/347/224/250/346/250/241/345/274/217/345/210/206/346/236/220.md +158 -0
  312. package/docs/transformation-tables//347/212/266/346/200/201/347/256/241/347/220/206/351/234/200/346/261/202/345/210/206/346/236/220.md +175 -0
  313. package/docs/transformation-tables//351/235/231/346/200/201/350/241/250vs/345/212/250/346/200/201/345/210/206/346/236/220.md +189 -0
  314. package/docs/transformation-tables//351/235/231/346/200/201/350/241/250/345/207/206/347/241/256/346/200/247/350/257/204/344/274/260.md +179 -0
  315. package/docs/transformation-tables//351/235/236/346/265/201/345/274/217/345/234/272/346/231/257/345/210/206/346/236/220.md +189 -0
  316. package/docs/v2-architecture/IMPLEMENTATION-ROADMAP.md +367 -0
  317. package/docs/v2-architecture/OPTIMIZED-DESIGN.md +827 -0
  318. package/docs/v2-architecture/PRERUN-CONNECTION-DESIGN.md +716 -0
  319. package/docs/v2-architecture/README.md +551 -0
  320. package/docs/verification/modelscope-verify.md +59 -0
  321. package/docs/web-search-service-design.md +322 -0
  322. package/package.json +12 -7
  323. package/scripts/camoufox/launch-auth.mjs +193 -58
  324. package/scripts/monitor-diff.mjs +126 -0
  325. package/scripts/pack-mode.mjs +19 -1
  326. package/scripts/pack-rcc.mjs +63 -0
  327. package/scripts/unified-hub-shadow-compare.mjs +33 -13
  328. package/scripts/verify-e2e-toolcall.mjs +115 -26
  329. package/dist/modules/llmswitch/pipeline-registry.d.ts +0 -57
  330. package/dist/modules/llmswitch/pipeline-registry.js +0 -229
  331. package/dist/modules/llmswitch/pipeline-registry.js.map +0 -1
  332. package/dist/server/RouteCodexServer.d.ts +0 -13
  333. package/dist/server/RouteCodexServer.js +0 -25
  334. package/dist/server/RouteCodexServer.js.map +0 -1
  335. package/dist/v2/conversion/hub/snapshot-recorder.d.ts +0 -12
  336. package/dist/v2/conversion/hub/snapshot-recorder.js +0 -22
  337. package/dist/v2/conversion/hub/snapshot-recorder.js.map +0 -1
@@ -0,0 +1,269 @@
1
+ # Token Refresh Daemon 方案
2
+
3
+ ## 概述
4
+
5
+ 后台守护进程,监控 `~/.routecodex/auth/` 目录下的 Token 文件,自动管理 Token 刷新和重新认证。
6
+
7
+ ## 核心职责
8
+
9
+ 1. **监控 Token 文件** - 监控 `~/.routecodex/auth/*.json` 变化
10
+ 2. **检测过期** - 读取 `expires_at` 判断是否即将过期/已过期
11
+ 3. **自动刷新** - OAuth Token 提前30分钟自动刷新
12
+ 4. **触发认证** - 失效时打开外部浏览器让用户重新认证
13
+
14
+ ## 目录结构
15
+
16
+ ```
17
+ ~/.routecodex/auth/
18
+ ├── iflow-oauth.json # 账号: work@example.com
19
+ ├── iflow-personal.json # 账号: my@gmail.com
20
+ ├── qwen-oauth.json # 账号: dev@company.com
21
+ ├── gemini-oauth.json
22
+ └── antigravity-oauth.json
23
+ ```
24
+
25
+ ## Token 文件格式
26
+
27
+ ```json
28
+ {
29
+ "access_token": "ya29.xxx",
30
+ "refresh_token": "1//0xxx",
31
+ "expires_at": 1735209600000,
32
+ "email": "user@example.com"
33
+ }
34
+ ```
35
+
36
+ ## 用户识别方案
37
+
38
+ ### 展示优先级
39
+
40
+ ```
41
+ alias > email > name > account_id > 文件名
42
+ ```
43
+
44
+ ### 展示效果
45
+
46
+ | 文件名 | 显示名称 |
47
+ |--------|----------|
48
+ | iflow.json | 工作账号 (work@company.com) |
49
+ | iflow-personal.json | 个人账号 (my@gmail.com) |
50
+ | qwen.json | dev@company.com |
51
+
52
+ ## 认证流程
53
+
54
+ ### 1. 失效检测与通知
55
+
56
+ ```
57
+ Token 即将过期(30min前) ──→ 后台自动刷新 ──→ 成功/失败通知
58
+ Token 已过期/刷新失败 ──→ 系统通知 ──→ 用户点击
59
+ ```
60
+
61
+ ### 2. 外部浏览器认证
62
+
63
+ ```
64
+ 用户点击通知 ──→ 打开外部浏览器 + 本地回调服务器
65
+
66
+
67
+ ┌───────────────────────────────────┐
68
+ │ 认证页面显示: │
69
+ │ - 目标文件: iflow-work.json │
70
+ │ - 账号: work@company.com │
71
+ │ - [🔐 使用 Google 账号登录] │
72
+ └───────────────────────────────────┘
73
+
74
+
75
+ 用户在浏览器中登录 Google
76
+
77
+
78
+ OAuth 重定向到 localhost:38421
79
+
80
+
81
+ Daemon 接收 code ──→ 交换 Token ──→ 更新文件
82
+
83
+
84
+ 显示成功页面/通知用户
85
+ ```
86
+
87
+ ### 3. 多账号处理
88
+
89
+ ```
90
+ 检测到多个账号 ──→ 认证页面显示账号列表 ──→ 用户选择 ──→ 浏览器中切换
91
+ ```
92
+
93
+ ## 用户界面
94
+
95
+ ### 系统通知
96
+
97
+ ```
98
+ 🌙 Routecodex Token Notification
99
+
100
+ ⚠️ Token 失效 - 需要重新认证
101
+
102
+ 📄 iflow-work.json
103
+ 👤 work@company.com
104
+
105
+ [打开浏览器认证] [查看详情] [取消]
106
+ ```
107
+
108
+ ### 认证页面
109
+
110
+ ```
111
+ ┌─────────────────────────────────────────────────────────┐
112
+ │ 🌙 Routecodex Token 认证 │
113
+ ├─────────────────────────────────────────────────────────┤
114
+ │ 📄 目标文件: iflow-work.json │
115
+ │ 👤 账号: work@company.com │
116
+ │ 📊 状态: Refresh Token 已过期 │
117
+ │ │
118
+ │ ──────────────────────────────────────────────────── │
119
+ │ │
120
+ │ [ 🔐 使用 Google 账号登录 ] │
121
+ │ │
122
+ │ 💡 提示: 认证完成后 Token 文件将自动更新 │
123
+ └─────────────────────────────────────────────────────────┘
124
+ ```
125
+
126
+ ### 成功页面
127
+
128
+ ```
129
+ ┌─────────────────────────────────────────────────────────┐
130
+ │ ✅ 认证成功 │
131
+ ├─────────────────────────────────────────────────────────┤
132
+ │ 🎉 Token 已更新! │
133
+ │ 📄 iflow-work.json │
134
+ │ 👤 work@company.com │
135
+ │ 此窗口可以关闭,Daemon 已恢复监控 │
136
+ │ [返回终端] │
137
+ └─────────────────────────────────────────────────────────┘
138
+ ```
139
+
140
+ ### Tray 菜单
141
+
142
+ ```
143
+ 🌙
144
+ ├─ 📊 状态
145
+ │ ├─ iflow.json ✅ 有效
146
+ │ ├─ iflow-work.json ❌ 失效 [重新认证]
147
+ │ └─ qwen.json ⚠️ 25分钟后过期
148
+ ├─ 🔄 刷新全部
149
+ └─ ❌ 退出
150
+ ```
151
+
152
+ ## 命令行接口
153
+
154
+ ```bash
155
+ # 独立启动
156
+ routecodex token-daemon start
157
+
158
+ # 随主进程启动
159
+ routecodex start --daemon
160
+
161
+ # 查看状态
162
+ routecodex token-daemon status
163
+
164
+ # 手动触发刷新
165
+ routecodex token-daemon refresh iflow-oauth
166
+
167
+ # 查看即将过期的 token
168
+ routecodex token-daemon list --expiring
169
+
170
+ # 停止
171
+ routecodex token-daemon stop
172
+ ```
173
+
174
+ ## status 输出示例
175
+
176
+ ```
177
+ 🌙 Token Refresh Daemon 运行中
178
+ PID: 12345
179
+ 📁 监控目录: ~/.routecodex/auth/
180
+
181
+ | 文件名 | 显示名称 | 状态 | 过期时间 | 剩余 |
182
+ |---------------------|------------------------|--------|----------------|--------|
183
+ | iflow.json | 工作账号 (work@co.com) | ✅ 有效 | 2025-12-26 15:30 | 38分钟 |
184
+ | iflow-work.json | 个人账号 (my@gmail.com) | ❌ 失效 | - | - |
185
+ | qwen.json | dev@company.com | ⚠️ 即将过期 | 2025-12-26 14:45 | 3分钟 |
186
+ ```
187
+
188
+ ## 技术架构
189
+
190
+ ```
191
+ ┌─────────────────────────────────────────────────────────┐
192
+ │ Token Refresh Daemon │
193
+ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
194
+ │ │ File Monitor│ │ Token Manager│ │ Auth Trigger│ │
195
+ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
196
+ │ │ │ │ │
197
+ │ └────────────────┼────────────────┘ │
198
+ │ ▼ │
199
+ │ ┌─────────────────────┐ │
200
+ │ │ Event Bus / IPC │ │
201
+ │ └─────────────────────┘ │
202
+ └─────────────────────────────────────────────────────────┘
203
+ │ │
204
+ ▼ ▼
205
+ ┌──────────────────┐ ┌─────────────────────────────────┐
206
+ │ 配置文件Watcher │ │ 认证页面 (外部浏览器) │
207
+ │ ~/.routecodex/auth│ │ + 本地回调服务器 (localhost) │
208
+ └──────────────────┘ └─────────────────────────────────┘
209
+ ```
210
+
211
+ ## 关键配置
212
+
213
+ ```json
214
+ {
215
+ "tokenDaemon": {
216
+ "enabled": true,
217
+ "refreshAheadMinutes": 30,
218
+ "checkIntervalSeconds": 60,
219
+ "notification": {
220
+ "showPopup": true,
221
+ "sound": true
222
+ },
223
+ "autoRefresh": {
224
+ "enabled": true,
225
+ "retryOnFailure": true,
226
+ "maxRetries": 3
227
+ }
228
+ }
229
+ }
230
+ ```
231
+
232
+ ## 技术决策
233
+
234
+ | 决策点 | 选择 | 理由 |
235
+ |--------|------|------|
236
+ | 监控目录 | `~/.routecodex/auth/` | 现有结构,保持兼容 |
237
+ | 进程间通信 | Unix Domain Socket | 本机通信,安全 |
238
+ | 配置文件监听 | chokidar | 跨平台,事件驱动 |
239
+ | 浏览器 | 外部浏览器 | Google 禁止自动化登录 |
240
+ | Cookie 管理 | 浏览器管理 | Daemon 不干涉 |
241
+ | OAuth 回调 | 本地 HTTP 服务器 | 接收 code 并交换 token |
242
+ | 提前刷新时间 | 30分钟 | 可配置 |
243
+
244
+ ## 风险与应对
245
+
246
+ | 风险 | 应对措施 |
247
+ |------|----------|
248
+ | 刷新死循环 | 指数退避 + 最大重试次数 |
249
+ | Token 文件被误删 | 监控文件存在性,缺失时报警 |
250
+ | OAuth 循环认证 | 用户干预前最多重试3次 |
251
+ | 性能影响 | 增量扫描 + 内存缓存 |
252
+ | 回调端口冲突 | 端口池管理,自动回退 |
253
+
254
+ ## 后续扩展
255
+
256
+ 1. **Web UI 管理界面**: `routecodex token-daemon ui`
257
+ 2. **Token 健康度评分**: 基于使用频率 + 过期时间
258
+ 3. **批量操作**: 一键刷新所有 Token
259
+ 4. **导出/导入**: 迁移认证配置到新机器
260
+ 5. **审计日志**: 记录所有 Token 访问和刷新
261
+
262
+ ## 待确认问题
263
+
264
+ 1. [x] 监控目录: `~/.routecodex/auth/`
265
+ 2. [x] 提前刷新时间: 30分钟
266
+ 3. [x] 认证方式: 外部浏览器
267
+ 4. [x] 回调方式: 本地 HTTP 服务器
268
+ 5. [x] alias: 支持显式账号名称(类似 iflow 实现方式),用于多账号识别
269
+ 6. [x] 手动刷新: 支持 `routecodex token-daemon refresh <file>`
@@ -0,0 +1,233 @@
1
+ {
2
+ "sourceProvider": "OpenAI/Anthropic",
3
+ "targetProvider": "Gemini",
4
+ "description": "Gemini Finish Reason 完整转换表",
5
+ "version": "1.0",
6
+
7
+ "finishReasonMappings": {
8
+ "openaiToGemini": {
9
+ "stop": {
10
+ "source": "stop",
11
+ "target": "STOP",
12
+ "description": "正常结束,模型完成响应"
13
+ },
14
+ "length": {
15
+ "source": "length",
16
+ "target": "MAX_TOKENS",
17
+ "description": "达到最大token限制"
18
+ },
19
+ "tool_calls": {
20
+ "source": "tool_calls",
21
+ "target": "STOP",
22
+ "description": "需要调用工具,Gemini在function call后也使用STOP"
23
+ },
24
+ "content_filter": {
25
+ "source": "content_filter",
26
+ "target": "SAFETY",
27
+ "description": "内容过滤导致停止"
28
+ }
29
+ },
30
+
31
+ "anthropicToGemini": {
32
+ "end_turn": {
33
+ "source": "end_turn",
34
+ "target": "STOP",
35
+ "description": "正常结束"
36
+ },
37
+ "max_tokens": {
38
+ "source": "max_tokens",
39
+ "target": "MAX_TOKENS",
40
+ "description": "达到最大token限制"
41
+ },
42
+ "stop_sequence": {
43
+ "source": "stop_sequence",
44
+ "target": "STOP",
45
+ "description": "遇到停止序列"
46
+ },
47
+ "tool_use": {
48
+ "source": "tool_use",
49
+ "target": "STOP",
50
+ "description": "需要调用工具"
51
+ }
52
+ },
53
+
54
+ "geminiToOpenai": {
55
+ "STOP": {
56
+ "source": "STOP",
57
+ "target": "stop",
58
+ "description": "正常结束",
59
+ "context": "需要根据是否有function call判断"
60
+ },
61
+ "MAX_TOKENS": {
62
+ "source": "MAX_TOKENS",
63
+ "target": "length",
64
+ "description": "达到最大token限制"
65
+ },
66
+ "SAFETY": {
67
+ "source": "SAFETY",
68
+ "target": "content_filter",
69
+ "description": "安全过滤"
70
+ },
71
+ "RECITATION": {
72
+ "source": "RECITATION",
73
+ "target": "content_filter",
74
+ "description": "引用被阻止"
75
+ },
76
+ "OTHER": {
77
+ "source": "OTHER",
78
+ "target": "stop",
79
+ "description": "其他原因"
80
+ }
81
+ },
82
+
83
+ "geminiToAnthropic": {
84
+ "STOP": {
85
+ "source": "STOP",
86
+ "target": "end_turn",
87
+ "description": "正常结束"
88
+ },
89
+ "MAX_TOKENS": {
90
+ "source": "MAX_TOKENS",
91
+ "target": "max_tokens",
92
+ "description": "达到最大token限制"
93
+ },
94
+ "SAFETY": {
95
+ "source": "SAFETY",
96
+ "target": "end_turn",
97
+ "description": "安全过滤,Anthropic无直接对应"
98
+ },
99
+ "RECITATION": {
100
+ "source": "RECITATION",
101
+ "target": "end_turn",
102
+ "description": "引用被阻止"
103
+ }
104
+ }
105
+ },
106
+
107
+ "geminiSpecificMappings": {
108
+ "candidateFinishReason": {
109
+ "location": "candidates[*].finishReason",
110
+ "type": "string",
111
+ "enum": ["STOP", "MAX_TOKENS", "SAFETY", "RECITATION", "OTHER"]
112
+ },
113
+ "promptFeedback": {
114
+ "blockReason": {
115
+ "location": "promptFeedback.blockReason",
116
+ "type": "string",
117
+ "enum": ["SAFETY", "OTHER"],
118
+ "description": "提示被阻止的原因"
119
+ }
120
+ }
121
+ },
122
+
123
+ "toolExecutionFinishReasons": {
124
+ "functionCallInResponse": {
125
+ "gemini": {
126
+ "finishReason": "STOP",
127
+ "functionCalls": [
128
+ {
129
+ "name": "string",
130
+ "args": "object"
131
+ }
132
+ ]
133
+ },
134
+ "openai": {
135
+ "finishReason": "tool_calls",
136
+ "tool_calls": [
137
+ {
138
+ "id": "string",
139
+ "type": "function",
140
+ "function": {
141
+ "name": "string",
142
+ "arguments": "string"
143
+ }
144
+ }
145
+ ]
146
+ },
147
+ "anthropic": {
148
+ "stop_reason": "tool_use",
149
+ "content": [
150
+ {
151
+ "type": "tool_use",
152
+ "id": "string",
153
+ "name": "string",
154
+ "input": "object"
155
+ }
156
+ ]
157
+ }
158
+ },
159
+
160
+ "afterToolExecution": {
161
+ "gemini": {
162
+ "finishReason": "STOP",
163
+ "content": "基于工具结果的最终响应"
164
+ },
165
+ "openai": {
166
+ "finishReason": "stop",
167
+ "content": "基于工具结果的最终响应"
168
+ },
169
+ "anthropic": {
170
+ "stop_reason": "end_turn",
171
+ "content": "基于工具结果的最终响应"
172
+ }
173
+ }
174
+ },
175
+
176
+ "safetyFinishReasons": {
177
+ "geminiSafetyCategories": {
178
+ "HARM_CATEGORY_HARASSMENT": "骚扰",
179
+ "HARM_CATEGORY_HATE_SPEECH": "仇恨言论",
180
+ "HARM_CATEGORY_SEXUALLY_EXPLICIT": "色情内容",
181
+ "HARM_CATEGORY_DANGEROUS_CONTENT": "危险内容"
182
+ },
183
+
184
+ "safetyThresholdMapping": {
185
+ "BLOCK_NONE": "不阻止",
186
+ "BLOCK_ONLY_HIGH": "仅阻止高风险",
187
+ "BLOCK_MEDIUM_AND_ABOVE": "阻止中等及以上风险",
188
+ "BLOCK_LOW_AND_ABOVE": "阻止低风险及以上"
189
+ }
190
+ },
191
+
192
+ "errorFinishReasons": {
193
+ "geminiErrors": {
194
+ "MALFORMED_FUNCTION_CALL": "函数调用格式错误",
195
+ "FUNCTION_CALLING_DISABLED": "函数调用被禁用",
196
+ "UNKNOWN": "未知错误"
197
+ },
198
+
199
+ "correspondingOpenaiErrors": {
200
+ "MALFORMED_FUNCTION_CALL": {
201
+ "finish_reason": "stop",
202
+ "error": {
203
+ "message": "函数调用格式错误",
204
+ "type": "invalid_request_error"
205
+ }
206
+ },
207
+ "FUNCTION_CALLING_DISABLED": {
208
+ "finish_reason": "stop",
209
+ "error": {
210
+ "message": "函数调用被禁用",
211
+ "type": "invalid_request_error"
212
+ }
213
+ }
214
+ },
215
+
216
+ "correspondingAnthropicErrors": {
217
+ "MALFORMED_FUNCTION_CALL": {
218
+ "stop_reason": "end_turn",
219
+ "error": {
220
+ "type": "invalid_request_error",
221
+ "message": "工具调用格式错误"
222
+ }
223
+ },
224
+ "FUNCTION_CALLING_DISABLED": {
225
+ "stop_reason": "end_turn",
226
+ "error": {
227
+ "type": "invalid_request_error",
228
+ "message": "工具调用被禁用"
229
+ }
230
+ }
231
+ }
232
+ }
233
+ }