omniroute 3.1.3 → 3.1.4

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 (91) 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 +1 -1
  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/ssr/[root-of-the-server]__9ef96d20._.js +1 -1
  75. package/app/.next/server/chunks/ssr/[root-of-the-server]__a6942102._.js +1 -1
  76. package/app/.next/server/chunks/ssr/src_i18n_messages_cs_json_db6f9ebc._.js +1 -1
  77. package/app/.next/server/pages/500.html +2 -2
  78. package/app/.next/server/server-reference-manifest.js +1 -1
  79. package/app/.next/server/server-reference-manifest.json +1 -1
  80. package/app/.next/static/chunks/{a9e7753a48031b3b.js → d0df17b6e085c981.js} +1 -1
  81. package/app/CHANGELOG.md +12 -0
  82. package/app/docs/openapi.yaml +1 -1
  83. package/app/open-sse/utils/aiSdkCompat.ts +9 -2
  84. package/app/package-lock.json +2 -2
  85. package/app/package.json +1 -1
  86. package/app/src/i18n/messages/cs.json +17 -17
  87. package/app/tests/unit/t26-ai-sdk-accept-header-compat.test.mjs +16 -2
  88. package/package.json +1 -1
  89. /package/app/.next/static/{-wygEpZPxJod87mjaIL_D → lZXIH53lig53hzn5tDll0}/_buildManifest.js +0 -0
  90. /package/app/.next/static/{-wygEpZPxJod87mjaIL_D → lZXIH53lig53hzn5tDll0}/_clientMiddlewareManifest.json +0 -0
  91. /package/app/.next/static/{-wygEpZPxJod87mjaIL_D → lZXIH53lig53hzn5tDll0}/_ssgManifest.js +0 -0
@@ -1,2 +1,2 @@
1
- <!DOCTYPE html><!--_wygEpZPxJod87mjaIL_D--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/ad127912b31cdc66.js"/><script src="/_next/static/chunks/3dd6d23a48e5d078.js" async=""></script><script src="/_next/static/chunks/4fa395d360c87cc3.js" async=""></script><script src="/_next/static/chunks/b133d1854532ff8c.js" async=""></script><script src="/_next/static/chunks/c88fcc5f8b21ff92.js" async=""></script><script src="/_next/static/chunks/turbopack-782b2fac4674487a.js" async=""></script><script src="/_next/static/chunks/d96012bcfc98706a.js" async=""></script><script src="/_next/static/chunks/16ea27c3b926bc31.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
- @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/ad127912b31cdc66.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[339756,[\"/_next/static/chunks/d96012bcfc98706a.js\",\"/_next/static/chunks/16ea27c3b926bc31.js\"],\"default\"]\n3:I[837457,[\"/_next/static/chunks/d96012bcfc98706a.js\",\"/_next/static/chunks/16ea27c3b926bc31.js\"],\"default\"]\n4:I[897367,[\"/_next/static/chunks/d96012bcfc98706a.js\",\"/_next/static/chunks/16ea27c3b926bc31.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[897367,[\"/_next/static/chunks/d96012bcfc98706a.js\",\"/_next/static/chunks/16ea27c3b926bc31.js\"],\"ViewportBoundary\"]\n9:I[897367,[\"/_next/static/chunks/d96012bcfc98706a.js\",\"/_next/static/chunks/16ea27c3b926bc31.js\"],\"MetadataBoundary\"]\nb:I[168027,[\"/_next/static/chunks/d96012bcfc98706a.js\",\"/_next/static/chunks/16ea27c3b926bc31.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"-wygEpZPxJod87mjaIL_D\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/d96012bcfc98706a.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/16ea27c3b926bc31.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><!--lZXIH53lig53hzn5tDll0--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/ad127912b31cdc66.js"/><script src="/_next/static/chunks/3dd6d23a48e5d078.js" async=""></script><script src="/_next/static/chunks/4fa395d360c87cc3.js" async=""></script><script src="/_next/static/chunks/b133d1854532ff8c.js" async=""></script><script src="/_next/static/chunks/c88fcc5f8b21ff92.js" async=""></script><script src="/_next/static/chunks/turbopack-782b2fac4674487a.js" async=""></script><script src="/_next/static/chunks/d96012bcfc98706a.js" async=""></script><script src="/_next/static/chunks/16ea27c3b926bc31.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
+ @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/ad127912b31cdc66.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[339756,[\"/_next/static/chunks/d96012bcfc98706a.js\",\"/_next/static/chunks/16ea27c3b926bc31.js\"],\"default\"]\n3:I[837457,[\"/_next/static/chunks/d96012bcfc98706a.js\",\"/_next/static/chunks/16ea27c3b926bc31.js\"],\"default\"]\n4:I[897367,[\"/_next/static/chunks/d96012bcfc98706a.js\",\"/_next/static/chunks/16ea27c3b926bc31.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[897367,[\"/_next/static/chunks/d96012bcfc98706a.js\",\"/_next/static/chunks/16ea27c3b926bc31.js\"],\"ViewportBoundary\"]\n9:I[897367,[\"/_next/static/chunks/d96012bcfc98706a.js\",\"/_next/static/chunks/16ea27c3b926bc31.js\"],\"MetadataBoundary\"]\nb:I[168027,[\"/_next/static/chunks/d96012bcfc98706a.js\",\"/_next/static/chunks/16ea27c3b926bc31.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"lZXIH53lig53hzn5tDll0\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/d96012bcfc98706a.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/16ea27c3b926bc31.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
@@ -1 +1 @@
1
- self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"1CwLtWk6K+ourMm0jbFCa7sN+H51LvCd9Kkg3t4TUvg=\"\n}"
1
+ self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"oXi0WrJGhFvknPCLocKFAULHWgVs6o7pzy6H23eYkuc=\"\n}"
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "node": {},
3
3
  "edge": {},
4
- "encryptionKey": "1CwLtWk6K+ourMm0jbFCa7sN+H51LvCd9Kkg3t4TUvg="
4
+ "encryptionKey": "oXi0WrJGhFvknPCLocKFAULHWgVs6o7pzy6H23eYkuc="
5
5
  }
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,804730,e=>{e.v({name:"omniroute",version:"3.1.3",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.",type:"module",bin:{omniroute:"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},files:["bin/","app/","open-sse/mcp-server/","src/shared/contracts/","scripts/postinstall.mjs","scripts/native-binary-compat.mjs","README.md","LICENSE"],workspaces:["open-sse"],engines:{node:">=18.0.0 <24.0.0"},keywords:["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],license:"MIT",author:"diegosouzapw",repository:{type:"git",url:"https://github.com/diegosouzapw/OmniRoute"},homepage:"https://omniroute.online",scripts:{dev:"node scripts/run-next.mjs dev",build:"node scripts/build-next-isolated.mjs","build:cli":"node scripts/prepublish.mjs",start:"node scripts/run-next.mjs start",lint:"eslint .","electron:dev":'concurrently "npm run dev" "wait-on http://localhost:20128 && cd electron && npm run dev"',"electron:build":"npm run build && cd electron && npm run build","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:linux":"npm run build && cd electron && npm run build:linux",test:"node --import tsx/esm --test tests/unit/*.test.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","check:cycles":"node scripts/check-cycles.mjs","check:route-validation:t06":"node scripts/check-route-validation.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:docs-sync":"node scripts/check-docs-sync.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","test:coverage":"npx c8 --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e",check:"npm run lint && npm run test",prepublishOnly:"npm run build:cli",postinstall:"node scripts/postinstall.mjs",prepare:"husky","system-info":"node scripts/system-info.mjs"},dependencies:{"@lobehub/icons":"^5.0.1","@modelcontextprotocol/sdk":"^1.27.1","@monaco-editor/react":"^4.7.0","@swc/helpers":"0.5.19",bcryptjs:"^3.0.3","better-sqlite3":"^12.6.2",bottleneck:"^2.19.5",dompurify:"^3.3.2",express:"^5.2.1","fetch-socks":"^1.3.2","http-proxy-middleware":"^3.0.5","https-proxy-agent":"^8.0.0",jose:"^6.1.3",keytar:"^7.9.0",lowdb:"^7.0.1","monaco-editor":"^0.55.1",next:"^16.0.10","next-intl":"^4.8.3","node-machine-id":"^1.1.12",open:"^11.0.0",ora:"^9.1.0",pino:"^10.3.1","pino-pretty":"^13.1.3",react:"19.2.4","react-dom":"19.2.4",recharts:"^3.7.0",selfsigned:"^5.5.0",tsx:"^4.21.0",undici:"^7.19.2",uuid:"^13.0.0","wreq-js":"^2.0.1",zod:"^4.3.6",zustand:"^5.0.10"},devDependencies:{"@playwright/test":"^1.58.2","@tailwindcss/postcss":"^4.1.18","@types/bcryptjs":"^3.0.0","@types/better-sqlite3":"^7.6.13","@types/keytar":"^4.4.0","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3",concurrently:"^9.2.1","cross-env":"^10.1.0",eslint:"^9.39.2","eslint-config-next":"^16.0.10",husky:"^9.1.7","lint-staged":"^16.2.7",prettier:"^3.8.1",tailwindcss:"^4",typescript:"^5.9.3","typescript-eslint":"^8.56.0",vitest:"^4.0.18","wait-on":"^9.0.4"},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},pnpm:{onlyBuiltDependencies:["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},overrides:{dompurify:"^3.3.2"}})},175696,e=>{"use strict";var t=e.i(861745),s=e.i(843476);function n({locale:e,...n}){if(!e)throw Error(void 0);return(0,s.jsx)(t.IntlProvider,{locale:e,...n})}e.s(["default",()=>n])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,804730,e=>{e.v({name:"omniroute",version:"3.1.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.",type:"module",bin:{omniroute:"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},files:["bin/","app/","open-sse/mcp-server/","src/shared/contracts/","scripts/postinstall.mjs","scripts/native-binary-compat.mjs","README.md","LICENSE"],workspaces:["open-sse"],engines:{node:">=18.0.0 <24.0.0"},keywords:["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],license:"MIT",author:"diegosouzapw",repository:{type:"git",url:"https://github.com/diegosouzapw/OmniRoute"},homepage:"https://omniroute.online",scripts:{dev:"node scripts/run-next.mjs dev",build:"node scripts/build-next-isolated.mjs","build:cli":"node scripts/prepublish.mjs",start:"node scripts/run-next.mjs start",lint:"eslint .","electron:dev":'concurrently "npm run dev" "wait-on http://localhost:20128 && cd electron && npm run dev"',"electron:build":"npm run build && cd electron && npm run build","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:linux":"npm run build && cd electron && npm run build:linux",test:"node --import tsx/esm --test tests/unit/*.test.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","check:cycles":"node scripts/check-cycles.mjs","check:route-validation:t06":"node scripts/check-route-validation.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:docs-sync":"node scripts/check-docs-sync.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","test:coverage":"npx c8 --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e",check:"npm run lint && npm run test",prepublishOnly:"npm run build:cli",postinstall:"node scripts/postinstall.mjs",prepare:"husky","system-info":"node scripts/system-info.mjs"},dependencies:{"@lobehub/icons":"^5.0.1","@modelcontextprotocol/sdk":"^1.27.1","@monaco-editor/react":"^4.7.0","@swc/helpers":"0.5.19",bcryptjs:"^3.0.3","better-sqlite3":"^12.6.2",bottleneck:"^2.19.5",dompurify:"^3.3.2",express:"^5.2.1","fetch-socks":"^1.3.2","http-proxy-middleware":"^3.0.5","https-proxy-agent":"^8.0.0",jose:"^6.1.3",keytar:"^7.9.0",lowdb:"^7.0.1","monaco-editor":"^0.55.1",next:"^16.0.10","next-intl":"^4.8.3","node-machine-id":"^1.1.12",open:"^11.0.0",ora:"^9.1.0",pino:"^10.3.1","pino-pretty":"^13.1.3",react:"19.2.4","react-dom":"19.2.4",recharts:"^3.7.0",selfsigned:"^5.5.0",tsx:"^4.21.0",undici:"^7.19.2",uuid:"^13.0.0","wreq-js":"^2.0.1",zod:"^4.3.6",zustand:"^5.0.10"},devDependencies:{"@playwright/test":"^1.58.2","@tailwindcss/postcss":"^4.1.18","@types/bcryptjs":"^3.0.0","@types/better-sqlite3":"^7.6.13","@types/keytar":"^4.4.0","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3",concurrently:"^9.2.1","cross-env":"^10.1.0",eslint:"^9.39.2","eslint-config-next":"^16.0.10",husky:"^9.1.7","lint-staged":"^16.2.7",prettier:"^3.8.1",tailwindcss:"^4",typescript:"^5.9.3","typescript-eslint":"^8.56.0",vitest:"^4.0.18","wait-on":"^9.0.4"},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},pnpm:{onlyBuiltDependencies:["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},overrides:{dompurify:"^3.3.2"}})},175696,e=>{"use strict";var t=e.i(861745),s=e.i(843476);function n({locale:e,...n}){if(!e)throw Error(void 0);return(0,s.jsx)(t.IntlProvider,{locale:e,...n})}e.s(["default",()=>n])}]);
package/app/CHANGELOG.md CHANGED
@@ -4,6 +4,18 @@
4
4
 
5
5
  ---
6
6
 
7
+ ## [3.1.4] — 2026-03-27
8
+
9
+ ### 🐛 Bug Fixes
10
+
11
+ - **Streaming Override Fix** — Explicit `stream: true` in request body now takes priority over `Accept: application/json` header. Clients sending both will correctly receive SSE streaming responses (#656)
12
+
13
+ ### 🌍 i18n
14
+
15
+ - **Czech string improvements** — Refined terminology across `cs.json` (PR #655 by @zen0bit)
16
+
17
+ ---
18
+
7
19
  ## [3.1.3] — 2026-03-26
8
20
 
9
21
  ### 🌍 i18n & Community
@@ -1,7 +1,7 @@
1
1
  openapi: 3.1.0
2
2
  info:
3
3
  title: OmniRoute API
4
- version: 3.1.3
4
+ version: 3.1.4
5
5
  description: |
6
6
  OmniRoute is a local-first AI API proxy router. It provides an OpenAI-compatible
7
7
  endpoint that routes requests to multiple AI providers with load balancing,
@@ -13,10 +13,17 @@ export function clientWantsJsonResponse(acceptHeader: unknown): boolean {
13
13
 
14
14
  /**
15
15
  * Resolves stream behavior from request body + Accept header.
16
- * OpenAI-compatible behavior: stream only when `stream: true` and client did not force JSON.
16
+ * Priority: explicit `stream: true/false` in body wins.
17
+ * Accept header only acts as fallback when stream is not explicitly set.
18
+ * Fixes #656: clients sending both `stream: true` and `Accept: application/json`
19
+ * should still get streaming responses — body intent takes precedence.
17
20
  */
18
21
  export function resolveStreamFlag(bodyStream: unknown, acceptHeader: unknown): boolean {
19
- return bodyStream === true && !clientWantsJsonResponse(acceptHeader);
22
+ // Explicit body value always wins
23
+ if (bodyStream === true) return true;
24
+ if (bodyStream === false) return false;
25
+ // No explicit stream param — fall back to Accept header heuristic
26
+ return !clientWantsJsonResponse(acceptHeader);
20
27
  }
21
28
 
22
29
  /**
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omniroute",
3
- "version": "3.1.3",
3
+ "version": "3.1.4",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omniroute",
9
- "version": "3.1.3",
9
+ "version": "3.1.4",
10
10
  "hasInstallScript": true,
11
11
  "license": "MIT",
12
12
  "workspaces": [
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omniroute",
3
- "version": "3.1.3",
3
+ "version": "3.1.4",
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": {
@@ -42,7 +42,7 @@
42
42
  "reloadPage": "Znovu načíst stránku",
43
43
  "connected": "Připojeno",
44
44
  "disconnected": "Odpojeno",
45
- "notConfigured": "Nenakonfigurováno",
45
+ "notConfigured": "Nenastaveno",
46
46
  "testConnection": "Test připojení",
47
47
  "enable": "Umožnit",
48
48
  "disable": "Zakázat",
@@ -241,7 +241,7 @@
241
241
  "providersOverview": "Přehled poskytovatelů",
242
242
  "configuredOf": "{configured} nastaveno z {total} dostupných poskytovatelů",
243
243
  "noModelsAvailable": "Pro tohoto poskytovatele nejsou k dispozici žádné modely.",
244
- "configureFirst": "Nejprve nakonfigurujte připojení v {providers}",
244
+ "configureFirst": "Nejprve nastavte připojení v {providers}",
245
245
  "configureProvider": "Nastavení poskytovatele",
246
246
  "modelAvailable": "Dostupný model: {count}",
247
247
  "modelsAvailable": "Dostupné modely: {count}",
@@ -407,7 +407,7 @@
407
407
  "generate": "Generovat",
408
408
  "generating": "Generuji...",
409
409
  "loadingModels": "Načítání dostupných modelů...",
410
- "noModels": "Žádné modely k dispozici. Nejprve nakonfigurujte poskytovatele s mediálními funkcemi.",
410
+ "noModels": "Žádné modely k dispozici. Nejprve nastavte poskytovatele s mediálními funkcemi.",
411
411
  "error": "Generování selhalo",
412
412
  "result": "Výsledky",
413
413
  "imageDescription": "Generujte obrázky z textových pokynů pomocí OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI a dalších.",
@@ -425,7 +425,7 @@
425
425
  "rerankResults": "Rerank výsledky",
426
426
  "searchHistory": "Historie vyhledávání",
427
427
  "urlOverlap": "Překrývání URL adres",
428
- "noSearchProviders": "Nejsou nakonfigurováni žádní poskytovatelé vyhledávání. Přidejte poskytovatele v Nastavení.",
428
+ "noSearchProviders": "Nejsou nastaveni žádní poskytovatelé vyhledávání. Přidejte poskytovatele v Nastavení.",
429
429
  "noRerankModels": "Není k dispozici žádný rerank model",
430
430
  "webSearch": "Vyhledávání na webu",
431
431
  "provider": "Poskytovatel",
@@ -478,7 +478,7 @@
478
478
  "baseUrl": "Základní URL",
479
479
  "apiKey": "API klíč",
480
480
  "configured": "Nastaveno",
481
- "notConfigured": "Nekonfigurováno",
481
+ "notConfigured": "Nenastaveno",
482
482
  "notInstalled": "Neinstalováno",
483
483
  "custom": "Vlastní",
484
484
  "unknown": "Neznámý",
@@ -621,7 +621,7 @@
621
621
  "codex": "Použijte, pokud váš tým používá OpenAI Codex CLI a autentizaci založenou na profilech.",
622
622
  "droid": "Použijte, pokud potřebujete odlehčeného agenta terminálu zaměřeného na rychlé kódování a smyčky provádění příkazů.",
623
623
  "openclaw": "Použijte, pokud chcete kódovacího agenta ve stylu Open Claw, ale směrovaného přes zásady OmniRoute.",
624
- "cline": "Použijte, pokud konfigurujete kódovací agenty uvnitř editorů a chcete návodné nastavení s modely OmniRoute.",
624
+ "cline": "Použijte, pokud nastavujete kódovací agenty uvnitř editorů a chcete návodné nastavení s modely OmniRoute.",
625
625
  "kilo": "Použijte, pokud váš pracovní postup závisí na příkazech Kilo Code a rychlých iterativních úpravách.",
626
626
  "cursor": "Použijte při kódování v Cursoru, pokud potřebujete vlastní modely kompatibilní s OpenAI přes OmniRoute.",
627
627
  "continue": "Použijte, pokud spouštíte Continue v IDE a potřebujete přenosnou nastavení poskytovatele založenou na JSON.",
@@ -712,7 +712,7 @@
712
712
  }
713
713
  },
714
714
  "notes": {
715
- "0": "OpenCode vyžaduje konfiguraci API klíče.",
715
+ "0": "OpenCode vyžaduje nastavení API klíče.",
716
716
  "1": "Nastavte základní URL na váš OmniRoute endpoint."
717
717
  }
718
718
  },
@@ -777,7 +777,7 @@
777
777
  "more": "+{count} dalších",
778
778
  "reqs": "požadavky",
779
779
  "success": "úspěch",
780
- "proxyConfigured": "Proxy nakonfigurována",
780
+ "proxyConfigured": "Proxy nastavena",
781
781
  "copyComboName": "Kopírovat název komba",
782
782
  "enableCombo": "Povolit kombo",
783
783
  "disableCombo": "Zakázat kombo",
@@ -1051,7 +1051,7 @@
1051
1051
  "openA2aDashboard": "Otevřít správu A2A",
1052
1052
  "mcpQuickStartTitle": "Rychlý start MCP",
1053
1053
  "mcpQuickStartStep1": "Spusťte MCP server pomocí příkazu `omniroute --mcp`.",
1054
- "mcpQuickStartStep2": "Nakonfigurujte klienta MCP pro připojení přes transport stdio.",
1054
+ "mcpQuickStartStep2": "Nastavte klienta MCP pro připojení přes transport stdio.",
1055
1055
  "mcpQuickStartStep3": "Spusťte nástroje jako `omniroute_get_health` a `omniroute_list_combos`.",
1056
1056
  "a2aQuickStartTitle": "Rychlý start A2A",
1057
1057
  "a2aQuickStartStep1": "Kartu agenta najdete na adrese `/.well-known/agent.json`.",
@@ -1395,7 +1395,7 @@
1395
1395
  "addAnthropicCompatible": "Přidat Anthropic Kompatibilní",
1396
1396
  "addNewProvider": "Přidat nového poskytovatele",
1397
1397
  "backToProviders": "Zpět k poskytovatelům",
1398
- "configureNewProvider": "Nakonfigurujte nového AI poskytovatele pro použití s ​​vašimi aplikacemi.",
1398
+ "configureNewProvider": "Nastavte nového AI poskytovatele pro použití s vašimi aplikacemi.",
1399
1399
  "providerLabel": "Poskytovatel",
1400
1400
  "selectProvider": "Vyberte poskytovatele",
1401
1401
  "selectedProvider": "Vybraný poskytovatel",
@@ -1634,7 +1634,7 @@
1634
1634
  "modelsPathPlaceholder": "/models",
1635
1635
  "modelsPathHint": "Cesta k vlastním modelům pro validaci (např. /v4/models)",
1636
1636
  "autoSync": "Automatická synchronizace",
1637
- "autoSyncTooltip": "Automaticky obnovuje seznam modelů každých 24 hodin (lze konfigurovat přes MODEL_SYNC_INTERVAL_HOURS)",
1637
+ "autoSyncTooltip": "Automaticky obnovuje seznam modelů každých 24 hodin (lze nastavit přes MODEL_SYNC_INTERVAL_HOURS)",
1638
1638
  "autoSyncEnabled": "Automatická synchronizace povolena – modely se budou pravidelně obnovovat",
1639
1639
  "autoSyncDisabled": "Automatická synchronizace zakázána",
1640
1640
  "autoSyncToggleFailed": "Nepodařilo se přepnout automatickou synchronizaci",
@@ -1737,7 +1737,7 @@
1737
1737
  "loadingCacheStats": "Načítám statistiky mezipaměti…",
1738
1738
  "globalProxy": "Globální Proxy",
1739
1739
  "globalProxyDesc": "Nastavte globální odchozí proxy pro všechna API volání. Jednotliví poskytovatelé, komba a klíče mohou toto přepsat.",
1740
- "noGlobalProxy": "Není nakonfigurována globální proxy",
1740
+ "noGlobalProxy": "Není nastavena globální proxy",
1741
1741
  "globalLabel": "Globální",
1742
1742
  "configure": "Nastavit",
1743
1743
  "globalSystemPrompt": "Globální systémový Prompt",
@@ -2429,7 +2429,7 @@
2429
2429
  "loading": "Načítám...",
2430
2430
  "invalidPassword": "Neplatné heslo",
2431
2431
  "errorOccurredRetry": "Došlo k chybě. Zkuste to prosím znovu.",
2432
- "configureInstance": "Pojďme nakonfigurovat vaši instanci OmniRoute",
2432
+ "configureInstance": "Pojďme nastavit vaši instanci OmniRoute",
2433
2433
  "runOnboardingWizard": "Spusťte průvodce zavedením, nastavte si heslo a připojte svého prvního AI poskytovatele.",
2434
2434
  "startOnboarding": "Začít s nástupem",
2435
2435
  "secureYourInstance": "Zabezpečte svou instanci",
@@ -2516,7 +2516,7 @@
2516
2516
  "howItWorksStep3Title": "3. AI Poskytovatelé",
2517
2517
  "howItWorksStep3Description": "Požadavek je okamžitě splněn OpenAI, Anthropic, Gemini nebo jinými.",
2518
2518
  "getStartedIn30Seconds": "Začněte za 30 sekund",
2519
- "getStartedDescription": "Nainstalujte si OmniRoute, nakonfigurujte poskytovatele přes webovou nástěnku a začněte směrovat AI požadavky.",
2519
+ "getStartedDescription": "Nainstalujte si OmniRoute, nastavte poskytovatele přes webovou nástěnku a začněte směrovat AI požadavky.",
2520
2520
  "installOmniRoute": "Instalace OmniRoute",
2521
2521
  "installStepDescription": "Spuštěním příkazu npx okamžitě spustíte server",
2522
2522
  "openDashboard": "Otevřít nástěnku",
@@ -2530,7 +2530,7 @@
2530
2530
  "serverRunningOnLabel": "Server běží na",
2531
2531
  "dashboardLabel": "Nástěnka",
2532
2532
  "readyToRoute": "Připraveno k trasování! ✓",
2533
- "configureProvidersNote": "📝 Nakonfigurujte poskytovatele na nástěnce nebo použijte proměnné prostředí",
2533
+ "configureProvidersNote": "📝 Nastavte poskytovatele na nástěnce nebo použijte proměnné prostředí",
2534
2534
  "dataLocation": "Umístění dat:",
2535
2535
  "dataLocationMacLinux": "macOS/Linux:",
2536
2536
  "dataLocationWindows": "Windows:",
@@ -2608,7 +2608,7 @@
2608
2608
  "featureHealthTitle": "Monitorování zdraví",
2609
2609
  "featureHealthText": "Kontroly stavu v reálném čase, stav poskytovatele, stavy jističů a automatická detekce limitů sazeb s exponenciálním odpočítáváním.",
2610
2610
  "featureCliTitle": "CLI Nástroje",
2611
- "featureCliText": "Spravujte nastavení IDE, exportujte/importujte zálohy, vyhledávejte profily Codex a konfigurujte nastavení z nástěnky.",
2611
+ "featureCliText": "Spravujte nastavení IDE, exportujte/importujte zálohy, vyhledávejte profily Codex a upravte nastavení z nástěnky.",
2612
2612
  "featureSecurityTitle": "Zabezpečení a zásady",
2613
2613
  "featureSecurityText": "Ověřování klíčů API, filtrování IP adres, ochrana proti vkládání výzev, zásady domény, správa relací a protokolování auditu.",
2614
2614
  "featureCloudSyncTitle": "Synchronizace s cloudem",
@@ -2735,7 +2735,7 @@
2735
2735
  "termsResponsibilityCompliance": "Musíte dodržovat podmínky služby každého AI poskytovatele, k jehož API přistupujete prostřednictvím OmniRoute.",
2736
2736
  "termsResponsibilitySecurity": "Nesete odpovědnost za zabezpečení vaší lokální instalace OmniRoute, včetně nastavení hesla a omezení přístupu k síti.",
2737
2737
  "termsSection3Title": "3. Jak to funguje",
2738
- "termsSection3Text": "OmniRoute funguje jako zprostředkující proxy. API Volání odeslaná do OmniRoute jsou překládána a přeposílána vámi nakonfigurovaným AI poskytovatelům. OmniRoute nemění obsah vašich požadavků ani odpovědí nad rámec nezbytného překladu protokolu.",
2738
+ "termsSection3Text": "OmniRoute funguje jako zprostředkující proxy. API Volání odeslaná do OmniRoute jsou překládána a přeposílána vámi nastaveným AI poskytovatelům. OmniRoute nemění obsah vašich požadavků ani odpovědí nad rámec nezbytného překladu protokolu.",
2739
2739
  "termsSection4Title": "4. Zpracování dat",
2740
2740
  "termsDataStoredLocally": "Všechna data jsou uložena lokálně na vašem počítači v databázi SQLite.",
2741
2741
  "termsNoTransmission": "OmniRoute nepřenáší žádná data na externí servery, pokud explicitně nepovolíte funkce synchronizace s cloudem.",
@@ -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.4",
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": {