omniroute 3.1.9 → 3.1.10
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.
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/build-manifest.json +2 -2
- package/app/.next/prerender-manifest.json +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +2 -2
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
- package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/analytics/route.js +1 -1
- package/app/.next/server/app/api/usage/analytics/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/call-logs/[id]/route.js +1 -1
- package/app/.next/server/app/api/usage/call-logs/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/call-logs/route.js +1 -1
- package/app/.next/server/app/api/usage/call-logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/history/route.js +1 -1
- package/app/.next/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/logs/route.js +1 -1
- package/app/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
- package/app/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/api/chat/route.js +14 -14
- package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route.js +11 -11
- package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/completions/route.js +11 -11
- package/app/.next/server/app/api/v1/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
- package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/images/generations/route.js +1 -1
- package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/messages/route.js +14 -14
- package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/music/generations/route.js +1 -1
- package/app/.next/server/app/api/v1/music/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js +14 -14
- package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/responses/[...path]/route.js +14 -14
- package/app/.next/server/app/api/v1/responses/[...path]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/responses/route.js +14 -14
- package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/search/route.js +1 -1
- package/app/.next/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/videos/generations/route.js +1 -1
- package/app/.next/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js +14 -14
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__051203a6._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0891af92._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__1f27646b._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__1f2b0d89._.js +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__32ce41c4._.js → [root-of-the-server]__2941b5e3._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__96aaa2b3._.js → [root-of-the-server]__2ae75949._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__46e00e59._.js +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__14cb1121._.js → [root-of-the-server]__4de2456d._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__6405e3ef._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__6e52619e._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__7fa4d14e._.js +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__9b8dfe32._.js → [root-of-the-server]__8106d66f._.js} +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__aa49d156._.js +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__da4ad5ed._.js → [root-of-the-server]__b0e5c9ae._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__7b401f67._.js → [root-of-the-server]__cca6bf86._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__e6f6e3e7._.js → [root-of-the-server]__e13422e5._.js} +1 -1
- package/app/.next/server/chunks/{[root-of-the-server]__dc4d07b1._.js → [root-of-the-server]__ff35dde5._.js} +1 -1
- package/app/.next/server/chunks/_05c48915._.js +1 -1
- package/app/.next/server/chunks/_06515a8a._.js +1 -1
- package/app/.next/server/chunks/_2115d8de._.js +1 -1
- package/app/.next/server/chunks/{_ed30bb6e._.js → _3390b46c._.js} +2 -2
- package/app/.next/server/chunks/_3ac953eb._.js +1 -1
- package/app/.next/server/chunks/_4b8fd853._.js +1 -1
- package/app/.next/server/chunks/_68683848._.js +1 -1
- package/app/.next/server/chunks/_ee9b677b._.js +1 -1
- package/app/.next/server/chunks/_efd5ede2._.js +2 -2
- package/app/.next/server/chunks/open-sse_bd7645e5._.js +1 -1
- package/app/.next/server/chunks/{src_lib_53ed4368._.js → src_lib_2ef733b9._.js} +2 -2
- package/app/.next/server/chunks/ssr/[root-of-the-server]__9ef96d20._.js +1 -1
- package/app/.next/server/chunks/ssr/[root-of-the-server]__a6942102._.js +1 -1
- package/app/.next/server/pages/500.html +2 -2
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/chunks/218a3d300fdd7431.js +1 -0
- package/app/.next/static/chunks/{5eee4790907c4daa.css → 6a6b8a35559e6d15.css} +1 -1
- package/app/CHANGELOG.md +15 -6
- package/app/docs/openapi.yaml +1 -1
- package/app/open-sse/handlers/chatCore.ts +20 -6
- package/app/open-sse/translator/response/claude-to-openai.ts +0 -1
- package/app/package-lock.json +2 -2
- package/app/package.json +1 -1
- package/app/src/app/globals.css +1 -1
- package/app/src/sse/handlers/chat.ts +0 -14
- package/app/tests/unit/model-combo-mappings-db.test.mjs +2 -0
- package/package.json +1 -1
- package/app/.next/static/chunks/20266ad6555b91f7.js +0 -1
- /package/app/.next/static/{hTrDwAfglRHHhrQZsW-A1 → jzcx_xYQec4FcMNBxRHI4}/_buildManifest.js +0 -0
- /package/app/.next/static/{hTrDwAfglRHHhrQZsW-A1 → jzcx_xYQec4FcMNBxRHI4}/_clientMiddlewareManifest.json +0 -0
- /package/app/.next/static/{hTrDwAfglRHHhrQZsW-A1 → jzcx_xYQec4FcMNBxRHI4}/_ssgManifest.js +0 -0
package/app/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [3.1.10] — 2026-03-28
|
|
8
|
+
|
|
9
|
+
### 🐛 Bug Fixes
|
|
10
|
+
|
|
11
|
+
- **Fix #706** — Fixed icon fallback rendering caused by Tailwind V4 `font-sans` override by applying `!important` to `.material-symbols-outlined`.
|
|
12
|
+
- **Fix #703** — Fixed GitHub Copilot broken streams by enabling `responses` to `openai` format translation for any custom models leveraging `apiFormat: "responses"`.
|
|
13
|
+
- **Fix #702** — Replaced flat-rate usage tracking with accurate DB pricing calculations for both streaming and non-streaming responses.
|
|
14
|
+
- **Fix #716** — Cleaned up Claude tool-call translation state, correctly parsing streaming arguments and preventing OpenAI `tool_calls` chunks from repeating the `id` field.
|
|
15
|
+
|
|
7
16
|
## [3.1.9] — 2026-03-28
|
|
8
17
|
|
|
9
18
|
### ✨ New Features
|
|
@@ -31,12 +40,12 @@
|
|
|
31
40
|
|
|
32
41
|
### 📁 New Files
|
|
33
42
|
|
|
34
|
-
| File
|
|
35
|
-
|
|
36
|
-
| `open-sse/translator/helpers/schemaCoercion.ts`
|
|
37
|
-
| `tests/unit/schema-coercion.test.mjs`
|
|
38
|
-
| `tests/unit/t40-opencode-cli-tools-integration.test.mjs` | CLI tool integration tests
|
|
39
|
-
| `COVERAGE_PLAN.md`
|
|
43
|
+
| File | Purpose |
|
|
44
|
+
| -------------------------------------------------------- | ----------------------------------------------------------- |
|
|
45
|
+
| `open-sse/translator/helpers/schemaCoercion.ts` | Schema coercion and tool description sanitization utilities |
|
|
46
|
+
| `tests/unit/schema-coercion.test.mjs` | Unit tests for schema coercion |
|
|
47
|
+
| `tests/unit/t40-opencode-cli-tools-integration.test.mjs` | CLI tool integration tests |
|
|
48
|
+
| `COVERAGE_PLAN.md` | Test coverage planning document |
|
|
40
49
|
|
|
41
50
|
## [3.1.8] - 2026-03-27
|
|
42
51
|
|
package/app/docs/openapi.yaml
CHANGED
|
@@ -27,6 +27,8 @@ import {
|
|
|
27
27
|
saveCallLog,
|
|
28
28
|
} from "@/lib/usageDb";
|
|
29
29
|
import { getLoggedInputTokens, getLoggedOutputTokens } from "@/lib/usage/tokenAccounting";
|
|
30
|
+
import { recordCost } from "@/domain/costRules";
|
|
31
|
+
import { calculateCost } from "@/lib/usage/costCalculator";
|
|
30
32
|
import { CLAUDE_OAUTH_TOOL_PREFIX } from "../translator/request/openai-to-claude.ts";
|
|
31
33
|
import {
|
|
32
34
|
getModelNormalizeToolCallId,
|
|
@@ -1315,6 +1317,11 @@ export async function handleChatCore({
|
|
|
1315
1317
|
});
|
|
1316
1318
|
}
|
|
1317
1319
|
|
|
1320
|
+
if (apiKeyInfo?.id && usage) {
|
|
1321
|
+
const estimatedCost = await calculateCost(provider, model, usage);
|
|
1322
|
+
if (estimatedCost > 0) recordCost(apiKeyInfo.id, estimatedCost);
|
|
1323
|
+
}
|
|
1324
|
+
|
|
1318
1325
|
// Translate response to client's expected format (usually OpenAI)
|
|
1319
1326
|
// Pass toolNameMap so Claude OAuth proxy_ prefix is stripped in tool_use blocks (#605)
|
|
1320
1327
|
let translatedResponse = needsTranslation(targetFormat, sourceFormat)
|
|
@@ -1447,22 +1454,29 @@ export async function handleChatCore({
|
|
|
1447
1454
|
apiKeyName: apiKeyInfo?.name || null,
|
|
1448
1455
|
noLog: apiKeyInfo?.noLog === true,
|
|
1449
1456
|
}).catch(() => {});
|
|
1457
|
+
|
|
1458
|
+
if (apiKeyInfo?.id && streamUsage) {
|
|
1459
|
+
calculateCost(provider, model, streamUsage)
|
|
1460
|
+
.then((estimatedCost) => {
|
|
1461
|
+
if (estimatedCost > 0) recordCost(apiKeyInfo.id, estimatedCost);
|
|
1462
|
+
})
|
|
1463
|
+
.catch(() => {});
|
|
1464
|
+
}
|
|
1450
1465
|
};
|
|
1451
1466
|
|
|
1452
|
-
// For
|
|
1467
|
+
// For providers using Responses API format, translate stream back to openai (Chat Completions) format
|
|
1453
1468
|
// UNLESS client is Droid CLI which expects openai-responses format back
|
|
1454
1469
|
const isDroidCLI =
|
|
1455
1470
|
userAgent?.toLowerCase().includes("droid") || userAgent?.toLowerCase().includes("codex-cli");
|
|
1456
|
-
const
|
|
1457
|
-
provider === "codex" &&
|
|
1471
|
+
const needsResponsesTranslation =
|
|
1458
1472
|
targetFormat === FORMATS.OPENAI_RESPONSES &&
|
|
1459
1473
|
sourceFormat === FORMATS.OPENAI &&
|
|
1460
1474
|
!isResponsesEndpoint &&
|
|
1461
1475
|
!isDroidCLI;
|
|
1462
1476
|
|
|
1463
|
-
if (
|
|
1464
|
-
//
|
|
1465
|
-
log?.debug?.("STREAM", `
|
|
1477
|
+
if (needsResponsesTranslation) {
|
|
1478
|
+
// Provider returns openai-responses, translate to openai (Chat Completions) that clients expect
|
|
1479
|
+
log?.debug?.("STREAM", `Responses translation mode: openai-responses → openai`);
|
|
1466
1480
|
transformStream = createSSETransformStreamWithLogger(
|
|
1467
1481
|
"openai-responses",
|
|
1468
1482
|
"openai",
|
package/app/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omniroute",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.10",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "omniroute",
|
|
9
|
-
"version": "3.1.
|
|
9
|
+
"version": "3.1.10",
|
|
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
|
+
"version": "3.1.10",
|
|
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": {
|
package/app/src/app/globals.css
CHANGED
|
@@ -219,7 +219,7 @@ body {
|
|
|
219
219
|
|
|
220
220
|
/* Material Symbols */
|
|
221
221
|
.material-symbols-outlined {
|
|
222
|
-
font-family: "Material Symbols Outlined", sans-serif;
|
|
222
|
+
font-family: "Material Symbols Outlined", sans-serif !important;
|
|
223
223
|
font-weight: normal;
|
|
224
224
|
font-style: normal;
|
|
225
225
|
font-size: 24px;
|
|
@@ -42,7 +42,6 @@ import {
|
|
|
42
42
|
import { markAccountExhaustedFrom429 } from "../../domain/quotaCache";
|
|
43
43
|
import { RequestTelemetry, recordTelemetry } from "../../shared/utils/requestTelemetry";
|
|
44
44
|
import { generateRequestId } from "../../shared/utils/requestId";
|
|
45
|
-
import { recordCost } from "../../domain/costRules";
|
|
46
45
|
import { logAuditEvent } from "../../lib/compliance/index";
|
|
47
46
|
import { enforceApiKeyPolicy } from "../../shared/utils/apiKeyPolicy";
|
|
48
47
|
import {
|
|
@@ -421,7 +420,6 @@ async function handleSingleModelChat(
|
|
|
421
420
|
|
|
422
421
|
if (result.success) {
|
|
423
422
|
clearModelUnavailability(provider, model);
|
|
424
|
-
recordCostIfNeeded(apiKeyInfo, result);
|
|
425
423
|
if (telemetry) telemetry.startPhase("finalize");
|
|
426
424
|
if (telemetry) telemetry.endPhase();
|
|
427
425
|
return result.response;
|
|
@@ -670,18 +668,6 @@ async function executeChatWithBreaker({
|
|
|
670
668
|
}
|
|
671
669
|
}
|
|
672
670
|
|
|
673
|
-
/**
|
|
674
|
-
* Record cost if API key has budget tracking enabled.
|
|
675
|
-
*/
|
|
676
|
-
function recordCostIfNeeded(apiKeyInfo: any, result: any) {
|
|
677
|
-
if (!apiKeyInfo?.id) return;
|
|
678
|
-
try {
|
|
679
|
-
const usage = result.usage || {};
|
|
680
|
-
const estimatedCost = ((usage.prompt_tokens || 0) + (usage.completion_tokens || 0)) * 0.000001;
|
|
681
|
-
if (estimatedCost > 0) recordCost(apiKeyInfo.id, estimatedCost);
|
|
682
|
-
} catch {}
|
|
683
|
-
}
|
|
684
|
-
|
|
685
671
|
// ──── Extracted helpers (T-28) ────
|
|
686
672
|
|
|
687
673
|
function handleNoCredentials(
|
|
@@ -79,6 +79,8 @@ test("updateModelComboMapping merges fields and returns the refreshed mapping",
|
|
|
79
79
|
priority: 1,
|
|
80
80
|
});
|
|
81
81
|
|
|
82
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
83
|
+
|
|
82
84
|
const updated = await mappingsDb.updateModelComboMapping(created.id, {
|
|
83
85
|
pattern: "claude-*",
|
|
84
86
|
comboId: comboB.id,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omniroute",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.10",
|
|
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": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,804730,e=>{e.v({name:"omniroute",version:"3.1.9",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":"c8 --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 55 --lines 55 --functions 55 --branches 60 node --import tsx/esm --test tests/unit/*.test.mjs","test:coverage:legacy":"c8 --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:report:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","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",c8:"^11.0.0",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 r({locale:e,...r}){if(!e)throw Error(void 0);return(0,s.jsx)(t.IntlProvider,{locale:e,...r})}e.s(["default",()=>r])}]);
|
|
File without changes
|
|
File without changes
|
|
File without changes
|