@jsonstudio/rcc 0.90.252 → 0.90.352

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 (335) hide show
  1. package/README.md +16 -16
  2. package/config/providers/ali-coding-plan.json +73 -0
  3. package/dist/build-info.js +2 -2
  4. package/dist/cli/commands/camoufox.js +2 -2
  5. package/dist/cli/commands/camoufox.js.map +1 -1
  6. package/dist/cli/commands/clean.js +4 -3
  7. package/dist/cli/commands/clean.js.map +1 -1
  8. package/dist/cli/commands/config.js +2 -1
  9. package/dist/cli/commands/config.js.map +1 -1
  10. package/dist/cli/commands/env.js +2 -1
  11. package/dist/cli/commands/env.js.map +1 -1
  12. package/dist/cli/commands/init/basic.js +2 -1
  13. package/dist/cli/commands/init/basic.js.map +1 -1
  14. package/dist/cli/commands/init.js +4 -3
  15. package/dist/cli/commands/init.js.map +1 -1
  16. package/dist/cli/commands/launcher-kernel.js +34 -8
  17. package/dist/cli/commands/launcher-kernel.js.map +1 -1
  18. package/dist/cli/commands/port.js +1 -1
  19. package/dist/cli/commands/port.js.map +1 -1
  20. package/dist/cli/commands/restart.js +3 -2
  21. package/dist/cli/commands/restart.js.map +1 -1
  22. package/dist/cli/commands/session-admin.js +46 -8
  23. package/dist/cli/commands/session-admin.js.map +1 -1
  24. package/dist/cli/commands/session-inject.js +43 -4
  25. package/dist/cli/commands/session-inject.js.map +1 -1
  26. package/dist/cli/commands/start.js +4 -3
  27. package/dist/cli/commands/start.js.map +1 -1
  28. package/dist/cli/commands/stop.js +3 -2
  29. package/dist/cli/commands/stop.js.map +1 -1
  30. package/dist/cli/config/bundled-docs.js +2 -6
  31. package/dist/cli/config/bundled-docs.js.map +1 -1
  32. package/dist/cli/config/init-config.d.ts +1 -0
  33. package/dist/cli/config/init-config.js +6 -3
  34. package/dist/cli/config/init-config.js.map +1 -1
  35. package/dist/cli/config/init-provider-catalog.js +4 -4
  36. package/dist/cli/config/init-provider-catalog.js.map +1 -1
  37. package/dist/cli/config/precommand-default-script.js +3 -9
  38. package/dist/cli/config/precommand-default-script.js.map +1 -1
  39. package/dist/cli/guardian/paths.js +2 -3
  40. package/dist/cli/guardian/paths.js.map +1 -1
  41. package/dist/cli.js +10 -2
  42. package/dist/cli.js.map +1 -1
  43. package/dist/commands/camoufox-fp.js +2 -3
  44. package/dist/commands/camoufox-fp.js.map +1 -1
  45. package/dist/commands/migrate-user-config.d.ts +6 -0
  46. package/dist/commands/migrate-user-config.js +53 -0
  47. package/dist/commands/migrate-user-config.js.map +1 -0
  48. package/dist/commands/provider-update.js +9 -9
  49. package/dist/commands/provider-update.js.map +1 -1
  50. package/dist/commands/quota-daemon.js +3 -3
  51. package/dist/commands/quota-daemon.js.map +1 -1
  52. package/dist/commands/quota-status.js +2 -2
  53. package/dist/commands/quota-status.js.map +1 -1
  54. package/dist/commands/token-daemon.js +2 -2
  55. package/dist/commands/token-daemon.js.map +1 -1
  56. package/dist/commands/validate.js +2 -3
  57. package/dist/commands/validate.js.map +1 -1
  58. package/dist/config/auth-file-resolver.js +2 -2
  59. package/dist/config/auth-file-resolver.js.map +1 -1
  60. package/dist/config/provider-v2-loader.js +9 -6
  61. package/dist/config/provider-v2-loader.js.map +1 -1
  62. package/dist/config/routecodex-config-loader.js +2 -2
  63. package/dist/config/routecodex-config-loader.js.map +1 -1
  64. package/dist/config/unified-config-paths.js +33 -11
  65. package/dist/config/unified-config-paths.js.map +1 -1
  66. package/dist/config/user-config-migration.d.ts +42 -0
  67. package/dist/config/user-config-migration.js +188 -0
  68. package/dist/config/user-config-migration.js.map +1 -0
  69. package/dist/config/user-data-paths.d.ts +59 -0
  70. package/dist/config/user-data-paths.js +174 -0
  71. package/dist/config/user-data-paths.js.map +1 -0
  72. package/dist/config/virtual-router-builder.d.ts +1 -1
  73. package/dist/config/virtual-router-builder.js +1 -1
  74. package/dist/daemon-admin-ui/assets/index-Bnx13Byl.js +15 -0
  75. package/dist/daemon-admin-ui/index.html +1 -1
  76. package/dist/docs/daemon-admin-ui.html +9 -9
  77. package/dist/index.js +66 -13
  78. package/dist/index.js.map +1 -1
  79. package/dist/manager/modules/health/index.js +2 -2
  80. package/dist/manager/modules/health/index.js.map +1 -1
  81. package/dist/manager/modules/quota/antigravity-quota-persistence.d.ts +2 -1
  82. package/dist/manager/modules/quota/antigravity-quota-persistence.js +11 -22
  83. package/dist/manager/modules/quota/antigravity-quota-persistence.js.map +1 -1
  84. package/dist/manager/quota/provider-quota-center.js +33 -25
  85. package/dist/manager/quota/provider-quota-center.js.map +1 -1
  86. package/dist/manager/quota/provider-quota-store.js +11 -4
  87. package/dist/manager/quota/provider-quota-store.js.map +1 -1
  88. package/dist/modules/config/pipeline-config-path.js +3 -3
  89. package/dist/modules/config/pipeline-config-path.js.map +1 -1
  90. package/dist/modules/llmswitch/bridge/index.d.ts +1 -1
  91. package/dist/modules/llmswitch/bridge/index.js +1 -1
  92. package/dist/modules/llmswitch/bridge/index.js.map +1 -1
  93. package/dist/modules/llmswitch/bridge/native-exports.d.ts +1 -0
  94. package/dist/modules/llmswitch/bridge/native-exports.js +27 -0
  95. package/dist/modules/llmswitch/bridge/native-exports.js.map +1 -1
  96. package/dist/modules/llmswitch/bridge/snapshot-recorder.js +95 -24
  97. package/dist/modules/llmswitch/bridge/snapshot-recorder.js.map +1 -1
  98. package/dist/modules/llmswitch/bridge/state-integrations.d.ts +18 -0
  99. package/dist/modules/llmswitch/bridge/state-integrations.js +28 -0
  100. package/dist/modules/llmswitch/bridge/state-integrations.js.map +1 -1
  101. package/dist/modules/llmswitch/bridge.d.ts +2 -2
  102. package/dist/modules/llmswitch/bridge.js +2 -2
  103. package/dist/modules/llmswitch/bridge.js.map +1 -1
  104. package/dist/modules/pipeline/utils/colored-logger.d.ts +1 -0
  105. package/dist/modules/pipeline/utils/colored-logger.js +13 -9
  106. package/dist/modules/pipeline/utils/colored-logger.js.map +1 -1
  107. package/dist/providers/auth/antigravity-fingerprint.js +2 -3
  108. package/dist/providers/auth/antigravity-fingerprint.js.map +1 -1
  109. package/dist/providers/auth/antigravity-reauth-state.js +2 -3
  110. package/dist/providers/auth/antigravity-reauth-state.js.map +1 -1
  111. package/dist/providers/auth/antigravity-user-agent.js +2 -2
  112. package/dist/providers/auth/antigravity-user-agent.js.map +1 -1
  113. package/dist/providers/auth/antigravity-warmup.js +2 -3
  114. package/dist/providers/auth/antigravity-warmup.js.map +1 -1
  115. package/dist/providers/auth/deepseek-account-auth.js +4 -3
  116. package/dist/providers/auth/deepseek-account-auth.js.map +1 -1
  117. package/dist/providers/auth/deepseek-account-token-acquirer.js +3 -2
  118. package/dist/providers/auth/deepseek-account-token-acquirer.js.map +1 -1
  119. package/dist/providers/auth/oauth-auth.js +2 -3
  120. package/dist/providers/auth/oauth-auth.js.map +1 -1
  121. package/dist/providers/auth/oauth-lifecycle/path-resolver.js +6 -7
  122. package/dist/providers/auth/oauth-lifecycle/path-resolver.js.map +1 -1
  123. package/dist/providers/auth/oauth-lifecycle.js +4 -4
  124. package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
  125. package/dist/providers/auth/oauth-repair-cooldown.js +2 -3
  126. package/dist/providers/auth/oauth-repair-cooldown.js.map +1 -1
  127. package/dist/providers/auth/token-scanner/index.js +2 -3
  128. package/dist/providers/auth/token-scanner/index.js.map +1 -1
  129. package/dist/providers/auth/token-storage/token-file-resolver.js +8 -7
  130. package/dist/providers/auth/token-storage/token-file-resolver.js.map +1 -1
  131. package/dist/providers/auth/tokenfile-auth.js +5 -6
  132. package/dist/providers/auth/tokenfile-auth.js.map +1 -1
  133. package/dist/providers/core/config/camoufox-launcher.js +3 -4
  134. package/dist/providers/core/config/camoufox-launcher.js.map +1 -1
  135. package/dist/providers/core/config/provider-oauth-configs.js +2 -2
  136. package/dist/providers/core/config/provider-oauth-configs.js.map +1 -1
  137. package/dist/providers/core/hooks/hooks-integration.js +1 -1
  138. package/dist/providers/core/hooks/hooks-integration.js.map +1 -1
  139. package/dist/providers/core/runtime/deepseek-http-provider.js +2 -1
  140. package/dist/providers/core/runtime/deepseek-http-provider.js.map +1 -1
  141. package/dist/providers/core/utils/snapshot-writer.js +2 -1
  142. package/dist/providers/core/utils/snapshot-writer.js.map +1 -1
  143. package/dist/providers/profile/families/anthropic-profile.js +32 -0
  144. package/dist/providers/profile/families/anthropic-profile.js.map +1 -1
  145. package/dist/server/handlers/config-admin-handler.d.ts +1 -1
  146. package/dist/server/handlers/config-admin-handler.js +6 -6
  147. package/dist/server/handlers/config-admin-handler.js.map +1 -1
  148. package/dist/server/handlers/handler-response-utils.js +9 -4
  149. package/dist/server/handlers/handler-response-utils.js.map +1 -1
  150. package/dist/server/runtime/http-server/clock-runtime-hooks.d.ts +2 -0
  151. package/dist/server/runtime/http-server/clock-runtime-hooks.js +91 -0
  152. package/dist/server/runtime/http-server/clock-runtime-hooks.js.map +1 -0
  153. package/dist/server/runtime/http-server/daemon-admin/auth-handler.js +51 -13
  154. package/dist/server/runtime/http-server/daemon-admin/auth-handler.js.map +1 -1
  155. package/dist/server/runtime/http-server/daemon-admin/auth-store.d.ts +1 -9
  156. package/dist/server/runtime/http-server/daemon-admin/auth-store.js +2 -18
  157. package/dist/server/runtime/http-server/daemon-admin/auth-store.js.map +1 -1
  158. package/dist/server/runtime/http-server/daemon-admin/control-handler.js +3 -3
  159. package/dist/server/runtime/http-server/daemon-admin/control-handler.js.map +1 -1
  160. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js +2 -2
  161. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js.map +1 -1
  162. package/dist/server/runtime/http-server/daemon-admin/providers-handler-routing-utils.js +5 -4
  163. package/dist/server/runtime/http-server/daemon-admin/providers-handler-routing-utils.js.map +1 -1
  164. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js +3 -3
  165. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js.map +1 -1
  166. package/dist/server/runtime/http-server/daemon-admin-routes.d.ts +2 -0
  167. package/dist/server/runtime/http-server/daemon-admin-routes.js +11 -8
  168. package/dist/server/runtime/http-server/daemon-admin-routes.js.map +1 -1
  169. package/dist/server/runtime/http-server/executor/client-injection-flow.js +9 -1
  170. package/dist/server/runtime/http-server/executor/client-injection-flow.js.map +1 -1
  171. package/dist/server/runtime/http-server/executor/provider-response-converter.js +119 -26
  172. package/dist/server/runtime/http-server/executor/provider-response-converter.js.map +1 -1
  173. package/dist/server/runtime/http-server/executor/request-retry-helpers.d.ts +1 -0
  174. package/dist/server/runtime/http-server/executor/request-retry-helpers.js +26 -0
  175. package/dist/server/runtime/http-server/executor/request-retry-helpers.js.map +1 -1
  176. package/dist/server/runtime/http-server/http-server-bootstrap.js +2 -3
  177. package/dist/server/runtime/http-server/http-server-bootstrap.js.map +1 -1
  178. package/dist/server/runtime/http-server/http-server-lifecycle.js +2 -0
  179. package/dist/server/runtime/http-server/http-server-lifecycle.js.map +1 -1
  180. package/dist/server/runtime/http-server/http-server-runtime-setup.js +2 -0
  181. package/dist/server/runtime/http-server/http-server-runtime-setup.js.map +1 -1
  182. package/dist/server/runtime/http-server/http-server-session-daemon.js +9 -299
  183. package/dist/server/runtime/http-server/http-server-session-daemon.js.map +1 -1
  184. package/dist/server/runtime/http-server/middleware.d.ts +7 -0
  185. package/dist/server/runtime/http-server/middleware.js +1 -1
  186. package/dist/server/runtime/http-server/middleware.js.map +1 -1
  187. package/dist/server/runtime/http-server/request-executor.js +36 -51
  188. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  189. package/dist/server/runtime/http-server/routes.js +10 -3
  190. package/dist/server/runtime/http-server/routes.js.map +1 -1
  191. package/dist/server/runtime/http-server/servertool-admin-state.d.ts +1 -0
  192. package/dist/server/runtime/http-server/servertool-admin-state.js +7 -2
  193. package/dist/server/runtime/http-server/servertool-admin-state.js.map +1 -1
  194. package/dist/server/runtime/http-server/session-client-route-utils.d.ts +1 -0
  195. package/dist/server/runtime/http-server/session-client-route-utils.js +49 -4
  196. package/dist/server/runtime/http-server/session-client-route-utils.js.map +1 -1
  197. package/dist/server/runtime/http-server/session-client-routes.d.ts +5 -1
  198. package/dist/server/runtime/http-server/session-client-routes.js +60 -30
  199. package/dist/server/runtime/http-server/session-client-routes.js.map +1 -1
  200. package/dist/server/runtime/http-server/session-dir.js +6 -12
  201. package/dist/server/runtime/http-server/session-dir.js.map +1 -1
  202. package/dist/server/runtime/http-server/stats-manager.js +4 -3
  203. package/dist/server/runtime/http-server/stats-manager.js.map +1 -1
  204. package/dist/server/utils/non-blocking-error-logger.js +2 -1
  205. package/dist/server/utils/non-blocking-error-logger.js.map +1 -1
  206. package/dist/server/utils/request-log-color.js +10 -3
  207. package/dist/server/utils/request-log-color.js.map +1 -1
  208. package/dist/server/utils/stage-logger.js +71 -9
  209. package/dist/server/utils/stage-logger.js.map +1 -1
  210. package/dist/token-daemon/history-store.js +2 -1
  211. package/dist/token-daemon/history-store.js.map +1 -1
  212. package/dist/token-daemon/leader-lock.js +2 -2
  213. package/dist/token-daemon/leader-lock.js.map +1 -1
  214. package/dist/token-daemon/quota-auth-issue.js +2 -4
  215. package/dist/token-daemon/quota-auth-issue.js.map +1 -1
  216. package/dist/token-daemon/server-utils.js +3 -4
  217. package/dist/token-daemon/server-utils.js.map +1 -1
  218. package/dist/token-daemon/token-daemon.js +6 -6
  219. package/dist/token-daemon/token-daemon.js.map +1 -1
  220. package/dist/token-daemon/token-utils.js +2 -1
  221. package/dist/token-daemon/token-utils.js.map +1 -1
  222. package/dist/token-portal/fingerprint-summary.js +2 -3
  223. package/dist/token-portal/fingerprint-summary.js.map +1 -1
  224. package/dist/token-portal/local-token-portal.js +1 -1
  225. package/dist/token-portal/local-token-portal.js.map +1 -1
  226. package/dist/utils/daemon-stop-intent.js +2 -2
  227. package/dist/utils/daemon-stop-intent.js.map +1 -1
  228. package/dist/utils/errorsamples.js +3 -1
  229. package/dist/utils/errorsamples.js.map +1 -1
  230. package/dist/utils/llms-engine-shadow.js +2 -2
  231. package/dist/utils/llms-engine-shadow.js.map +1 -1
  232. package/dist/utils/managed-server-pids.js +2 -2
  233. package/dist/utils/managed-server-pids.js.map +1 -1
  234. package/dist/utils/process-lifecycle-logger.js +2 -1
  235. package/dist/utils/process-lifecycle-logger.js.map +1 -1
  236. package/dist/utils/runtime-exit-forensics.js +2 -2
  237. package/dist/utils/runtime-exit-forensics.js.map +1 -1
  238. package/dist/utils/session-log-color.js +31 -5
  239. package/dist/utils/session-log-color.js.map +1 -1
  240. package/dist/utils/snapshot-writer.js +2 -1
  241. package/dist/utils/snapshot-writer.js.map +1 -1
  242. package/docs/CODEX_AND_CLAUDE_CODE.md +1 -1
  243. package/docs/CONFIG_ARCHITECTURE.md +7 -7
  244. package/docs/DAEMON_CONTROL_PLANE.md +2 -2
  245. package/docs/INSTALLATION_AND_QUICKSTART.md +2 -2
  246. package/docs/INSTRUCTION_MARKUP.md +2 -2
  247. package/docs/OAUTH.md +6 -6
  248. package/docs/PORTS.md +1 -1
  249. package/docs/PROVIDERS_BUILTIN.md +2 -2
  250. package/docs/QUOTA_MANAGER_V3.md +2 -2
  251. package/docs/ROUTING_POLICY_SCHEMA.md +1 -1
  252. package/docs/SERVERTOOL_CLOCK_DESIGN.md +1 -1
  253. package/docs/SERVERTOOL_PRE_COMMAND_HOOKS.md +4 -4
  254. package/docs/anthropic-request-golden-samples.md +4 -4
  255. package/docs/chat-glm-500-analysis.md +2 -2
  256. package/docs/chat-request-golden-samples.md +4 -4
  257. package/docs/codex-samples-replay.md +3 -3
  258. package/docs/daemon-admin-api-design.md +2 -2
  259. package/docs/daemon-admin-ui.html +9 -9
  260. package/docs/design/servertool-stopmessage-lifecycle.md +5 -0
  261. package/docs/golden-ci-library.md +8 -8
  262. package/docs/monitoring/Design.md +2 -2
  263. package/docs/multi-token-auth-guide.md +6 -6
  264. package/docs/oauth-authentication-guide.md +1 -1
  265. package/docs/oauth-iflow-implementation.md +2 -2
  266. package/docs/pipeline-routing-report.md +1 -1
  267. package/docs/plans/manager-daemon/PLAN.md +1 -1
  268. package/docs/plans/provider-config-v2-plan.md +8 -8
  269. package/docs/plans/provider-runtime-manager-plan.md +4 -4
  270. package/docs/provider-analysis.md +5 -5
  271. package/docs/provider-quota-design.md +2 -2
  272. package/docs/providers/antigravity-fingerprint-ua-warmup.md +5 -5
  273. package/docs/providers/antigravity-gemini-provider-compat.md +3 -3
  274. package/docs/providers/deepseek-web-provider-design.md +1 -1
  275. package/docs/providers/gemini-provider.md +1 -1
  276. package/docs/providers/provider-composite-testing.md +2 -2
  277. package/docs/providers/tabglm-claude-code-compat.md +1 -1
  278. package/docs/replay-evidence-iflow-400.txt +3 -3
  279. package/docs/reports/routing-classification-report.json +6 -6
  280. package/docs/reports/routing-classification-report.md +6 -6
  281. package/docs/reports/thinking-keywords-report.json +6 -6
  282. package/docs/responses/README.md +5 -5
  283. package/docs/responses-generic-provider.md +1 -1
  284. package/docs/responses-passthrough-provider-design.md +7 -7
  285. package/docs/routing-instructions.md +1 -1
  286. package/docs/token-daemon-preview.html +3 -3
  287. package/docs/token-refresh-daemon-plan.md +7 -7
  288. package/docs/verification/modelscope-verify.md +2 -2
  289. package/docs/verified-configs/README.md +2 -2
  290. package/docs/verified-configs/v0.45.0/README.md +5 -5
  291. package/docs/verified-configs/v0.45.0/merged-config.5521.json +3 -3
  292. package/docs/verified-configs/v0.45.0/merged-config.qwen-5522.json +3 -3
  293. package/package.json +3 -2
  294. package/scripts/anthropic-four-config-e2e.mjs +5 -5
  295. package/scripts/anthropic-toolcall.mjs +1 -1
  296. package/scripts/batch-toolcall-report.mjs +1 -1
  297. package/scripts/build-core.mjs +2 -7
  298. package/scripts/claude-e2e-listdir-all.sh +1 -1
  299. package/scripts/claude-e2e-listdir-per-config.sh +4 -4
  300. package/scripts/clean-safe.mjs +1 -1
  301. package/scripts/cleanup-beads-oversized-notes.mjs +182 -0
  302. package/scripts/config-core-compare.ts +1 -1
  303. package/scripts/ensure-llmswitch-mode.mjs +7 -1
  304. package/scripts/glm1210-curl-test.sh +1 -1
  305. package/scripts/install-release.sh +1 -1
  306. package/scripts/mock-provider/capture-from-configs.mjs +1 -1
  307. package/scripts/outbound-network-toolcall.mjs +2 -2
  308. package/scripts/outbound-regression-codex-samples.mjs +1 -1
  309. package/scripts/pack-mode.mjs +14 -1
  310. package/scripts/pack-rcc.mjs +9 -4
  311. package/scripts/provider-v2-smoke.mjs +3 -3
  312. package/scripts/publish-rcc.mjs +8 -3
  313. package/scripts/replay-recorded-toolcall.mjs +1 -2
  314. package/scripts/responses-fai-capture.mjs +1 -1
  315. package/scripts/responses-sse-capture.mjs +1 -1
  316. package/scripts/responses-sse-proxy.mjs +1 -1
  317. package/scripts/responses-sse-replay-golden.mjs +252 -111
  318. package/scripts/run-bg.sh +1 -1
  319. package/scripts/run-fg-gtimeout.sh +1 -1
  320. package/scripts/tests/antigravity-codex-sample-pipeline-compare.mjs +1 -1
  321. package/scripts/tests/antigravity-gemini-dryrun-compare.mjs +1 -1
  322. package/scripts/tests/responses-provider-dry-run.mjs +1 -1
  323. package/scripts/tests/virtual-router-health.mjs +1 -1
  324. package/scripts/update-models.mjs +2 -2
  325. package/scripts/v2-simple-monitor.mjs +1 -1
  326. package/scripts/vendor-core.mjs +12 -7
  327. package/scripts/verify-e2e-gemini-followup-sample.mjs +1 -1
  328. package/scripts/verify-e2e-toolcall.mjs +2 -2
  329. package/scripts/verify-health.mjs +2 -2
  330. package/scripts/verify-sse-loop.mjs +1 -1
  331. package/scripts/virtual-router-dryrun.mjs +2 -2
  332. package/scripts/virtual-router-shadow-v2-real.mjs +3 -3
  333. package/dist/daemon-admin-ui/assets/index-C8vP_c5E.js +0 -15
  334. package/docs/rccx-wasm-migration.md +0 -74
  335. package/scripts/compare-codex-rccx.mjs +0 -326
@@ -80,7 +80,7 @@
80
80
 
81
81
  ## 配置情况
82
82
 
83
- - 用户 `~/.routecodex/config.json`(或 `ROUTECODEX_CONFIG_PATH` 指定的文件)由 `bootstrapVirtualRouterConfig` 直接解析,得到 `virtualRouter` + `targetRuntime`,HTTP 服务按该结果构造 Hub Pipeline 与 Provider。
83
+ - 用户 `~/.rcc/config.json`(或 `ROUTECODEX_CONFIG_PATH` 指定的文件)由 `bootstrapVirtualRouterConfig` 直接解析,得到 `virtualRouter` + `targetRuntime`,HTTP 服务按该结果构造 Hub Pipeline 与 Provider。
84
84
  - OpenAI Router 中的 `targetUrl` 由构造参数/默认值直接决定,并非来自 `modules.json`:
85
85
  - `src/server/protocol-handler.ts:89`
86
86
 
@@ -12,7 +12,7 @@
12
12
  ## 模块划分
13
13
 
14
14
  - `TokenManager`(模块 id: `token`)
15
- - 继承现有 token daemon 职责:监控 `~/.routecodex/auth/`、刷新 OAuth token、触发重新认证。
15
+ - 继承现有 token daemon 职责:监控 `~/.rcc/auth/`、刷新 OAuth token、触发重新认证。
16
16
  - API:供 CLI / HTTP server 查询 token 状态与触发刷新。
17
17
  - 通过 host 级 leader lock(基于 PID 的锁文件)保证 **全局仅有一个 Token 刷新器**(server 内置 TokenManager 与外部 `token-daemon` 互斥)。
18
18
 
@@ -3,7 +3,7 @@
3
3
  ## 目标与约束
4
4
 
5
5
  - 将现有「virtualrouter 内联 providers + routing」改为:
6
- - Provider 配置:按 provider 维度拆分到 `~/.routecodex/provider/<id>/config.v2.json`。
6
+ - Provider 配置:按 provider 维度拆分到 `~/.rcc/provider/<id>/config.v2.json`。
7
7
  - Routing 配置:保留在主配置(或单独 routing 文件)中,仅描述 route → pool → providerKey 关系。
8
8
  - v2 配置通过 `version: "2.0.0"` 与 v1 完全区分,不影响已有 v1 配置(`config.v1.json` / `config.json.virtualrouter.providers`)。
9
9
  - 正式运行路径**不做 v1/v2 兼容合并**:v2 模式只读 provider v2 配置;v1 配置仅供迁移脚本和回溯分析使用。
@@ -15,12 +15,12 @@
15
15
 
16
16
  1. 顶层 Provider 目录
17
17
 
18
- - 路径:`~/.routecodex/provider`
18
+ - 路径:`~/.rcc/provider`
19
19
  - 启动行为:
20
20
  - 若目录不存在:启动时自动创建。
21
21
  - 若存在:每个子目录代表一个 provider 实例(`<providerId>` 或 `<providerId>-<profile>`)。
22
22
 
23
- 2. 单个 Provider 目录结构(示例:`~/.routecodex/provider/antigravity`)
23
+ 2. 单个 Provider 目录结构(示例:`~/.rcc/provider/antigravity`)
24
24
 
25
25
  - 静态配置(v2):
26
26
  - 文件:`config.v2.json`
@@ -35,7 +35,7 @@
35
35
  "auth": {
36
36
  "mode": "oauth",
37
37
  "oauthProviderId": "antigravity",
38
- "tokenFile": "~/.routecodex/auth/antigravity-oauth-1-geetasamodgeetasamoda.json"
38
+ "tokenFile": "~/.rcc/auth/antigravity-oauth-1-geetasamodgeetasamoda.json"
39
39
  },
40
40
  "models": [
41
41
  {
@@ -91,7 +91,7 @@
91
91
  2. VirtualRouterInput 组合逻辑(v2 模式)
92
92
 
93
93
  - 启动时步骤:
94
- 1. 扫描 `~/.routecodex/provider`:
94
+ 1. 扫描 `~/.rcc/provider`:
95
95
  - 如不存在则创建空目录。
96
96
  - 对每个子目录:若存在 `config.v2.json`:解析为 `ProviderConfigV2`;否则跳过(无隐式迁移)。
97
97
  2. 从 `config.json` / routing 文件读取 routing 配置。
@@ -130,7 +130,7 @@
130
130
  - 预览:
131
131
  - 在终端打印拟写入的 `config.v2.json`,高亮关键字段。
132
132
  - 确认:
133
- - 用户确认后写入/覆盖 `~/.routecodex/provider/<id>/config.v2.json`。
133
+ - 用户确认后写入/覆盖 `~/.rcc/provider/<id>/config.v2.json`。
134
134
 
135
135
  3. list/delete 行为
136
136
 
@@ -139,7 +139,7 @@
139
139
  - delete:
140
140
  - 询问确认后:
141
141
  - 仅删除 `config.v2.json`(保留 runtime-state 调试),或
142
- - 删除整个 `~/.routecodex/provider/<id>` 目录(可作为高级选项,默认不做)。
142
+ - 删除整个 `~/.rcc/provider/<id>` 目录(可作为高级选项,默认不做)。
143
143
 
144
144
  ---
145
145
 
@@ -152,7 +152,7 @@
152
152
  - 定义 `config.v2.json` 的 TypeScript 接口与基础校验逻辑。
153
153
 
154
154
  2. 阶段 2:Provider v2 loader(只读,不接入 runtime)
155
- - 实现扫描 `~/.routecodex/provider` 的 ProviderConfigV2 loader(**只读取显式 `config.v2.json`**,不做自动迁移)。
155
+ - 实现扫描 `~/.rcc/provider` 的 ProviderConfigV2 loader(**只读取显式 `config.v2.json`**,不做自动迁移)。
156
156
  - 编写单元测试:确保 loader 对合法 v2 配置的读取行为稳定、可预期;迁移逻辑由单独脚本负责。
157
157
 
158
158
  3. 阶段 3:Routing loader 与 VirtualRouterInput 组合器
@@ -71,10 +71,10 @@ interface ProviderRuntimeState {
71
71
  type ProviderRuntimeTable = Map<string, ProviderRuntimeState>; // key = providerKey
72
72
  ```
73
73
  - 磁盘持久化:
74
- - 全局快照(可选):`~/.routecodex/state/providers/<serverId>/providers.jsonl`
74
+ - 全局快照(可选):`~/.rcc/state/providers/<serverId>/providers.jsonl`
75
75
  - 每 provider 本地状态(推荐):
76
- - `~/.routecodex/provider/<id>/runtime-state.json`
77
- - `~/.routecodex/provider/<id>/events.jsonl`(ProviderErrorEvent / 手动操作日志)
76
+ - `~/.rcc/provider/<id>/runtime-state.json`
77
+ - `~/.rcc/provider/<id>/events.jsonl`(ProviderErrorEvent / 手动操作日志)
78
78
  - TTL 约束:
79
79
  - 所有 `cooldownExpiresAt` / `blacklistExpiresAt` 必须**硬性截断**在 24 小时以内:
80
80
  - 写入前:`expiresAt = min(now + requestedTtl, now + 24h)`。
@@ -179,7 +179,7 @@ Provider runtime 可以在发起请求前调用 `isRoutable` 做一次最终检
179
179
 
180
180
  1. Server 启动时:
181
181
  - ProviderRuntimeManager:
182
- - 扫描 `~/.routecodex/provider/*/runtime-state.json`。
182
+ - 扫描 `~/.rcc/provider/*/runtime-state.json`。
183
183
  - 合并为全局 `ProviderRuntimeTable`,丢弃所有 `expiresAt <= now` 的条目。
184
184
  - Virtual Router Engine:
185
185
  - 通过注入的 `ProviderRuntimeView` 在首次构造时就能看到恢复后的状态。
@@ -39,7 +39,7 @@
39
39
 
40
40
  ┌─────────────────────────────────────────────────────────────────┐
41
41
  │ 3. Provider 配置生成 (writeProviderV2) │
42
- │ 位置: ~/.routecodex/provider/{providerId}/config.v2.json │
42
+ │ 位置: ~/.rcc/provider/{providerId}/config.v2.json │
43
43
  │ │
44
44
  │ 配置结构: │
45
45
  │ { │
@@ -59,7 +59,7 @@
59
59
 
60
60
  ┌─────────────────────────────────────────────────────────────────┐
61
61
  │ 4. 主配置生成 (buildV2ConfigObject) │
62
- │ 位置: ~/.routecodex/config.json │
62
+ │ 位置: ~/.rcc/config.json │
63
63
  │ │
64
64
  │ 配置结构: │
65
65
  │ { │
@@ -119,7 +119,7 @@ routecodex init --providers openai,qwen --default-provider qwen --force
119
119
  1. **创建 Provider 配置目录**:
120
120
 
121
121
  ```bash
122
- mkdir -p ~/.routecodex/provider/myprovider
122
+ mkdir -p ~/.rcc/provider/myprovider
123
123
  ```
124
124
 
125
125
  2. **创建 config.v2.json**:
@@ -198,7 +198,7 @@ routecodex provider doctor myprovider
198
198
  - Provider 鉴权类型对照表
199
199
 
200
200
  2. **Provider 目录结构** (README.md 第 142-144 行):
201
- - `~/.routecodex/provider/<providerId>/config.v2.json`
201
+ - `~/.rcc/provider/<providerId>/config.v2.json`
202
202
 
203
203
  3. **Provider 类型文档**:
204
204
  - `docs/PROVIDER_TYPES.md` - Provider 类型说明
@@ -264,7 +264,7 @@ routecodex provider validate myprovider
264
264
 
265
265
  #### A. Provider Catalog 扩展
266
266
 
267
- - [ ] 支持自定义 catalog 扩展 (`~/.routecodex/provider-catalog.json`)
267
+ - [ ] 支持自定义 catalog 扩展 (`~/.rcc/provider-catalog.json`)
268
268
  - [ ] 支持从远程 URL 加载 catalog
269
269
  - [ ] catalog 版本管理和更新检查
270
270
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 1. 文件结构
6
6
 
7
- - 根目录:`~/.routecodex/quota/`
7
+ - 根目录:`~/.rcc/quota/`
8
8
  - `provider-quota.json`:当前生效的 quota 快照(virtual-router 只读)。
9
9
  - `provider-errors.ndjson`:错误事件流水(daemon 可选使用,用于恢复 / 调试)。
10
10
 
@@ -134,7 +134,7 @@
134
134
  ### Phase 4:virtual-router 接线(可通过 feature flag 控制)
135
135
 
136
136
  - 在 virtual-router 构建 provider 池时:
137
- - 可选读取 `~/.routecodex/quota/provider-quota.json`:
137
+ - 可选读取 `~/.rcc/quota/provider-quota.json`:
138
138
  - 过滤 `inPool !== true` 或 `cooldownUntil/blacklistUntil > now` 的 provider。
139
139
  - 按 `priorityTier` 做 tier 调度。
140
140
  - 初期通过环境变量开启(例如 `ROUTECODEX_QUOTA_ENABLED=1`),待稳定后再作为默认路径。
@@ -8,7 +8,7 @@
8
8
 
9
9
  ## 0) 你需要知道的文件/目录/入口
10
10
 
11
- ### 关键目录(默认都在 `~/.routecodex/`)
11
+ ### 关键目录(默认都在 `~/.rcc/`)
12
12
 
13
13
  - OAuth token:`auth/antigravity-oauth-*.json`
14
14
  - Camoufox profile:`camoufox-profiles/rc-gemini.<alias>/...`
@@ -54,7 +54,7 @@ RouteCodex 的版本号来源(从高到低):
54
54
  1. `ROUTECODEX_ANTIGRAVITY_USER_AGENT` / `RCC_ANTIGRAVITY_USER_AGENT`(完全覆盖)
55
55
  2. `ROUTECODEX_ANTIGRAVITY_UA_VERSION` / `RCC_ANTIGRAVITY_UA_VERSION`
56
56
  3. 远程拉取(可通过 `ROUTECODEX_ANTIGRAVITY_UA_DISABLE_REMOTE=1` 禁用)
57
- 4. `~/.routecodex/state/antigravity-ua-version.json`
57
+ 4. `~/.rcc/state/antigravity-ua-version.json`
58
58
  5. 兜底版本(仅保证“有值”,不保证不过期)
59
59
 
60
60
  ### 修复步骤
@@ -64,7 +64,7 @@ RouteCodex 的版本号来源(从高到低):
64
64
  - `routecodex oauth antigravity-auto <token-selector-or-path>`
65
65
  - 或批量:`routecodex oauth reauth-required`
66
66
  3. 如果 Google 提示需要二次验证(账户风控页),用对应 alias 的 profile 打开浏览器完成验证(“养号/解封”):
67
- - `rcc camoufox ~/.routecodex/auth/antigravity-oauth-<alias>.json --url '<verify_url>'`
67
+ - `rcc camoufox ~/.rcc/auth/antigravity-oauth-<alias>.json --url '<verify_url>'`
68
68
 
69
69
  > 关键点:必须用 **同一个 alias 的 Camoufox profile** 打开验证页,否则容易造成“验证通过但指纹漂移 → 继续 403”。
70
70
 
@@ -105,7 +105,7 @@ RouteCodex 的版本号来源(从高到低):
105
105
  - `chat:gemini` 不会跑 `gemini_cli_request_wrap`(因此不会做历史 `thoughtSignature` 注入)
106
106
  - Antigravity 必须用 `chat:gemini-cli`(Cloud Code Assist wrapper 对齐 + signature 注入)
107
107
 
108
- 修复点:确保你的用户配置中(`~/.routecodex/config.json`):
108
+ 修复点:确保你的用户配置中(`~/.rcc/config.json`):
109
109
 
110
110
  ```jsonc
111
111
  {
@@ -143,7 +143,7 @@ RouteCodex 的版本号来源(从高到低):
143
143
  > 这个验证不依赖“你是否真的有 quota”;只要 upstream 在某次响应里下发过 signature,后续注入就应当可见。
144
144
 
145
145
  ### 如何确认 compat profile 真的生效
146
- 用 `--snap` 或 dev 默认快照(`~/.routecodex/codex-samples/...`)检查 pipeline stage8:
146
+ 用 `--snap` 或 dev 默认快照(`~/.rcc/codex-samples/...`)检查 pipeline stage8:
147
147
  - `chat_process.req.stage8.outbound.compat.json` 里必须出现 `chat:gemini-cli`
148
148
  - 如果你看到的是 `chat:gemini`,说明 profile 仍然配错(很容易复发“第一次 OK,第二次 429”)
149
149
 
@@ -172,14 +172,14 @@ antigravity/<version> <os>/<arch>
172
172
  1. 显式 UA:`ROUTECODEX_ANTIGRAVITY_USER_AGENT` / `RCC_ANTIGRAVITY_USER_AGENT`(完全覆盖)
173
173
  2. 显式版本号:`ROUTECODEX_ANTIGRAVITY_UA_VERSION` / `RCC_ANTIGRAVITY_UA_VERSION`
174
174
  3. 远程拉取:`VERSION_URL`,失败时回退 `CHANGELOG_URL`(可用 `ROUTECODEX_ANTIGRAVITY_UA_DISABLE_REMOTE=1` 禁用)
175
- 4. 本地磁盘 cache:`~/.routecodex/state/antigravity-ua-version.json`
175
+ 4. 本地磁盘 cache:`~/.rcc/state/antigravity-ua-version.json`
176
176
  5. 最后兜底:`KNOWN_STABLE_VERSION`(当前 `4.1.24`,对齐 Antigravity-Manager)
177
177
 
178
178
  ### 4.3 `<os>/<arch>` suffix 如何从指纹推断(并且为何禁 linux)
179
179
 
180
180
  实现位置:`src/providers/auth/antigravity-fingerprint.ts`
181
181
 
182
- - 指纹文件:`~/.routecodex/camoufox-fp/<profileId>.json`
182
+ - 指纹文件:`~/.rcc/camoufox-fp/<profileId>.json`
183
183
  - 从 `CAMOU_CONFIG_1` 的 `navigator.*` 字段推断:
184
184
  - `windows|macos|linux`
185
185
  - `amd64|aarch64`
@@ -191,7 +191,7 @@ RouteCodex 约束:
191
191
 
192
192
  实现位置:`src/providers/core/config/camoufox-launcher.ts`
193
193
 
194
- - 每个 alias 都对应一个稳定 profileId(目录在 `~/.routecodex/camoufox-profiles/`)。
194
+ - 每个 alias 都对应一个稳定 profileId(目录在 `~/.rcc/camoufox-profiles/`)。
195
195
  - `gemini-cli` 与 `antigravity` 共享同一“指纹家族(gemini)”,因此同 alias 在两者之间共享 profileId(避免一个账号跑出两套指纹)。
196
196
  - OS policy:对 `(providerFamily, alias)` 做稳定 hash,把不同 alias 分布到 `windows/macos`,并**严格禁止 linux**。
197
197
 
@@ -78,7 +78,7 @@
78
78
  {
79
79
  "alias": "1",
80
80
  "type": "deepseek-account",
81
- "tokenFile": "~/.routecodex/auth/deepseek-account-1.json"
81
+ "tokenFile": "~/.rcc/auth/deepseek-account-1.json"
82
82
  }
83
83
  ]
84
84
  },
@@ -42,7 +42,7 @@
42
42
 
43
43
  ```bash
44
44
  node dist/tools/provider-update/index.js \
45
- --config /Users/you/.routecodex/provider/gemini/config.json \
45
+ --config /Users/you/.rcc/provider/gemini/config.json \
46
46
  --write --probe-keys --verbose
47
47
  ```
48
48
 
@@ -77,8 +77,8 @@ test('protocol mismatch fails fast', async () => {
77
77
  ```
78
78
  npm run build
79
79
  node scripts/pipeline-dry-run.mjs \
80
- --config ~/.routecodex/config.json \
81
- --samples ~/.routecodex/codex-samples \
80
+ --config ~/.rcc/config.json \
81
+ --samples ~/.rcc/codex-samples \
82
82
  --out demo-results/pipeline-dryrun
83
83
  ```
84
84
 
@@ -10,7 +10,7 @@ tabglm 的 Anthropic 入口会对请求做“官方客户端”校验;当 `sys
10
10
 
11
11
  ## 启用方式(推荐:只改 config)
12
12
 
13
- 在 `~/.routecodex/config.json`(或你的自定义 config)里为 tabglm provider 开启 compat profile(必须显式配置,禁止推断):
13
+ 在 `~/.rcc/config.json`(或你的自定义 config)里为 tabglm provider 开启 compat profile(必须显式配置,禁止推断):
14
14
 
15
15
  - 推荐:`virtualrouter.providers.tabglm.compatibilityProfile = "anthropic:claude-code"`
16
16
  - 也支持:`virtualrouter.providers.tabglm.compatibilityProfile = "chat:claude-code"`
@@ -6,13 +6,13 @@
6
6
  - Before fix: HTTP 400 business error 514
7
7
  - After fix: HTTP 200, successful response
8
8
  - Output saved: /tmp/replay-iflow-base-req_1770377342669_6d3e332c.txt (no longer available)
9
- - Verification command: `npm run replay:codex-sample -- --sample ~/.routecodex/codex-samples/openai-responses/iflow.1-186.kimi-k2.5/req_1770377342669_6d3e332c/client-request.json`
9
+ - Verification command: `npm run replay:codex-sample -- --sample ~/.rcc/codex-samples/openai-responses/iflow.1-186.kimi-k2.5/req_1770377342669_6d3e332c/client-request.json`
10
10
 
11
11
  ### Sample 2: Stop_followup request (openai-responses-iflow.1-186...20260207T100636992-003_stop_followup)
12
12
  - Before fix: HTTP 400 business error 514
13
13
  - After fix: HTTP 200, successful response
14
14
  - Output saved: /tmp/replay-iflow-stop-followup-20260207T100636992-003.withkey.txt (no longer available)
15
- - Verification command: `npm run replay:codex-sample -- --sample ~/.routecodex/codex-samples/openai-responses/iflow.1-186.kimi-k2.5/.../client-request.json`
15
+ - Verification command: `npm run replay:codex-sample -- --sample ~/.rcc/codex-samples/openai-responses/iflow.1-186.kimi-k2.5/.../client-request.json`
16
16
 
17
17
  ## Unaffected Provider (tab.gpt-5.3-codex) - Control Replay
18
18
 
@@ -20,7 +20,7 @@
20
20
  - Before fix: HTTP 200, unchanged
21
21
  - After fix: HTTP 200, unchanged
22
22
  - Output saved: /tmp/replay-control-tab-key1.req_1770381056958_a35ee9ff.txt (no longer available)
23
- - Verification command: `npm run replay:codex-sample -- --sample ~/.routecodex/codex-samples/openai-chat/tab.key1.gpt-5.3-codex/req_1770381056958_a35ee9ff/client-request.json`
23
+ - Verification command: `npm run replay:codex-sample -- --sample ~/.rcc/codex-samples/openai-chat/tab.key1.gpt-5.3-codex/req_1770381056958_a35ee9ff/client-request.json`
24
24
 
25
25
  ## Summary
26
26
  All same-shape and control replays pass. The fix ensures:
@@ -13,12 +13,12 @@
13
13
  "vision"
14
14
  ],
15
15
  "sampleByCategory": {
16
- "thinking": "/Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1762999988376_zyns5xw9n_provider-request.json",
17
- "longContext": "/Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1763000100195_09q89vvi2_provider-request.json",
18
- "tools": "/Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1763002108961_i6ia6jndk_provider-request.json",
19
- "webSearch": "/Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1763002108961_k3ysf83dl_provider-request.json",
20
- "coding": "/Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1763002110308_iyj8j09zq_provider-request.json",
21
- "default": "/Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1763014458732_3yfsckrin_provider-request.json"
16
+ "thinking": "/Users/fanzhang/.rcc/codex-samples/openai-chat/req_1762999988376_zyns5xw9n_provider-request.json",
17
+ "longContext": "/Users/fanzhang/.rcc/codex-samples/openai-chat/req_1763000100195_09q89vvi2_provider-request.json",
18
+ "tools": "/Users/fanzhang/.rcc/codex-samples/openai-chat/req_1763002108961_i6ia6jndk_provider-request.json",
19
+ "webSearch": "/Users/fanzhang/.rcc/codex-samples/openai-chat/req_1763002108961_k3ysf83dl_provider-request.json",
20
+ "coding": "/Users/fanzhang/.rcc/codex-samples/openai-chat/req_1763002110308_iyj8j09zq_provider-request.json",
21
+ "default": "/Users/fanzhang/.rcc/codex-samples/openai-chat/req_1763014458732_3yfsckrin_provider-request.json"
22
22
  },
23
23
  "errors": []
24
24
  }
@@ -6,12 +6,12 @@
6
6
 
7
7
  ## Samples
8
8
 
9
- - thinking: /Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1762999988376_zyns5xw9n_provider-request.json
10
- - longContext: /Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1763000100195_09q89vvi2_provider-request.json
11
- - tools: /Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1763002108961_i6ia6jndk_provider-request.json
12
- - webSearch: /Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1763002108961_k3ysf83dl_provider-request.json
13
- - coding: /Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1763002110308_iyj8j09zq_provider-request.json
14
- - default: /Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1763014458732_3yfsckrin_provider-request.json
9
+ - thinking: /Users/fanzhang/.rcc/codex-samples/openai-chat/req_1762999988376_zyns5xw9n_provider-request.json
10
+ - longContext: /Users/fanzhang/.rcc/codex-samples/openai-chat/req_1763000100195_09q89vvi2_provider-request.json
11
+ - tools: /Users/fanzhang/.rcc/codex-samples/openai-chat/req_1763002108961_i6ia6jndk_provider-request.json
12
+ - webSearch: /Users/fanzhang/.rcc/codex-samples/openai-chat/req_1763002108961_k3ysf83dl_provider-request.json
13
+ - coding: /Users/fanzhang/.rcc/codex-samples/openai-chat/req_1763002110308_iyj8j09zq_provider-request.json
14
+ - default: /Users/fanzhang/.rcc/codex-samples/openai-chat/req_1763014458732_3yfsckrin_provider-request.json
15
15
 
16
16
  ## Errors
17
17
 
@@ -9,11 +9,11 @@
9
9
  "analyze": 12
10
10
  },
11
11
  "samplePerKeyword": {
12
- "analysis": "/Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1762999988376_zyns5xw9n_provider-request.json",
13
- "思考": "/Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1763002108523_9wlgh144y_provider-request.json",
14
- "推理": "/Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1763002108523_9wlgh144y_provider-request.json",
15
- "分析": "/Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1763002108523_9wlgh144y_provider-request.json",
16
- "reasoning": "/Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1763002387567_v2m2i4vc2_provider-request.json",
17
- "analyze": "/Users/fanzhang/.routecodex/codex-samples/openai-chat/req_1763085298297_n028lwxea_provider-request.json"
12
+ "analysis": "/Users/fanzhang/.rcc/codex-samples/openai-chat/req_1762999988376_zyns5xw9n_provider-request.json",
13
+ "思考": "/Users/fanzhang/.rcc/codex-samples/openai-chat/req_1763002108523_9wlgh144y_provider-request.json",
14
+ "推理": "/Users/fanzhang/.rcc/codex-samples/openai-chat/req_1763002108523_9wlgh144y_provider-request.json",
15
+ "分析": "/Users/fanzhang/.rcc/codex-samples/openai-chat/req_1763002108523_9wlgh144y_provider-request.json",
16
+ "reasoning": "/Users/fanzhang/.rcc/codex-samples/openai-chat/req_1763002387567_v2m2i4vc2_provider-request.json",
17
+ "analyze": "/Users/fanzhang/.rcc/codex-samples/openai-chat/req_1763085298297_n028lwxea_provider-request.json"
18
18
  }
19
19
  }
@@ -3,9 +3,9 @@
3
3
  本节记录当前已经验证 **可以和 `https://www.fakercode.top/v1/responses` 正常通信** 的典型请求形状,方便后续实现 Responses provider 和 llmswitch-core 路由时参考。
4
4
 
5
5
  > 最新直通黄金样本:
6
- > - `~/.routecodex/codex-samples/openai-responses/req_req-v2-1763955655135-2z91vfddh_request_1_validation_pre.json`(llmswitch 输入)
7
- > - `~/.routecodex/codex-samples/openai-responses/req_1763955655139_mhw2j6ao_http-request.json`(/v1/responses 入口)
8
- > - `~/.routecodex/codex-samples/openai-responses/req_1763955655143_24f5h9qsj_provider-request.json`(Responses Provider 直通)
6
+ > - `~/.rcc/codex-samples/openai-responses/req_req-v2-1763955655135-2z91vfddh_request_1_validation_pre.json`(llmswitch 输入)
7
+ > - `~/.rcc/codex-samples/openai-responses/req_1763955655139_mhw2j6ao_http-request.json`(/v1/responses 入口)
8
+ > - `~/.rcc/codex-samples/openai-responses/req_1763955655143_24f5h9qsj_provider-request.json`(Responses Provider 直通)
9
9
  > 同一时间窗的前序样本(`req_1763955649860_832l5215_http-request.json`、`req_1763955649865_drd7xwttl_provider-request.json` 等)记录了相同请求在路由/Provider 侧的视角,可一起对照,`data` 或 `data.originalData` 即为发送给 FC 的最终载荷。
10
10
 
11
11
  ### 1. 已验证成功的请求形状(摘要)
@@ -100,7 +100,7 @@
100
100
  - **metadata 可以保留 RouteCodex 自己的统计字段**,对上游兼容无明显影响。
101
101
  - **stream=true + SSE**:该请求在 FC 上下游是以 Responses SSE 事件流的形式返回(`response.created` / `response.output_text.delta` / `response.completed` 等事件)。
102
102
  - **工具结果配对只依赖 `call_id`**:OpenAI Responses 规范要求 `function_call` 与 `function_call_output` 仅通过同一 `call_id` 关联,并不会额外携带 `tool_call_id`。RouteCodex 在转换为 Chat 形状时会把 `call_id` 临时映射为 Chat 所需的 `tool_call_id`,但在发给上游或回传客户端前必须把结构还原为“只有 `call_id` 的官方形状”,否则像 c4m / Fai 这类严格实现会直接报 `Unknown parameter: input[].tool_call_id`。
103
- - **强制开启 streaming:在用户 Provider 配置(例如 `~/.routecodex/provider/fc/config.v1.json`)的 Responses 提供者下添加 `"responses": { "process": "passthrough", "streaming": "always" }`,这样 `ResponsesHttpProvider` 会通过 `responses.streaming` 判定为 `always`,即使入口是 Anthropic/Messages 也会对上游(如 Fai/c4m)以 SSE 模式发送请求。**
103
+ - **强制开启 streaming:在用户 Provider 配置(例如 `~/.rcc/provider/fc/config.v1.json`)的 Responses 提供者下添加 `"responses": { "process": "passthrough", "streaming": "always" }`,这样 `ResponsesHttpProvider` 会通过 `responses.streaming` 判定为 `always`,即使入口是 Anthropic/Messages 也会对上游(如 Fai/c4m)以 SSE 模式发送请求。**
104
104
 
105
105
  ### 2. 失败的简化请求形状(对比)
106
106
 
@@ -122,7 +122,7 @@
122
122
  ```bash
123
123
  FC_API_KEY=... FC_MODEL=gpt-5.1 \
124
124
  node scripts/fc-responses-from-snapshot.mjs \
125
- ~/.routecodex/codex-samples/openai-responses/req_req-v2-1763955655135-2z91vfddh_request_1_validation_pre.json
125
+ ~/.rcc/codex-samples/openai-responses/req_req-v2-1763955655135-2z91vfddh_request_1_validation_pre.json
126
126
  ```
127
127
 
128
128
  在成功场景下,SDK 报告的事件分布如下(节选):
@@ -67,7 +67,7 @@ virtualRouter 期望(关键片段)
67
67
  - 工具链:`required_action.submit_tool_outputs` 原样透传,不文本化。
68
68
 
69
69
  落盘与回放
70
- - 目录:`~/.routecodex/codex-samples/responses-replay`。
70
+ - 目录:`~/.rcc/codex-samples/responses-replay`。
71
71
  - 文件:`raw-request_req_*.json`、`provider-out-generic_*.json`、`sse-events-<RID>.log`。
72
72
  - 脚本(新增):
73
73
  - `scripts/verify-responses-passthrough.mjs`:对比 raw-request 与 provider-out 正文字段一致(headers/trace 差异允许)。
@@ -6,7 +6,7 @@
6
6
 
7
7
  - 目标
8
8
  - 在 `/v1/responses` 下提供“真实 SSE 透传”能力:输入 Responses 请求,输出同规范 Responses 事件流。
9
- - 使用配置驱动:`~/.routecodex/config.json` 中新增一个 `type: "responses-standard"` 的 provider;模型设为 `gpt-5.1`;将其设置为默认路由(`routing.default`)。
9
+ - 使用配置驱动:`~/.rcc/config.json` 中新增一个 `type: "responses-standard"` 的 provider;模型设为 `gpt-5.1`;将其设置为默认路由(`routing.default`)。
10
10
  - 与黑盒客户端无耦合:不需要客户端改代码即可稳定收到事件与字节。
11
11
  - 强可观测:保留请求/响应快照;增加服务端原始 SSE 字节 tee 日志。
12
12
 
@@ -75,7 +75,7 @@
75
75
 
76
76
  ## 4. 配置与选择
77
77
 
78
- - Provider 配置(示例,已按照你的要求生成到 `~/.routecodex/config.responses.json`):
78
+ - Provider 配置(示例,已按照你的要求生成到 `~/.rcc/config.responses.json`):
79
79
  - `type`: `"responses-standard"`
80
80
  - `baseUrl`: `"https://www.fakercode.top/v1"`
81
81
  - `auth.type`: `"apikey"`
@@ -104,7 +104,7 @@
104
104
  - submit 路径新增对 `llmswitch-core` 的 `resumeResponsesConversation()` 调用,server 侧仅负责读取 `response_id` / `tool_outputs` 并交给核心缓存生成完整 payload,成功后再进 Hub Pipeline,失败返回 400(表示响应已过期或丢失)。
105
105
 
106
106
  4) 配置示例(你已要求,已生成在用户目录):
107
- - `~/.routecodex/config.responses.json`(不改仓库内默认 config)。
107
+ - `~/.rcc/config.responses.json`(不改仓库内默认 config)。
108
108
 
109
109
  ## 6. 测试与验收
110
110
 
@@ -114,8 +114,8 @@
114
114
  - 工具回路:收到 `required_action` 后,黑盒 `submit_tool_outputs`,再验证下一轮直到 `done`。
115
115
 
116
116
  - 服务端可观测:
117
- - 原始 SSE 字节:`~/.routecodex/logs/sse/<reqId>_server.sse.log`
118
- - 快照:`~/.routecodex/codex-samples/openai-responses/` 下的 `provider-request.json` / `provider-response.json` / `provider-error.json` 与 `*_sse_pre/post.json`
117
+ - 原始 SSE 字节:`~/.rcc/logs/sse/<reqId>_server.sse.log`
118
+ - 快照:`~/.rcc/codex-samples/openai-responses/` 下的 `provider-request.json` / `provider-response.json` / `provider-error.json` 与 `*_sse_pre/post.json`
119
119
 
120
120
  - 代理排查建议:
121
121
  - Nginx:`proxy_buffering off;` `proxy_http_version 1.1;` `proxy_set_header Connection '';` `chunked_transfer_encoding on;`;
@@ -144,7 +144,7 @@
144
144
 
145
145
  - 命令:`npm run verify:sse-loop`
146
146
  - 统一触发 Responses、Chat(LMStudio)和 Anthropic(GLM-Anthropic)的官方 SDK → RouteCodex 对比。
147
- - 需要提前在 `~/.routecodex/provider/<providerId>/` 配置相应上游;RouteCodex 本地实例需已启动(默认 `http://127.0.0.1:5555/v1`)。
147
+ - 需要提前在 `~/.rcc/provider/<providerId>/` 配置相应上游;RouteCodex 本地实例需已启动(默认 `http://127.0.0.1:5555/v1`)。
148
148
  - 环境变量:
149
149
  - `RCC_LOOP_RESP_PROVIDER` / `RCC_LOOP_RESP_MODEL`
150
150
  - `RCC_LOOP_CHAT_MODEL`
@@ -157,7 +157,7 @@
157
157
 
158
158
  附:配置示例(已生成在用户目录)
159
159
 
160
- - `~/.routecodex/config.responses.json`(节选)
160
+ - `~/.rcc/config.responses.json`(节选)
161
161
 
162
162
  ```
163
163
  {
@@ -166,7 +166,7 @@ RouteCodex 支持通过用户消息中的特殊指令 `<**...**>` 来动态控
166
166
  - 启用 / 更新自动续写:
167
167
  - `<**stopMessage:"继续"**>` → 默认最多自动续写 10 次;
168
168
  - `<**stopMessage:"继续",3**>` → 最多自动续写 3 次;
169
- - `<**stopMessage:<file://stopMessage/message1.md>**>` → 读取 `~/.routecodex/stopMessage/message1.md` 作为 stopMessage 文案(设置时读取并缓存到内存);
169
+ - `<**stopMessage:<file://stopMessage/message1.md>**>` → 读取 `~/.rcc/stopMessage/message1.md` 作为 stopMessage 文案(设置时读取并缓存到内存);
170
170
  - 清理 stopMessage 状态:
171
171
  - `<**stopMessage:clear**>`
172
172
 
@@ -210,7 +210,7 @@
210
210
  <div class="scope-switch">
211
211
  <span class="dim">范围:</span>
212
212
  <span class="scope-pill active">当前 Server(local-5555)</span>
213
- <span class="scope-pill">当前 Config(~/.routecodex/config.json)</span>
213
+ <span class="scope-pill">当前 Config(~/.rcc/config.json)</span>
214
214
  <span class="scope-pill">所有 Server</span>
215
215
  <span class="scope-pill">所有 Config</span>
216
216
  </div>
@@ -282,7 +282,7 @@
282
282
  <span class="icon">📦</span>
283
283
  <span class="mono">local-5520</span>
284
284
  <span class="badge offline">offline</span>
285
- <span class="dim mono">(~/.routecodex/config.json)</span>
285
+ <span class="dim mono">(~/.rcc/config.json)</span>
286
286
  </div>
287
287
  <ul>
288
288
  <li class="tree-node">
@@ -319,7 +319,7 @@
319
319
  <span class="mono">iflow</span>
320
320
  <span class="tag">protocol=openai</span>
321
321
  <span class="badge oauth">oauth</span>
322
- <span class="dim mono">tokenFile=~/.routecodex/auth/iflow-oauth-1-186.json</span>
322
+ <span class="dim mono">tokenFile=~/.rcc/auth/iflow-oauth-1-186.json</span>
323
323
  </div>
324
324
  <ul>
325
325
  <li class="tree-node">
@@ -2,11 +2,11 @@
2
2
 
3
3
  ## 概述
4
4
 
5
- 后台守护进程,监控 `~/.routecodex/auth/` 目录下的 Token 文件,自动管理 Token 刷新和重新认证。
5
+ 后台守护进程,监控 `~/.rcc/auth/` 目录下的 Token 文件,自动管理 Token 刷新和重新认证。
6
6
 
7
7
  ## 核心职责
8
8
 
9
- 1. **监控 Token 文件** - 监控 `~/.routecodex/auth/*.json` 变化
9
+ 1. **监控 Token 文件** - 监控 `~/.rcc/auth/*.json` 变化
10
10
  2. **检测过期** - 读取 `expires_at` 判断是否即将过期/已过期
11
11
  3. **自动刷新** - OAuth Token 提前30分钟自动刷新
12
12
  4. **触发认证(显式)** - 后台默认不弹窗;需要交互式修复时由用户运行 `rcc oauth --force <selector>` 或 `rcc oauth <provider>-auto <selector>`
@@ -14,7 +14,7 @@
14
14
  ## 目录结构
15
15
 
16
16
  ```
17
- ~/.routecodex/auth/
17
+ ~/.rcc/auth/
18
18
  ├── iflow-oauth-1-work.json # 账号: work@example.com
19
19
  ├── iflow-oauth-2-personal.json # 账号: my@gmail.com
20
20
  ├── qwen-oauth-1-default.json # 账号: dev@company.com
@@ -176,7 +176,7 @@ routecodex token-daemon stop
176
176
  ```
177
177
  🌙 Token Refresh Daemon 运行中
178
178
  PID: 12345
179
- 📁 监控目录: ~/.routecodex/auth/
179
+ 📁 监控目录: ~/.rcc/auth/
180
180
 
181
181
  | 文件名 | 显示名称 | 状态 | 过期时间 | 剩余 |
182
182
  |---------------------|------------------------|--------|----------------|--------|
@@ -204,7 +204,7 @@ PID: 12345
204
204
  ▼ ▼
205
205
  ┌──────────────────┐ ┌─────────────────────────────────┐
206
206
  │ 配置文件Watcher │ │ 认证页面 (外部浏览器) │
207
- │ ~/.routecodex/auth│ │ + 本地回调服务器 (localhost) │
207
+ │ ~/.rcc/auth│ │ + 本地回调服务器 (localhost) │
208
208
  └──────────────────┘ └─────────────────────────────────┘
209
209
  ```
210
210
 
@@ -233,7 +233,7 @@ PID: 12345
233
233
 
234
234
  | 决策点 | 选择 | 理由 |
235
235
  |--------|------|------|
236
- | 监控目录 | `~/.routecodex/auth/` | 现有结构,保持兼容 |
236
+ | 监控目录 | `~/.rcc/auth/` | 现有结构,保持兼容 |
237
237
  | 进程间通信 | Unix Domain Socket | 本机通信,安全 |
238
238
  | 配置文件监听 | chokidar | 跨平台,事件驱动 |
239
239
  | 浏览器 | 外部浏览器 | Google 禁止自动化登录 |
@@ -261,7 +261,7 @@ PID: 12345
261
261
 
262
262
  ## 待确认问题
263
263
 
264
- 1. [x] 监控目录: `~/.routecodex/auth/`
264
+ 1. [x] 监控目录: `~/.rcc/auth/`
265
265
  2. [x] 提前刷新时间: 30分钟
266
266
  3. [x] 认证方式: 外部浏览器
267
267
  4. [x] 回调方式: 本地 HTTP 服务器
@@ -1,7 +1,7 @@
1
1
  # ModelScope 独立验证记录
2
2
 
3
3
  - 日期: 2025-09-26
4
- - 配置文件: `~/.routecodex/config/modelscope.json`
4
+ - 配置文件: `~/.rcc/config/modelscope.json`
5
5
  - 监听端口: 5507(示例环境)
6
6
 
7
7
  ## 验证范围
@@ -54,6 +54,6 @@ curl -i -sS -H 'Content-Type: application/json' \
54
54
  ## 日志与追踪
55
55
 
56
56
  - 运行日志:`server-modelscope.log`
57
- - DebugCenter:`~/.routecodex/logs/debug-center.log`
57
+ - DebugCenter:`~/.rcc/logs/debug-center.log`
58
58
  - 关联方式:使用响应头 `x-request-id` 在日志中检索对应请求链路
59
59
 
@@ -24,10 +24,10 @@
24
24
  #### 使用方法
25
25
  ```bash
26
26
  # 启动 LM Studio 配置 (端口 5521)
27
- npx ts-node src/cli.ts start --config ~/.routecodex/config/lmstudio-5521-gpt-oss-20b-mlx.json --port 5521
27
+ npx ts-node src/cli.ts start --config ~/.rcc/config/lmstudio-5521-gpt-oss-20b-mlx.json --port 5521
28
28
 
29
29
  # 启动 Qwen Provider 配置 (端口 5522)
30
- npx ts-node src/cli.ts start --config ~/.routecodex/config/qwen-5522-qwen3-coder-plus.json --port 5522
30
+ npx ts-node src/cli.ts start --config ~/.rcc/config/qwen-5522-qwen3-coder-plus.json --port 5522
31
31
  ```
32
32
 
33
33
  ## 目录结构