@jsonstudio/rcc 0.89.1968 → 0.89.2202

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 (559) hide show
  1. package/README.md +22 -0
  2. package/config/file-line-limit-policy.json +21 -0
  3. package/configsamples/config.json +1 -1
  4. package/configsamples/config.v1.quickstart.sanitized.json +6 -6
  5. package/configsamples/provider/iflow/config.v1.json +1 -1
  6. package/dist/app/config-readers.d.ts +18 -0
  7. package/dist/app/config-readers.js +95 -0
  8. package/dist/app/config-readers.js.map +1 -0
  9. package/dist/app/index.d.ts +9 -0
  10. package/dist/app/index.js +8 -0
  11. package/dist/app/index.js.map +1 -0
  12. package/dist/app/shutdown.d.ts +32 -0
  13. package/dist/app/shutdown.js +41 -0
  14. package/dist/app/shutdown.js.map +1 -0
  15. package/dist/bootstrap/index.d.ts +7 -0
  16. package/dist/bootstrap/index.js +7 -0
  17. package/dist/bootstrap/index.js.map +1 -0
  18. package/dist/bootstrap/log-filter.d.ts +15 -0
  19. package/dist/bootstrap/log-filter.js +81 -0
  20. package/dist/bootstrap/log-filter.js.map +1 -0
  21. package/dist/build-info.js +2 -2
  22. package/dist/cli/commands/claude.js +6 -5
  23. package/dist/cli/commands/claude.js.map +1 -1
  24. package/dist/cli/commands/init/basic.d.ts +1 -7
  25. package/dist/cli/commands/init/basic.js +0 -79
  26. package/dist/cli/commands/init/basic.js.map +1 -1
  27. package/dist/cli/commands/init/prompt-utils.d.ts +7 -0
  28. package/dist/cli/commands/init/prompt-utils.js +80 -0
  29. package/dist/cli/commands/init/prompt-utils.js.map +1 -0
  30. package/dist/cli/commands/init/workflows.js +2 -1
  31. package/dist/cli/commands/init/workflows.js.map +1 -1
  32. package/dist/cli/commands/init.js +74 -2
  33. package/dist/cli/commands/init.js.map +1 -1
  34. package/dist/cli/commands/launcher/index.d.ts +7 -0
  35. package/dist/cli/commands/launcher/index.js +7 -0
  36. package/dist/cli/commands/launcher/index.js.map +1 -0
  37. package/dist/cli/commands/launcher/types.d.ts +112 -0
  38. package/dist/cli/commands/launcher/types.js +7 -0
  39. package/dist/cli/commands/launcher/types.js.map +1 -0
  40. package/dist/cli/commands/launcher/utils.d.ts +114 -0
  41. package/dist/cli/commands/launcher/utils.js +378 -0
  42. package/dist/cli/commands/launcher/utils.js.map +1 -0
  43. package/dist/cli/commands/launcher-kernel.d.ts +2 -74
  44. package/dist/cli/commands/launcher-kernel.js +141 -143
  45. package/dist/cli/commands/launcher-kernel.js.map +1 -1
  46. package/dist/cli/commands/start-types.d.ts +67 -0
  47. package/dist/cli/commands/start-types.js +3 -0
  48. package/dist/cli/commands/start-types.js.map +1 -0
  49. package/dist/cli/commands/start-utils.d.ts +19 -0
  50. package/dist/cli/commands/start-utils.js +78 -0
  51. package/dist/cli/commands/start-utils.js.map +1 -0
  52. package/dist/cli/commands/start.d.ts +2 -67
  53. package/dist/cli/commands/start.js +201 -48
  54. package/dist/cli/commands/start.js.map +1 -1
  55. package/dist/cli/commands/stop.js +17 -1
  56. package/dist/cli/commands/stop.js.map +1 -1
  57. package/dist/cli/commands/tmux-inject.js +1 -1
  58. package/dist/cli/commands/tmux-inject.js.map +1 -1
  59. package/dist/cli/config/init-config.js +60 -2
  60. package/dist/cli/config/init-config.js.map +1 -1
  61. package/dist/cli/config/init-provider-catalog.js +3 -1
  62. package/dist/cli/config/init-provider-catalog.js.map +1 -1
  63. package/dist/cli/config/precommand-default-script.d.ts +17 -0
  64. package/dist/cli/config/precommand-default-script.js +47 -0
  65. package/dist/cli/config/precommand-default-script.js.map +1 -0
  66. package/dist/cli/server/port-utils.js +63 -51
  67. package/dist/cli/server/port-utils.js.map +1 -1
  68. package/dist/cli.js +2 -0
  69. package/dist/cli.js.map +1 -1
  70. package/dist/client/gemini-cli/gemini-cli-protocol-client.js +55 -5
  71. package/dist/client/gemini-cli/gemini-cli-protocol-client.js.map +1 -1
  72. package/dist/commands/oauth.js +28 -4
  73. package/dist/commands/oauth.js.map +1 -1
  74. package/dist/commands/quota-daemon.js +12 -0
  75. package/dist/commands/quota-daemon.js.map +1 -1
  76. package/dist/configsamples/config.v1.quickstart.sanitized.json +6 -6
  77. package/dist/constants/index.d.ts +34 -0
  78. package/dist/constants/index.js +57 -0
  79. package/dist/constants/index.js.map +1 -1
  80. package/dist/docs/daemon-admin-ui.html +268 -11
  81. package/dist/error-handling/quiet-error-handling-center.js +19 -1
  82. package/dist/error-handling/quiet-error-handling-center.js.map +1 -1
  83. package/dist/index.js +233 -30
  84. package/dist/index.js.map +1 -1
  85. package/dist/manager/index.js +4 -4
  86. package/dist/manager/index.js.map +1 -1
  87. package/dist/manager/modules/quota/antigravity-quota-core.d.ts +26 -0
  88. package/dist/manager/modules/quota/antigravity-quota-core.js +23 -0
  89. package/dist/manager/modules/quota/antigravity-quota-core.js.map +1 -0
  90. package/dist/manager/modules/quota/antigravity-quota-helpers.d.ts +16 -0
  91. package/dist/manager/modules/quota/antigravity-quota-helpers.js +167 -0
  92. package/dist/manager/modules/quota/antigravity-quota-helpers.js.map +1 -0
  93. package/dist/manager/modules/quota/antigravity-quota-manager.d.ts +10 -39
  94. package/dist/manager/modules/quota/antigravity-quota-manager.js +167 -464
  95. package/dist/manager/modules/quota/antigravity-quota-manager.js.map +1 -1
  96. package/dist/manager/modules/quota/antigravity-quota-persistence.d.ts +20 -0
  97. package/dist/manager/modules/quota/antigravity-quota-persistence.js +139 -0
  98. package/dist/manager/modules/quota/antigravity-quota-persistence.js.map +1 -0
  99. package/dist/manager/modules/quota/antigravity-quota-runtime.d.ts +55 -0
  100. package/dist/manager/modules/quota/antigravity-quota-runtime.js +174 -0
  101. package/dist/manager/modules/quota/antigravity-quota-runtime.js.map +1 -0
  102. package/dist/manager/modules/quota/antigravity-quota-sync.d.ts +46 -0
  103. package/dist/manager/modules/quota/antigravity-quota-sync.js +162 -0
  104. package/dist/manager/modules/quota/antigravity-quota-sync.js.map +1 -0
  105. package/dist/manager/modules/quota/index.d.ts +1 -0
  106. package/dist/manager/modules/quota/provider-quota-daemon.error-helpers.d.ts +13 -0
  107. package/dist/manager/modules/quota/provider-quota-daemon.error-helpers.js +149 -0
  108. package/dist/manager/modules/quota/provider-quota-daemon.error-helpers.js.map +1 -0
  109. package/dist/manager/modules/quota/provider-quota-daemon.events.js +1 -148
  110. package/dist/manager/modules/quota/provider-quota-daemon.events.js.map +1 -1
  111. package/dist/manager/modules/quota/provider-quota-daemon.js.map +1 -1
  112. package/dist/manager/modules/quota/quota-adapter.d.ts +111 -0
  113. package/dist/manager/modules/quota/quota-adapter.js +325 -0
  114. package/dist/manager/modules/quota/quota-adapter.js.map +1 -0
  115. package/dist/manager/quota/provider-quota-center.d.ts +10 -0
  116. package/dist/manager/quota/provider-quota-center.js +15 -2
  117. package/dist/manager/quota/provider-quota-center.js.map +1 -1
  118. package/dist/modules/llmswitch/bridge/antigravity-signature.d.ts +28 -0
  119. package/dist/modules/llmswitch/bridge/antigravity-signature.js +180 -0
  120. package/dist/modules/llmswitch/bridge/antigravity-signature.js.map +1 -0
  121. package/dist/modules/llmswitch/bridge/index.d.ts +13 -0
  122. package/dist/modules/llmswitch/bridge/index.js +14 -0
  123. package/dist/modules/llmswitch/bridge/index.js.map +1 -0
  124. package/dist/modules/llmswitch/bridge/module-loader.d.ts +16 -0
  125. package/dist/modules/llmswitch/bridge/module-loader.js +59 -0
  126. package/dist/modules/llmswitch/bridge/module-loader.js.map +1 -0
  127. package/dist/modules/llmswitch/bridge/quota-manager.d.ts +8 -0
  128. package/dist/modules/llmswitch/bridge/quota-manager.js +37 -0
  129. package/dist/modules/llmswitch/bridge/quota-manager.js.map +1 -0
  130. package/dist/modules/llmswitch/bridge/response-converter.d.ts +11 -0
  131. package/dist/modules/llmswitch/bridge/response-converter.js +68 -0
  132. package/dist/modules/llmswitch/bridge/response-converter.js.map +1 -0
  133. package/dist/modules/llmswitch/bridge/routing-integrations.d.ts +12 -0
  134. package/dist/modules/llmswitch/bridge/routing-integrations.js +56 -0
  135. package/dist/modules/llmswitch/bridge/routing-integrations.js.map +1 -0
  136. package/dist/modules/llmswitch/bridge/runtime-integrations.d.ts +34 -0
  137. package/dist/modules/llmswitch/bridge/runtime-integrations.js +87 -0
  138. package/dist/modules/llmswitch/bridge/runtime-integrations.js.map +1 -0
  139. package/dist/modules/llmswitch/bridge/snapshot-recorder.d.ts +13 -0
  140. package/dist/modules/llmswitch/bridge/snapshot-recorder.js +484 -0
  141. package/dist/modules/llmswitch/bridge/snapshot-recorder.js.map +1 -0
  142. package/dist/modules/llmswitch/bridge/state-integrations.d.ts +59 -0
  143. package/dist/modules/llmswitch/bridge/state-integrations.js +264 -0
  144. package/dist/modules/llmswitch/bridge/state-integrations.js.map +1 -0
  145. package/dist/modules/llmswitch/bridge.d.ts +14 -131
  146. package/dist/modules/llmswitch/bridge.js +14 -834
  147. package/dist/modules/llmswitch/bridge.js.map +1 -1
  148. package/dist/modules/pipeline/types/provider-config-types.d.ts +240 -0
  149. package/dist/modules/pipeline/types/provider-config-types.js +2 -0
  150. package/dist/modules/pipeline/types/provider-config-types.js.map +1 -0
  151. package/dist/modules/pipeline/types/provider-types.d.ts +2 -239
  152. package/dist/modules/pipeline/types/provider-types.js +1 -1
  153. package/dist/modules/pipeline/types/provider-types.js.map +1 -1
  154. package/dist/modules/pipeline/utils/debug-logger.js +3 -5
  155. package/dist/modules/pipeline/utils/debug-logger.js.map +1 -1
  156. package/dist/providers/auth/apikey-auth.d.ts +57 -1
  157. package/dist/providers/auth/apikey-auth.js +131 -1
  158. package/dist/providers/auth/apikey-auth.js.map +1 -1
  159. package/dist/providers/auth/oauth-lifecycle/error-detection.d.ts +8 -0
  160. package/dist/providers/auth/oauth-lifecycle/error-detection.js +71 -0
  161. package/dist/providers/auth/oauth-lifecycle/error-detection.js.map +1 -0
  162. package/dist/providers/auth/oauth-lifecycle/index.d.ts +10 -0
  163. package/dist/providers/auth/oauth-lifecycle/index.js +11 -0
  164. package/dist/providers/auth/oauth-lifecycle/index.js.map +1 -0
  165. package/dist/providers/auth/oauth-lifecycle/path-resolver.d.ts +18 -0
  166. package/dist/providers/auth/oauth-lifecycle/path-resolver.js +121 -0
  167. package/dist/providers/auth/oauth-lifecycle/path-resolver.js.map +1 -0
  168. package/dist/providers/auth/oauth-lifecycle/throttle.d.ts +22 -0
  169. package/dist/providers/auth/oauth-lifecycle/throttle.js +37 -0
  170. package/dist/providers/auth/oauth-lifecycle/throttle.js.map +1 -0
  171. package/dist/providers/auth/oauth-lifecycle/token-helpers.d.ts +36 -0
  172. package/dist/providers/auth/oauth-lifecycle/token-helpers.js +127 -0
  173. package/dist/providers/auth/oauth-lifecycle/token-helpers.js.map +1 -0
  174. package/dist/providers/auth/oauth-lifecycle/token-io.d.ts +14 -0
  175. package/dist/providers/auth/oauth-lifecycle/token-io.js +151 -0
  176. package/dist/providers/auth/oauth-lifecycle/token-io.js.map +1 -0
  177. package/dist/providers/auth/oauth-lifecycle.js +70 -446
  178. package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
  179. package/dist/providers/auth/oauth-repair-cooldown.js +8 -3
  180. package/dist/providers/auth/oauth-repair-cooldown.js.map +1 -1
  181. package/dist/providers/auth/oauth-repair-env.js +5 -3
  182. package/dist/providers/auth/oauth-repair-env.js.map +1 -1
  183. package/dist/providers/auth/oauth-token-utils.d.ts +61 -0
  184. package/dist/providers/auth/oauth-token-utils.js +187 -0
  185. package/dist/providers/auth/oauth-token-utils.js.map +1 -0
  186. package/dist/providers/auth/oauth-utils/camoufox-helper.d.ts +21 -0
  187. package/dist/providers/auth/oauth-utils/camoufox-helper.js +82 -0
  188. package/dist/providers/auth/oauth-utils/camoufox-helper.js.map +1 -0
  189. package/dist/providers/auth/oauth-utils/error-extraction.d.ts +17 -0
  190. package/dist/providers/auth/oauth-utils/error-extraction.js +80 -0
  191. package/dist/providers/auth/oauth-utils/error-extraction.js.map +1 -0
  192. package/dist/providers/auth/oauth-utils/index.d.ts +7 -0
  193. package/dist/providers/auth/oauth-utils/index.js +8 -0
  194. package/dist/providers/auth/oauth-utils/index.js.map +1 -0
  195. package/dist/providers/auth/token-refresh/index.d.ts +6 -0
  196. package/dist/providers/auth/token-refresh/index.js +7 -0
  197. package/dist/providers/auth/token-refresh/index.js.map +1 -0
  198. package/dist/providers/auth/token-refresh/token-state.d.ts +17 -0
  199. package/dist/providers/auth/token-refresh/token-state.js +30 -0
  200. package/dist/providers/auth/token-refresh/token-state.js.map +1 -0
  201. package/dist/providers/auth/token-storage/index.d.ts +7 -0
  202. package/dist/providers/auth/token-storage/index.js +8 -0
  203. package/dist/providers/auth/token-storage/index.js.map +1 -0
  204. package/dist/providers/auth/token-storage/token-file-resolver.d.ts +12 -0
  205. package/dist/providers/auth/token-storage/token-file-resolver.js +117 -0
  206. package/dist/providers/auth/token-storage/token-file-resolver.js.map +1 -0
  207. package/dist/providers/auth/token-storage/token-persistence.d.ts +22 -0
  208. package/dist/providers/auth/token-storage/token-persistence.js +86 -0
  209. package/dist/providers/auth/token-storage/token-persistence.js.map +1 -0
  210. package/dist/providers/auth/tokenfile-auth.js +12 -9
  211. package/dist/providers/auth/tokenfile-auth.js.map +1 -1
  212. package/dist/providers/core/api/provider-config.d.ts +8 -0
  213. package/dist/providers/core/config/camoufox-launcher.d.ts +1 -0
  214. package/dist/providers/core/config/camoufox-launcher.js +40 -9
  215. package/dist/providers/core/config/camoufox-launcher.js.map +1 -1
  216. package/dist/providers/core/config/oauth-flows.js +7 -2
  217. package/dist/providers/core/config/oauth-flows.js.map +1 -1
  218. package/dist/providers/core/config/provider-debug-hooks.d.ts +0 -12
  219. package/dist/providers/core/config/provider-debug-hooks.js +16 -56
  220. package/dist/providers/core/config/provider-debug-hooks.js.map +1 -1
  221. package/dist/providers/core/config/provider-debug-output-utils.d.ts +38 -0
  222. package/dist/providers/core/config/provider-debug-output-utils.js +46 -0
  223. package/dist/providers/core/config/provider-debug-output-utils.js.map +1 -0
  224. package/dist/providers/core/config/provider-oauth-configs.js +13 -9
  225. package/dist/providers/core/config/provider-oauth-configs.js.map +1 -1
  226. package/dist/providers/core/runtime/antigravity-request-type.d.ts +2 -0
  227. package/dist/providers/core/runtime/antigravity-request-type.js +126 -0
  228. package/dist/providers/core/runtime/antigravity-request-type.js.map +1 -0
  229. package/dist/providers/core/runtime/base-provider-runtime-helpers.d.ts +27 -0
  230. package/dist/providers/core/runtime/base-provider-runtime-helpers.js +105 -0
  231. package/dist/providers/core/runtime/base-provider-runtime-helpers.js.map +1 -0
  232. package/dist/providers/core/runtime/base-provider-series-cooldown.d.ts +19 -0
  233. package/dist/providers/core/runtime/base-provider-series-cooldown.js +363 -0
  234. package/dist/providers/core/runtime/base-provider-series-cooldown.js.map +1 -0
  235. package/dist/providers/core/runtime/base-provider.d.ts +4 -35
  236. package/dist/providers/core/runtime/base-provider.js +20 -501
  237. package/dist/providers/core/runtime/base-provider.js.map +1 -1
  238. package/dist/providers/core/runtime/deepseek-http-provider-helpers.d.ts +32 -0
  239. package/dist/providers/core/runtime/deepseek-http-provider-helpers.js +301 -0
  240. package/dist/providers/core/runtime/deepseek-http-provider-helpers.js.map +1 -0
  241. package/dist/providers/core/runtime/deepseek-http-provider.d.ts +0 -3
  242. package/dist/providers/core/runtime/deepseek-http-provider.js +5 -127
  243. package/dist/providers/core/runtime/deepseek-http-provider.js.map +1 -1
  244. package/dist/providers/core/runtime/deepseek-session-pow-helpers.d.ts +21 -0
  245. package/dist/providers/core/runtime/deepseek-session-pow-helpers.js +99 -0
  246. package/dist/providers/core/runtime/deepseek-session-pow-helpers.js.map +1 -0
  247. package/dist/providers/core/runtime/deepseek-session-pow.js +13 -108
  248. package/dist/providers/core/runtime/deepseek-session-pow.js.map +1 -1
  249. package/dist/providers/core/runtime/gemini-cli-http-provider.d.ts +0 -15
  250. package/dist/providers/core/runtime/gemini-cli-http-provider.js +13 -303
  251. package/dist/providers/core/runtime/gemini-cli-http-provider.js.map +1 -1
  252. package/dist/providers/core/runtime/gemini-cli-response-postprocessor.d.ts +9 -0
  253. package/dist/providers/core/runtime/gemini-cli-response-postprocessor.js +85 -0
  254. package/dist/providers/core/runtime/gemini-cli-response-postprocessor.js.map +1 -0
  255. package/dist/providers/core/runtime/gemini-http-provider.js +2 -2
  256. package/dist/providers/core/runtime/gemini-http-provider.js.map +1 -1
  257. package/dist/providers/core/runtime/gemini-sse-normalizer.d.ts +25 -0
  258. package/dist/providers/core/runtime/gemini-sse-normalizer.js +159 -0
  259. package/dist/providers/core/runtime/gemini-sse-normalizer.js.map +1 -0
  260. package/dist/providers/core/runtime/http-request-executor.js +1 -48
  261. package/dist/providers/core/runtime/http-request-executor.js.map +1 -1
  262. package/dist/providers/core/runtime/http-transport-provider.d.ts +2 -48
  263. package/dist/providers/core/runtime/http-transport-provider.js +158 -1273
  264. package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
  265. package/dist/providers/core/runtime/provider-bootstrap-utils.d.ts +20 -0
  266. package/dist/providers/core/runtime/provider-bootstrap-utils.js +78 -0
  267. package/dist/providers/core/runtime/provider-bootstrap-utils.js.map +1 -0
  268. package/dist/providers/core/runtime/provider-factory-helpers.d.ts +19 -0
  269. package/dist/providers/core/runtime/provider-factory-helpers.js +203 -0
  270. package/dist/providers/core/runtime/provider-factory-helpers.js.map +1 -0
  271. package/dist/providers/core/runtime/provider-factory.d.ts +9 -7
  272. package/dist/providers/core/runtime/provider-factory.js +57 -214
  273. package/dist/providers/core/runtime/provider-factory.js.map +1 -1
  274. package/dist/providers/core/runtime/provider-family-profile-utils.d.ts +23 -0
  275. package/dist/providers/core/runtime/provider-family-profile-utils.js +57 -0
  276. package/dist/providers/core/runtime/provider-family-profile-utils.js.map +1 -0
  277. package/dist/providers/core/runtime/provider-http-executor-utils.d.ts +32 -0
  278. package/dist/providers/core/runtime/provider-http-executor-utils.js +92 -0
  279. package/dist/providers/core/runtime/provider-http-executor-utils.js.map +1 -0
  280. package/dist/providers/core/runtime/provider-iflow-business-error-utils.d.ts +15 -0
  281. package/dist/providers/core/runtime/provider-iflow-business-error-utils.js +49 -0
  282. package/dist/providers/core/runtime/provider-iflow-business-error-utils.js.map +1 -0
  283. package/dist/providers/core/runtime/provider-request-executor-deps-factory.d.ts +29 -0
  284. package/dist/providers/core/runtime/provider-request-executor-deps-factory.js +41 -0
  285. package/dist/providers/core/runtime/provider-request-executor-deps-factory.js.map +1 -0
  286. package/dist/providers/core/runtime/provider-request-header-orchestrator.d.ts +30 -0
  287. package/dist/providers/core/runtime/provider-request-header-orchestrator.js +91 -0
  288. package/dist/providers/core/runtime/provider-request-header-orchestrator.js.map +1 -0
  289. package/dist/providers/core/runtime/provider-request-preprocessor.d.ts +5 -0
  290. package/dist/providers/core/runtime/provider-request-preprocessor.js +39 -0
  291. package/dist/providers/core/runtime/provider-request-preprocessor.js.map +1 -0
  292. package/dist/providers/core/runtime/provider-request-shaping-utils.d.ts +37 -0
  293. package/dist/providers/core/runtime/provider-request-shaping-utils.js +65 -0
  294. package/dist/providers/core/runtime/provider-request-shaping-utils.js.map +1 -0
  295. package/dist/providers/core/runtime/provider-response-postprocessor.d.ts +7 -0
  296. package/dist/providers/core/runtime/provider-response-postprocessor.js +28 -0
  297. package/dist/providers/core/runtime/provider-response-postprocessor.js.map +1 -0
  298. package/dist/providers/core/runtime/provider-runtime-utils.d.ts +16 -0
  299. package/dist/providers/core/runtime/provider-runtime-utils.js +51 -0
  300. package/dist/providers/core/runtime/provider-runtime-utils.js.map +1 -0
  301. package/dist/providers/core/runtime/responses-provider-helpers.d.ts +37 -0
  302. package/dist/providers/core/runtime/responses-provider-helpers.js +212 -0
  303. package/dist/providers/core/runtime/responses-provider-helpers.js.map +1 -0
  304. package/dist/providers/core/runtime/responses-provider.d.ts +0 -10
  305. package/dist/providers/core/runtime/responses-provider.js +14 -224
  306. package/dist/providers/core/runtime/responses-provider.js.map +1 -1
  307. package/dist/providers/core/runtime/runtime-endpoint-resolver.d.ts +21 -0
  308. package/dist/providers/core/runtime/runtime-endpoint-resolver.js +64 -0
  309. package/dist/providers/core/runtime/runtime-endpoint-resolver.js.map +1 -0
  310. package/dist/providers/core/runtime/service-profile-resolver.d.ts +29 -0
  311. package/dist/providers/core/runtime/service-profile-resolver.js +88 -0
  312. package/dist/providers/core/runtime/service-profile-resolver.js.map +1 -0
  313. package/dist/providers/core/runtime/transport/auth-mode-utils.d.ts +13 -0
  314. package/dist/providers/core/runtime/transport/auth-mode-utils.js +43 -0
  315. package/dist/providers/core/runtime/transport/auth-mode-utils.js.map +1 -0
  316. package/dist/providers/core/runtime/transport/auth-provider-factory.d.ts +37 -0
  317. package/dist/providers/core/runtime/transport/auth-provider-factory.js +131 -0
  318. package/dist/providers/core/runtime/transport/auth-provider-factory.js.map +1 -0
  319. package/dist/providers/core/runtime/transport/header-utils.d.ts +15 -0
  320. package/dist/providers/core/runtime/transport/header-utils.js +85 -0
  321. package/dist/providers/core/runtime/transport/header-utils.js.map +1 -0
  322. package/dist/providers/core/runtime/transport/iflow-signer.d.ts +12 -0
  323. package/dist/providers/core/runtime/transport/iflow-signer.js +63 -0
  324. package/dist/providers/core/runtime/transport/iflow-signer.js.map +1 -0
  325. package/dist/providers/core/runtime/transport/index.d.ts +15 -0
  326. package/dist/providers/core/runtime/transport/index.js +16 -0
  327. package/dist/providers/core/runtime/transport/index.js.map +1 -0
  328. package/dist/providers/core/runtime/transport/oauth-header-preflight.d.ts +12 -0
  329. package/dist/providers/core/runtime/transport/oauth-header-preflight.js +56 -0
  330. package/dist/providers/core/runtime/transport/oauth-header-preflight.js.map +1 -0
  331. package/dist/providers/core/runtime/transport/oauth-recovery-handler.d.ts +34 -0
  332. package/dist/providers/core/runtime/transport/oauth-recovery-handler.js +126 -0
  333. package/dist/providers/core/runtime/transport/oauth-recovery-handler.js.map +1 -0
  334. package/dist/providers/core/runtime/transport/provider-payload-utils.d.ts +21 -0
  335. package/dist/providers/core/runtime/transport/provider-payload-utils.js +88 -0
  336. package/dist/providers/core/runtime/transport/provider-payload-utils.js.map +1 -0
  337. package/dist/providers/core/runtime/transport/request-header-builder.d.ts +24 -0
  338. package/dist/providers/core/runtime/transport/request-header-builder.js +90 -0
  339. package/dist/providers/core/runtime/transport/request-header-builder.js.map +1 -0
  340. package/dist/providers/core/runtime/transport/runtime-detector.d.ts +22 -0
  341. package/dist/providers/core/runtime/transport/runtime-detector.js +63 -0
  342. package/dist/providers/core/runtime/transport/runtime-detector.js.map +1 -0
  343. package/dist/providers/core/runtime/transport/session-header-utils.d.ts +8 -0
  344. package/dist/providers/core/runtime/transport/session-header-utils.js +72 -0
  345. package/dist/providers/core/runtime/transport/session-header-utils.js.map +1 -0
  346. package/dist/providers/core/runtime/vision-debug-utils.d.ts +2 -0
  347. package/dist/providers/core/runtime/vision-debug-utils.js +31 -0
  348. package/dist/providers/core/runtime/vision-debug-utils.js.map +1 -1
  349. package/dist/providers/core/strategies/oauth-auth-code-flow.d.ts +13 -0
  350. package/dist/providers/core/strategies/oauth-auth-code-flow.js +272 -55
  351. package/dist/providers/core/strategies/oauth-auth-code-flow.js.map +1 -1
  352. package/dist/providers/core/utils/snapshot-writer-buffer.d.ts +13 -0
  353. package/dist/providers/core/utils/snapshot-writer-buffer.js +39 -0
  354. package/dist/providers/core/utils/snapshot-writer-buffer.js.map +1 -0
  355. package/dist/providers/core/utils/snapshot-writer.js +75 -54
  356. package/dist/providers/core/utils/snapshot-writer.js.map +1 -1
  357. package/dist/providers/profile/families/antigravity-profile.js +2 -10
  358. package/dist/providers/profile/families/antigravity-profile.js.map +1 -1
  359. package/dist/providers/profile/families/deepseek-profile.d.ts +2 -0
  360. package/dist/providers/profile/families/deepseek-profile.js +110 -0
  361. package/dist/providers/profile/families/deepseek-profile.js.map +1 -0
  362. package/dist/providers/profile/families/iflow-profile.js +89 -10
  363. package/dist/providers/profile/families/iflow-profile.js.map +1 -1
  364. package/dist/providers/profile/provider-profile-loader.d.ts +5 -0
  365. package/dist/providers/profile/provider-profile-loader.js +35 -0
  366. package/dist/providers/profile/provider-profile-loader.js.map +1 -1
  367. package/dist/providers/profile/provider-profile.d.ts +16 -1
  368. package/dist/runtime/runtime-flags.js +1 -1
  369. package/dist/runtime/runtime-flags.js.map +1 -1
  370. package/dist/runtime/wasm-runtime/index.d.ts +56 -0
  371. package/dist/runtime/wasm-runtime/index.js +69 -0
  372. package/dist/runtime/wasm-runtime/index.js.map +1 -0
  373. package/dist/scripts/camoufox/launch-auth.mjs +158 -10
  374. package/dist/server/handlers/handler-response-utils.d.ts +13 -0
  375. package/dist/server/handlers/handler-response-utils.js +427 -0
  376. package/dist/server/handlers/handler-response-utils.js.map +1 -0
  377. package/dist/server/handlers/handler-utils.d.ts +2 -11
  378. package/dist/server/handlers/handler-utils.js +21 -421
  379. package/dist/server/handlers/handler-utils.js.map +1 -1
  380. package/dist/server/runtime/http-server/clock-client-reaper.d.ts +23 -0
  381. package/dist/server/runtime/http-server/clock-client-reaper.js +159 -0
  382. package/dist/server/runtime/http-server/clock-client-reaper.js.map +1 -0
  383. package/dist/server/runtime/http-server/clock-client-registry-utils.d.ts +87 -0
  384. package/dist/server/runtime/http-server/clock-client-registry-utils.js +276 -0
  385. package/dist/server/runtime/http-server/clock-client-registry-utils.js.map +1 -0
  386. package/dist/server/runtime/http-server/clock-client-registry.d.ts +5 -50
  387. package/dist/server/runtime/http-server/clock-client-registry.js +74 -320
  388. package/dist/server/runtime/http-server/clock-client-registry.js.map +1 -1
  389. package/dist/server/runtime/http-server/clock-client-route-utils.d.ts +12 -0
  390. package/dist/server/runtime/http-server/clock-client-route-utils.js +210 -0
  391. package/dist/server/runtime/http-server/clock-client-route-utils.js.map +1 -0
  392. package/dist/server/runtime/http-server/clock-client-routes.js +27 -201
  393. package/dist/server/runtime/http-server/clock-client-routes.js.map +1 -1
  394. package/dist/server/runtime/http-server/clock-daemon-log-throttle.d.ts +12 -0
  395. package/dist/server/runtime/http-server/clock-daemon-log-throttle.js +56 -0
  396. package/dist/server/runtime/http-server/clock-daemon-log-throttle.js.map +1 -0
  397. package/dist/server/runtime/http-server/daemon-admin/control-handler.js +143 -14
  398. package/dist/server/runtime/http-server/daemon-admin/control-handler.js.map +1 -1
  399. package/dist/server/runtime/http-server/daemon-admin/credentials-handler-utils.d.ts +19 -0
  400. package/dist/server/runtime/http-server/daemon-admin/credentials-handler-utils.js +107 -0
  401. package/dist/server/runtime/http-server/daemon-admin/credentials-handler-utils.js.map +1 -0
  402. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js +2 -104
  403. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js.map +1 -1
  404. package/dist/server/runtime/http-server/daemon-admin/providers-handler-routing-utils.d.ts +28 -0
  405. package/dist/server/runtime/http-server/daemon-admin/providers-handler-routing-utils.js +298 -0
  406. package/dist/server/runtime/http-server/daemon-admin/providers-handler-routing-utils.js.map +1 -0
  407. package/dist/server/runtime/http-server/daemon-admin/providers-handler-utils.d.ts +22 -0
  408. package/dist/server/runtime/http-server/daemon-admin/providers-handler-utils.js +211 -0
  409. package/dist/server/runtime/http-server/daemon-admin/providers-handler-utils.js.map +1 -0
  410. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js +25 -454
  411. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js.map +1 -1
  412. package/dist/server/runtime/http-server/daemon-admin/quota-handler.js +81 -32
  413. package/dist/server/runtime/http-server/daemon-admin/quota-handler.js.map +1 -1
  414. package/dist/server/runtime/http-server/daemon-admin/routecodex-x7e-gate.d.ts +22 -0
  415. package/dist/server/runtime/http-server/daemon-admin/routecodex-x7e-gate.js +70 -0
  416. package/dist/server/runtime/http-server/daemon-admin/routecodex-x7e-gate.js.map +1 -0
  417. package/dist/server/runtime/http-server/executor/antigravity-detector.d.ts +34 -0
  418. package/dist/server/runtime/http-server/executor/antigravity-detector.js +118 -0
  419. package/dist/server/runtime/http-server/executor/antigravity-detector.js.map +1 -0
  420. package/dist/server/runtime/http-server/executor/env-config.d.ts +13 -0
  421. package/dist/server/runtime/http-server/executor/env-config.js +20 -0
  422. package/dist/server/runtime/http-server/executor/env-config.js.map +1 -0
  423. package/dist/server/runtime/http-server/executor/index.d.ts +11 -0
  424. package/dist/server/runtime/http-server/executor/index.js +18 -0
  425. package/dist/server/runtime/http-server/executor/index.js.map +1 -0
  426. package/dist/server/runtime/http-server/executor/provider-request-context.d.ts +20 -0
  427. package/dist/server/runtime/http-server/executor/provider-request-context.js +38 -0
  428. package/dist/server/runtime/http-server/executor/provider-request-context.js.map +1 -0
  429. package/dist/server/runtime/http-server/executor/provider-response-converter.d.ts +23 -0
  430. package/dist/server/runtime/http-server/executor/provider-response-converter.js +337 -0
  431. package/dist/server/runtime/http-server/executor/provider-response-converter.js.map +1 -0
  432. package/dist/server/runtime/http-server/executor/provider-response-utils.d.ts +8 -0
  433. package/dist/server/runtime/http-server/executor/provider-response-utils.js +93 -0
  434. package/dist/server/runtime/http-server/executor/provider-response-utils.js.map +1 -0
  435. package/dist/server/runtime/http-server/executor/provider-runtime-resolver.d.ts +23 -0
  436. package/dist/server/runtime/http-server/executor/provider-runtime-resolver.js +85 -0
  437. package/dist/server/runtime/http-server/executor/provider-runtime-resolver.js.map +1 -0
  438. package/dist/server/runtime/http-server/executor/request-executor-core-utils.d.ts +7 -0
  439. package/dist/server/runtime/http-server/executor/request-executor-core-utils.js +39 -0
  440. package/dist/server/runtime/http-server/executor/request-executor-core-utils.js.map +1 -0
  441. package/dist/server/runtime/http-server/executor/request-retry-helpers.d.ts +16 -0
  442. package/dist/server/runtime/http-server/executor/request-retry-helpers.js +218 -0
  443. package/dist/server/runtime/http-server/executor/request-retry-helpers.js.map +1 -0
  444. package/dist/server/runtime/http-server/executor/retry-engine.d.ts +21 -0
  445. package/dist/server/runtime/http-server/executor/retry-engine.js +73 -0
  446. package/dist/server/runtime/http-server/executor/retry-engine.js.map +1 -0
  447. package/dist/server/runtime/http-server/executor/sse-error-handler.d.ts +14 -0
  448. package/dist/server/runtime/http-server/executor/sse-error-handler.js +127 -0
  449. package/dist/server/runtime/http-server/executor/sse-error-handler.js.map +1 -0
  450. package/dist/server/runtime/http-server/executor/usage-aggregator.d.ts +39 -0
  451. package/dist/server/runtime/http-server/executor/usage-aggregator.js +177 -0
  452. package/dist/server/runtime/http-server/executor/usage-aggregator.js.map +1 -0
  453. package/dist/server/runtime/http-server/executor/usage-logger.d.ts +7 -0
  454. package/dist/server/runtime/http-server/executor/usage-logger.js +13 -0
  455. package/dist/server/runtime/http-server/executor/usage-logger.js.map +1 -0
  456. package/dist/server/runtime/http-server/executor/utils.d.ts +21 -0
  457. package/dist/server/runtime/http-server/executor/utils.js +62 -0
  458. package/dist/server/runtime/http-server/executor/utils.js.map +1 -0
  459. package/dist/server/runtime/http-server/executor-metadata.js +83 -2
  460. package/dist/server/runtime/http-server/executor-metadata.js.map +1 -1
  461. package/dist/server/runtime/http-server/executor-response.js +17 -9
  462. package/dist/server/runtime/http-server/executor-response.js.map +1 -1
  463. package/dist/server/runtime/http-server/http-server-bootstrap.d.ts +31 -0
  464. package/dist/server/runtime/http-server/http-server-bootstrap.js +367 -0
  465. package/dist/server/runtime/http-server/http-server-bootstrap.js.map +1 -0
  466. package/dist/server/runtime/http-server/http-server-clock-daemon.d.ts +5 -0
  467. package/dist/server/runtime/http-server/http-server-clock-daemon.js +242 -0
  468. package/dist/server/runtime/http-server/http-server-clock-daemon.js.map +1 -0
  469. package/dist/server/runtime/http-server/http-server-legacy-pipeline.d.ts +2 -0
  470. package/dist/server/runtime/http-server/http-server-legacy-pipeline.js +65 -0
  471. package/dist/server/runtime/http-server/http-server-legacy-pipeline.js.map +1 -0
  472. package/dist/server/runtime/http-server/http-server-lifecycle.d.ts +27 -0
  473. package/dist/server/runtime/http-server/http-server-lifecycle.js +285 -0
  474. package/dist/server/runtime/http-server/http-server-lifecycle.js.map +1 -0
  475. package/dist/server/runtime/http-server/http-server-runtime-providers.d.ts +10 -0
  476. package/dist/server/runtime/http-server/http-server-runtime-providers.js +415 -0
  477. package/dist/server/runtime/http-server/http-server-runtime-providers.js.map +1 -0
  478. package/dist/server/runtime/http-server/http-server-runtime-setup.d.ts +2 -0
  479. package/dist/server/runtime/http-server/http-server-runtime-setup.js +93 -0
  480. package/dist/server/runtime/http-server/http-server-runtime-setup.js.map +1 -0
  481. package/dist/server/runtime/http-server/index.d.ts +2 -46
  482. package/dist/server/runtime/http-server/index.js +96 -2615
  483. package/dist/server/runtime/http-server/index.js.map +1 -1
  484. package/dist/server/runtime/http-server/request-executor.d.ts +8 -21
  485. package/dist/server/runtime/http-server/request-executor.js +94 -956
  486. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  487. package/dist/server/runtime/http-server/routes.js +2 -2
  488. package/dist/server/runtime/http-server/routes.js.map +1 -1
  489. package/dist/server/runtime/http-server/servertool-admin-state.d.ts +42 -0
  490. package/dist/server/runtime/http-server/servertool-admin-state.js +210 -0
  491. package/dist/server/runtime/http-server/servertool-admin-state.js.map +1 -0
  492. package/dist/server/runtime/http-server/stats-manager-internals.d.ts +96 -0
  493. package/dist/server/runtime/http-server/stats-manager-internals.js +311 -0
  494. package/dist/server/runtime/http-server/stats-manager-internals.js.map +1 -0
  495. package/dist/server/runtime/http-server/stats-manager-table.d.ts +6 -0
  496. package/dist/server/runtime/http-server/stats-manager-table.js +135 -0
  497. package/dist/server/runtime/http-server/stats-manager-table.js.map +1 -0
  498. package/dist/server/runtime/http-server/stats-manager.d.ts +0 -23
  499. package/dist/server/runtime/http-server/stats-manager.js +95 -483
  500. package/dist/server/runtime/http-server/stats-manager.js.map +1 -1
  501. package/dist/server/utils/client-connection-state.js +61 -0
  502. package/dist/server/utils/client-connection-state.js.map +1 -1
  503. package/dist/server/utils/request-id-manager.d.ts +6 -0
  504. package/dist/server/utils/request-id-manager.js +105 -15
  505. package/dist/server/utils/request-id-manager.js.map +1 -1
  506. package/dist/server/utils/stage-logger.js +14 -4
  507. package/dist/server/utils/stage-logger.js.map +1 -1
  508. package/dist/server-lifecycle/index.d.ts +6 -0
  509. package/dist/server-lifecycle/index.js +7 -0
  510. package/dist/server-lifecycle/index.js.map +1 -0
  511. package/dist/server-lifecycle/port-utils.d.ts +18 -0
  512. package/dist/server-lifecycle/port-utils.js +204 -0
  513. package/dist/server-lifecycle/port-utils.js.map +1 -0
  514. package/dist/sharedmodule/process-snapshot.d.ts +26 -0
  515. package/dist/sharedmodule/process-snapshot.js +141 -0
  516. package/dist/sharedmodule/process-snapshot.js.map +1 -0
  517. package/dist/token-daemon/index.js +10 -3
  518. package/dist/token-daemon/index.js.map +1 -1
  519. package/dist/token-daemon/token-daemon.js +9 -11
  520. package/dist/token-daemon/token-daemon.js.map +1 -1
  521. package/dist/token-daemon/token-utils.d.ts +1 -1
  522. package/dist/token-daemon/token-utils.js +19 -3
  523. package/dist/token-daemon/token-utils.js.map +1 -1
  524. package/dist/tools/semantic-replay-snapshot-loader.d.ts +4 -0
  525. package/dist/tools/semantic-replay-snapshot-loader.js +396 -0
  526. package/dist/tools/semantic-replay-snapshot-loader.js.map +1 -0
  527. package/dist/tools/semantic-replay.js +2 -393
  528. package/dist/tools/semantic-replay.js.map +1 -1
  529. package/dist/utils/daemon-stop-intent.d.ts +17 -0
  530. package/dist/utils/daemon-stop-intent.js +104 -0
  531. package/dist/utils/daemon-stop-intent.js.map +1 -0
  532. package/dist/utils/key-429-tracker.js +6 -5
  533. package/dist/utils/key-429-tracker.js.map +1 -1
  534. package/dist/utils/managed-server-pids.js +44 -6
  535. package/dist/utils/managed-server-pids.js.map +1 -1
  536. package/dist/utils/pipeline-health-manager.js +7 -6
  537. package/dist/utils/pipeline-health-manager.js.map +1 -1
  538. package/dist/utils/process-lifecycle-logger.js +45 -1
  539. package/dist/utils/process-lifecycle-logger.js.map +1 -1
  540. package/dist/utils/runtime-exit-forensics.d.ts +2 -2
  541. package/dist/utils/runtime-exit-forensics.js +10 -5
  542. package/dist/utils/runtime-exit-forensics.js.map +1 -1
  543. package/dist/utils/snapshot-writer.js +3 -3
  544. package/dist/utils/snapshot-writer.js.map +1 -1
  545. package/docs/QUOTA_MANAGER_V3.md +3 -0
  546. package/docs/VIRTUAL_ROUTER_PRIORITY_AND_HEALTH.md +114 -0
  547. package/docs/daemon-admin-ui.html +268 -11
  548. package/docs/file-line-limit-gate.md +30 -0
  549. package/docs/refactoring/host-164.3-responsibility-migration.md +62 -0
  550. package/docs/release-iflow-400-gate.md +58 -0
  551. package/docs/replay-evidence-iflow-400.txt +33 -0
  552. package/docs/stop-message-auto.md +4 -3
  553. package/package.json +4 -3
  554. package/scripts/auth-iflow-manual.mjs +13 -23
  555. package/scripts/camoufox/launch-auth.mjs +158 -10
  556. package/scripts/ci/check-file-line-limit.mjs +149 -0
  557. package/scripts/copy-compat-assets.mjs +26 -0
  558. package/scripts/tests/ci-jest.mjs +4 -0
  559. package/scripts/verify-codex-error-samples.mjs +27 -6
@@ -14,199 +14,66 @@ import { HTTP_PROTOCOLS, LOCAL_HOSTS } from '../../constants/index.js';
14
14
  import { withOAuthRepairEnv } from './oauth-repair-env.js';
15
15
  import { markInteractiveOAuthRepairAttempt, markInteractiveOAuthRepairSuccess, shouldSkipInteractiveOAuthRepair } from './oauth-repair-cooldown.js';
16
16
  import { openAuthInCamoufox } from '../core/config/camoufox-launcher.js';
17
+ import { isGeminiCliFamily, resolveTokenFilePath, resolveCamoufoxAliasForAuth, resolveIflowCredentialCandidates } from './oauth-lifecycle/path-resolver.js';
18
+ import { keyFor, shouldThrottle, updateThrottle, inFlight, interactiveTail } from './oauth-lifecycle/throttle.js';
19
+ import { extractStatusCode, isGoogleAccountVerificationRequiredMessage, extractGoogleAccountVerificationUrl } from './oauth-lifecycle/error-detection.js';
20
+ import { hasNonEmptyString, extractAccessToken, extractApiKey, hasApiKeyField, hasStableQwenApiKey, hasAccessToken, getExpiresAt, resolveProjectId, coerceExpiryTimestampSeconds, hasNoRefreshFlag, evaluateTokenState } from './oauth-lifecycle/token-helpers.js';
21
+ import { normalizeGeminiCliAccountToken, sanitizeToken, readTokenFromFile, backupTokenFile, restoreTokenFileFromBackup, discardBackupFile, readRawTokenFile } from './oauth-lifecycle/token-io.js';
17
22
  const TOKEN_REFRESH_SKEW_MS = 60_000;
18
- const inFlight = new Map();
19
- const lastRunAt = new Map();
20
- let interactiveTail = Promise.resolve();
21
- const GEMINI_CLI_PROVIDER_IDS = new Set(['gemini-cli', 'antigravity']);
22
- function isGeminiCliFamily(providerType) {
23
- return GEMINI_CLI_PROVIDER_IDS.has(providerType.toLowerCase());
24
- }
25
- function keyFor(providerType, tokenFile) {
26
- return `${providerType}::${tokenFile || ''}`;
27
- }
28
- function expandHome(p) {
29
- return p.startsWith('~/') ? p.replace(/^~\//, `${process.env.HOME || ''}/`) : p;
30
- }
31
- function defaultTokenFile(providerType) {
32
- const home = process.env.HOME || '';
33
- if (providerType === 'iflow') {
34
- return path.join(home, '.iflow', 'oauth_creds.json');
35
- }
36
- if (providerType === 'qwen') {
37
- // Align with TokenFileAuthProvider + token-daemon defaults:
38
- // keep a stable, well-known Qwen token file for alias="default".
39
- return path.join(home, '.routecodex', 'auth', 'qwen-oauth-1-default.json');
40
- }
41
- if (isGeminiCliFamily(providerType)) {
42
- const file = providerType.toLowerCase() === 'antigravity'
43
- ? 'antigravity-oauth.json'
44
- : 'gemini-oauth.json';
45
- return path.join(home, '.routecodex', 'auth', file);
46
- }
47
- return path.join(home, '.routecodex', 'tokens', `${providerType}-default.json`);
48
- }
49
- function resolveTokenFilePath(auth, providerType) {
50
- const raw = typeof auth.tokenFile === 'string' ? auth.tokenFile.trim() : '';
51
- // 没有任何配置:使用 provider 默认 token 文件(兼容单 token 场景)
52
- if (!raw) {
53
- const fallback = defaultTokenFile(providerType);
54
- auth.tokenFile = fallback;
55
- return fallback;
56
- }
57
- // 显式路径(包含路径分隔符或 .json),直接扩展 ~ 并返回
58
- if (raw.includes('/') || raw.includes('\\') || raw.endsWith('.json')) {
59
- const resolved = expandHome(raw);
60
- auth.tokenFile = resolved;
61
- return resolved;
62
- }
63
- // 纯 alias:在 ~/.routecodex/auth 下按 <provider>-oauth-*-<alias>.json 规则匹配(同步版本)
64
- const alias = raw;
65
- const homeDir = process.env.HOME || os.homedir();
66
- const authDir = path.join(homeDir, '.routecodex', 'auth');
67
- const pattern = new RegExp(`^${providerType}-oauth-(\\d+)(?:-(.+))?\\.json$`, 'i');
68
- const pt = providerType.toLowerCase();
69
- // Qwen: keep a stable "default" file name whenever possible.
70
- if (pt === 'qwen' && alias === 'default') {
71
- const pinned = path.join(authDir, 'qwen-oauth-1-default.json');
72
- try {
73
- if (fsSync.existsSync(pinned)) {
74
- auth.tokenFile = pinned;
75
- return pinned;
76
- }
23
+ async function selectBestIflowTokenCandidate(targetTokenFilePath) {
24
+ const targetResolved = path.resolve(targetTokenFilePath);
25
+ const candidates = resolveIflowCredentialCandidates();
26
+ let best = null;
27
+ for (const candidatePath of candidates) {
28
+ if (!candidatePath) {
29
+ continue;
77
30
  }
78
- catch {
79
- // ignore and fall back to scanning
31
+ const resolved = path.resolve(candidatePath);
32
+ if (resolved === targetResolved) {
33
+ continue;
80
34
  }
81
- }
82
- let existingPath = null;
83
- let bestSeqForAlias = 0;
84
- let maxSeq = 0;
85
- try {
86
- const entries = fsSync.readdirSync(authDir);
87
- for (const entry of entries) {
88
- const match = entry.match(pattern);
89
- if (!match) {
90
- continue;
91
- }
92
- const seq = parseInt(match[1], 10);
93
- if (!Number.isFinite(seq) || seq <= 0) {
94
- continue;
95
- }
96
- const entryAlias = (match[2] || 'default');
97
- if (entryAlias === alias && seq >= bestSeqForAlias) {
98
- bestSeqForAlias = seq;
99
- existingPath = path.join(authDir, entry);
100
- }
101
- if (seq > maxSeq) {
102
- maxSeq = seq;
103
- }
35
+ const token = await readTokenFromFile(candidatePath);
36
+ if (!token) {
37
+ continue;
104
38
  }
105
- }
106
- catch {
107
- // ignore directory errors; treat as no existing tokens
108
- }
109
- if (existingPath) {
110
- auth.tokenFile = existingPath;
111
- return existingPath;
112
- }
113
- // When we don't have any existing token for this alias:
114
- // - Qwen default alias should always map to seq=1 for stability.
115
- // - Otherwise, allocate next seq to avoid collisions.
116
- const nextSeq = (pt === 'qwen' && alias === 'default') ? 1 : (maxSeq + 1);
117
- const fileName = `${providerType}-oauth-${nextSeq}-${alias}.json`;
118
- const fullPath = path.join(authDir, fileName);
119
- auth.tokenFile = fullPath;
120
- return fullPath;
121
- }
122
- function shouldThrottle(k, ms = 60_000) {
123
- const t = lastRunAt.get(k) || 0;
124
- return Date.now() - t < ms;
125
- }
126
- function updateThrottle(k) {
127
- lastRunAt.set(k, Date.now());
128
- }
129
- function extractStatusCode(upstreamError) {
130
- if (!upstreamError || typeof upstreamError !== 'object') {
131
- return undefined;
132
- }
133
- const anyErr = upstreamError;
134
- const direct = anyErr.statusCode;
135
- if (typeof direct === 'number' && Number.isFinite(direct)) {
136
- return direct;
137
- }
138
- const status = anyErr.status;
139
- if (typeof status === 'number' && Number.isFinite(status)) {
140
- return status;
141
- }
142
- const response = anyErr.response;
143
- if (response && typeof response === 'object') {
144
- const respStatus = response.status;
145
- if (typeof respStatus === 'number' && Number.isFinite(respStatus)) {
146
- return respStatus;
39
+ const state = evaluateTokenState(token, 'iflow');
40
+ if (!state.validAccess) {
41
+ continue;
147
42
  }
148
- const respStatusCode = response.statusCode;
149
- if (typeof respStatusCode === 'number' && Number.isFinite(respStatusCode)) {
150
- return respStatusCode;
43
+ const expiresAt = state.expiresAt ?? null;
44
+ if (!best) {
45
+ best = { token, sourcePath: candidatePath, expiresAt };
46
+ continue;
47
+ }
48
+ const bestExpiry = best.expiresAt ?? -1;
49
+ const currentExpiry = expiresAt ?? -1;
50
+ if (currentExpiry > bestExpiry) {
51
+ best = { token, sourcePath: candidatePath, expiresAt };
151
52
  }
152
53
  }
153
- return undefined;
54
+ return best;
154
55
  }
155
- function isGoogleAccountVerificationRequiredMessage(lower) {
156
- if (!lower) {
157
- return false;
56
+ async function maybeAdoptIflowExternalToken(strategy, tokenFilePath, existingToken) {
57
+ const currentState = evaluateTokenState(existingToken, 'iflow');
58
+ if (currentState.validAccess) {
59
+ return existingToken;
158
60
  }
159
- return (lower.includes('verify your account') ||
160
- lower.includes('validation_required') ||
161
- lower.includes('validation required') ||
162
- lower.includes('validation_url') ||
163
- lower.includes('validation url') ||
164
- lower.includes('accounts.google.com/signin/continue') ||
165
- lower.includes('support.google.com/accounts?p=al_alert'));
166
- }
167
- function extractGoogleAccountVerificationUrl(message) {
168
- const msg = typeof message === 'string' ? message : '';
169
- if (!msg) {
170
- return null;
61
+ const bestCandidate = await selectBestIflowTokenCandidate(tokenFilePath);
62
+ if (!bestCandidate) {
63
+ return existingToken;
171
64
  }
172
- const normalized = msg
173
- .replace(/\\\//g, '/')
174
- .replace(/\\u0026/gi, '&')
175
- .replace(/\\u003d/gi, '=')
176
- .replace(/\\x26/gi, '&')
177
- .replace(/\\x3d/gi, '=');
178
- const patterns = [
179
- /https:\/\/accounts\.google\.com\/signin\/continue[^\s"'\\<>)]*/i,
180
- /https:\/\/accounts\.google\.com\/[^\s"'\\<>)]*/i,
181
- /https:\/\/support\.google\.com\/accounts\?p=al_alert[^\s"'\\<>)]*/i
182
- ];
183
- for (const re of patterns) {
184
- const m = normalized.match(re);
185
- if (m && m[0]) {
186
- const url = String(m[0]).trim().replace(/[\\"']+$/g, '').replace(/[),.]+$/g, '');
187
- if (url) {
188
- return url;
189
- }
190
- }
65
+ // Keep per-alias token files in RouteCodex, but adopt fresh credentials from iFlow-native stores when available.
66
+ const prepared = await prepareTokenForStorage('iflow', tokenFilePath, bestCandidate.token);
67
+ if (typeof strategy.saveToken === 'function') {
68
+ await strategy.saveToken(prepared);
191
69
  }
192
- return null;
193
- }
194
- function resolveCamoufoxAliasForAuth(providerType, auth) {
195
- const raw = typeof auth.tokenFile === 'string' ? auth.tokenFile.trim() : '';
196
- if (raw && !raw.includes('/') && !raw.includes('\\') && !raw.endsWith('.json')) {
197
- return raw;
198
- }
199
- const base = raw ? path.basename(raw) : '';
200
- const pt = String(providerType || '').trim().toLowerCase();
201
- if (base && pt) {
202
- const re = new RegExp(`^${pt}-oauth-\\d+(?:-(.+))?\\.json$`, 'i');
203
- const m = base.match(re);
204
- const alias = m && m[1] ? String(m[1]).trim() : '';
205
- if (alias) {
206
- return alias;
207
- }
208
- }
209
- return 'default';
70
+ else {
71
+ await fs.mkdir(path.dirname(tokenFilePath), { recursive: true });
72
+ await fs.writeFile(tokenFilePath, `${JSON.stringify(prepared, null, 2)}\n`, 'utf8');
73
+ }
74
+ const normalized = sanitizeToken(prepared) ?? bestCandidate.token;
75
+ logOAuthDebug(`[OAuth] iflow token adopted from ${bestCandidate.sourcePath} -> ${tokenFilePath}`);
76
+ return normalized;
210
77
  }
211
78
  async function openGoogleAccountVerificationInCamoufox(args) {
212
79
  const providerType = args.providerType;
@@ -262,236 +129,10 @@ async function openGoogleAccountVerificationInCamoufox(args) {
262
129
  function isOAuthConfig(auth) {
263
130
  return Boolean(auth && typeof auth.type === 'string' && auth.type.toLowerCase().includes('oauth'));
264
131
  }
265
- function hasNonEmptyString(value) {
266
- return typeof value === 'string' && value.trim().length > 0;
267
- }
268
- function normalizeGeminiCliAccountToken(token) {
269
- const raw = token;
270
- const tokenNode = raw.token;
271
- if (!tokenNode || typeof tokenNode !== 'object') {
272
- return null;
273
- }
274
- const tokenObj = tokenNode;
275
- const access = tokenObj.access_token;
276
- if (!hasNonEmptyString(access)) {
277
- return null;
278
- }
279
- const out = { ...tokenObj };
280
- const root = token;
281
- if (typeof root.disabled === 'boolean')
282
- out.disabled = root.disabled;
283
- if (typeof root.disabled_reason === 'string')
284
- out.disabled_reason = root.disabled_reason;
285
- if (typeof root.disabled_at === 'number' || typeof root.disabled_at === 'string')
286
- out.disabled_at = root.disabled_at;
287
- if (typeof root.proxy_disabled === 'boolean')
288
- out.proxy_disabled = root.proxy_disabled;
289
- if (typeof root.proxyDisabled === 'boolean')
290
- out.proxyDisabled = root.proxyDisabled;
291
- if (typeof root.proxy_disabled_reason === 'string')
292
- out.proxy_disabled_reason = root.proxy_disabled_reason;
293
- if (typeof root.proxy_disabled_at === 'number' || typeof root.proxy_disabled_at === 'string') {
294
- out.proxy_disabled_at = root.proxy_disabled_at;
295
- }
296
- if (Array.isArray(root.protected_models))
297
- out.protected_models = root.protected_models;
298
- if (Array.isArray(root.protectedModels))
299
- out.protectedModels = root.protectedModels;
300
- if (!hasNonEmptyString(out.project_id) && hasNonEmptyString(root.project_id)) {
301
- out.project_id = String(root.project_id);
302
- }
303
- if (!hasNonEmptyString(out.projectId) && hasNonEmptyString(root.projectId)) {
304
- out.projectId = String(root.projectId);
305
- }
306
- if (!Array.isArray(out.projects) && Array.isArray(root.projects)) {
307
- out.projects = root.projects;
308
- }
309
- if (!hasNonEmptyString(out.email) && hasNonEmptyString(root.email)) {
310
- out.email = String(root.email);
311
- }
312
- const expiryTimestamp = tokenObj.expiry_timestamp;
313
- if (!hasNonEmptyString(out.expires_at) && typeof expiryTimestamp === 'number') {
314
- out.expires_at = expiryTimestamp > 10_000_000_000 ? expiryTimestamp : expiryTimestamp * 1000;
315
- }
316
- return out;
317
- }
318
- function sanitizeToken(token) {
319
- if (!token || typeof token !== 'object') {
320
- return null;
321
- }
322
- const normalized = normalizeGeminiCliAccountToken(token);
323
- if (normalized) {
324
- return normalized;
325
- }
326
- const copy = { ...token };
327
- if (!hasNonEmptyString(copy.apiKey) && hasNonEmptyString(copy.api_key)) {
328
- copy.apiKey = copy.api_key;
329
- }
330
- return copy;
331
- }
332
- async function readTokenFromFile(file) {
333
- try {
334
- const txt = await fs.readFile(file, 'utf-8');
335
- return sanitizeToken(JSON.parse(txt));
336
- }
337
- catch {
338
- return null;
339
- }
340
- }
341
- async function backupTokenFile(file) {
342
- if (!file) {
343
- return null;
344
- }
345
- try {
346
- await fs.access(file);
347
- }
348
- catch (error) {
349
- const code = error?.code;
350
- if (code === 'ENOENT') {
351
- return null;
352
- }
353
- throw error;
354
- }
355
- const backup = `${file}.${Date.now()}.bak`;
356
- try {
357
- await fs.copyFile(file, backup);
358
- logOAuthDebug(`[OAuth] token.backup: ${backup}`);
359
- return backup;
360
- }
361
- catch (error) {
362
- logOAuthDebug(`[OAuth] token.backup failed (${file}): ${error instanceof Error ? error.message : String(error)}`);
363
- return null;
364
- }
365
- }
366
- async function restoreTokenFileFromBackup(backupFile, target) {
367
- if (!backupFile) {
368
- return;
369
- }
370
- try {
371
- await fs.copyFile(backupFile, target);
372
- logOAuthDebug(`[OAuth] token.restore: ${target}`);
373
- }
374
- catch (error) {
375
- logOAuthDebug(`[OAuth] token.restore failed (${target}): ${error instanceof Error ? error.message : String(error)}`);
376
- }
377
- finally {
378
- try {
379
- await fs.unlink(backupFile);
380
- }
381
- catch {
382
- // ignore cleanup failure
383
- }
384
- }
385
- }
386
- async function discardBackupFile(backupFile) {
387
- if (!backupFile) {
388
- return;
389
- }
390
- try {
391
- await fs.unlink(backupFile);
392
- }
393
- catch {
394
- // ignore
395
- }
396
- }
397
- function extractAccessToken(token) {
398
- if (!token) {
399
- return undefined;
400
- }
401
- if (hasNonEmptyString(token.access_token)) {
402
- return token.access_token;
403
- }
404
- if (hasNonEmptyString(token.AccessToken)) {
405
- return token.AccessToken;
406
- }
407
- return undefined;
408
- }
409
- function extractApiKey(token) {
410
- if (!token) {
411
- return undefined;
412
- }
413
- const candidate = token.apiKey ?? token.api_key;
414
- return hasNonEmptyString(candidate) ? String(candidate) : undefined;
415
- }
416
- function hasApiKeyField(token) {
417
- if (!token) {
418
- return false;
419
- }
420
- return hasNonEmptyString(token.apiKey ?? token.api_key);
421
- }
422
132
  /**
423
- * Qwen: api_key 可能被降级为 access_token(userInfo 404 时的兼容写法),这种情况不应被视为“稳定 API Key”。
133
+ * Qwen: api_key 可能被降级为 access_token(userInfo 404 时的兼容写法),这种情况不应被视为"稳定 API Key"。
424
134
  * 只有当 api_key 存在且与 access_token 不同(或缺失 access_token)时,才认为可以长期复用并跳过刷新。
425
135
  */
426
- function hasStableQwenApiKey(token) {
427
- const apiKey = extractApiKey(token);
428
- if (!apiKey) {
429
- return false;
430
- }
431
- const access = extractAccessToken(token);
432
- return !access || apiKey !== access;
433
- }
434
- function hasAccessToken(token) {
435
- return hasNonEmptyString(token?.access_token) || hasNonEmptyString(token?.AccessToken);
436
- }
437
- function getExpiresAt(token) {
438
- if (!token) {
439
- return null;
440
- }
441
- const raw = token.expires_at ?? token.expired ?? token.expiry_date;
442
- if (typeof raw === 'number' && Number.isFinite(raw)) {
443
- return raw;
444
- }
445
- if (typeof raw === 'string') {
446
- const parsed = Number(raw);
447
- if (Number.isFinite(parsed)) {
448
- return parsed;
449
- }
450
- const ts = Date.parse(raw);
451
- return Number.isFinite(ts) ? ts : null;
452
- }
453
- return null;
454
- }
455
- function resolveProjectId(token) {
456
- if (!token || typeof token !== 'object') {
457
- return undefined;
458
- }
459
- const record = token;
460
- if (hasNonEmptyString(record.project_id)) {
461
- return record.project_id;
462
- }
463
- if (hasNonEmptyString(record.projectId)) {
464
- return record.projectId;
465
- }
466
- return undefined;
467
- }
468
- async function readRawTokenFile(file) {
469
- if (!file) {
470
- return null;
471
- }
472
- try {
473
- const txt = await fs.readFile(file, 'utf-8');
474
- const parsed = JSON.parse(txt);
475
- return parsed && typeof parsed === 'object' ? parsed : null;
476
- }
477
- catch {
478
- return null;
479
- }
480
- }
481
- function coerceExpiryTimestampSeconds(token) {
482
- if (!token) {
483
- return undefined;
484
- }
485
- const rawExpiry = token.expiry_timestamp;
486
- if (typeof rawExpiry === 'number' && Number.isFinite(rawExpiry)) {
487
- return rawExpiry > 10_000_000_000 ? Math.floor(rawExpiry / 1000) : rawExpiry;
488
- }
489
- const expiresAt = getExpiresAt(token);
490
- if (!expiresAt) {
491
- return undefined;
492
- }
493
- return expiresAt > 10_000_000_000 ? Math.floor(expiresAt / 1000) : Math.floor(expiresAt);
494
- }
495
136
  async function wrapGeminiCliTokenForStorage(tokenData, tokenFilePath) {
496
137
  const rawExisting = await readRawTokenFile(tokenFilePath);
497
138
  const existing = rawExisting && typeof rawExisting === 'object' ? rawExisting : null;
@@ -596,40 +237,19 @@ async function prepareTokenForStorage(providerType, tokenFilePath, tokenData) {
596
237
  if (isGeminiCliFamily(providerType)) {
597
238
  return await wrapGeminiCliTokenForStorage(tokenData, tokenFilePath);
598
239
  }
599
- return tokenData;
600
- }
601
- function hasNoRefreshFlag(token) {
602
- if (!token) {
603
- return false;
604
- }
605
- const direct = token.norefresh ?? token.noRefresh;
606
- if (typeof direct === 'boolean') {
607
- return direct;
608
- }
609
- if (typeof direct === 'string') {
610
- const normalized = direct.trim().toLowerCase();
611
- return normalized === '1' || normalized === 'true' || normalized === 'yes';
612
- }
613
- return false;
614
- }
615
- function evaluateTokenState(token, providerType) {
616
- const hasApiKey = hasApiKeyField(token);
617
- const hasAccess = hasAccessToken(token);
618
- const expiresAt = getExpiresAt(token);
619
- const isExpiredOrNear = expiresAt !== null && Date.now() >= (expiresAt - TOKEN_REFRESH_SKEW_MS);
620
- let validAccess;
621
- const pt = providerType.toLowerCase();
622
- if (pt === 'iflow') {
623
- validAccess = hasApiKey || (!isExpiredOrNear && hasAccess);
624
- }
625
- else if (pt === 'qwen') {
626
- // Qwen: 当获取到稳定 api_key 后,可跳过 refresh/reauth;否则仍依赖 access_token 的有效期。
627
- validAccess = hasStableQwenApiKey(token) || (!isExpiredOrNear && (hasAccess || hasApiKey));
628
- }
629
- else {
630
- validAccess = (hasApiKey || hasAccess) && !isExpiredOrNear;
240
+ if (providerType === 'iflow') {
241
+ const token = sanitizeToken(tokenData) ?? tokenData;
242
+ const expiresAt = getExpiresAt(token);
243
+ if (typeof expiresAt === 'number' && Number.isFinite(expiresAt)) {
244
+ const expiresAtMs = expiresAt > 10_000_000_000 ? Math.floor(expiresAt) : Math.floor(expiresAt * 1000);
245
+ return {
246
+ ...tokenData,
247
+ expires_at: expiresAtMs,
248
+ expired: new Date(expiresAtMs).toISOString()
249
+ };
250
+ }
631
251
  }
632
- return { hasApiKey, hasAccess, expiresAt, isExpiredOrNear, validAccess };
252
+ return tokenData;
633
253
  }
634
254
  function logTokenSnapshot(providerType, token, endpoints) {
635
255
  try {
@@ -1024,7 +644,7 @@ async function runInteractiveAuthorizationFlow(providerType, overrides, tokenFil
1024
644
  return;
1025
645
  }
1026
646
  const label = `${providerType}:${tokenFilePath}`;
1027
- const queued = interactiveTail
647
+ const queued = interactiveTail.current
1028
648
  .catch(() => {
1029
649
  // ignore previous rejection so queue continues
1030
650
  })
@@ -1037,7 +657,7 @@ async function runInteractiveAuthorizationFlow(providerType, overrides, tokenFil
1037
657
  logOAuthDebug(`[OAuth] interactive queue leave ${label}`);
1038
658
  }
1039
659
  });
1040
- interactiveTail = queued.then(() => undefined, () => undefined);
660
+ interactiveTail.next = queued.then(() => undefined, () => undefined);
1041
661
  await queued;
1042
662
  }
1043
663
  async function runIflowAuthorizationSequence(providerType, overrides, tokenFilePath, forceReauth) {
@@ -1084,8 +704,9 @@ export async function ensureValidOAuthToken(providerType, auth, opts = {}) {
1084
704
  updateThrottle(cacheKey);
1085
705
  return;
1086
706
  }
1087
- const envAutoOpen = String(process.env.ROUTECODEX_OAUTH_AUTO_OPEN || '1') === '1';
1088
- const openBrowser = opts.openBrowser ?? envAutoOpen;
707
+ // Browser-based OAuth must be opt-in by caller.
708
+ // This prevents server startup / preflight paths from accidentally entering interactive flow.
709
+ const openBrowser = opts.openBrowser === true;
1089
710
  const forceReauth = opts.forceReauthorize === true || String(process.env.ROUTECODEX_OAUTH_FORCE_REAUTH || '0') === '1';
1090
711
  const runPromise = (async () => {
1091
712
  const defaults = getProviderOAuthConfig(providerType, {});
@@ -1093,6 +714,9 @@ export async function ensureValidOAuthToken(providerType, auth, opts = {}) {
1093
714
  logOAuthSetup(providerType, defaults, overrides, endpoints, client, tokenFilePath, openBrowser, forceReauth);
1094
715
  const strategy = createStrategy(providerType, overrides, tokenFilePath);
1095
716
  let token = await readTokenFromFile(tokenFilePath);
717
+ if (providerType === 'iflow') {
718
+ token = await maybeAdoptIflowExternalToken(strategy, tokenFilePath, token);
719
+ }
1096
720
  const hadExistingTokenFile = token !== null;
1097
721
  // Qwen: ensure api_key is present even when access_token is still valid.
1098
722
  // Qwen OpenAI-compatible endpoints may require api_key (not access_token) for business requests.