@jsonstudio/rcc 0.89.1968 → 0.89.2195

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 (555) 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 +131 -47
  54. package/dist/cli/commands/start.js.map +1 -1
  55. package/dist/cli/commands/stop.js +13 -0
  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.js +2 -0
  67. package/dist/cli.js.map +1 -1
  68. package/dist/client/gemini-cli/gemini-cli-protocol-client.js +55 -5
  69. package/dist/client/gemini-cli/gemini-cli-protocol-client.js.map +1 -1
  70. package/dist/commands/oauth.js +28 -4
  71. package/dist/commands/oauth.js.map +1 -1
  72. package/dist/commands/quota-daemon.js +12 -0
  73. package/dist/commands/quota-daemon.js.map +1 -1
  74. package/dist/configsamples/config.v1.quickstart.sanitized.json +6 -6
  75. package/dist/constants/index.d.ts +34 -0
  76. package/dist/constants/index.js +57 -0
  77. package/dist/constants/index.js.map +1 -1
  78. package/dist/docs/daemon-admin-ui.html +268 -11
  79. package/dist/error-handling/quiet-error-handling-center.js +19 -1
  80. package/dist/error-handling/quiet-error-handling-center.js.map +1 -1
  81. package/dist/index.js +233 -30
  82. package/dist/index.js.map +1 -1
  83. package/dist/manager/index.js +4 -4
  84. package/dist/manager/index.js.map +1 -1
  85. package/dist/manager/modules/quota/antigravity-quota-core.d.ts +26 -0
  86. package/dist/manager/modules/quota/antigravity-quota-core.js +23 -0
  87. package/dist/manager/modules/quota/antigravity-quota-core.js.map +1 -0
  88. package/dist/manager/modules/quota/antigravity-quota-helpers.d.ts +16 -0
  89. package/dist/manager/modules/quota/antigravity-quota-helpers.js +167 -0
  90. package/dist/manager/modules/quota/antigravity-quota-helpers.js.map +1 -0
  91. package/dist/manager/modules/quota/antigravity-quota-manager.d.ts +10 -39
  92. package/dist/manager/modules/quota/antigravity-quota-manager.js +167 -464
  93. package/dist/manager/modules/quota/antigravity-quota-manager.js.map +1 -1
  94. package/dist/manager/modules/quota/antigravity-quota-persistence.d.ts +20 -0
  95. package/dist/manager/modules/quota/antigravity-quota-persistence.js +139 -0
  96. package/dist/manager/modules/quota/antigravity-quota-persistence.js.map +1 -0
  97. package/dist/manager/modules/quota/antigravity-quota-runtime.d.ts +55 -0
  98. package/dist/manager/modules/quota/antigravity-quota-runtime.js +174 -0
  99. package/dist/manager/modules/quota/antigravity-quota-runtime.js.map +1 -0
  100. package/dist/manager/modules/quota/antigravity-quota-sync.d.ts +46 -0
  101. package/dist/manager/modules/quota/antigravity-quota-sync.js +162 -0
  102. package/dist/manager/modules/quota/antigravity-quota-sync.js.map +1 -0
  103. package/dist/manager/modules/quota/index.d.ts +1 -0
  104. package/dist/manager/modules/quota/provider-quota-daemon.error-helpers.d.ts +13 -0
  105. package/dist/manager/modules/quota/provider-quota-daemon.error-helpers.js +149 -0
  106. package/dist/manager/modules/quota/provider-quota-daemon.error-helpers.js.map +1 -0
  107. package/dist/manager/modules/quota/provider-quota-daemon.events.js +1 -148
  108. package/dist/manager/modules/quota/provider-quota-daemon.events.js.map +1 -1
  109. package/dist/manager/modules/quota/provider-quota-daemon.js.map +1 -1
  110. package/dist/manager/modules/quota/quota-adapter.d.ts +111 -0
  111. package/dist/manager/modules/quota/quota-adapter.js +325 -0
  112. package/dist/manager/modules/quota/quota-adapter.js.map +1 -0
  113. package/dist/manager/quota/provider-quota-center.d.ts +10 -0
  114. package/dist/manager/quota/provider-quota-center.js +15 -2
  115. package/dist/manager/quota/provider-quota-center.js.map +1 -1
  116. package/dist/modules/llmswitch/bridge/antigravity-signature.d.ts +28 -0
  117. package/dist/modules/llmswitch/bridge/antigravity-signature.js +180 -0
  118. package/dist/modules/llmswitch/bridge/antigravity-signature.js.map +1 -0
  119. package/dist/modules/llmswitch/bridge/index.d.ts +13 -0
  120. package/dist/modules/llmswitch/bridge/index.js +14 -0
  121. package/dist/modules/llmswitch/bridge/index.js.map +1 -0
  122. package/dist/modules/llmswitch/bridge/module-loader.d.ts +16 -0
  123. package/dist/modules/llmswitch/bridge/module-loader.js +59 -0
  124. package/dist/modules/llmswitch/bridge/module-loader.js.map +1 -0
  125. package/dist/modules/llmswitch/bridge/quota-manager.d.ts +8 -0
  126. package/dist/modules/llmswitch/bridge/quota-manager.js +37 -0
  127. package/dist/modules/llmswitch/bridge/quota-manager.js.map +1 -0
  128. package/dist/modules/llmswitch/bridge/response-converter.d.ts +11 -0
  129. package/dist/modules/llmswitch/bridge/response-converter.js +68 -0
  130. package/dist/modules/llmswitch/bridge/response-converter.js.map +1 -0
  131. package/dist/modules/llmswitch/bridge/routing-integrations.d.ts +12 -0
  132. package/dist/modules/llmswitch/bridge/routing-integrations.js +56 -0
  133. package/dist/modules/llmswitch/bridge/routing-integrations.js.map +1 -0
  134. package/dist/modules/llmswitch/bridge/runtime-integrations.d.ts +34 -0
  135. package/dist/modules/llmswitch/bridge/runtime-integrations.js +87 -0
  136. package/dist/modules/llmswitch/bridge/runtime-integrations.js.map +1 -0
  137. package/dist/modules/llmswitch/bridge/snapshot-recorder.d.ts +13 -0
  138. package/dist/modules/llmswitch/bridge/snapshot-recorder.js +484 -0
  139. package/dist/modules/llmswitch/bridge/snapshot-recorder.js.map +1 -0
  140. package/dist/modules/llmswitch/bridge/state-integrations.d.ts +59 -0
  141. package/dist/modules/llmswitch/bridge/state-integrations.js +264 -0
  142. package/dist/modules/llmswitch/bridge/state-integrations.js.map +1 -0
  143. package/dist/modules/llmswitch/bridge.d.ts +14 -131
  144. package/dist/modules/llmswitch/bridge.js +14 -834
  145. package/dist/modules/llmswitch/bridge.js.map +1 -1
  146. package/dist/modules/pipeline/types/provider-config-types.d.ts +240 -0
  147. package/dist/modules/pipeline/types/provider-config-types.js +2 -0
  148. package/dist/modules/pipeline/types/provider-config-types.js.map +1 -0
  149. package/dist/modules/pipeline/types/provider-types.d.ts +2 -239
  150. package/dist/modules/pipeline/types/provider-types.js +1 -1
  151. package/dist/modules/pipeline/types/provider-types.js.map +1 -1
  152. package/dist/modules/pipeline/utils/debug-logger.js +3 -5
  153. package/dist/modules/pipeline/utils/debug-logger.js.map +1 -1
  154. package/dist/providers/auth/apikey-auth.d.ts +57 -1
  155. package/dist/providers/auth/apikey-auth.js +131 -1
  156. package/dist/providers/auth/apikey-auth.js.map +1 -1
  157. package/dist/providers/auth/oauth-lifecycle/error-detection.d.ts +8 -0
  158. package/dist/providers/auth/oauth-lifecycle/error-detection.js +71 -0
  159. package/dist/providers/auth/oauth-lifecycle/error-detection.js.map +1 -0
  160. package/dist/providers/auth/oauth-lifecycle/index.d.ts +10 -0
  161. package/dist/providers/auth/oauth-lifecycle/index.js +11 -0
  162. package/dist/providers/auth/oauth-lifecycle/index.js.map +1 -0
  163. package/dist/providers/auth/oauth-lifecycle/path-resolver.d.ts +18 -0
  164. package/dist/providers/auth/oauth-lifecycle/path-resolver.js +121 -0
  165. package/dist/providers/auth/oauth-lifecycle/path-resolver.js.map +1 -0
  166. package/dist/providers/auth/oauth-lifecycle/throttle.d.ts +22 -0
  167. package/dist/providers/auth/oauth-lifecycle/throttle.js +37 -0
  168. package/dist/providers/auth/oauth-lifecycle/throttle.js.map +1 -0
  169. package/dist/providers/auth/oauth-lifecycle/token-helpers.d.ts +36 -0
  170. package/dist/providers/auth/oauth-lifecycle/token-helpers.js +127 -0
  171. package/dist/providers/auth/oauth-lifecycle/token-helpers.js.map +1 -0
  172. package/dist/providers/auth/oauth-lifecycle/token-io.d.ts +14 -0
  173. package/dist/providers/auth/oauth-lifecycle/token-io.js +151 -0
  174. package/dist/providers/auth/oauth-lifecycle/token-io.js.map +1 -0
  175. package/dist/providers/auth/oauth-lifecycle.js +70 -446
  176. package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
  177. package/dist/providers/auth/oauth-repair-cooldown.js +8 -3
  178. package/dist/providers/auth/oauth-repair-cooldown.js.map +1 -1
  179. package/dist/providers/auth/oauth-repair-env.js +5 -3
  180. package/dist/providers/auth/oauth-repair-env.js.map +1 -1
  181. package/dist/providers/auth/oauth-token-utils.d.ts +61 -0
  182. package/dist/providers/auth/oauth-token-utils.js +187 -0
  183. package/dist/providers/auth/oauth-token-utils.js.map +1 -0
  184. package/dist/providers/auth/oauth-utils/camoufox-helper.d.ts +21 -0
  185. package/dist/providers/auth/oauth-utils/camoufox-helper.js +82 -0
  186. package/dist/providers/auth/oauth-utils/camoufox-helper.js.map +1 -0
  187. package/dist/providers/auth/oauth-utils/error-extraction.d.ts +17 -0
  188. package/dist/providers/auth/oauth-utils/error-extraction.js +80 -0
  189. package/dist/providers/auth/oauth-utils/error-extraction.js.map +1 -0
  190. package/dist/providers/auth/oauth-utils/index.d.ts +7 -0
  191. package/dist/providers/auth/oauth-utils/index.js +8 -0
  192. package/dist/providers/auth/oauth-utils/index.js.map +1 -0
  193. package/dist/providers/auth/token-refresh/index.d.ts +6 -0
  194. package/dist/providers/auth/token-refresh/index.js +7 -0
  195. package/dist/providers/auth/token-refresh/index.js.map +1 -0
  196. package/dist/providers/auth/token-refresh/token-state.d.ts +17 -0
  197. package/dist/providers/auth/token-refresh/token-state.js +30 -0
  198. package/dist/providers/auth/token-refresh/token-state.js.map +1 -0
  199. package/dist/providers/auth/token-storage/index.d.ts +7 -0
  200. package/dist/providers/auth/token-storage/index.js +8 -0
  201. package/dist/providers/auth/token-storage/index.js.map +1 -0
  202. package/dist/providers/auth/token-storage/token-file-resolver.d.ts +12 -0
  203. package/dist/providers/auth/token-storage/token-file-resolver.js +117 -0
  204. package/dist/providers/auth/token-storage/token-file-resolver.js.map +1 -0
  205. package/dist/providers/auth/token-storage/token-persistence.d.ts +22 -0
  206. package/dist/providers/auth/token-storage/token-persistence.js +86 -0
  207. package/dist/providers/auth/token-storage/token-persistence.js.map +1 -0
  208. package/dist/providers/auth/tokenfile-auth.js +12 -9
  209. package/dist/providers/auth/tokenfile-auth.js.map +1 -1
  210. package/dist/providers/core/api/provider-config.d.ts +8 -0
  211. package/dist/providers/core/config/camoufox-launcher.d.ts +1 -0
  212. package/dist/providers/core/config/camoufox-launcher.js +40 -9
  213. package/dist/providers/core/config/camoufox-launcher.js.map +1 -1
  214. package/dist/providers/core/config/oauth-flows.js +7 -2
  215. package/dist/providers/core/config/oauth-flows.js.map +1 -1
  216. package/dist/providers/core/config/provider-debug-hooks.d.ts +0 -12
  217. package/dist/providers/core/config/provider-debug-hooks.js +16 -56
  218. package/dist/providers/core/config/provider-debug-hooks.js.map +1 -1
  219. package/dist/providers/core/config/provider-debug-output-utils.d.ts +38 -0
  220. package/dist/providers/core/config/provider-debug-output-utils.js +46 -0
  221. package/dist/providers/core/config/provider-debug-output-utils.js.map +1 -0
  222. package/dist/providers/core/config/provider-oauth-configs.js +13 -9
  223. package/dist/providers/core/config/provider-oauth-configs.js.map +1 -1
  224. package/dist/providers/core/runtime/antigravity-request-type.d.ts +2 -0
  225. package/dist/providers/core/runtime/antigravity-request-type.js +126 -0
  226. package/dist/providers/core/runtime/antigravity-request-type.js.map +1 -0
  227. package/dist/providers/core/runtime/base-provider-runtime-helpers.d.ts +27 -0
  228. package/dist/providers/core/runtime/base-provider-runtime-helpers.js +105 -0
  229. package/dist/providers/core/runtime/base-provider-runtime-helpers.js.map +1 -0
  230. package/dist/providers/core/runtime/base-provider-series-cooldown.d.ts +19 -0
  231. package/dist/providers/core/runtime/base-provider-series-cooldown.js +363 -0
  232. package/dist/providers/core/runtime/base-provider-series-cooldown.js.map +1 -0
  233. package/dist/providers/core/runtime/base-provider.d.ts +4 -35
  234. package/dist/providers/core/runtime/base-provider.js +20 -501
  235. package/dist/providers/core/runtime/base-provider.js.map +1 -1
  236. package/dist/providers/core/runtime/deepseek-http-provider-helpers.d.ts +32 -0
  237. package/dist/providers/core/runtime/deepseek-http-provider-helpers.js +301 -0
  238. package/dist/providers/core/runtime/deepseek-http-provider-helpers.js.map +1 -0
  239. package/dist/providers/core/runtime/deepseek-http-provider.d.ts +0 -3
  240. package/dist/providers/core/runtime/deepseek-http-provider.js +5 -127
  241. package/dist/providers/core/runtime/deepseek-http-provider.js.map +1 -1
  242. package/dist/providers/core/runtime/deepseek-session-pow-helpers.d.ts +21 -0
  243. package/dist/providers/core/runtime/deepseek-session-pow-helpers.js +99 -0
  244. package/dist/providers/core/runtime/deepseek-session-pow-helpers.js.map +1 -0
  245. package/dist/providers/core/runtime/deepseek-session-pow.js +13 -108
  246. package/dist/providers/core/runtime/deepseek-session-pow.js.map +1 -1
  247. package/dist/providers/core/runtime/gemini-cli-http-provider.d.ts +0 -15
  248. package/dist/providers/core/runtime/gemini-cli-http-provider.js +13 -303
  249. package/dist/providers/core/runtime/gemini-cli-http-provider.js.map +1 -1
  250. package/dist/providers/core/runtime/gemini-cli-response-postprocessor.d.ts +9 -0
  251. package/dist/providers/core/runtime/gemini-cli-response-postprocessor.js +85 -0
  252. package/dist/providers/core/runtime/gemini-cli-response-postprocessor.js.map +1 -0
  253. package/dist/providers/core/runtime/gemini-http-provider.js +2 -2
  254. package/dist/providers/core/runtime/gemini-http-provider.js.map +1 -1
  255. package/dist/providers/core/runtime/gemini-sse-normalizer.d.ts +25 -0
  256. package/dist/providers/core/runtime/gemini-sse-normalizer.js +159 -0
  257. package/dist/providers/core/runtime/gemini-sse-normalizer.js.map +1 -0
  258. package/dist/providers/core/runtime/http-request-executor.js +1 -48
  259. package/dist/providers/core/runtime/http-request-executor.js.map +1 -1
  260. package/dist/providers/core/runtime/http-transport-provider.d.ts +2 -48
  261. package/dist/providers/core/runtime/http-transport-provider.js +158 -1273
  262. package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
  263. package/dist/providers/core/runtime/provider-bootstrap-utils.d.ts +20 -0
  264. package/dist/providers/core/runtime/provider-bootstrap-utils.js +78 -0
  265. package/dist/providers/core/runtime/provider-bootstrap-utils.js.map +1 -0
  266. package/dist/providers/core/runtime/provider-factory-helpers.d.ts +19 -0
  267. package/dist/providers/core/runtime/provider-factory-helpers.js +203 -0
  268. package/dist/providers/core/runtime/provider-factory-helpers.js.map +1 -0
  269. package/dist/providers/core/runtime/provider-factory.d.ts +9 -7
  270. package/dist/providers/core/runtime/provider-factory.js +57 -214
  271. package/dist/providers/core/runtime/provider-factory.js.map +1 -1
  272. package/dist/providers/core/runtime/provider-family-profile-utils.d.ts +23 -0
  273. package/dist/providers/core/runtime/provider-family-profile-utils.js +57 -0
  274. package/dist/providers/core/runtime/provider-family-profile-utils.js.map +1 -0
  275. package/dist/providers/core/runtime/provider-http-executor-utils.d.ts +32 -0
  276. package/dist/providers/core/runtime/provider-http-executor-utils.js +92 -0
  277. package/dist/providers/core/runtime/provider-http-executor-utils.js.map +1 -0
  278. package/dist/providers/core/runtime/provider-iflow-business-error-utils.d.ts +15 -0
  279. package/dist/providers/core/runtime/provider-iflow-business-error-utils.js +49 -0
  280. package/dist/providers/core/runtime/provider-iflow-business-error-utils.js.map +1 -0
  281. package/dist/providers/core/runtime/provider-request-executor-deps-factory.d.ts +29 -0
  282. package/dist/providers/core/runtime/provider-request-executor-deps-factory.js +41 -0
  283. package/dist/providers/core/runtime/provider-request-executor-deps-factory.js.map +1 -0
  284. package/dist/providers/core/runtime/provider-request-header-orchestrator.d.ts +30 -0
  285. package/dist/providers/core/runtime/provider-request-header-orchestrator.js +91 -0
  286. package/dist/providers/core/runtime/provider-request-header-orchestrator.js.map +1 -0
  287. package/dist/providers/core/runtime/provider-request-preprocessor.d.ts +5 -0
  288. package/dist/providers/core/runtime/provider-request-preprocessor.js +39 -0
  289. package/dist/providers/core/runtime/provider-request-preprocessor.js.map +1 -0
  290. package/dist/providers/core/runtime/provider-request-shaping-utils.d.ts +37 -0
  291. package/dist/providers/core/runtime/provider-request-shaping-utils.js +65 -0
  292. package/dist/providers/core/runtime/provider-request-shaping-utils.js.map +1 -0
  293. package/dist/providers/core/runtime/provider-response-postprocessor.d.ts +7 -0
  294. package/dist/providers/core/runtime/provider-response-postprocessor.js +28 -0
  295. package/dist/providers/core/runtime/provider-response-postprocessor.js.map +1 -0
  296. package/dist/providers/core/runtime/provider-runtime-utils.d.ts +16 -0
  297. package/dist/providers/core/runtime/provider-runtime-utils.js +51 -0
  298. package/dist/providers/core/runtime/provider-runtime-utils.js.map +1 -0
  299. package/dist/providers/core/runtime/responses-provider-helpers.d.ts +37 -0
  300. package/dist/providers/core/runtime/responses-provider-helpers.js +212 -0
  301. package/dist/providers/core/runtime/responses-provider-helpers.js.map +1 -0
  302. package/dist/providers/core/runtime/responses-provider.d.ts +0 -10
  303. package/dist/providers/core/runtime/responses-provider.js +14 -224
  304. package/dist/providers/core/runtime/responses-provider.js.map +1 -1
  305. package/dist/providers/core/runtime/runtime-endpoint-resolver.d.ts +21 -0
  306. package/dist/providers/core/runtime/runtime-endpoint-resolver.js +64 -0
  307. package/dist/providers/core/runtime/runtime-endpoint-resolver.js.map +1 -0
  308. package/dist/providers/core/runtime/service-profile-resolver.d.ts +29 -0
  309. package/dist/providers/core/runtime/service-profile-resolver.js +88 -0
  310. package/dist/providers/core/runtime/service-profile-resolver.js.map +1 -0
  311. package/dist/providers/core/runtime/transport/auth-mode-utils.d.ts +13 -0
  312. package/dist/providers/core/runtime/transport/auth-mode-utils.js +43 -0
  313. package/dist/providers/core/runtime/transport/auth-mode-utils.js.map +1 -0
  314. package/dist/providers/core/runtime/transport/auth-provider-factory.d.ts +37 -0
  315. package/dist/providers/core/runtime/transport/auth-provider-factory.js +131 -0
  316. package/dist/providers/core/runtime/transport/auth-provider-factory.js.map +1 -0
  317. package/dist/providers/core/runtime/transport/header-utils.d.ts +15 -0
  318. package/dist/providers/core/runtime/transport/header-utils.js +85 -0
  319. package/dist/providers/core/runtime/transport/header-utils.js.map +1 -0
  320. package/dist/providers/core/runtime/transport/iflow-signer.d.ts +12 -0
  321. package/dist/providers/core/runtime/transport/iflow-signer.js +63 -0
  322. package/dist/providers/core/runtime/transport/iflow-signer.js.map +1 -0
  323. package/dist/providers/core/runtime/transport/index.d.ts +15 -0
  324. package/dist/providers/core/runtime/transport/index.js +16 -0
  325. package/dist/providers/core/runtime/transport/index.js.map +1 -0
  326. package/dist/providers/core/runtime/transport/oauth-header-preflight.d.ts +12 -0
  327. package/dist/providers/core/runtime/transport/oauth-header-preflight.js +56 -0
  328. package/dist/providers/core/runtime/transport/oauth-header-preflight.js.map +1 -0
  329. package/dist/providers/core/runtime/transport/oauth-recovery-handler.d.ts +34 -0
  330. package/dist/providers/core/runtime/transport/oauth-recovery-handler.js +126 -0
  331. package/dist/providers/core/runtime/transport/oauth-recovery-handler.js.map +1 -0
  332. package/dist/providers/core/runtime/transport/provider-payload-utils.d.ts +21 -0
  333. package/dist/providers/core/runtime/transport/provider-payload-utils.js +88 -0
  334. package/dist/providers/core/runtime/transport/provider-payload-utils.js.map +1 -0
  335. package/dist/providers/core/runtime/transport/request-header-builder.d.ts +24 -0
  336. package/dist/providers/core/runtime/transport/request-header-builder.js +90 -0
  337. package/dist/providers/core/runtime/transport/request-header-builder.js.map +1 -0
  338. package/dist/providers/core/runtime/transport/runtime-detector.d.ts +22 -0
  339. package/dist/providers/core/runtime/transport/runtime-detector.js +63 -0
  340. package/dist/providers/core/runtime/transport/runtime-detector.js.map +1 -0
  341. package/dist/providers/core/runtime/transport/session-header-utils.d.ts +8 -0
  342. package/dist/providers/core/runtime/transport/session-header-utils.js +72 -0
  343. package/dist/providers/core/runtime/transport/session-header-utils.js.map +1 -0
  344. package/dist/providers/core/runtime/vision-debug-utils.d.ts +2 -0
  345. package/dist/providers/core/runtime/vision-debug-utils.js +31 -0
  346. package/dist/providers/core/runtime/vision-debug-utils.js.map +1 -1
  347. package/dist/providers/core/strategies/oauth-auth-code-flow.d.ts +13 -0
  348. package/dist/providers/core/strategies/oauth-auth-code-flow.js +272 -55
  349. package/dist/providers/core/strategies/oauth-auth-code-flow.js.map +1 -1
  350. package/dist/providers/core/utils/snapshot-writer-buffer.d.ts +13 -0
  351. package/dist/providers/core/utils/snapshot-writer-buffer.js +39 -0
  352. package/dist/providers/core/utils/snapshot-writer-buffer.js.map +1 -0
  353. package/dist/providers/core/utils/snapshot-writer.js +75 -54
  354. package/dist/providers/core/utils/snapshot-writer.js.map +1 -1
  355. package/dist/providers/profile/families/antigravity-profile.js +2 -10
  356. package/dist/providers/profile/families/antigravity-profile.js.map +1 -1
  357. package/dist/providers/profile/families/deepseek-profile.d.ts +2 -0
  358. package/dist/providers/profile/families/deepseek-profile.js +110 -0
  359. package/dist/providers/profile/families/deepseek-profile.js.map +1 -0
  360. package/dist/providers/profile/families/iflow-profile.js +89 -10
  361. package/dist/providers/profile/families/iflow-profile.js.map +1 -1
  362. package/dist/providers/profile/provider-profile-loader.d.ts +5 -0
  363. package/dist/providers/profile/provider-profile-loader.js +35 -0
  364. package/dist/providers/profile/provider-profile-loader.js.map +1 -1
  365. package/dist/providers/profile/provider-profile.d.ts +16 -1
  366. package/dist/runtime/runtime-flags.js +1 -1
  367. package/dist/runtime/runtime-flags.js.map +1 -1
  368. package/dist/runtime/wasm-runtime/index.d.ts +56 -0
  369. package/dist/runtime/wasm-runtime/index.js +69 -0
  370. package/dist/runtime/wasm-runtime/index.js.map +1 -0
  371. package/dist/scripts/camoufox/launch-auth.mjs +158 -10
  372. package/dist/server/handlers/handler-response-utils.d.ts +13 -0
  373. package/dist/server/handlers/handler-response-utils.js +427 -0
  374. package/dist/server/handlers/handler-response-utils.js.map +1 -0
  375. package/dist/server/handlers/handler-utils.d.ts +2 -11
  376. package/dist/server/handlers/handler-utils.js +21 -421
  377. package/dist/server/handlers/handler-utils.js.map +1 -1
  378. package/dist/server/runtime/http-server/clock-client-reaper.d.ts +23 -0
  379. package/dist/server/runtime/http-server/clock-client-reaper.js +159 -0
  380. package/dist/server/runtime/http-server/clock-client-reaper.js.map +1 -0
  381. package/dist/server/runtime/http-server/clock-client-registry-utils.d.ts +87 -0
  382. package/dist/server/runtime/http-server/clock-client-registry-utils.js +276 -0
  383. package/dist/server/runtime/http-server/clock-client-registry-utils.js.map +1 -0
  384. package/dist/server/runtime/http-server/clock-client-registry.d.ts +5 -50
  385. package/dist/server/runtime/http-server/clock-client-registry.js +74 -320
  386. package/dist/server/runtime/http-server/clock-client-registry.js.map +1 -1
  387. package/dist/server/runtime/http-server/clock-client-route-utils.d.ts +12 -0
  388. package/dist/server/runtime/http-server/clock-client-route-utils.js +210 -0
  389. package/dist/server/runtime/http-server/clock-client-route-utils.js.map +1 -0
  390. package/dist/server/runtime/http-server/clock-client-routes.js +27 -201
  391. package/dist/server/runtime/http-server/clock-client-routes.js.map +1 -1
  392. package/dist/server/runtime/http-server/clock-daemon-log-throttle.d.ts +12 -0
  393. package/dist/server/runtime/http-server/clock-daemon-log-throttle.js +56 -0
  394. package/dist/server/runtime/http-server/clock-daemon-log-throttle.js.map +1 -0
  395. package/dist/server/runtime/http-server/daemon-admin/control-handler.js +143 -14
  396. package/dist/server/runtime/http-server/daemon-admin/control-handler.js.map +1 -1
  397. package/dist/server/runtime/http-server/daemon-admin/credentials-handler-utils.d.ts +19 -0
  398. package/dist/server/runtime/http-server/daemon-admin/credentials-handler-utils.js +107 -0
  399. package/dist/server/runtime/http-server/daemon-admin/credentials-handler-utils.js.map +1 -0
  400. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js +2 -104
  401. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js.map +1 -1
  402. package/dist/server/runtime/http-server/daemon-admin/providers-handler-routing-utils.d.ts +28 -0
  403. package/dist/server/runtime/http-server/daemon-admin/providers-handler-routing-utils.js +298 -0
  404. package/dist/server/runtime/http-server/daemon-admin/providers-handler-routing-utils.js.map +1 -0
  405. package/dist/server/runtime/http-server/daemon-admin/providers-handler-utils.d.ts +22 -0
  406. package/dist/server/runtime/http-server/daemon-admin/providers-handler-utils.js +211 -0
  407. package/dist/server/runtime/http-server/daemon-admin/providers-handler-utils.js.map +1 -0
  408. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js +25 -454
  409. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js.map +1 -1
  410. package/dist/server/runtime/http-server/daemon-admin/quota-handler.js +81 -32
  411. package/dist/server/runtime/http-server/daemon-admin/quota-handler.js.map +1 -1
  412. package/dist/server/runtime/http-server/daemon-admin/routecodex-x7e-gate.d.ts +22 -0
  413. package/dist/server/runtime/http-server/daemon-admin/routecodex-x7e-gate.js +70 -0
  414. package/dist/server/runtime/http-server/daemon-admin/routecodex-x7e-gate.js.map +1 -0
  415. package/dist/server/runtime/http-server/executor/antigravity-detector.d.ts +34 -0
  416. package/dist/server/runtime/http-server/executor/antigravity-detector.js +118 -0
  417. package/dist/server/runtime/http-server/executor/antigravity-detector.js.map +1 -0
  418. package/dist/server/runtime/http-server/executor/env-config.d.ts +13 -0
  419. package/dist/server/runtime/http-server/executor/env-config.js +20 -0
  420. package/dist/server/runtime/http-server/executor/env-config.js.map +1 -0
  421. package/dist/server/runtime/http-server/executor/index.d.ts +11 -0
  422. package/dist/server/runtime/http-server/executor/index.js +18 -0
  423. package/dist/server/runtime/http-server/executor/index.js.map +1 -0
  424. package/dist/server/runtime/http-server/executor/provider-request-context.d.ts +20 -0
  425. package/dist/server/runtime/http-server/executor/provider-request-context.js +38 -0
  426. package/dist/server/runtime/http-server/executor/provider-request-context.js.map +1 -0
  427. package/dist/server/runtime/http-server/executor/provider-response-converter.d.ts +23 -0
  428. package/dist/server/runtime/http-server/executor/provider-response-converter.js +337 -0
  429. package/dist/server/runtime/http-server/executor/provider-response-converter.js.map +1 -0
  430. package/dist/server/runtime/http-server/executor/provider-response-utils.d.ts +8 -0
  431. package/dist/server/runtime/http-server/executor/provider-response-utils.js +93 -0
  432. package/dist/server/runtime/http-server/executor/provider-response-utils.js.map +1 -0
  433. package/dist/server/runtime/http-server/executor/provider-runtime-resolver.d.ts +23 -0
  434. package/dist/server/runtime/http-server/executor/provider-runtime-resolver.js +85 -0
  435. package/dist/server/runtime/http-server/executor/provider-runtime-resolver.js.map +1 -0
  436. package/dist/server/runtime/http-server/executor/request-executor-core-utils.d.ts +7 -0
  437. package/dist/server/runtime/http-server/executor/request-executor-core-utils.js +39 -0
  438. package/dist/server/runtime/http-server/executor/request-executor-core-utils.js.map +1 -0
  439. package/dist/server/runtime/http-server/executor/request-retry-helpers.d.ts +16 -0
  440. package/dist/server/runtime/http-server/executor/request-retry-helpers.js +218 -0
  441. package/dist/server/runtime/http-server/executor/request-retry-helpers.js.map +1 -0
  442. package/dist/server/runtime/http-server/executor/retry-engine.d.ts +21 -0
  443. package/dist/server/runtime/http-server/executor/retry-engine.js +73 -0
  444. package/dist/server/runtime/http-server/executor/retry-engine.js.map +1 -0
  445. package/dist/server/runtime/http-server/executor/sse-error-handler.d.ts +14 -0
  446. package/dist/server/runtime/http-server/executor/sse-error-handler.js +127 -0
  447. package/dist/server/runtime/http-server/executor/sse-error-handler.js.map +1 -0
  448. package/dist/server/runtime/http-server/executor/usage-aggregator.d.ts +39 -0
  449. package/dist/server/runtime/http-server/executor/usage-aggregator.js +177 -0
  450. package/dist/server/runtime/http-server/executor/usage-aggregator.js.map +1 -0
  451. package/dist/server/runtime/http-server/executor/usage-logger.d.ts +7 -0
  452. package/dist/server/runtime/http-server/executor/usage-logger.js +13 -0
  453. package/dist/server/runtime/http-server/executor/usage-logger.js.map +1 -0
  454. package/dist/server/runtime/http-server/executor/utils.d.ts +21 -0
  455. package/dist/server/runtime/http-server/executor/utils.js +62 -0
  456. package/dist/server/runtime/http-server/executor/utils.js.map +1 -0
  457. package/dist/server/runtime/http-server/executor-metadata.js +83 -2
  458. package/dist/server/runtime/http-server/executor-metadata.js.map +1 -1
  459. package/dist/server/runtime/http-server/executor-response.js +17 -9
  460. package/dist/server/runtime/http-server/executor-response.js.map +1 -1
  461. package/dist/server/runtime/http-server/http-server-bootstrap.d.ts +31 -0
  462. package/dist/server/runtime/http-server/http-server-bootstrap.js +367 -0
  463. package/dist/server/runtime/http-server/http-server-bootstrap.js.map +1 -0
  464. package/dist/server/runtime/http-server/http-server-clock-daemon.d.ts +5 -0
  465. package/dist/server/runtime/http-server/http-server-clock-daemon.js +242 -0
  466. package/dist/server/runtime/http-server/http-server-clock-daemon.js.map +1 -0
  467. package/dist/server/runtime/http-server/http-server-legacy-pipeline.d.ts +2 -0
  468. package/dist/server/runtime/http-server/http-server-legacy-pipeline.js +65 -0
  469. package/dist/server/runtime/http-server/http-server-legacy-pipeline.js.map +1 -0
  470. package/dist/server/runtime/http-server/http-server-lifecycle.d.ts +27 -0
  471. package/dist/server/runtime/http-server/http-server-lifecycle.js +285 -0
  472. package/dist/server/runtime/http-server/http-server-lifecycle.js.map +1 -0
  473. package/dist/server/runtime/http-server/http-server-runtime-providers.d.ts +10 -0
  474. package/dist/server/runtime/http-server/http-server-runtime-providers.js +415 -0
  475. package/dist/server/runtime/http-server/http-server-runtime-providers.js.map +1 -0
  476. package/dist/server/runtime/http-server/http-server-runtime-setup.d.ts +2 -0
  477. package/dist/server/runtime/http-server/http-server-runtime-setup.js +93 -0
  478. package/dist/server/runtime/http-server/http-server-runtime-setup.js.map +1 -0
  479. package/dist/server/runtime/http-server/index.d.ts +2 -46
  480. package/dist/server/runtime/http-server/index.js +96 -2615
  481. package/dist/server/runtime/http-server/index.js.map +1 -1
  482. package/dist/server/runtime/http-server/request-executor.d.ts +8 -21
  483. package/dist/server/runtime/http-server/request-executor.js +94 -956
  484. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  485. package/dist/server/runtime/http-server/routes.js +2 -2
  486. package/dist/server/runtime/http-server/routes.js.map +1 -1
  487. package/dist/server/runtime/http-server/servertool-admin-state.d.ts +42 -0
  488. package/dist/server/runtime/http-server/servertool-admin-state.js +210 -0
  489. package/dist/server/runtime/http-server/servertool-admin-state.js.map +1 -0
  490. package/dist/server/runtime/http-server/stats-manager-internals.d.ts +96 -0
  491. package/dist/server/runtime/http-server/stats-manager-internals.js +311 -0
  492. package/dist/server/runtime/http-server/stats-manager-internals.js.map +1 -0
  493. package/dist/server/runtime/http-server/stats-manager-table.d.ts +6 -0
  494. package/dist/server/runtime/http-server/stats-manager-table.js +135 -0
  495. package/dist/server/runtime/http-server/stats-manager-table.js.map +1 -0
  496. package/dist/server/runtime/http-server/stats-manager.d.ts +0 -23
  497. package/dist/server/runtime/http-server/stats-manager.js +95 -483
  498. package/dist/server/runtime/http-server/stats-manager.js.map +1 -1
  499. package/dist/server/utils/client-connection-state.js +61 -0
  500. package/dist/server/utils/client-connection-state.js.map +1 -1
  501. package/dist/server/utils/request-id-manager.d.ts +6 -0
  502. package/dist/server/utils/request-id-manager.js +105 -15
  503. package/dist/server/utils/request-id-manager.js.map +1 -1
  504. package/dist/server/utils/stage-logger.js +14 -4
  505. package/dist/server/utils/stage-logger.js.map +1 -1
  506. package/dist/server-lifecycle/index.d.ts +6 -0
  507. package/dist/server-lifecycle/index.js +7 -0
  508. package/dist/server-lifecycle/index.js.map +1 -0
  509. package/dist/server-lifecycle/port-utils.d.ts +18 -0
  510. package/dist/server-lifecycle/port-utils.js +204 -0
  511. package/dist/server-lifecycle/port-utils.js.map +1 -0
  512. package/dist/sharedmodule/process-snapshot.d.ts +26 -0
  513. package/dist/sharedmodule/process-snapshot.js +141 -0
  514. package/dist/sharedmodule/process-snapshot.js.map +1 -0
  515. package/dist/token-daemon/index.js +10 -3
  516. package/dist/token-daemon/index.js.map +1 -1
  517. package/dist/token-daemon/token-daemon.js +9 -11
  518. package/dist/token-daemon/token-daemon.js.map +1 -1
  519. package/dist/token-daemon/token-utils.d.ts +1 -1
  520. package/dist/token-daemon/token-utils.js +19 -3
  521. package/dist/token-daemon/token-utils.js.map +1 -1
  522. package/dist/tools/semantic-replay-snapshot-loader.d.ts +4 -0
  523. package/dist/tools/semantic-replay-snapshot-loader.js +396 -0
  524. package/dist/tools/semantic-replay-snapshot-loader.js.map +1 -0
  525. package/dist/tools/semantic-replay.js +2 -393
  526. package/dist/tools/semantic-replay.js.map +1 -1
  527. package/dist/utils/daemon-stop-intent.d.ts +17 -0
  528. package/dist/utils/daemon-stop-intent.js +104 -0
  529. package/dist/utils/daemon-stop-intent.js.map +1 -0
  530. package/dist/utils/key-429-tracker.js +6 -5
  531. package/dist/utils/key-429-tracker.js.map +1 -1
  532. package/dist/utils/pipeline-health-manager.js +7 -6
  533. package/dist/utils/pipeline-health-manager.js.map +1 -1
  534. package/dist/utils/process-lifecycle-logger.js +45 -1
  535. package/dist/utils/process-lifecycle-logger.js.map +1 -1
  536. package/dist/utils/runtime-exit-forensics.d.ts +2 -2
  537. package/dist/utils/runtime-exit-forensics.js +10 -5
  538. package/dist/utils/runtime-exit-forensics.js.map +1 -1
  539. package/dist/utils/snapshot-writer.js +3 -3
  540. package/dist/utils/snapshot-writer.js.map +1 -1
  541. package/docs/QUOTA_MANAGER_V3.md +3 -0
  542. package/docs/VIRTUAL_ROUTER_PRIORITY_AND_HEALTH.md +114 -0
  543. package/docs/daemon-admin-ui.html +268 -11
  544. package/docs/file-line-limit-gate.md +30 -0
  545. package/docs/refactoring/host-164.3-responsibility-migration.md +62 -0
  546. package/docs/release-iflow-400-gate.md +58 -0
  547. package/docs/replay-evidence-iflow-400.txt +33 -0
  548. package/docs/stop-message-auto.md +4 -3
  549. package/package.json +4 -3
  550. package/scripts/auth-iflow-manual.mjs +13 -23
  551. package/scripts/camoufox/launch-auth.mjs +158 -10
  552. package/scripts/ci/check-file-line-limit.mjs +149 -0
  553. package/scripts/copy-compat-assets.mjs +26 -0
  554. package/scripts/tests/ci-jest.mjs +4 -0
  555. package/scripts/verify-codex-error-samples.mjs +27 -6
@@ -104,6 +104,14 @@ function buildFirefoxUserPrefs() {
104
104
  'javascript.use_us_english_locale': true,
105
105
  'intl.charset.fallback.override': 'UTF-8',
106
106
  'gfx.downloadable_fonts.enabled': true,
107
+ 'browser.startup.page': 0,
108
+ 'browser.sessionstore.resume_from_crash': false,
109
+ 'browser.sessionstore.resume_session_once': false,
110
+ 'browser.sessionstore.max_resumed_crashes': 0,
111
+ 'layers.acceleration.disabled': true,
112
+ 'gfx.webrender.all': false,
113
+ 'gfx.webrender.software': true,
114
+ 'media.hardware-video-decoding.enabled': false,
107
115
  'font.default.x-western': 'sans-serif',
108
116
  'font.name.sans-serif.x-western': 'Arial',
109
117
  'font.name.serif.x-western': 'Times New Roman',
@@ -270,6 +278,92 @@ function cleanupExistingCamoufox(profileDir) {
270
278
  // ignore lock cleanup failure
271
279
  }
272
280
  }
281
+ const volatileStatePaths = [
282
+ 'sessionstore.jsonlz4',
283
+ 'sessionstore-backups',
284
+ 'recovery.jsonlz4',
285
+ 'recovery.baklz4',
286
+ 'previous.jsonlz4',
287
+ 'sessionCheckpoints.json',
288
+ 'startupCache'
289
+ ];
290
+ for (const rel of volatileStatePaths) {
291
+ const target = path.join(profileDir, rel);
292
+ try {
293
+ if (fs.existsSync(target)) {
294
+ fs.rmSync(target, { recursive: true, force: true });
295
+ }
296
+ } catch {
297
+ // ignore volatile state cleanup failure
298
+ }
299
+ }
300
+ }
301
+
302
+ function hasRunningCamoufoxForProfile(profileDir) {
303
+ if (!profileDir) {
304
+ return false;
305
+ }
306
+ try {
307
+ const running = listRunningCamoufoxProcesses();
308
+ return running.some((proc) => String(proc.command || '').includes(profileDir));
309
+ } catch {
310
+ return false;
311
+ }
312
+ }
313
+
314
+ function hasAnyRunningCamoufox() {
315
+ try {
316
+ return listRunningCamoufoxProcesses().length > 0;
317
+ } catch {
318
+ return false;
319
+ }
320
+ }
321
+
322
+ function listRunningCamoufoxProcesses() {
323
+ const probe = spawnSync('pgrep', ['-fal', 'camoufox'], {
324
+ encoding: 'utf8',
325
+ stdio: ['ignore', 'pipe', 'ignore']
326
+ });
327
+ if (!probe || probe.status !== 0) {
328
+ return [];
329
+ }
330
+
331
+ const selfPid = process.pid;
332
+ const lines = String(probe.stdout || '')
333
+ .split(/\r?\n/)
334
+ .map((line) => String(line || '').trim())
335
+ .filter(Boolean);
336
+
337
+ const result = [];
338
+ for (const line of lines) {
339
+ const spaceIdx = line.indexOf(' ');
340
+ if (spaceIdx <= 0) {
341
+ continue;
342
+ }
343
+ const pid = Number(line.slice(0, spaceIdx));
344
+ const command = line.slice(spaceIdx + 1).trim();
345
+ if (!Number.isFinite(pid) || pid <= 0 || pid === selfPid) {
346
+ continue;
347
+ }
348
+ const cmd = command.toLowerCase();
349
+ if (!cmd) {
350
+ continue;
351
+ }
352
+ if (cmd.includes('launch-auth.mjs')) {
353
+ continue;
354
+ }
355
+ if (cmd.includes('pgrep -fal camoufox')) {
356
+ continue;
357
+ }
358
+ const looksLikeCamoufox =
359
+ cmd.includes('camoufox.app/contents/macos/camoufox') ||
360
+ /(^|\/)camoufox(\s|$)/.test(cmd);
361
+ if (!looksLikeCamoufox) {
362
+ continue;
363
+ }
364
+ result.push({ pid, command });
365
+ }
366
+ return result;
273
367
  }
274
368
 
275
369
  async function main() {
@@ -413,6 +507,16 @@ async function launchManualCamoufox({ camoufoxBinary, profileDir, url }) {
413
507
  console.log(`[camoufox-launch-auth] binary=${camoufoxBinary}`);
414
508
  console.log(`[camoufox-launch-auth] profileDir=${profileDir}`);
415
509
  console.log(`[camoufox-launch-auth] url=${url}`);
510
+ if (hasRunningCamoufoxForProfile(profileDir)) {
511
+ console.log(
512
+ '[camoufox-launch-auth] Same OAuth profile is already running; cleaning stale session state and relaunching isolated instance.'
513
+ );
514
+ cleanupExistingCamoufox(profileDir);
515
+ } else if (hasAnyRunningCamoufox()) {
516
+ console.log(
517
+ '[camoufox-launch-auth] Detected other Camoufox instances with different profiles; launching isolated OAuth instance with -no-remote.'
518
+ );
519
+ }
416
520
  let browserExitCode = 0;
417
521
  let browser = null;
418
522
  const shutdownBrowser = (signal = 'SIGTERM') => {
@@ -430,7 +534,7 @@ async function launchManualCamoufox({ camoufoxBinary, profileDir, url }) {
430
534
  });
431
535
 
432
536
  try {
433
- browser = spawn(camoufoxBinary, ['-profile', profileDir, url], {
537
+ browser = spawn(camoufoxBinary, ['-no-remote', '-profile', profileDir, url], {
434
538
  detached: false,
435
539
  stdio: 'ignore',
436
540
  env: buildCamoufoxLaunchEnv()
@@ -453,8 +557,18 @@ async function launchManualCamoufox({ camoufoxBinary, profileDir, url }) {
453
557
 
454
558
  async function launchCamoufoxDetached({ camoufoxBinary, profileDir, url }) {
455
559
  console.log('[camoufox-launch-auth] Launching Camoufox (detached) ...');
560
+ if (hasRunningCamoufoxForProfile(profileDir)) {
561
+ console.log(
562
+ '[camoufox-launch-auth] Same OAuth profile is already running; cleaning stale session state and relaunching isolated instance.'
563
+ );
564
+ cleanupExistingCamoufox(profileDir);
565
+ } else if (hasAnyRunningCamoufox()) {
566
+ console.log(
567
+ '[camoufox-launch-auth] Detected other Camoufox instances with different profiles; launching isolated OAuth instance with -no-remote.'
568
+ );
569
+ }
456
570
  try {
457
- const child = spawn(camoufoxBinary, ['-profile', profileDir, url], {
571
+ const child = spawn(camoufoxBinary, ['-no-remote', '-profile', profileDir, url], {
458
572
  detached: true,
459
573
  stdio: 'ignore',
460
574
  env: buildCamoufoxLaunchEnv()
@@ -474,9 +588,14 @@ function isSelectorOrTimeoutError(error) {
474
588
  return (
475
589
  /timeout/i.test(message) ||
476
590
  /waiting for selector/i.test(message) ||
591
+ /selector[^.\n]*not detected/i.test(message) ||
592
+ /page\/account selector not detected/i.test(message) ||
593
+ /not detected/i.test(message) ||
477
594
  /strict mode violation/i.test(message) ||
595
+ /target page, context or browser has been closed/i.test(message) ||
478
596
  message.includes('未能定位') ||
479
- message.includes('无法定位')
597
+ message.includes('无法定位') ||
598
+ message.includes('未检测到')
480
599
  );
481
600
  }
482
601
 
@@ -636,6 +755,7 @@ async function runIflowAutoFlow({ url, profileDir, profileId, camoufoxBinary, de
636
755
  }
637
756
 
638
757
  const headless = !devMode;
758
+ const timeoutMs = Number(process.env.ROUTECODEX_CAMOUFOX_IFLOW_TIMEOUT_MS || 300_000);
639
759
  console.log(`[camoufox-launch-auth] Launching Camoufox in ${headless ? 'headless' : 'headed'} mode...`);
640
760
  cleanupExistingCamoufox(profileDir);
641
761
  const context = await firefox.launchPersistentContext(profileDir, {
@@ -668,7 +788,7 @@ async function runIflowAutoFlow({ url, profileDir, profileId, camoufoxBinary, de
668
788
  await button.click();
669
789
  console.log('[camoufox-launch-auth] Continue button clicked, waiting for iFlow window...');
670
790
  const popup = await popupPromise;
671
- const iflowPage = popup ?? page;
791
+ let iflowPage = popup ?? page;
672
792
  const selectors = [
673
793
  'span.accountName--ZKlffRBc',
674
794
  'span[class^="accountName--"]',
@@ -678,16 +798,44 @@ async function runIflowAutoFlow({ url, profileDir, profileId, camoufoxBinary, de
678
798
  ];
679
799
  const selectorQuery = selectors.join(', ');
680
800
  console.log('[camoufox-launch-auth] Waiting for iFlow OAuth URL or account DOM to load...');
801
+ const waitForCallbackPromise = waitForCallback(context, iflowPage, 60000)
802
+ .then((callbackPage) => ({ kind: 'callback', callbackPage }))
803
+ .catch((error) => {
804
+ const msg = error instanceof Error ? error.message : String(error);
805
+ console.warn('[camoufox-launch-auth] waitForCallback did not settle:', msg);
806
+ return null;
807
+ });
681
808
  const waitForUrlPromise = iflowPage
682
809
  .waitForURL((current) => typeof current === 'string' && current.includes('iflow.cn'), { timeout: 60000 })
683
- .then(() => 'url');
810
+ .then(() => ({ kind: 'url' }))
811
+ .catch((error) => {
812
+ const msg = error instanceof Error ? error.message : String(error);
813
+ console.warn('[camoufox-launch-auth] waitForURL did not settle:', msg);
814
+ return null;
815
+ });
684
816
  const waitForDomPromise = iflowPage
685
817
  .waitForSelector(selectorQuery, { timeout: 60000 })
686
- .then(() => 'dom');
687
- const raceResult = await Promise.race([waitForUrlPromise, waitForDomPromise]);
688
- waitForUrlPromise.catch(() => {});
689
- waitForDomPromise.catch(() => {});
690
- if (raceResult === 'url') {
818
+ .then(() => ({ kind: 'dom' }))
819
+ .catch((error) => {
820
+ const msg = error instanceof Error ? error.message : String(error);
821
+ console.warn('[camoufox-launch-auth] waitForSelector did not settle:', msg);
822
+ return null;
823
+ });
824
+ const raceResult = await Promise.race([waitForUrlPromise, waitForDomPromise, waitForCallbackPromise]);
825
+ if (!raceResult) {
826
+ const fallback = await waitForAnyElementInPages(context, selectors, 60000);
827
+ if (fallback?.page) {
828
+ iflowPage = fallback.page;
829
+ console.log('[camoufox-launch-auth] Fallback page with account DOM detected, continuing...');
830
+ } else {
831
+ throw new Error('iFlow OAuth page/account selector not detected');
832
+ }
833
+ } else if (raceResult.kind === 'callback') {
834
+ callbackObserved = true;
835
+ await raceResult.callbackPage.waitForLoadState('load', { timeout: timeoutMs }).catch(() => {});
836
+ console.log('[camoufox-launch-auth] OAuth callback detected before account selection, automation complete.');
837
+ return;
838
+ } else if (raceResult.kind === 'url') {
691
839
  console.log(`[camoufox-launch-auth] iFlow URL detected: ${await iflowPage.url()}`);
692
840
  await iflowPage.waitForSelector(selectorQuery, { timeout: 60000 });
693
841
  } else {
@@ -0,0 +1,13 @@
1
+ import type { Response } from 'express';
2
+ import type { PipelineExecutionResult } from './types.js';
3
+ interface DispatchOptions {
4
+ forceSSE?: boolean;
5
+ entryEndpoint?: string;
6
+ }
7
+ export interface SsePayloadShape {
8
+ __sse_responses?: unknown;
9
+ }
10
+ export declare function hasSsePayload(body: unknown): body is SsePayloadShape;
11
+ export declare function isAnalysisModeEnabled(): boolean;
12
+ export declare function sendPipelineResponse(res: Response, result: PipelineExecutionResult, requestId?: string, options?: DispatchOptions): void;
13
+ export {};
@@ -0,0 +1,427 @@
1
+ import { Readable, PassThrough } from 'node:stream';
2
+ import { logPipelineStage } from '../utils/stage-logger.js';
3
+ import { DEFAULT_TIMEOUTS } from '../../constants/index.js';
4
+ import { stripInternalKeysDeep } from '../../utils/strip-internal-keys.js';
5
+ import { writeServerSnapshot } from '../../utils/snapshot-writer.js';
6
+ import { resolveEffectiveRequestId } from '../utils/request-id-manager.js';
7
+ const BLOCKED_HEADERS = new Set(['content-length', 'transfer-encoding', 'connection', 'content-encoding']);
8
+ function formatRequestId(value) {
9
+ return resolveEffectiveRequestId(value);
10
+ }
11
+ export function hasSsePayload(body) {
12
+ return Boolean(body && typeof body === 'object' && '__sse_responses' in body);
13
+ }
14
+ export function isAnalysisModeEnabled() {
15
+ const mode = String(process.env.ROUTECODEX_MODE || process.env.RCC_MODE || '').trim().toLowerCase();
16
+ if (mode === 'analysis') {
17
+ return true;
18
+ }
19
+ const flag = String(process.env.ROUTECODEX_ANALYSIS || process.env.RCC_ANALYSIS || '').trim().toLowerCase();
20
+ if (flag === '1' || flag === 'true') {
21
+ return true;
22
+ }
23
+ return false;
24
+ }
25
+ export function sendPipelineResponse(res, result, requestId, options) {
26
+ const status = typeof result.status === 'number' ? result.status : 200;
27
+ const body = result.body;
28
+ const requestLabel = formatRequestId(requestId);
29
+ const forceSSE = options?.forceSSE === true;
30
+ const expectsStream = hasSsePayload(body);
31
+ const entryEndpoint = typeof options?.entryEndpoint === 'string' && options.entryEndpoint.trim()
32
+ ? options.entryEndpoint.trim()
33
+ : undefined;
34
+ const captureClientResponse = isAnalysisModeEnabled();
35
+ if (forceSSE && !expectsStream) {
36
+ logPipelineStage('response.sse.missing', requestLabel, { status });
37
+ if (captureClientResponse) {
38
+ void writeServerSnapshot({
39
+ phase: 'client-response.error',
40
+ requestId: requestLabel,
41
+ entryEndpoint,
42
+ data: { status: 502, error: { message: 'SSE stream missing from pipeline result', code: 'sse_bridge_error' } }
43
+ }).catch(() => { });
44
+ }
45
+ res.status(502).json({ error: { message: 'SSE stream missing from pipeline result', code: 'sse_bridge_error' } });
46
+ return;
47
+ }
48
+ logPipelineStage('response.dispatch.start', requestLabel, { status, stream: expectsStream, forced: forceSSE });
49
+ if (expectsStream) {
50
+ const streamSource = body.__sse_responses;
51
+ const stream = toNodeReadable(streamSource);
52
+ if (!stream) {
53
+ logPipelineStage('response.sse.missing', requestLabel, {});
54
+ if (captureClientResponse) {
55
+ void writeServerSnapshot({
56
+ phase: 'client-response.error',
57
+ requestId: requestLabel,
58
+ entryEndpoint,
59
+ data: { status: 502, error: { message: 'SSE stream missing from pipeline result', code: 'sse_bridge_error' } }
60
+ }).catch(() => { });
61
+ }
62
+ res.status(502).json({ error: { message: 'SSE stream missing from pipeline result', code: 'sse_bridge_error' } });
63
+ return;
64
+ }
65
+ const outboundStream = captureClientResponse
66
+ ? maybeAttachClientSseSnapshotStream(stream, {
67
+ requestId: requestLabel,
68
+ entryEndpoint,
69
+ status,
70
+ headers: result.headers
71
+ })
72
+ : stream;
73
+ applyHeaders(res, result.headers, true);
74
+ res.status(status);
75
+ res.setHeader('Content-Type', 'text/event-stream; charset=utf-8');
76
+ res.setHeader('Cache-Control', 'no-cache, no-transform');
77
+ res.setHeader('Connection', 'keep-alive');
78
+ const flushable = res;
79
+ if (typeof flushable.flushHeaders === 'function') {
80
+ flushable.flushHeaders();
81
+ }
82
+ else if (typeof flushable.flush === 'function') {
83
+ flushable.flush();
84
+ }
85
+ logPipelineStage('response.sse.stream.start', requestLabel, { status });
86
+ let eventCount = 0;
87
+ let ended = false;
88
+ let idleTimer = null;
89
+ let totalTimer = null;
90
+ let keepaliveTimer = null;
91
+ const readTimeoutMs = (names, fallback) => {
92
+ for (const name of names) {
93
+ const raw = String(process.env[name] || '').trim();
94
+ if (!raw) {
95
+ continue;
96
+ }
97
+ const parsed = Number(raw);
98
+ if (Number.isFinite(parsed) && parsed > 0) {
99
+ return parsed;
100
+ }
101
+ }
102
+ return fallback;
103
+ };
104
+ const idleTimeoutMs = readTimeoutMs(['ROUTECODEX_HTTP_SSE_IDLE_TIMEOUT_MS', 'RCC_HTTP_SSE_IDLE_TIMEOUT_MS'], DEFAULT_TIMEOUTS.HTTP_SSE_IDLE_MS);
105
+ const totalTimeoutMs = readTimeoutMs(['ROUTECODEX_HTTP_SSE_TIMEOUT_MS', 'RCC_HTTP_SSE_TIMEOUT_MS'], DEFAULT_TIMEOUTS.HTTP_SSE_TOTAL_MS);
106
+ const keepaliveMs = readTimeoutMs(['ROUTECODEX_HTTP_SSE_KEEPALIVE_MS', 'RCC_HTTP_SSE_KEEPALIVE_MS'], 15_000);
107
+ const clearTimers = () => {
108
+ if (idleTimer) {
109
+ clearTimeout(idleTimer);
110
+ idleTimer = null;
111
+ }
112
+ if (totalTimer) {
113
+ clearTimeout(totalTimer);
114
+ totalTimer = null;
115
+ }
116
+ if (keepaliveTimer) {
117
+ clearInterval(keepaliveTimer);
118
+ keepaliveTimer = null;
119
+ }
120
+ };
121
+ const endWithSseError = (code, message) => {
122
+ if (ended) {
123
+ return;
124
+ }
125
+ ended = true;
126
+ clearTimers();
127
+ logPipelineStage('response.sse.stream.timeout', requestLabel, { code, message });
128
+ try {
129
+ const payload = { type: 'error', status: 504, error: { message, code } };
130
+ res.write(`event: error\ndata: ${JSON.stringify(payload)}\n\n`);
131
+ }
132
+ catch {
133
+ /* ignore */
134
+ }
135
+ try {
136
+ res.end();
137
+ }
138
+ catch {
139
+ /* ignore */
140
+ }
141
+ try {
142
+ stream.destroy?.(Object.assign(new Error(message), { code }));
143
+ }
144
+ catch {
145
+ /* ignore */
146
+ }
147
+ };
148
+ const resetIdle = () => {
149
+ if (!Number.isFinite(idleTimeoutMs) || idleTimeoutMs <= 0) {
150
+ return;
151
+ }
152
+ if (idleTimer) {
153
+ clearTimeout(idleTimer);
154
+ }
155
+ idleTimer = setTimeout(() => {
156
+ endWithSseError('HTTP_SSE_IDLE_TIMEOUT', `SSE idle timeout after ${idleTimeoutMs}ms`);
157
+ }, idleTimeoutMs);
158
+ idleTimer.unref?.();
159
+ };
160
+ if (Number.isFinite(totalTimeoutMs) && totalTimeoutMs > 0) {
161
+ totalTimer = setTimeout(() => {
162
+ endWithSseError('HTTP_SSE_TIMEOUT', `SSE timeout after ${totalTimeoutMs}ms`);
163
+ }, totalTimeoutMs);
164
+ totalTimer.unref?.();
165
+ }
166
+ resetIdle();
167
+ // Keep-alive: send SSE comments periodically so clients don't treat long servertool holds as a dead connection.
168
+ // Comment frames (": ...") are ignored by SSE parsers and safe across OpenAI/Anthropic streams.
169
+ if (Number.isFinite(keepaliveMs) && keepaliveMs > 0) {
170
+ keepaliveTimer = setInterval(() => {
171
+ if (ended) {
172
+ return;
173
+ }
174
+ try {
175
+ res.write(`: keepalive\n\n`);
176
+ resetIdle();
177
+ }
178
+ catch {
179
+ // ignore write failures; close handler will clean up
180
+ }
181
+ }, keepaliveMs);
182
+ keepaliveTimer.unref?.();
183
+ }
184
+ const cleanup = () => {
185
+ clearTimers();
186
+ try {
187
+ stream.destroy?.();
188
+ }
189
+ catch {
190
+ /* ignore cleanup errors */
191
+ }
192
+ logPipelineStage('response.sse.stream.end', requestLabel, { events: eventCount, status });
193
+ };
194
+ stream.on('error', (error) => {
195
+ ended = true;
196
+ clearTimers();
197
+ logPipelineStage('response.sse.stream.error', requestLabel, { message: error.message });
198
+ try {
199
+ const payload = {
200
+ type: 'error',
201
+ status: 500,
202
+ error: {
203
+ message: error.message,
204
+ code: 'sse_stream_error',
205
+ request_id: requestLabel
206
+ }
207
+ };
208
+ res.write(`event: error\ndata: ${JSON.stringify(payload)}\n\n`);
209
+ }
210
+ catch {
211
+ /* ignore write errors */
212
+ }
213
+ try {
214
+ res.end();
215
+ }
216
+ catch {
217
+ /* ignore end errors */
218
+ }
219
+ });
220
+ stream.on('data', () => {
221
+ eventCount++;
222
+ resetIdle();
223
+ });
224
+ res.on('close', cleanup);
225
+ res.on('finish', cleanup);
226
+ outboundStream.pipe(res);
227
+ return;
228
+ }
229
+ applyHeaders(res, result.headers, false);
230
+ if (body === undefined || body === null) {
231
+ logPipelineStage('response.json.empty', requestLabel, { status });
232
+ if (captureClientResponse) {
233
+ void writeServerSnapshot({
234
+ phase: 'client-response',
235
+ requestId: requestLabel,
236
+ entryEndpoint,
237
+ data: { status, headers: result.headers, body: null }
238
+ }).catch(() => { });
239
+ }
240
+ res.status(status).end();
241
+ logPipelineStage('response.json.completed', requestLabel, { status });
242
+ return;
243
+ }
244
+ logPipelineStage('response.json.write', requestLabel, { status });
245
+ // E1 boundary rule: internal env variables use "__*" and must never reach client payloads.
246
+ // Preserve the SSE carrier key (it is handled above and never JSON-encoded).
247
+ const sanitized = stripInternalKeysDeep(body, { preserveKeys: new Set(['__sse_responses']) });
248
+ if (captureClientResponse) {
249
+ void writeServerSnapshot({
250
+ phase: 'client-response',
251
+ requestId: requestLabel,
252
+ entryEndpoint,
253
+ data: { status, headers: result.headers, body: sanitized }
254
+ }).catch(() => { });
255
+ }
256
+ res.status(status).json(sanitized);
257
+ logPipelineStage('response.json.completed', requestLabel, { status });
258
+ }
259
+ function applyHeaders(res, headers, omitContentType) {
260
+ if (!headers) {
261
+ return;
262
+ }
263
+ for (const [key, value] of Object.entries(headers)) {
264
+ if (typeof value !== 'string') {
265
+ continue;
266
+ }
267
+ const normalized = key.toLowerCase();
268
+ if (BLOCKED_HEADERS.has(normalized)) {
269
+ continue;
270
+ }
271
+ if (omitContentType && normalized === 'content-type') {
272
+ continue;
273
+ }
274
+ res.setHeader(key, value);
275
+ }
276
+ }
277
+ function toNodeReadable(streamLike) {
278
+ if (!streamLike) {
279
+ return null;
280
+ }
281
+ if (streamLike instanceof Readable) {
282
+ return streamLike;
283
+ }
284
+ const pipeCandidate = streamLike;
285
+ if (pipeCandidate && typeof pipeCandidate.pipe === 'function') {
286
+ return streamLike;
287
+ }
288
+ const webCandidate = streamLike;
289
+ if (webCandidate && typeof webCandidate.getReader === 'function') {
290
+ try {
291
+ return Readable.fromWeb(streamLike);
292
+ }
293
+ catch {
294
+ return null;
295
+ }
296
+ }
297
+ const asyncIterable = streamLike;
298
+ if (asyncIterable && typeof asyncIterable[Symbol.asyncIterator] === 'function') {
299
+ return Readable.from(streamLike);
300
+ }
301
+ return null;
302
+ }
303
+ function shouldCaptureClientStreamSnapshots() {
304
+ if (!isAnalysisModeEnabled()) {
305
+ return false;
306
+ }
307
+ const flag = String(process.env.ROUTECODEX_CAPTURE_STREAM_SNAPSHOTS || '').trim().toLowerCase();
308
+ if (flag === '1' || flag === 'true') {
309
+ return true;
310
+ }
311
+ if (flag === '0' || flag === 'false') {
312
+ return false;
313
+ }
314
+ return false;
315
+ }
316
+ function resolveClientStreamSnapshotMaxBytes() {
317
+ const raw = String(process.env.ROUTECODEX_CLIENT_STREAM_SNAPSHOT_MAX_BYTES ||
318
+ process.env.RCC_CLIENT_STREAM_SNAPSHOT_MAX_BYTES ||
319
+ '2000000').trim();
320
+ const parsed = Number(raw);
321
+ if (!raw) {
322
+ return 2_000_000;
323
+ }
324
+ if (Number.isFinite(parsed) && parsed >= 0) {
325
+ return Math.floor(parsed);
326
+ }
327
+ return 2_000_000;
328
+ }
329
+ function maybeAttachClientSseSnapshotStream(stream, options) {
330
+ if (!shouldCaptureClientStreamSnapshots()) {
331
+ return stream;
332
+ }
333
+ const maxBytes = resolveClientStreamSnapshotMaxBytes();
334
+ if (maxBytes <= 0) {
335
+ return stream;
336
+ }
337
+ const tee = new PassThrough();
338
+ const capture = new PassThrough();
339
+ stream.pipe(tee);
340
+ stream.pipe(capture);
341
+ const chunks = [];
342
+ let size = 0;
343
+ let truncated = false;
344
+ let flushed = false;
345
+ const toBuffer = (chunk) => {
346
+ if (Buffer.isBuffer(chunk)) {
347
+ return chunk;
348
+ }
349
+ if (chunk instanceof Uint8Array) {
350
+ return Buffer.from(chunk);
351
+ }
352
+ if (typeof chunk === 'string') {
353
+ return Buffer.from(chunk, 'utf8');
354
+ }
355
+ if (chunk === undefined || chunk === null) {
356
+ return Buffer.alloc(0);
357
+ }
358
+ return Buffer.from(String(chunk), 'utf8');
359
+ };
360
+ const flushSnapshot = (error) => {
361
+ if (flushed) {
362
+ return;
363
+ }
364
+ flushed = true;
365
+ try {
366
+ stream.unpipe(capture);
367
+ }
368
+ catch {
369
+ /* ignore */
370
+ }
371
+ capture.removeAllListeners();
372
+ const raw = chunks.length ? Buffer.concat(chunks).toString('utf8') : '';
373
+ const payload = {
374
+ mode: 'sse',
375
+ status: options.status,
376
+ headers: options.headers,
377
+ raw: raw || undefined,
378
+ truncated: truncated || undefined,
379
+ maxBytes
380
+ };
381
+ if (error) {
382
+ payload.error = error instanceof Error ? error.message : String(error);
383
+ }
384
+ void writeServerSnapshot({
385
+ phase: 'client-response',
386
+ requestId: options.requestId,
387
+ entryEndpoint: options.entryEndpoint,
388
+ data: payload
389
+ }).catch(() => { });
390
+ };
391
+ capture.on('data', (chunk) => {
392
+ const buf = toBuffer(chunk);
393
+ if (buf.length === 0) {
394
+ return;
395
+ }
396
+ if (truncated || size >= maxBytes) {
397
+ truncated = true;
398
+ return;
399
+ }
400
+ const remaining = maxBytes - size;
401
+ if (buf.length <= remaining) {
402
+ chunks.push(buf);
403
+ size += buf.length;
404
+ return;
405
+ }
406
+ if (remaining > 0) {
407
+ chunks.push(buf.slice(0, remaining));
408
+ size += remaining;
409
+ }
410
+ truncated = true;
411
+ });
412
+ capture.on('end', () => flushSnapshot());
413
+ capture.on('close', () => flushSnapshot());
414
+ capture.on('error', (error) => flushSnapshot(error));
415
+ stream.on('error', (error) => {
416
+ flushSnapshot(error);
417
+ try {
418
+ tee.destroy(error);
419
+ }
420
+ catch {
421
+ tee.destroy();
422
+ }
423
+ });
424
+ tee.on('error', (error) => flushSnapshot(error));
425
+ return tee;
426
+ }
427
+ //# sourceMappingURL=handler-response-utils.js.map