@jsonstudio/rcc 0.89.333 → 0.89.548

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 (191) hide show
  1. package/dist/build-info.js +3 -3
  2. package/dist/build-info.js.map +1 -1
  3. package/dist/cli.js +110 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/token-daemon.d.ts +2 -0
  6. package/dist/commands/token-daemon.js +183 -0
  7. package/dist/commands/token-daemon.js.map +1 -0
  8. package/dist/index.js +20 -3
  9. package/dist/index.js.map +1 -1
  10. package/dist/modules/llmswitch/bridge.d.ts +1 -1
  11. package/dist/modules/llmswitch/bridge.js +3 -2
  12. package/dist/modules/llmswitch/bridge.js.map +1 -1
  13. package/dist/modules/pipeline/utils/colored-logger.js +3 -1
  14. package/dist/modules/pipeline/utils/colored-logger.js.map +1 -1
  15. package/dist/providers/auth/gemini-cli-userinfo-helper.js +12 -2
  16. package/dist/providers/auth/gemini-cli-userinfo-helper.js.map +1 -1
  17. package/dist/providers/auth/oauth-lifecycle.js +337 -25
  18. package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
  19. package/dist/providers/core/config/oauth-flows.d.ts +23 -0
  20. package/dist/providers/core/config/oauth-flows.js +92 -5
  21. package/dist/providers/core/config/oauth-flows.js.map +1 -1
  22. package/dist/providers/core/config/provider-oauth-configs.js +9 -3
  23. package/dist/providers/core/config/provider-oauth-configs.js.map +1 -1
  24. package/dist/providers/core/config/service-profiles.js +18 -10
  25. package/dist/providers/core/config/service-profiles.js.map +1 -1
  26. package/dist/providers/core/runtime/base-provider.d.ts +2 -0
  27. package/dist/providers/core/runtime/base-provider.js +35 -1
  28. package/dist/providers/core/runtime/base-provider.js.map +1 -1
  29. package/dist/providers/core/runtime/gemini-cli-http-provider.js +87 -20
  30. package/dist/providers/core/runtime/gemini-cli-http-provider.js.map +1 -1
  31. package/dist/providers/core/runtime/http-request-executor.d.ts +1 -0
  32. package/dist/providers/core/runtime/http-request-executor.js +75 -1
  33. package/dist/providers/core/runtime/http-request-executor.js.map +1 -1
  34. package/dist/providers/core/runtime/http-transport-provider.d.ts +2 -0
  35. package/dist/providers/core/runtime/http-transport-provider.js +60 -2
  36. package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
  37. package/dist/providers/core/runtime/iflow-http-provider.d.ts +4 -0
  38. package/dist/providers/core/runtime/iflow-http-provider.js +28 -0
  39. package/dist/providers/core/runtime/iflow-http-provider.js.map +1 -1
  40. package/dist/providers/core/runtime/rate-limit-manager.d.ts +30 -0
  41. package/dist/providers/core/runtime/rate-limit-manager.js +136 -0
  42. package/dist/providers/core/runtime/rate-limit-manager.js.map +1 -0
  43. package/dist/providers/core/runtime/responses-provider.js +8 -3
  44. package/dist/providers/core/runtime/responses-provider.js.map +1 -1
  45. package/dist/providers/core/runtime/vision-debug-utils.d.ts +13 -0
  46. package/dist/providers/core/runtime/vision-debug-utils.js +114 -0
  47. package/dist/providers/core/runtime/vision-debug-utils.js.map +1 -0
  48. package/dist/providers/core/strategies/oauth-auth-code-flow.js +75 -26
  49. package/dist/providers/core/strategies/oauth-auth-code-flow.js.map +1 -1
  50. package/dist/providers/core/utils/http-client.js +2 -1
  51. package/dist/providers/core/utils/http-client.js.map +1 -1
  52. package/dist/providers/core/utils/provider-error-reporter.js +31 -5
  53. package/dist/providers/core/utils/provider-error-reporter.js.map +1 -1
  54. package/dist/providers/core/utils/provider-type-utils.js +1 -1
  55. package/dist/providers/core/utils/provider-type-utils.js.map +1 -1
  56. package/dist/providers/core/utils/snapshot-writer.d.ts +1 -1
  57. package/dist/providers/core/utils/snapshot-writer.js.map +1 -1
  58. package/dist/server/handlers/sse-dispatcher.js +22 -2
  59. package/dist/server/handlers/sse-dispatcher.js.map +1 -1
  60. package/dist/server/runtime/http-server/index.d.ts +9 -0
  61. package/dist/server/runtime/http-server/index.js +512 -144
  62. package/dist/server/runtime/http-server/index.js.map +1 -1
  63. package/dist/server/runtime/http-server/provider-utils.js +1 -1
  64. package/dist/server/runtime/http-server/provider-utils.js.map +1 -1
  65. package/dist/server/runtime/http-server/request-executor.d.ts +10 -0
  66. package/dist/server/runtime/http-server/request-executor.js +553 -159
  67. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  68. package/dist/server/runtime/http-server/routes.d.ts +5 -0
  69. package/dist/server/runtime/http-server/routes.js +29 -0
  70. package/dist/server/runtime/http-server/routes.js.map +1 -1
  71. package/dist/server/runtime/http-server/runtime-manager.js +33 -0
  72. package/dist/server/runtime/http-server/runtime-manager.js.map +1 -1
  73. package/dist/server/utils/utf8-chunk-buffer.d.ts +43 -0
  74. package/dist/server/utils/utf8-chunk-buffer.js +132 -0
  75. package/dist/server/utils/utf8-chunk-buffer.js.map +1 -0
  76. package/dist/token-daemon/history-store.d.ts +75 -0
  77. package/dist/token-daemon/history-store.js +207 -0
  78. package/dist/token-daemon/history-store.js.map +1 -0
  79. package/dist/token-daemon/index.d.ts +7 -0
  80. package/dist/token-daemon/index.js +336 -0
  81. package/dist/token-daemon/index.js.map +1 -0
  82. package/dist/token-daemon/server-utils.d.ts +33 -0
  83. package/dist/token-daemon/server-utils.js +155 -0
  84. package/dist/token-daemon/server-utils.js.map +1 -0
  85. package/dist/token-daemon/token-daemon.d.ts +23 -0
  86. package/dist/token-daemon/token-daemon.js +249 -0
  87. package/dist/token-daemon/token-daemon.js.map +1 -0
  88. package/dist/token-daemon/token-types.d.ts +44 -0
  89. package/dist/token-daemon/token-types.js +18 -0
  90. package/dist/token-daemon/token-types.js.map +1 -0
  91. package/dist/token-daemon/token-utils.d.ts +17 -0
  92. package/dist/token-daemon/token-utils.js +153 -0
  93. package/dist/token-daemon/token-utils.js.map +1 -0
  94. package/dist/token-portal/local-token-portal.d.ts +1 -0
  95. package/dist/token-portal/local-token-portal.js +89 -0
  96. package/dist/token-portal/local-token-portal.js.map +1 -0
  97. package/dist/token-portal/render.d.ts +10 -0
  98. package/dist/token-portal/render.js +56 -0
  99. package/dist/token-portal/render.js.map +1 -0
  100. package/dist/tools/semantic-replay.js +7 -6
  101. package/dist/tools/semantic-replay.js.map +1 -1
  102. package/dist/utils/error-handler-registry.d.ts +36 -0
  103. package/dist/utils/error-handler-registry.js +93 -7
  104. package/dist/utils/error-handler-registry.js.map +1 -1
  105. package/node_modules/@jsonstudio/llms/README.md +2 -0
  106. package/node_modules/@jsonstudio/llms/dist/conversion/codecs/gemini-openai-codec.js +137 -5
  107. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/gemini-web-search.d.ts +17 -0
  108. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/gemini-web-search.js +68 -0
  109. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/glm-image-content.d.ts +2 -0
  110. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/glm-image-content.js +83 -0
  111. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/glm-vision-prompt.d.ts +11 -0
  112. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/glm-vision-prompt.js +177 -0
  113. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/glm-web-search.d.ts +2 -0
  114. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/glm-web-search.js +63 -0
  115. package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/universal-shape-filter.js +11 -0
  116. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-gemini.json +17 -0
  117. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-glm.json +190 -181
  118. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-iflow.json +195 -195
  119. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-lmstudio.json +43 -43
  120. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-qwen.json +20 -20
  121. package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/responses-c4m.json +42 -42
  122. package/node_modules/@jsonstudio/llms/dist/conversion/config/sample-config.json +1 -1
  123. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.js +24 -0
  124. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-types.d.ts +8 -0
  125. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline.js +39 -4
  126. package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/target-utils.js +6 -0
  127. package/node_modules/@jsonstudio/llms/dist/conversion/hub/process/chat-process.js +213 -1
  128. package/node_modules/@jsonstudio/llms/dist/conversion/hub/response/provider-response.d.ts +34 -0
  129. package/node_modules/@jsonstudio/llms/dist/conversion/hub/response/provider-response.js +84 -24
  130. package/node_modules/@jsonstudio/llms/dist/conversion/hub/response/server-side-tools.d.ts +26 -0
  131. package/node_modules/@jsonstudio/llms/dist/conversion/hub/response/server-side-tools.js +383 -0
  132. package/node_modules/@jsonstudio/llms/dist/conversion/hub/semantic-mappers/gemini-mapper.js +241 -14
  133. package/node_modules/@jsonstudio/llms/dist/conversion/hub/semantic-mappers/responses-mapper.js +17 -1
  134. package/node_modules/@jsonstudio/llms/dist/conversion/hub/standardized-bridge.js +14 -0
  135. package/node_modules/@jsonstudio/llms/dist/conversion/hub/types/standardized.d.ts +1 -0
  136. package/node_modules/@jsonstudio/llms/dist/conversion/responses/responses-openai-bridge.js +82 -3
  137. package/node_modules/@jsonstudio/llms/dist/conversion/shared/anthropic-message-utils.js +92 -3
  138. package/node_modules/@jsonstudio/llms/dist/conversion/shared/bridge-message-utils.js +137 -10
  139. package/node_modules/@jsonstudio/llms/dist/conversion/shared/responses-output-builder.js +43 -2
  140. package/node_modules/@jsonstudio/llms/dist/conversion/shared/snapshot-utils.js +17 -47
  141. package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-filter-pipeline.js +1 -0
  142. package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-mapping.js +25 -2
  143. package/node_modules/@jsonstudio/llms/dist/index.d.ts +1 -0
  144. package/node_modules/@jsonstudio/llms/dist/index.js +1 -0
  145. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/bootstrap.js +308 -43
  146. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/classifier.js +11 -17
  147. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/context-advisor.d.ts +0 -2
  148. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/context-advisor.js +0 -12
  149. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/engine.d.ts +17 -2
  150. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/engine.js +332 -95
  151. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/features.js +1 -1
  152. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/message-utils.js +36 -24
  153. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/provider-registry.js +2 -1
  154. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/token-counter.js +14 -3
  155. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/types.d.ts +66 -2
  156. package/node_modules/@jsonstudio/llms/dist/router/virtual-router/types.js +2 -1
  157. package/node_modules/@jsonstudio/llms/dist/servertool/engine.d.ts +27 -0
  158. package/node_modules/@jsonstudio/llms/dist/servertool/engine.js +60 -0
  159. package/node_modules/@jsonstudio/llms/dist/servertool/flow-types.d.ts +40 -0
  160. package/node_modules/@jsonstudio/llms/dist/servertool/flow-types.js +1 -0
  161. package/node_modules/@jsonstudio/llms/dist/servertool/handlers/vision.d.ts +1 -0
  162. package/node_modules/@jsonstudio/llms/dist/servertool/handlers/vision.js +194 -0
  163. package/node_modules/@jsonstudio/llms/dist/servertool/handlers/web-search.d.ts +1 -0
  164. package/node_modules/@jsonstudio/llms/dist/servertool/handlers/web-search.js +638 -0
  165. package/node_modules/@jsonstudio/llms/dist/servertool/orchestration-types.d.ts +33 -0
  166. package/node_modules/@jsonstudio/llms/dist/servertool/orchestration-types.js +1 -0
  167. package/node_modules/@jsonstudio/llms/dist/servertool/registry.d.ts +18 -0
  168. package/node_modules/@jsonstudio/llms/dist/servertool/registry.js +27 -0
  169. package/node_modules/@jsonstudio/llms/dist/servertool/server-side-tools.d.ts +8 -0
  170. package/node_modules/@jsonstudio/llms/dist/servertool/server-side-tools.js +208 -0
  171. package/node_modules/@jsonstudio/llms/dist/servertool/types.d.ts +88 -0
  172. package/node_modules/@jsonstudio/llms/dist/servertool/types.js +1 -0
  173. package/node_modules/@jsonstudio/llms/dist/servertool/vision-tool.d.ts +2 -0
  174. package/node_modules/@jsonstudio/llms/dist/servertool/vision-tool.js +185 -0
  175. package/node_modules/@jsonstudio/llms/dist/sse/json-to-sse/event-generators/responses.js +15 -3
  176. package/node_modules/@jsonstudio/llms/dist/sse/sse-to-json/builders/response-builder.js +6 -3
  177. package/node_modules/@jsonstudio/llms/dist/sse/sse-to-json/gemini-sse-to-json-converter.js +27 -1
  178. package/node_modules/@jsonstudio/llms/dist/sse/types/gemini-types.d.ts +20 -1
  179. package/node_modules/@jsonstudio/llms/dist/sse/types/responses-types.js +1 -1
  180. package/node_modules/@jsonstudio/llms/dist/telemetry/stats-center.d.ts +73 -0
  181. package/node_modules/@jsonstudio/llms/dist/telemetry/stats-center.js +280 -0
  182. package/node_modules/@jsonstudio/llms/package.json +1 -1
  183. package/package.json +3 -2
  184. package/scripts/pack-mode.mjs +2 -1
  185. package/scripts/publish-rcc.mjs +20 -4
  186. package/scripts/test-iflow-web-search.mjs +141 -0
  187. package/scripts/test-iflow.mjs +93 -1
  188. package/scripts/tests/virtual-router-health.mjs +141 -6
  189. package/dist/tools/replay-request.d.ts +0 -0
  190. package/dist/tools/replay-request.js +0 -2
  191. package/dist/tools/replay-request.js.map +0 -1
@@ -13,7 +13,7 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
13
13
 
14
14
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
15
15
  const ROOT = path.resolve(__dirname, '../..');
16
- const CORE_DIST = path.join(ROOT, 'sharedmodule', 'llmswitch-core', 'dist', 'v2', 'router', 'virtual-router');
16
+ const CORE_DIST = path.join(ROOT, 'sharedmodule', 'llmswitch-core', 'dist', 'router', 'virtual-router');
17
17
 
18
18
  async function loadCoreModule(rel) {
19
19
  const file = path.join(CORE_DIST, rel);
@@ -21,16 +21,19 @@ async function loadCoreModule(rel) {
21
21
  }
22
22
 
23
23
  const { VirtualRouterEngine } = await loadCoreModule('engine.js');
24
+ const { bootstrapVirtualRouterConfig } = await loadCoreModule('bootstrap.js');
24
25
  const { providerErrorCenter } = await loadCoreModule('error-center.js');
25
26
  const { VirtualRouterError } = await loadCoreModule('types.js');
26
27
 
27
28
  function parseArgs(argv) {
28
- const args = { out: null };
29
+ const args = { out: null, config: null };
29
30
  const list = [...argv];
30
31
  while (list.length) {
31
32
  const cur = list.shift();
32
33
  if (cur === '--out' || cur === '--output') {
33
34
  args.out = list.shift() || null;
35
+ } else if (cur === '--config') {
36
+ args.config = list.shift() || null;
34
37
  } else if (cur === '--help' || cur === '-h') {
35
38
  args.help = true;
36
39
  }
@@ -57,9 +60,18 @@ function createRouterConfig() {
57
60
  'charlie.sim-model': buildProviderProfile('charlie.sim-model', 'https://charlie.local/v1')
58
61
  };
59
62
  const routing = {
60
- default: Object.keys(providers),
61
- coding: ['bravo.sim-model', 'charlie.sim-model'],
62
- thinking: ['charlie.sim-model', 'alpha.sim-model']
63
+ default: [
64
+ { id: 'default-primary', priority: 200, targets: ['alpha.sim-model', 'bravo.sim-model'] },
65
+ { id: 'default-backup', backup: true, priority: 100, targets: ['charlie.sim-model'] }
66
+ ],
67
+ coding: [
68
+ { id: 'coding-primary', priority: 200, targets: ['bravo.sim-model', 'charlie.sim-model'] },
69
+ { id: 'coding-backup', backup: true, priority: 100, targets: ['alpha.sim-model'] }
70
+ ],
71
+ thinking: [
72
+ { id: 'thinking-primary', priority: 200, targets: ['charlie.sim-model'] },
73
+ { id: 'thinking-backup', backup: true, priority: 100, targets: ['bravo.sim-model'] }
74
+ ]
63
75
  };
64
76
  return {
65
77
  routing,
@@ -227,16 +239,128 @@ async function scenarioScheduler(sim) {
227
239
  sim.runRoute('thinking');
228
240
  }
229
241
 
242
+ async function scenarioPriorityPools(sim) {
243
+ const first = sim.runRoute('thinking');
244
+ if (first !== 'charlie.sim-model') {
245
+ throw new Error(`expected primary thinking pool hit charlie.sim-model, got ${first}`);
246
+ }
247
+ sim.engine.handleProviderFailure({
248
+ providerKey: 'charlie.sim-model',
249
+ reason: 'priority-test',
250
+ fatal: true,
251
+ affectsHealth: true,
252
+ cooldownOverrideMs: 60_000
253
+ });
254
+ const second = sim.runRoute('thinking');
255
+ if (second !== 'bravo.sim-model') {
256
+ throw new Error(`expected thinking backup pool hit bravo.sim-model, got ${second}`);
257
+ }
258
+ }
259
+
230
260
  async function scenarioRoutingDirectives(sim) {
231
261
  sim.runRoute('baseline', '普通请求');
232
262
  sim.runRoute('forced-thinking', '请仔细分析这个问题 <**thinking**>');
233
263
  sim.runRoute('forced-provider', '请强制使用这个provider <**charlie.sim-model**> 来回答');
234
264
  }
235
265
 
266
+ async function scenarioRealConfig(configPath) {
267
+ const resolvedPath = path.resolve(configPath);
268
+ console.log(`\n=== Scenario: real-config (${resolvedPath}) ===`);
269
+ const source = JSON.parse(await fs.readFile(resolvedPath, 'utf-8'));
270
+ const section = source.virtualrouter && typeof source.virtualrouter === 'object' ? source.virtualrouter : source;
271
+ const { config } = bootstrapVirtualRouterConfig(section);
272
+ const engine = new VirtualRouterEngine();
273
+ engine.initialize(config);
274
+ const thinkingPools = config.routing.thinking ?? [];
275
+ const primaryPools = thinkingPools.filter((tier) => !tier.backup);
276
+ const backupPools = thinkingPools.filter((tier) => tier.backup);
277
+
278
+ const runThinking = (label) => {
279
+ const reqId = `real-config-${label}-${Date.now()}`;
280
+ const request = {
281
+ model: 'gpt-5.2-codex',
282
+ messages: [
283
+ { role: 'system', content: 'diagnostic' },
284
+ { role: 'user', content: `深入思考:${label}` }
285
+ ]
286
+ };
287
+ const metadata = {
288
+ requestId: reqId,
289
+ entryEndpoint: '/v1/responses',
290
+ processMode: 'chat',
291
+ stream: false,
292
+ direction: 'request',
293
+ providerProtocol: 'openai-responses'
294
+ };
295
+ const result = engine.route(request, metadata);
296
+ console.log(
297
+ JSON.stringify(
298
+ {
299
+ stage: 'real-config-route',
300
+ label,
301
+ providerKey: result.decision.providerKey,
302
+ route: result.decision.routeName,
303
+ poolId: result.decision.poolId
304
+ },
305
+ null,
306
+ 2
307
+ )
308
+ );
309
+ return result.decision.providerKey;
310
+ };
311
+
312
+ const markUnavailable = (targets, reason) => {
313
+ for (const key of targets || []) {
314
+ engine.handleProviderFailure({
315
+ providerKey: key,
316
+ fatal: true,
317
+ affectsHealth: true,
318
+ reason,
319
+ cooldownOverrideMs: 60_000
320
+ });
321
+ }
322
+ };
323
+
324
+ // Primary hit
325
+ const firstProvider = runThinking('primary-hit');
326
+ const primaryTargets = primaryPools.flatMap((pool) => pool.targets ?? []);
327
+ const backupTargets = backupPools.flatMap((pool) => pool.targets ?? []);
328
+ if (primaryTargets.length === 0) {
329
+ console.warn('[real-config] No explicit primary thinking pool configured.');
330
+ } else if (!primaryTargets.includes(firstProvider)) {
331
+ console.warn('[real-config] First provider is not part of primary tier:', firstProvider);
332
+ }
333
+
334
+ // Drain primary
335
+ markUnavailable(primaryTargets, 'primary-exhausted');
336
+ const secondProvider = runThinking('backup-hit');
337
+ if (backupTargets.length && !backupTargets.includes(secondProvider)) {
338
+ throw new Error(
339
+ `[real-config] Expected backup pool provider after draining primary, got ${secondProvider}`
340
+ );
341
+ }
342
+
343
+ // Drain backup -> should fall to default
344
+ markUnavailable(backupTargets, 'backup-exhausted');
345
+ const thirdProvider = runThinking('default-fallback');
346
+ const usedRoute = engine.getStatus().routes;
347
+ console.log(
348
+ JSON.stringify(
349
+ {
350
+ stage: 'real-config-summary',
351
+ thirdProvider,
352
+ routes: usedRoute
353
+ },
354
+ null,
355
+ 2
356
+ )
357
+ );
358
+ }
359
+
236
360
  async function main() {
237
361
  const args = parseArgs(process.argv.slice(2));
238
362
  if (args.help) {
239
- console.log('Usage: node scripts/tests/virtual-router-health.mjs [--out summary.json]');
363
+ console.log('Usage: node scripts/tests/virtual-router-health.mjs [--out summary.json] [--config ~/.routecodex/config.json]');
240
364
  return;
241
365
  }
242
366
 
@@ -247,6 +371,7 @@ async function main() {
247
371
  ['upstream', scenarioUpstream],
248
372
  ['timeout', scenarioTimeout],
249
373
  ['scheduler', scenarioScheduler],
374
+ ['priority-pools', scenarioPriorityPools],
250
375
  ['routing-directives', scenarioRoutingDirectives]
251
376
  ];
252
377
 
@@ -260,6 +385,16 @@ async function main() {
260
385
  });
261
386
  }
262
387
 
388
+ if (args.config) {
389
+ try {
390
+ await scenarioRealConfig(args.config);
391
+ summary.push({ name: 'real-config', status: 'ok', lastHealth: null });
392
+ } catch (error) {
393
+ console.error('[real-config] failed:', error);
394
+ summary.push({ name: 'real-config', status: 'failed', error: error?.message || String(error), lastHealth: null });
395
+ }
396
+ }
397
+
263
398
  if (args.out) {
264
399
  const outFile = path.resolve(process.cwd(), args.out);
265
400
  await fs.mkdir(path.dirname(outFile), { recursive: true });
File without changes
@@ -1,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=replay-request.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replay-request.js","sourceRoot":"","sources":["../../src/tools/replay-request.ts"],"names":[],"mappings":""}