@jsonstudio/rcc 0.89.1205 → 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 (332) 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 +293 -94
  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.js +110 -34
  176. package/dist/server/runtime/http-server/hub-shadow-compare.js.map +1 -1
  177. package/dist/server/runtime/http-server/index.d.ts +5 -3
  178. package/dist/server/runtime/http-server/index.js +215 -109
  179. package/dist/server/runtime/http-server/index.js.map +1 -1
  180. package/dist/server/runtime/http-server/middleware.js +19 -1
  181. package/dist/server/runtime/http-server/middleware.js.map +1 -1
  182. package/dist/server/runtime/http-server/request-executor.js +10 -19
  183. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  184. package/dist/server/runtime/http-server/routes.js +8 -2
  185. package/dist/server/runtime/http-server/routes.js.map +1 -1
  186. package/dist/server/runtime/http-server/session-dir.d.ts +2 -0
  187. package/dist/server/runtime/http-server/session-dir.js +59 -0
  188. package/dist/server/runtime/http-server/session-dir.js.map +1 -0
  189. package/dist/server/runtime/http-server/types.d.ts +0 -4
  190. package/dist/server/utils/utf8-chunk-buffer.js +6 -3
  191. package/dist/server/utils/utf8-chunk-buffer.js.map +1 -1
  192. package/dist/server/utils/warmup-storm-tracker.js +1 -1
  193. package/dist/server/utils/warmup-storm-tracker.js.map +1 -1
  194. package/dist/server-factory.d.ts +6 -28
  195. package/dist/server-factory.js +8 -93
  196. package/dist/server-factory.js.map +1 -1
  197. package/dist/token-daemon/index.js +2 -2
  198. package/dist/token-daemon/index.js.map +1 -1
  199. package/dist/token-daemon/provider-registry.js +0 -1
  200. package/dist/token-daemon/provider-registry.js.map +1 -1
  201. package/dist/token-daemon/server-utils.js +8 -9
  202. package/dist/token-daemon/server-utils.js.map +1 -1
  203. package/dist/token-daemon/token-utils.js +1 -1
  204. package/dist/token-daemon/token-utils.js.map +1 -1
  205. package/dist/tools/semantic-replay.js +2 -2
  206. package/dist/tools/semantic-replay.js.map +1 -1
  207. package/dist/tools/stats-request-events.d.ts +1 -1
  208. package/dist/tools/stats-usage.js +6 -3
  209. package/dist/tools/stats-usage.js.map +1 -1
  210. package/dist/utils/llms-engine-shadow.d.ts +19 -0
  211. package/dist/utils/llms-engine-shadow.js +209 -0
  212. package/dist/utils/llms-engine-shadow.js.map +1 -0
  213. package/dist/utils/runtime-versions.js +2 -1
  214. package/dist/utils/runtime-versions.js.map +1 -1
  215. package/docs/ARCHITECTURE.md +402 -0
  216. package/docs/CODEX_AND_CLAUDE_CODE.md +69 -0
  217. package/docs/CONFIG_ARCHITECTURE.md +517 -0
  218. package/docs/ERROR_HANDLING_AUDIT.md +0 -0
  219. package/docs/GCLI2API_PARITY_GAPS.md +98 -0
  220. package/docs/INSTALLATION_AND_QUICKSTART.md +74 -0
  221. package/docs/INSTRUCTION_MARKUP.md +89 -0
  222. package/docs/MODULE_ENHANCEMENT_SYSTEM.md +666 -0
  223. package/docs/PORTS.md +36 -0
  224. package/docs/PROVIDERS_BUILTIN.md +111 -0
  225. package/docs/PROVIDER_TYPES.md +55 -0
  226. package/docs/SERVERTOOL_CLOCK_DESIGN.md +233 -0
  227. package/docs/USAGE_HANDLING_ANALYSIS.md +335 -0
  228. package/docs/USER_CONFIG_PARSER_CHANGES.md +175 -0
  229. package/docs/V3_INBOUND_OUTBOUND_DESIGN.md +86 -0
  230. package/docs/VIRTUAL_ROUTER_PRIORITY_AND_HEALTH.md +125 -0
  231. package/docs/anthropic-request-golden-samples.md +50 -0
  232. package/docs/ccr-alignment-enhancetool.md +105 -0
  233. package/docs/chat-glm-500-analysis.md +79 -0
  234. package/docs/chat-request-golden-samples.md +42 -0
  235. package/docs/chat-semantic-expansion-plan.md +82 -0
  236. package/docs/cli-command-inventory.md +76 -0
  237. package/docs/codex-samples-replay.md +50 -0
  238. package/docs/daemon-admin-api-design.md +350 -0
  239. package/docs/daemon-admin-module-structure.md +169 -0
  240. package/docs/daemon-admin-ui.html +3394 -0
  241. package/docs/debug-system-design.md +734 -0
  242. package/docs/debugging/gemini-sse-root-cause.md +52 -0
  243. package/docs/debugging/sse_encoding_failure_analysis.md +53 -0
  244. package/docs/dry-run/README.md +721 -0
  245. package/docs/error-handling-v2.md +92 -0
  246. package/docs/exec-command-guard-policy.example.v1.json +42 -0
  247. package/docs/fixes/gemini-protocol-mapping.md +57 -0
  248. package/docs/fixes/oauth-portal-timing-fix.md +202 -0
  249. package/docs/fixes/web-search-hop3-fix.md +265 -0
  250. package/docs/glm-api-reference.md +390 -0
  251. package/docs/glm-chat-completions.md +1779 -0
  252. package/docs/glm-history-inline-images.md +44 -0
  253. package/docs/golden-ci-library.md +66 -0
  254. package/docs/lmstudio-dry-run-summary.md +203 -0
  255. package/docs/lmstudio-tool-calling.md +214 -0
  256. package/docs/mapping-tables/anthropic-to-openai.json +290 -0
  257. package/docs/mapping-tables/iflow-to-openai.json +215 -0
  258. package/docs/mapping-tables/openai-passthrough.json +190 -0
  259. package/docs/mapping-tables/openai-to-iflow.json +227 -0
  260. package/docs/monitoring/Design.md +61 -0
  261. package/docs/multi-token-auth-guide.md +66 -0
  262. package/docs/oauth-authentication-guide.md +168 -0
  263. package/docs/oauth-iflow-implementation.md +153 -0
  264. package/docs/pipeline-routing-report.md +209 -0
  265. package/docs/plans/manager-daemon/PLAN.md +86 -0
  266. package/docs/plans/provider-config-v2-plan.md +176 -0
  267. package/docs/plans/provider-runtime-manager-plan.md +209 -0
  268. package/docs/plans/transparent-429-failover.md +89 -0
  269. package/docs/plans/unified-hub-framework-v1.md +245 -0
  270. package/docs/provider-config-v2-ui-design.md +181 -0
  271. package/docs/provider-quota-design.md +129 -0
  272. package/docs/providers/gemini-provider.md +62 -0
  273. package/docs/providers/lmstudio-v2-migration-report.md +102 -0
  274. package/docs/providers/provider-composite-design.md +142 -0
  275. package/docs/providers/provider-composite-testing.md +98 -0
  276. package/docs/providers/provider-type-only-migration.md +111 -0
  277. package/docs/rccx-wasm-migration.md +74 -0
  278. package/docs/refactoring/architecture-comparison-diagram.md +140 -0
  279. package/docs/refactoring/compatibility-v2-architecture-design.md +738 -0
  280. package/docs/refactoring/workflow-compatibility-refactoring-design.md +361 -0
  281. package/docs/reports/routing-classification-report.json +24 -0
  282. package/docs/reports/routing-classification-report.md +18 -0
  283. package/docs/reports/thinking-keywords-report.json +19 -0
  284. package/docs/responses/README.md +156 -0
  285. package/docs/responses-generic-provider.md +86 -0
  286. package/docs/responses-passthrough-provider-design.md +202 -0
  287. package/docs/routing-awrr-health-weighted-round-robin.md +179 -0
  288. package/docs/routing-instructions.md +393 -0
  289. package/docs/stop-message-auto.md +225 -0
  290. package/docs/streaming-flow.html +30 -0
  291. package/docs/streaming-flow.md +182 -0
  292. package/docs/token-daemon-preview.html +490 -0
  293. package/docs/token-refresh-daemon-plan.md +269 -0
  294. package/docs/transformation-tables/Gemini-FinishReason/345/256/214/346/225/264/350/275/254/346/215/242/350/241/250.json +233 -0
  295. package/docs/transformation-tables/README.md +225 -0
  296. package/docs/transformation-tables/claude-code-router-anthropic-to-gemini.json +283 -0
  297. package/docs/transformation-tables/claude-code-router-anthropic-to-openai.json +208 -0
  298. package/docs/transformation-tables/claude-code-router-openai-to-anthropic.json +261 -0
  299. package/docs/transformation-tables/claude-code-router-openai-to-gemini.json +208 -0
  300. package/docs/transformation-tables/claude-code-router-openai-to-lmstudio.json +182 -0
  301. package/docs/transformation-tables/claude-code-router-openai-to-ollama.json +250 -0
  302. package/docs/transformation-tables/claude-code-router-openai-to-textgenwebui.json +295 -0
  303. package/docs/transformation-tables/claude-code-router-provider-conversions.json +193 -0
  304. 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
  305. 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
  306. 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
  307. 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
  308. 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
  309. 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
  310. 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
  311. package/docs/v2-architecture/IMPLEMENTATION-ROADMAP.md +367 -0
  312. package/docs/v2-architecture/OPTIMIZED-DESIGN.md +827 -0
  313. package/docs/v2-architecture/PRERUN-CONNECTION-DESIGN.md +716 -0
  314. package/docs/v2-architecture/README.md +551 -0
  315. package/docs/verification/modelscope-verify.md +59 -0
  316. package/docs/web-search-service-design.md +322 -0
  317. package/package.json +12 -7
  318. package/scripts/camoufox/launch-auth.mjs +193 -58
  319. package/scripts/monitor-diff.mjs +126 -0
  320. package/scripts/pack-mode.mjs +19 -1
  321. package/scripts/pack-rcc.mjs +63 -0
  322. package/scripts/unified-hub-shadow-compare.mjs +33 -13
  323. package/scripts/verify-e2e-toolcall.mjs +115 -26
  324. package/dist/modules/llmswitch/pipeline-registry.d.ts +0 -57
  325. package/dist/modules/llmswitch/pipeline-registry.js +0 -229
  326. package/dist/modules/llmswitch/pipeline-registry.js.map +0 -1
  327. package/dist/server/RouteCodexServer.d.ts +0 -13
  328. package/dist/server/RouteCodexServer.js +0 -25
  329. package/dist/server/RouteCodexServer.js.map +0 -1
  330. package/dist/v2/conversion/hub/snapshot-recorder.d.ts +0 -12
  331. package/dist/v2/conversion/hub/snapshot-recorder.js +0 -22
  332. package/dist/v2/conversion/hub/snapshot-recorder.js.map +0 -1
@@ -0,0 +1,350 @@
1
+ # Daemon / Token / Quota / Providers / Config V2 管理 API 设计
2
+
3
+ > 目标:为 Daemon 管理 UI 和基于 Config V2 的 Provider 管理视图提供一组 **只读或低风险** 的 HTTP JSON API。
4
+ > 所有 API 均由 HTTP server 提供,数据来源于 ManagerDaemon、虚拟路由和 Config V2,禁止在此层做路由/工具语义决策。
5
+
6
+ ---
7
+
8
+ ## 1. 通用约定
9
+
10
+ - 所有 API 均以 JSON 形式返回。
11
+ - 错误返回格式对齐现有 HTTP server:
12
+ - HTTP 状态码 4xx/5xx。
13
+ - Body: `{ "error": { "message": string, "code"?: string, ... } }`
14
+ - 仅暴露**非敏感字段**:
15
+ - 不返回 access_token / refresh_token / client_secret 等。
16
+ - 对 token 文件路径等敏感信息仅返回相对路径或掩码版本。
17
+
18
+ ---
19
+
20
+ ## 2. Daemon 状态 API
21
+
22
+ ### 2.1 `GET /daemon/status`
23
+
24
+ > 展示当前 HTTP server 实例的 daemon/manager 状态,以及关键模块是否运行。
25
+
26
+ - 响应示例:
27
+
28
+ ```jsonc
29
+ {
30
+ "ok": true,
31
+ "serverId": "routecodex-dev-5555",
32
+ "version": "0.89.872",
33
+ "uptimeSec": 1234,
34
+ "manager": {
35
+ "active": true,
36
+ "modules": [
37
+ { "id": "token", "status": "leader", "details": { "intervalSec": 60 } },
38
+ { "id": "quota", "status": "running" },
39
+ { "id": "health", "status": "running" },
40
+ { "id": "routing", "status": "running", "stickyEnabled": true }
41
+ ]
42
+ }
43
+ }
44
+ ```
45
+
46
+ - 数据来源:
47
+ - `RouteCodexHttpServer`(serverId、版本、uptime)。
48
+ - `ManagerDaemon` + 各 `ManagerModule` 的只读状态。
49
+
50
+ ---
51
+
52
+ ## 3. Credentials 管理 API
53
+
54
+ > 注意:所有 API 必须避免泄露敏感字段,只用于展示凭证状态和触发安全的 verify/refresh 操作。
55
+
56
+ ### 3.1 `GET /daemon/credentials`
57
+
58
+ - 用途:列出 daemon 管理下已知的 credential 条目。
59
+ - 响应示例:
60
+
61
+ ```jsonc
62
+ [
63
+ {
64
+ "id": "iflow-oauth-1-186",
65
+ "kind": "oauth",
66
+ "providerFamily": "gemini",
67
+ "alias": "iflow-186",
68
+ "tokenFile": "~/.routecodex/auth/iflow-oauth-1-186.json",
69
+ "projectId": "my-project",
70
+ "expiresAt": 1736500000000,
71
+ "expiresInSec": 3600,
72
+ "status": "valid", // valid | expiring | expired | invalid
73
+ "lastError": null
74
+ }
75
+ ]
76
+ ```
77
+
78
+ - 数据来源:
79
+ - Token 文件扫描器(现有 `scanProviderTokenFiles` 等)。
80
+ - `readTokenFile` + `evaluateTokenState`。
81
+
82
+ ### 3.2 `GET /daemon/credentials/:id`
83
+
84
+ - 用途:查看单个 credential 的详细信息(仍然不包含密钥本体)。
85
+ - 响应字段在列表基础上可增加:
86
+
87
+ ```jsonc
88
+ {
89
+ "id": "iflow-oauth-1-186",
90
+ "kind": "oauth",
91
+ "providerFamily": "gemini",
92
+ "alias": "iflow-186",
93
+ "tokenFile": "~/.routecodex/auth/iflow-oauth-1-186.json",
94
+ "projectId": "my-project",
95
+ "expiresAt": 1736500000000,
96
+ "expiresInSec": 3600,
97
+ "status": "valid",
98
+ "lastError": null,
99
+ "issuer": "https://accounts.google.com",
100
+ "scopes": ["https://www.googleapis.com/auth/cloud-platform"],
101
+ "createdAt": 1736400000000,
102
+ "updatedAt": 1736499900000
103
+ }
104
+ ```
105
+
106
+ ### 3.3 `POST /daemon/credentials/:id/verify`
107
+
108
+ - 用途:触发一次“最佳努力”的远端验证(例如调用 userinfo 或简单的 API ping)。
109
+ - 请求体:可为空 `{}`。
110
+ - 响应示例:
111
+
112
+ ```jsonc
113
+ {
114
+ "ok": true,
115
+ "id": "iflow-oauth-1-186",
116
+ "status": "valid", // valid | invalid | error
117
+ "checkedAt": 1736500100000,
118
+ "message": "Token accepted by upstream."
119
+ }
120
+ ```
121
+
122
+ - 行为约束:
123
+ - 仅在本地发起一次轻量级验证,不做重试风暴。
124
+ - 失败时只记录错误,不修改配置文件。
125
+
126
+ ### 3.4 `POST /daemon/credentials/:id/refresh`
127
+
128
+ - 用途:在安全前提下触发一次刷新(如果支持 refresh_token)。
129
+ - 响应示例:
130
+
131
+ ```jsonc
132
+ {
133
+ "ok": true,
134
+ "id": "iflow-oauth-1-186",
135
+ "status": "refreshed",
136
+ "expiresAt": 1736503600000
137
+ }
138
+ ```
139
+
140
+ - 约束:
141
+ - 必须遵守现有 token-daemon 的刷新策略,不与后台自动刷新逻辑冲突。
142
+ - 若不支持手动刷新,应返回 `400` 或 `409` 并给出明确错误信息。
143
+
144
+ ---
145
+
146
+ ## 4. Quota & 429 冷却 API
147
+
148
+ ### 4.1 `GET /quota/summary`
149
+
150
+ - 用途:展示所有受管配额(目前主要是 Antigravity)的摘要。
151
+ - 响应示例:
152
+
153
+ ```jsonc
154
+ {
155
+ "updatedAt": 1736500000000,
156
+ "records": [
157
+ {
158
+ "key": "antigravity://jasonqueque/gemini-3-pro-low",
159
+ "alias": "jasonqueque",
160
+ "modelId": "gemini-3-pro-low",
161
+ "remainingFraction": 0.42,
162
+ "resetAt": 1736503600000
163
+ }
164
+ ]
165
+ }
166
+ ```
167
+
168
+ - 数据来源:
169
+ - `QuotaManagerModule.getRawSnapshot()`。
170
+
171
+ ### 4.2 `GET /quota/runtime`
172
+
173
+ - 用途:按 runtimeKey 或 providerKey 过滤配额状态。
174
+ - 查询参数:
175
+ - `runtimeKey?: string`
176
+ - `providerKey?: string`
177
+ - 响应示例:
178
+
179
+ ```jsonc
180
+ {
181
+ "runtimeKey": "antigravity.jasonqueque",
182
+ "items": [
183
+ {
184
+ "providerKey": "antigravity.jasonqueque.gemini-3-pro-low",
185
+ "modelId": "gemini-3-pro-low",
186
+ "remainingFraction": 0.42,
187
+ "resetAt": 1736503600000
188
+ }
189
+ ]
190
+ }
191
+ ```
192
+
193
+ ### 4.3 `GET /quota/cooldowns`
194
+
195
+ - 用途:展示当前虚拟路由层面的 series cooldown 状态(与 429 相关)。
196
+ - 响应示例(形态示意):
197
+
198
+ ```jsonc
199
+ [
200
+ {
201
+ "providerId": "antigravity.jasonqueque",
202
+ "providerKey": "antigravity.jasonqueque.gemini-3-pro-low",
203
+ "series": "gemini-pro",
204
+ "cooldownMs": 300000,
205
+ "until": 1736500200000
206
+ }
207
+ ]
208
+ ```
209
+
210
+ - 数据来源:
211
+ - llmswitch-core virtual router 暴露的 cooldown 只读视图(或内部缓存)。
212
+
213
+ ---
214
+
215
+ ## 5. Providers 运行时视图 API
216
+
217
+ ### 5.1 `GET /providers/runtimes`
218
+
219
+ - 用途:展示当前 virtual router 中实际存在的 provider runtimes 及其状态。
220
+ - 响应示例:
221
+
222
+ ```jsonc
223
+ [
224
+ {
225
+ "providerKey": "antigravity.jasonqueque.gemini-3-pro-low",
226
+ "runtimeKey": "antigravity.jasonqueque",
227
+ "family": "gemini",
228
+ "protocol": "gemini-chat",
229
+ "series": "gemini-pro",
230
+ "enabled": true,
231
+ "boundCredentialId": "iflow-oauth-1-186",
232
+ "health": {
233
+ "status": "ok",
234
+ "lastErrorAt": null,
235
+ "recent429Count": 2
236
+ }
237
+ }
238
+ ]
239
+ ```
240
+
241
+ - 数据来源:
242
+ - `RouteCodexHttpServer` 中的 provider runtime 映射。
243
+ - Health/quota manager 模块。
244
+ - Credential 绑定信息从 Config 解析(不直接读取密钥)。
245
+
246
+ ---
247
+
248
+ ## 6. Config V2 Provider 视图 API
249
+
250
+ > 与 `docs/provider-config-v2-ui-design.md` 对应,只读展示 Config V2 中声明的 provider 定义,并与 runtime/credentials 形成弱关联。
251
+
252
+ ### 6.1 `GET /config/providers/v2`
253
+
254
+ - 用途:列出 Config V2 中声明的 provider 定义摘要。
255
+
256
+ ```jsonc
257
+ [
258
+ {
259
+ "id": "antigravity.jasonqueque.gemini-3-pro-low",
260
+ "family": "gemini",
261
+ "protocol": "gemini-chat",
262
+ "runtimeKey": "antigravity.jasonqueque",
263
+ "route": "default",
264
+ "series": "gemini-pro",
265
+ "enabled": true,
266
+ "source": "virtualrouter.v2.json#providers[3]",
267
+ "defaultModels": ["gemini-3-pro-low"],
268
+ "credentialsRef": "antigravity-oauth-2-jasonqueque.json"
269
+ }
270
+ ]
271
+ ```
272
+
273
+ ### 6.2 `GET /config/providers/v2/:id`
274
+
275
+ - 用途:查看单个 provider 的详细 Config V2 配置。
276
+ - 在 6.1 的基础上,增加:
277
+
278
+ ```jsonc
279
+ {
280
+ "id": "antigravity.jasonqueque.gemini-3-pro-low",
281
+ "family": "gemini",
282
+ "protocol": "gemini-chat",
283
+ "runtimeKey": "antigravity.jasonqueque",
284
+ "route": "default",
285
+ "series": "gemini-pro",
286
+ "enabled": true,
287
+ "source": "virtualrouter.v2.json#providers[3]",
288
+ "defaultModels": ["gemini-3-pro-low"],
289
+ "allowedModels": ["gemini-3-pro-low", "gemini-3-pro-high"],
290
+ "aliases": {
291
+ "thinking": "gemini-3-pro-high",
292
+ "low": "gemini-3-pro-low"
293
+ },
294
+ "credentialsRef": "antigravity-oauth-2-jasonqueque.json",
295
+ "quota": {
296
+ "perMinuteLimit": 60,
297
+ "perHourLimit": 2000
298
+ },
299
+ "flags": {
300
+ "beta": false,
301
+ "internalOnly": false
302
+ },
303
+ "notes": "Primary Gemini Pro provider for Antigravity runtime."
304
+ }
305
+ ```
306
+
307
+ ### 6.3 `GET /config/providers/v2/:id/preview-route`
308
+
309
+ - 用途:把该 provider 在虚拟路由中的路由规则用人类可读的方式展示出来。
310
+
311
+ ```jsonc
312
+ {
313
+ "id": "antigravity.jasonqueque.gemini-3-pro-low",
314
+ "route": "default",
315
+ "series": "gemini-pro",
316
+ "description": [
317
+ "Matched when route=default and series=gemini-pro.",
318
+ "Primary for tools: tool-request-detected, last-tool-other.",
319
+ "Cooldown series: gemini-pro (300000 ms)."
320
+ ]
321
+ }
322
+ ```
323
+
324
+ - 数据来源:
325
+ - Virtual Router 的内部路由表,序列化为文本说明。
326
+
327
+ ---
328
+
329
+ ## 7. 安全与访问控制(设计约束)
330
+
331
+ - 初期阶段,所有管理 API 仅对 `localhost` 暴露:
332
+ - 与现有 `/shutdown` 路由类似,限制 remoteAddress 为 127.0.0.1 / ::1。
333
+ - 不在管理 API 中提供:
334
+ - 修改配置、强制切换路由、直接操作上游 provider 的危险动作。
335
+ - 日志:
336
+ - 重要错误统一走 `RouteErrorHub`,标记 `scope: 'http' | 'daemon'`,但避免在日志中打印敏感字段。
337
+
338
+ ---
339
+
340
+ ## 8. 与任务规划的对应关系
341
+
342
+ - 「文件结构落盘」:
343
+ - 对应 `docs/daemon-admin-module-structure.md` 中的模块/路径设计。
344
+ - 「文档详细设计更新」:
345
+ - 对应本文件中对各 API 的输入/输出定义。
346
+ - 后续实现步骤:
347
+ - 在 HTTP server 中新增 `daemon-admin-routes` 与各 handler。
348
+ - 在前端 UI 中按本 API 规范对接数据。
349
+ - 最终做一轮端到端集成测试(含 429 冷却/配额展示/credential 状态联动)。
350
+
@@ -0,0 +1,169 @@
1
+ # Daemon / Token 管理 & Provider Config V2 视图模块结构设计
2
+
3
+ > 目标:在不破坏现有 HTTP server / Manager 架构的前提下,为 Daemon/Token 管理 UI 和基于 Config V2 的 Provider 管理视图定义清晰的**模块与文件结构**。本设计仅落盘结构与职责,不改动任何实现。
4
+
5
+ ---
6
+
7
+ ## 1. 总体架构与边界
8
+
9
+ - **HTTP Server 仍然是唯一入口**
10
+ - 继续使用 `src/server/runtime/http-server/index.ts` + `routes.ts` 注册所有 HTTP 路径。
11
+ - 新的管理类 API(daemon/token/health/quota/providers/config-v2)作为一组「管理接口」,挂在 HTTP server 之下。
12
+
13
+ - **ManagerDaemon 继续作为状态聚合点**
14
+ - 已有的 `src/manager` 模块负责:
15
+ - token 刷新(`TokenManagerModule`)
16
+ - health 持久化(`HealthManagerModule`)
17
+ - quota 追踪(`QuotaManagerModule`)
18
+ - routing 指令状态(`RoutingStateManagerModule`)
19
+ - 新的管理 API 只“读”这些模块暴露的状态或执行低风险动作(例如触发一次 verify),不直接操作 llmswitch-core 的内部路由逻辑。
20
+
21
+ - **前端 UI 为独立模块**
22
+ - 静态设计页面保留在 `docs/daemon-admin-ui.html`。
23
+ - 真正运行时的管理 UI 视图将作为 HTTP server 提供的静态页面(后续实现阶段接入),前端通过一组只读 JSON API 获取数据。
24
+
25
+ ---
26
+
27
+ ## 2. 后端模块结构(HTTP Server 侧)
28
+
29
+ ### 2.1 入口与路由注册
30
+
31
+ - 现状:
32
+ - HTTP server 在 `src/server/runtime/http-server/index.ts` 中构造 `RouteCodexHttpServer`。
33
+ - 路由在 `src/server/runtime/http-server/routes.ts` 中通过 `registerHttpRoutes` 注册。
34
+
35
+ - 规划:
36
+ - 新增一个轻量的“管理 API 路由模块”:
37
+ - 文件:`src/server/runtime/http-server/daemon-admin-routes.ts`
38
+ - 导出函数:`registerDaemonAdminRoutes(options: DaemonAdminRouteOptions): void`
39
+ - 在 `routes.ts` 内部调用 `registerDaemonAdminRoutes(...)`,与现有 `/health`、`/config` 等路由并列。
40
+
41
+ ```ts
42
+ // src/server/runtime/http-server/daemon-admin-routes.ts(示意)
43
+ export interface DaemonAdminRouteOptions {
44
+ app: Application;
45
+ getManagerDaemon: () => ManagerDaemon | null;
46
+ getServerId: () => string;
47
+ }
48
+
49
+ export function registerDaemonAdminRoutes(options: DaemonAdminRouteOptions): void {
50
+ const { app } = options;
51
+ // 这里仅定义 path → handler 的绑定,具体 handler 抽到子模块。
52
+ }
53
+ ```
54
+
55
+ ### 2.2 管理 API Handler 模块划分
56
+
57
+ 在 `src/server/runtime/http-server` 下增加一个子目录,专门存放管理类 handler:
58
+
59
+ - 目录:`src/server/runtime/http-server/daemon-admin/`
60
+
61
+ 建议的文件划分:
62
+
63
+ - `daemon-admin/status-handler.ts`
64
+ - 对应 API:`GET /daemon/status`
65
+ - 依赖:
66
+ - `ManagerDaemon`(读取当前是否为 leader、运行模块列表)
67
+ - `TokenManagerModule`(token Daemon 运行状态)
68
+ - `HealthManagerModule` / `QuotaManagerModule`(用于统计摘要)
69
+
70
+ - `daemon-admin/credentials-handler.ts`
71
+ - 对应 API:
72
+ - `GET /daemon/credentials`
73
+ - `GET /daemon/credentials/:id`
74
+ - `POST /daemon/credentials/:id/verify`
75
+ - `POST /daemon/credentials/:id/refresh`
76
+ - 依赖:
77
+ - 现有 token 文件扫描、解析工具:
78
+ - `providers/auth/token-scanner` 系列
79
+ - `token-daemon/token-utils` 中的 `readTokenFile` / `evaluateTokenState`
80
+ - 必须避免返回敏感字段(access_token / refresh_token 等),只返回文件路径、issuer、project_id 等非敏感信息。
81
+
82
+ - `daemon-admin/quota-handler.ts`
83
+ - 对应 API:
84
+ - `GET /quota/summary`
85
+ - `GET /quota/runtime`(按 runtimeKey / providerKey 过滤)
86
+ - `GET /quota/cooldowns`(暴露当前 429 冷却相关信息)
87
+ - 依赖:
88
+ - `QuotaManagerModule` 的 `getRawSnapshot()`。
89
+ - 虚拟路由 cooldown 状态(通过 llmswitch-core 暴露的只读接口,或已有的 series cooldown 统计)。
90
+
91
+ - `daemon-admin/providers-runtime-handler.ts`
92
+ - 对应 API:`GET /providers/runtimes`
93
+ - 依赖:
94
+ - `RouteCodexHttpServer` 内部已维护的 `providerHandles` / `providerKeyToRuntimeKey` 映射。
95
+ - `HealthManagerModule` / `QuotaManagerModule` 的统计,用于补充 runtime 健康/配额状态。
96
+
97
+ - `daemon-admin/config-providers-v2-handler.ts`
98
+ - 对应 API:
99
+ - `GET /config/providers/v2`
100
+ - `GET /config/providers/v2/:id`
101
+ - `GET /config/providers/v2/:id/preview-route`
102
+ - 依赖:
103
+ - 未来的 Config V2 loader / Virtual Router builder:
104
+ - provider 定义集合(id/family/protocol/runtimeKey/route/series/defaultModels/credentialsRef/flags)。
105
+ - 虚拟路由中的路由规则(用于 preview-route 的人类可读描述)。
106
+
107
+ > 以上 handler 模块均保持「薄层」:只做数据组装与序列化,不直接参与路由决策或工具语义处理。
108
+
109
+ ### 2.3 与 ManagerDaemon 的绑定
110
+
111
+ - `RouteCodexHttpServer` 构造时已经创建并启动了 `ManagerDaemon`:
112
+ - 在 `src/server/runtime/http-server/index.ts` 中:
113
+ - 创建 `ManagerDaemon`;
114
+ - 注册 `HealthManagerModule` / `RoutingStateManagerModule` / `TokenManagerModule` / `QuotaManagerModule`;
115
+ - 持有一个 `managerDaemon` 字段。
116
+
117
+ - 新的 `registerDaemonAdminRoutes` 需要能够访问这个实例:
118
+ - 在 `RouteCodexHttpServer` 内暴露一个 `getManagerDaemon(): ManagerDaemon | null` 的只读方法。
119
+ - 调用 `registerHttpRoutes` 时,将此方法以闭包形式传递给 `registerDaemonAdminRoutes`,实现解耦:
120
+
121
+ ```ts
122
+ // routes.ts(示意)
123
+ registerDaemonAdminRoutes({
124
+ app,
125
+ getManagerDaemon: () => this.managerDaemon,
126
+ getServerId: () => this.config.server.serverId
127
+ });
128
+ ```
129
+
130
+ ---
131
+
132
+ ## 3. 前端静态资源结构
133
+
134
+ ### 3.1 设计稿与运行时文件的关系
135
+
136
+ - 设计稿:
137
+ - `docs/daemon-admin-ui.html` 保留为设计 Mock,展示完整的 UI 布局和交互。
138
+
139
+ - 运行时静态页面(后续实现阶段):
140
+ - 计划通过 HTTP server 暴露一个只读页面,例如:
141
+ - `GET /daemon/admin` → 返回一个内嵌或打包好的 HTML。
142
+ - 为了减少重复,推荐方案:
143
+ - 在构建流程中,将 `docs/daemon-admin-ui.html` 复制/压缩到构建输出目录(例如 `dist/daemon-admin/index.html`)。
144
+ - 在 HTTP server 中提供一个简单的静态文件响应(不在本次设计中实现具体逻辑)。
145
+
146
+ ### 3.2 前端脚本组织(后续)
147
+
148
+ - 前端 JS/CSS 初期可以内联在单一 HTML 中(如当前 mock)。
149
+ - 一旦接入真实 API,可将脚本拆分为:
150
+ - `daemon-admin.js`:负责 Tab 切换、调用 JSON API、渲染数据。
151
+ - 后续如有必要,再拆分子模块(例如 `credentials-panel.js`、`providers-panel.js`),但这不是当前阶段的目标。
152
+
153
+ ---
154
+
155
+ ## 4. 与现有路由的关系与约束
156
+
157
+ - 所有新 API 都必须遵守现有 HTTP server 的约束:
158
+ - 不在管理 API 中直接调用 provider 上游或 llmswitch-core 的 Hub Pipeline。
159
+ - 错误处理统一走现有的 `reportRouteError` + `mapErrorToHttp` 逻辑(通过封装好的 helper)。
160
+ - 只暴露只读或低风险的动作,不提供重写配置、强制路由等高风险操作。
161
+
162
+ - 管理 UI 相关路径建议统一在以下空间之内:
163
+ - `/daemon/*`:daemon 自身状态、tokens、credentials。
164
+ - `/quota/*`:配额快照与 429 冷却视图。
165
+ - `/providers/*`:runtime 级别的 provider 运行状态。
166
+ - `/config/providers/v2*`:Config V2 声明性配置视图。
167
+
168
+ > 本文档仅定义结构与边界,实际实现将严格参考本结构,并在实现前再与现有代码和运行约束对齐。实现阶段需同时更新对应的 API 设计文档。
169
+