omniroute 3.1.3 → 3.1.5

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 (95) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/build-manifest.json +2 -2
  3. package/app/.next/prerender-manifest.json +3 -3
  4. package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
  5. package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
  32. package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/_global-error.html +2 -2
  40. package/app/.next/server/app/_global-error.rsc +1 -1
  41. package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  42. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  43. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  44. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  45. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  46. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  47. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  48. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  58. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  59. package/app/.next/server/chunks/[root-of-the-server]__051203a6._.js +2 -2
  60. package/app/.next/server/chunks/[root-of-the-server]__0891af92._.js +1 -1
  61. package/app/.next/server/chunks/[root-of-the-server]__1f2b0d89._.js +1 -1
  62. package/app/.next/server/chunks/[root-of-the-server]__46e00e59._.js +1 -1
  63. package/app/.next/server/chunks/[root-of-the-server]__6e52619e._.js +1 -1
  64. package/app/.next/server/chunks/[root-of-the-server]__7ace0fcd._.js +1 -1
  65. package/app/.next/server/chunks/[root-of-the-server]__7fa4d14e._.js +1 -1
  66. package/app/.next/server/chunks/_05c48915._.js +1 -1
  67. package/app/.next/server/chunks/_06515a8a._.js +1 -1
  68. package/app/.next/server/chunks/_2115d8de._.js +1 -1
  69. package/app/.next/server/chunks/_3ac953eb._.js +1 -1
  70. package/app/.next/server/chunks/_4b8fd853._.js +1 -1
  71. package/app/.next/server/chunks/_68683848._.js +1 -1
  72. package/app/.next/server/chunks/_ee9b677b._.js +1 -1
  73. package/app/.next/server/chunks/_efd5ede2._.js +1 -1
  74. package/app/.next/server/chunks/src_4787afd3._.js +1 -1
  75. package/app/.next/server/chunks/ssr/[root-of-the-server]__9ef96d20._.js +1 -1
  76. package/app/.next/server/chunks/ssr/[root-of-the-server]__a6942102._.js +1 -1
  77. package/app/.next/server/chunks/ssr/src_i18n_messages_cs_json_db6f9ebc._.js +1 -1
  78. package/app/.next/server/chunks/ssr/src_i18n_messages_zh-CN_json_f4112d90._.js +1 -1
  79. package/app/.next/server/pages/500.html +2 -2
  80. package/app/.next/server/server-reference-manifest.js +1 -1
  81. package/app/.next/server/server-reference-manifest.json +1 -1
  82. package/app/.next/static/chunks/{a9e7753a48031b3b.js → baf0a258e0ffe591.js} +1 -1
  83. package/app/CHANGELOG.md +24 -0
  84. package/app/docs/openapi.yaml +1 -1
  85. package/app/open-sse/utils/aiSdkCompat.ts +9 -2
  86. package/app/package-lock.json +2 -2
  87. package/app/package.json +1 -1
  88. package/app/src/i18n/messages/cs.json +17 -17
  89. package/app/src/i18n/messages/zh-CN.json +282 -245
  90. package/app/src/sse/services/auth.ts +23 -0
  91. package/app/tests/unit/t26-ai-sdk-accept-header-compat.test.mjs +16 -2
  92. package/package.json +1 -1
  93. /package/app/.next/static/{-wygEpZPxJod87mjaIL_D → xr28pZiWERP5X_Cmq10cV}/_buildManifest.js +0 -0
  94. /package/app/.next/static/{-wygEpZPxJod87mjaIL_D → xr28pZiWERP5X_Cmq10cV}/_clientMiddlewareManifest.json +0 -0
  95. /package/app/.next/static/{-wygEpZPxJod87mjaIL_D → xr28pZiWERP5X_Cmq10cV}/_ssgManifest.js +0 -0
@@ -368,6 +368,29 @@ export async function getProviderCredentials(
368
368
  return null;
369
369
  }
370
370
 
371
+ // Auto-decay backoffLevel for accounts whose rateLimitedUntil has passed.
372
+ // Without this, high backoffLevel permanently deprioritizes accounts even
373
+ // after the rate limit window expires, creating a deadlock where the account
374
+ // needs a successful request to reset but never gets selected.
375
+ for (const c of connections) {
376
+ if (
377
+ c.backoffLevel > 0 &&
378
+ !isTerminalConnectionStatus(c) &&
379
+ !isAccountUnavailable(c.rateLimitedUntil)
380
+ ) {
381
+ c.backoffLevel = 0;
382
+ updateProviderConnection(c.id, {
383
+ backoffLevel: 0,
384
+ testStatus: "active",
385
+ lastError: null,
386
+ lastErrorAt: null,
387
+ lastErrorType: null,
388
+ lastErrorSource: null,
389
+ errorCode: null,
390
+ }).catch(() => {});
391
+ }
392
+ }
393
+
371
394
  // Filter out unavailable accounts and excluded connection
372
395
  const availableConnections = connections.filter((c) => {
373
396
  if (excludeConnectionId && c.id === excludeConnectionId) return false;
@@ -4,9 +4,10 @@ import assert from "node:assert/strict";
4
4
  const { clientWantsJsonResponse, resolveStreamFlag, stripMarkdownCodeFence } =
5
5
  await import("../../open-sse/utils/aiSdkCompat.ts");
6
6
 
7
- test("T26: Accept application/json disables SSE stream mode", () => {
7
+ test("T26: explicit stream:true takes priority over Accept application/json (#656)", () => {
8
8
  assert.equal(clientWantsJsonResponse("application/json"), true);
9
- assert.equal(resolveStreamFlag(true, "application/json"), false);
9
+ // Body stream:true always wins — even with Accept: application/json
10
+ assert.equal(resolveStreamFlag(true, "application/json"), true);
10
11
  });
11
12
 
12
13
  test("T26: text/event-stream keeps SSE behavior", () => {
@@ -28,3 +29,16 @@ test("T26: non-fenced content is returned unchanged", () => {
28
29
  const plain = '{"name":"omniroute"}';
29
30
  assert.equal(stripMarkdownCodeFence(plain), plain);
30
31
  });
32
+
33
+ test("T26: undefined stream falls back to Accept header heuristic (#656)", () => {
34
+ // No explicit stream param — Accept: application/json means no streaming
35
+ assert.equal(resolveStreamFlag(undefined, "application/json"), false);
36
+ // No explicit stream param + no JSON accept = stream by default
37
+ assert.equal(resolveStreamFlag(undefined, "text/event-stream"), true);
38
+ assert.equal(resolveStreamFlag(undefined, undefined), true);
39
+ });
40
+
41
+ test("T26: explicit stream:false always prevents streaming", () => {
42
+ assert.equal(resolveStreamFlag(false, "text/event-stream"), false);
43
+ assert.equal(resolveStreamFlag(false, undefined), false);
44
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omniroute",
3
- "version": "3.1.3",
3
+ "version": "3.1.5",
4
4
  "description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",
5
5
  "type": "module",
6
6
  "bin": {