{"_id":"omniroute","_rev":"291-42aba28a1abe17377942bc559e76b6e0","name":"omniroute","dist-tags":{"latest":"3.8.50"},"versions":{"0.1.0":{"name":"omniroute","version":"0.1.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@0.1.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://github.com/diegosouzapw/OmniRoute","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs"},"dist":{"shasum":"f590292c2b774b5ccc378542881c28bcbdf2df8a","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-0.1.0.tgz","fileCount":2772,"integrity":"sha512-D069q3pmkeFOuQeJMYEqlqe0nNJ5mCb6nxTlLg7nZy83/6KoiTTlgHhcomC7SIi9+b7kV1DS8N6nCknep9JSQw==","signatures":[{"sig":"MEYCIQDqrwPnUZZ904ttFW3H+kQyptPzyzWKfsC84DjvU+X+hQIhAOio/eNzZR+Ip+6wePb7HDx2wxgHFBmvSJVHx8mZXFhf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84467472},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"9f8ad48401856c0a619b0e443fe8494d11a5c306","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"npm run build","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"fs":"^0.0.1-security","ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^10","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_0.1.0_1771054870266_0.9884133913992919","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"omniroute","version":"0.2.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@0.2.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://github.com/diegosouzapw/OmniRoute","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs"},"dist":{"shasum":"c9aa72e1b4f99c1afe4fe487a567038bd178c22a","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-0.2.0.tgz","fileCount":2797,"integrity":"sha512-Il9f6Wa8uv7I/mv9ATZ/QDsQzE343Ilg/g9o2NoDjO1Hv3+ELH30LwqfR8gP/6UmYRk7fb+5skQXWf1uka/vCw==","signatures":[{"sig":"MEUCIQDOizOhkut/auyXf1miCdBqg0KJncrUS335C4SIIKOk/wIgcmvai195mY6WELehh4iipP5GTPvxZTtxwLnbJKqgJkY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84927897},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"b4501a314f8806e4499d24ac39bd2217b410130d","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"npm run build","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"fs":"^0.0.1-security","ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^10","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_0.2.0_1771088058287_0.6694089302027586","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"omniroute","version":"0.3.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@0.3.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://github.com/diegosouzapw/OmniRoute","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"85624a6057078c8c41c0efe649d05124e33ac8c2","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-0.3.0.tgz","fileCount":2849,"integrity":"sha512-Amtpgfg+/ERFSiZq1Zt+ASlkN2K2fd6IIdxJxOihWAWxU2xaZ5J2rxRJwyvwkhePIafzxdk3QLvUGAZZ6PFtfw==","signatures":[{"sig":"MEYCIQDS2KOEnluzQYcrUtYZiVLG3aFSRoav8dItSzAmCpgQPAIhAN6GEi52a4z/v7yNGEZtoEQD48bLe2Q513RfczeGc27b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85959850},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"910b08f3cb6f4e1f6c60515b8a719d9005028cf3","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","test:coverage":"npx c8 --check-coverage --lines 40 --functions 30 --branches 30 node --test tests/unit/*.test.mjs","test:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_0.3.0_1771132156345_0.9461008095722614","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"omniroute","version":"0.4.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@0.4.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://github.com/diegosouzapw/OmniRoute","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"11799546548d9442e3f229bb107fb2dc3bc8f121","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-0.4.0.tgz","fileCount":2902,"integrity":"sha512-b6pWTPEGR+NDZTcthDQxPItPHfE7RzYn9oCjdAXERxBYyv8pt+kzBicIb92VqWt1ljrn63v9uNirDKQ044UEFQ==","signatures":[{"sig":"MEYCIQCh6m0L4tXcNErkCylbSJbL4jvnOmvqZHIqnJC0kZJ8rgIhAL6S4tt5RiERpNDHzKOIyVe5Dq1foNS8SjcJGCuEFBSD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86485339},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"3771b1ff5d643dfd59eaec2b9d7646d54c75cd93","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","test:coverage":"npx c8 --check-coverage --lines 60 --functions 50 --branches 50 node --test tests/unit/*.test.mjs","test:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_0.4.0_1771171306460_0.8166879216048175","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"omniroute","version":"0.5.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@0.5.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://github.com/diegosouzapw/OmniRoute","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"dba56b52c3f4609b37053ed2dca00e9e444064f1","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-0.5.0.tgz","fileCount":2915,"integrity":"sha512-hOZlV63sRz3qAWV0qrKzrH7l7oqlgiWuELAzUXbtfCVsmrIVGxf9GkFv2ZN2dTee3aLtmrhf5McgjaM81NWZPQ==","signatures":[{"sig":"MEQCIB45jmSZFjxI2KnBq2y0GElez0EIe7PNietpdmK3GYuCAiBCkpvWAF9GRa/zj/QAcnH5DL+D+1CqyIGZrdfL6XfHQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86724306},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"66b68e425af1817aed4f555fabb2bdab8ab78042","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","test:coverage":"npx c8 --check-coverage --lines 60 --functions 50 --branches 50 node --test tests/unit/*.test.mjs","test:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_0.5.0_1771193160930_0.8964899233790822","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"omniroute","version":"0.6.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@0.6.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://github.com/diegosouzapw/OmniRoute","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"b85d1a9622880b26c60af7f2ef91864fb04cc0bb","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-0.6.0.tgz","fileCount":2932,"integrity":"sha512-tpI6yx2ZzwMLgu6yrNHaNN6A7RDQJ9viQlGmQDKzAGqVPMt8rgKDPGUnpiyiVRc3rbdZNms7SzeV+wbmuiS1HQ==","signatures":[{"sig":"MEQCIG4A3l4sbAknu9Y0jefpC2IrcguKDLsyHMUUJY3yZYOtAiAEDjHIJGMQb68g7F4kemQXCcwxRsxntIRStTeUnMbuyA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87096391},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"dcda814fc4608816410b93bef270dd3824aa939f","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","test:coverage":"npx c8 --check-coverage --lines 60 --functions 50 --branches 50 node --test tests/unit/*.test.mjs","test:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_0.6.0_1771212340457_0.705246307843638","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"omniroute","version":"0.7.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@0.7.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://github.com/diegosouzapw/OmniRoute","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"5ec9a2fa42db5fe508e3f8e17d84b3d4f9fd8244","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-0.7.0.tgz","fileCount":2936,"integrity":"sha512-Uuif+a/lRdB2HyWID90DU+K6Qye2tB2SIdn/ChOVlkN2w0UKt7xTNrRh7x4/t2fuebf7wuLSZNg86ia0hFn5yA==","signatures":[{"sig":"MEQCIAKUvz351rZl6+YnOw+nTNyuDXcGDehC1D9yuN4LvF0TAiB2VrZphJT3hSdFid/bf1+axM8jlh9NcRzKGvKPJRof/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87169665},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"cfcdec2a17f547df10053e5695e9df695da5a296","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","test:coverage":"npx c8 --check-coverage --lines 60 --functions 50 --branches 50 node --test tests/unit/*.test.mjs","test:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_0.7.0_1771246297868_0.4682349922681812","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"omniroute","version":"0.8.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@0.8.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e42643873907ef94aa586594a77cced75ef40f40","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-0.8.0.tgz","fileCount":2936,"integrity":"sha512-r0tx36OixADNjbOZpkWonjPr8XztIWNPoXUQbrUpSpU8DPJDbTKXN3Lo4iY0iVg5YKOKXtwU2pR6YsHizAlS3Q==","signatures":[{"sig":"MEQCIDtpjyu0zHqM1JnAkj/ScD1D3c218dKB4Kw1bvjqqiSQAiAr1AdFIopxZHAHZ6pWezydmiKbClnRggF4vjGgQqKoiw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87170831},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"cac3e5eb328c1671af89bd6d003f6c8df74db405","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","test:coverage":"npx c8 --check-coverage --lines 60 --functions 50 --branches 50 node --test tests/unit/*.test.mjs","test:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_0.8.0_1771263386930_0.438392373760468","host":"s3://npm-registry-packages-npm-production"}},"0.8.5":{"name":"omniroute","version":"0.8.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@0.8.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"0cb32070190369e2381b035a714e8ced62e3e91a","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-0.8.5.tgz","fileCount":2938,"integrity":"sha512-HnrbaYG2JS6qeHllyr6u74vMEuXXoovQ0TZHR0HxrmWQMDekjRI2BMQpyCy7VABCOU0++a9RWba5d4EAXkYKlA==","signatures":[{"sig":"MEUCIHgYE5u+f/pZl9Vp0/VKk+0pJI38Ut4TSgpswnB2O3EoAiEA2Vi/zEqmJden8AdyFre1JMpgr/WjGPW/9IwHtLL983E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87218649},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"5894fd98bf7da47c904ea88f44b755ba787ccfb3","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","test:coverage":"npx c8 --check-coverage --lines 50 --functions 40 --branches 40 node --test tests/unit/*.test.mjs","test:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_0.8.5_1771330528662_0.357833795743812","host":"s3://npm-registry-packages-npm-production"}},"0.8.8":{"name":"omniroute","version":"0.8.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@0.8.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"b78ca42a046d61fa671ae18b58c0d8295e4d33c7","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-0.8.8.tgz","fileCount":2954,"integrity":"sha512-o1R9BPh3wKtA7sZ2h4Y8pT06oJ2HP3p1Rr02tBlO4n9WE0fm/4xTquhNWIW9QYvk4JCN8rVP0jhRkzkXM4LHdw==","signatures":[{"sig":"MEUCIBE8UR3CMrKhwPI82JgD0lG00yRbgAz79pvUcuXr2NDmAiEAlFc78qXmdFsGvmTTQNUUQodESnLnjN8tEqhr39qeQSc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87472577},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"94218d53578f0d176e8edd0d01231f53783c25a3","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","test:coverage":"npx c8 --check-coverage --lines 50 --functions 40 --branches 40 node --test tests/unit/*.test.mjs","test:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_0.8.8_1771350631966_0.40229949745976046","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"omniroute","version":"0.9.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@0.9.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"b2928f6d5119d11686c28173691224231b9676ae","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-0.9.0.tgz","fileCount":2966,"integrity":"sha512-WCEnaZIk5NzF7yn5VGId8vDawXaSWgnhS0+A9LLFJ1nvrwpLiT3gyHUPseI9DYmEqSUGsa+Zmu+KVJJcYuLwQQ==","signatures":[{"sig":"MEQCIFXIMByZjfPRdO1rzvUGwv3DnM/2GICO0NlI+wOaF+C8AiA6+/mgSOwIMZr9S55YFhxw7iw0lw2we5hFp1uMfRlJbQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91093139},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"a6d5b3643d8714664e54eb4a4dae7a3decaeba5d","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","test:coverage":"npx c8 --check-coverage --lines 50 --functions 40 --branches 40 node --test tests/unit/*.test.mjs","test:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_0.9.0_1771362781004_0.26898250592161","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"omniroute","version":"1.0.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.0.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"4d0666a3a5a2dfc16808fcc8b96e3549b9835b66","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.0.0.tgz","fileCount":2978,"integrity":"sha512-RizMKr4yNuvYHrZ68ZCVIhL3JluxfWj1cVchZxsMQTVua4MtmpuqP1gstgrrvLH1VyE4xuki65dJDqIZmReQJA==","signatures":[{"sig":"MEYCIQDx6adhKdpKXyW1T/1WbInlGYV9P9WEWDVTM8Cmc9wMbQIhAPLWlT9vV9QSpRyh+RDF8uHMeyO/it03eFdN51OQ6W4n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91264990},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"80574012a3d08945bcbc075d9dcae0b992dbb92d","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","test:coverage":"npx c8 --exclude=open-sse --check-coverage --lines 30 --functions 30 --branches 30 node --import tsx/esm --test tests/unit/*.test.mjs","test:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.0.0_1771383775521_0.2885039009090318","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"omniroute","version":"1.0.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.0.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"3b3d5c12256f121f0819768bd9066ebfa2fc2dae","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.0.1.tgz","fileCount":2978,"integrity":"sha512-v5EWNvP3RJBYeOyJRWBJxT7+jI2bDTcvgZuQzX30KJaqa80/P3EspXei9Rhp8Co01LQMypAUoLpAPi/98I2rDA==","signatures":[{"sig":"MEUCIQDMS0ROck6S2j305UyROmBzgARk9ybH4YYx1YwKKk2cgAIgVZsPrKYAkVJHfQRTUZ6jgsTV8MPH4lcctRAbdP1n/sY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91265263},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"5b4068f82a914d147d563e672c600878d13777b8","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","test:coverage":"npx c8 --exclude=open-sse --check-coverage --lines 30 --functions 30 --branches 30 node --import tsx/esm --test tests/unit/*.test.mjs","test:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.0.1_1771389950573_0.9691661676632426","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"omniroute","version":"1.0.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.0.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"ac9516a712b6ebea6c286167727c0f07820e8bf2","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.0.2.tgz","fileCount":3008,"integrity":"sha512-opcdNMHPWr45cEeVuaXFAseHpGkO+3mMdOJqB68EugHsbLmcrwOisu5NZxMhKF4SC9HtdBdwijUBSqXlaKLw1Q==","signatures":[{"sig":"MEUCIHPb4EpWPqpk+kFD99DBxrdjMUVt418RnhkKxn3dSRqhAiEA0kjvNlls1cOa+g6cQhCDM4rUy5OdoI+XxbREZ6x5Bk0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91846189},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"536548f2b9a11b1c111bd92df99104a523242479","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.0.2_1771445608359_0.2145735727781488","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"omniroute","version":"1.0.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.0.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"422a0d287f236e46b372ed32ed9755e6b519d97a","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.0.3.tgz","fileCount":3029,"integrity":"sha512-LyQAfo3CI0lC4rPqKHMoaDn7Un3fdzncUHyfwe6i7Eylfyo/GJ+xlnzNgn/5CFCWbgZ/GBu4s+AiphdQeirtFA==","signatures":[{"sig":"MEYCIQDDuqCOuRsdUWUwQ7pwTlZ5dwnB9W9Jc+OeVZ7/lpwa5AIhAMwJPZ7scHbifuPge/qj8/iI8dHGFP+Uja81EwPOMQuO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92098766},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"1a11b5f8c1fe53ca343c62fb14a42027fa17e575","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.0.3_1771486948150_0.22712012883495958","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"omniroute","version":"1.0.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.0.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"eaf1be1f389b242d7cee9f86eacf2dcc157dcacc","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.0.4.tgz","fileCount":3029,"integrity":"sha512-XQbdUzo7RssFREeWG+WtP/dajSIETv5CygeyJXmqZzMmyoU88t1AWOIqSzzCPN8h8yOrbM/qE6svSt0dxOp64Q==","signatures":[{"sig":"MEUCIBHMKOR1/jQagJAFggz4WBPnsZO8Ysj3KPs/SB1ZGZj1AiEAjuJeXmpWcvfEVd/Glbps0LB1Y6F/kNdkxdw3uBfzmmo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92104387},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"91db553e35d7261f09b182a33b80b4bd66232e72","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.0.4_1771552021293_0.3673787336556438","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"omniroute","version":"1.0.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.0.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"f52e8419aea33fe4564e0adb612fdceb17bb913e","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.0.5.tgz","fileCount":3029,"integrity":"sha512-1VERnf194gWTQRxyQNKQu8feI3XizdfVBB6HrzMkMXjt8GAieznlDC/2eOE2qW8lT8wuOl4OuFlfxVaYgHTUbw==","signatures":[{"sig":"MEQCIFTdMwfB0bQb+kIoUcSEu5V6ACPhSK6065+NYkGrp3qmAiB9bB8nvgWrN+bCdPGj+7fYmBQTcbBO+KkSr0PJpTv8DA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92104560},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"97154252359a24b39394c0861d6106d824ce13fa","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.0.5_1771562842929_0.590556305938337","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"omniroute","version":"1.0.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.0.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d234ece3bec671cfb167f5f758edc32d1badfbeb","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.0.6.tgz","fileCount":3029,"integrity":"sha512-Sqa/UGh8j7isoMUX/ImlVeq78pXdOvA5qQ5b89oJxIqclD1lxHM1gYmpQzN9+OEZ1BdnuYRw1IG0m0HaiLpyIg==","signatures":[{"sig":"MEUCIH78WVxGiP7KPoasQaxQqlJtKHKZdlwLK8MOerDQShmHAiEAyfsO/QP5rWlx5CmDczRkDKTu3vysh0mmLm3heYidUvY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92107654},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"efd6a16d2a1f2e5981eaadfcabea852201e18bf1","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.0.6_1771567383186_0.6229411835138834","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"omniroute","version":"1.0.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.0.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e73966aca5b47636882bea74b700bcb3f4950b6d","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.0.7.tgz","fileCount":3029,"integrity":"sha512-9PljriL+miOMejZ44D6LagmS344yu2P6IDEaKWkYIEN2r2sVbTj1atMPf/5+NmR+1Bwf6akCTj2WSOVC8OwGXQ==","signatures":[{"sig":"MEYCIQDvm1leg2vE+1+f4Pn8+nIVFBduI9U41Z0xNWOoPdB2ewIhANRZTSijGYHKonJrJztwEJiJiOuurVStvnCS5JcvRKMT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92117876},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"cf258779dcde917e33624b6a90b3da6eeaa1befd","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.0.7_1771599275180_0.6645168116413802","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"omniroute","version":"1.0.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.0.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"5d7f7184eb7c6898185ad762be3a238c824b5d58","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.0.8.tgz","fileCount":3030,"integrity":"sha512-kHv+Ymlw7D73P/tUemOO8uJf+wR9HiPY8meIX3BVPjK19IOedqqoP/FGEayNauIqdVI1hqKz8aow3OTV2rEGFg==","signatures":[{"sig":"MEUCIE4UsVh//B/oeV71BfOUIsVs5UmjwPwkG/EgMbxnszfSAiEAmhc7wQkRCpqFfHE+a+30W9dw36I66gYJsfoqyHcxO0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92122297},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"17b4359b50170aee4c6d856b6bb1db1223dc2cf5","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.0.8_1771677395392_0.4224117481746845","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"omniroute","version":"1.0.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.0.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"c7e583ac0141117a5645d6a743a0f19faeb553ff","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.0.9.tgz","fileCount":3030,"integrity":"sha512-PZbtGrfKWk853cxG9hD2O0LVsEqosniv0JTWu4JiMCODs7cAk+iXqVSTkOqw8x26Gyim7ckODqoAUSEK33Vv/g==","signatures":[{"sig":"MEYCIQCRafXiPXAkamPdjRXI+uBQNd1bgRpdX74oI/8ZDQUJBgIhAOjs8BaMGpR0E3aRQgikfOaZNqPZfdE1JHJn1aLrOv5P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92122764},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"0e661d1b21b9f81c9fd040e72d2c33e406f98d98","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.0.9_1771679058812_0.6576760991660204","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"omniroute","version":"1.0.10","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.0.10","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"093011483b954084e43ef6882965348596b85023","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.0.10.tgz","fileCount":3030,"integrity":"sha512-IJzxMbPrkyLUXpFNDY5t4zP9HVG17Hzz0pfKZE6d5KhaSnw7hyZhCXXu7X3v+zphydpN7J4vDleqSwlzSvwGgw==","signatures":[{"sig":"MEUCIEX2SEwskKZOQzLknYRvSelmqVwn/cHWWsBcpwtA9teYAiEA3EHbjlV+LCFSWc4abz3PdL5qXoPKe3T/5OUc/czZkKc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92126766},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"b8c5584d5911cbc4ae9be75f361cb2bdaa726622","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.0.10_1771688430563_0.4799852037264578","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"omniroute","version":"1.1.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.1.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"98cb0cc5ed5c7b66ed884d717f9568757c0d9a5d","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.1.0.tgz","fileCount":3030,"integrity":"sha512-mqEIes/iQcIY7toha8+1wvB2Xoj78EGkNryjcO3LMNdigUVU2YyRHEX0qgo0JE1YsmXUzZq5r/iSLhKM4ZqWFA==","signatures":[{"sig":"MEUCIQDz7R8JuFPhBImRbvzcvQ2DrFwLPouXthTXzyBXR26r/AIgTzM2pl/tV+VT1xt6VFS3HIIP/HKcuDiPZnoSIb/B9nE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92127249},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"de67860a136545330233923662ebe52d13cc798f","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.1.0_1771710288414_0.1997577873282641","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"omniroute","version":"1.1.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.1.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e7050adc6c2f8a40c9276ed0dd0365649967d980","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.1.1.tgz","fileCount":3030,"integrity":"sha512-Vw2BadOr82NJAeNHfLL2VBerhpkg7EzuXkEm/zJcwMQg4bDr4UIdIH5a/R2+AxDfXA2+iT+cjgkTriUXl1SrHQ==","signatures":[{"sig":"MEUCIE2adHDrTiLTp4FuYqwQ7gRLKHZbt21OR5TpBe/BU+AbAiEA8HXsWUhSXfr2LGCH/QQD1GLuxE2tMwc0hTIQDvYXvRo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92129994},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"fd0b24836244f872d2d289de5164d1e9f4664e12","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.1.1_1771789899121_0.4031295081398365","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"omniroute","version":"1.2.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.2.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"5ec7e92b8024c165187b492fa047d1a30016c4e5","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.2.0.tgz","fileCount":3030,"integrity":"sha512-OE5oRCrAmlGsbeZ0I6cxwNI04CJCoQWgags+MbrZRhIVzvFii6yaChgz5BlgbSxt0PwmPs4GPlgRoqNrpsIiBA==","signatures":[{"sig":"MEYCIQCQavEJzFY8KlAHQsgiKnuHdHdZjJAAFQSGnKmV3o/nzwIhAJQgtUVz4H3n7exbcgwWwP5dUTvUCVISWCYRITfZVDNI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92135354},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1ab7b8b20831aee974b0b419523745e81225ad52","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.2.0_1771796444832_0.0357136835431644","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"omniroute","version":"1.3.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.3.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"eb32f2f6e0279c36f883a3fa8e91af73e730ac98","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.3.1.tgz","fileCount":3030,"integrity":"sha512-iExlRDK/Jm+FwX2G53BnaRh48d/MxOlkPaVoLJqE2UqhrNNb9unIwDc4xbbNMOkzoqoBzcSbUN1FPg4JUQuOTA==","signatures":[{"sig":"MEUCICZ5E4NMB2TyeBx8VfyLEJcsD42H6NdpqV0aTs/CymM0AiEA+x3fyitOpW4aJE+TOXfKmT6huIZqJXCC4lZV6aMev5A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92153196},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"d35c86398433ec8e53b3da17028ed48d796a36b4","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.3.1_1771876796491_0.7102259215069275","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"omniroute","version":"1.4.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.4.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"56e9d2185c3d7eb7039befc508750ee7432498e5","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.4.0.tgz","fileCount":3045,"integrity":"sha512-96+6YO/DL/ibhWeuUBYJzAZrHeG5PxViu7q1WgzVSQtEdaOLHeuQl3kpM6FME41KqnNTBN5M7lamWl6RJ5pGCw==","signatures":[{"sig":"MEYCIQClE9loqcOIoR0wl3RTbSMqkSxtjZ+q2AoPXCI8a8umJQIhAJ0064iqJ+v7zBSGVAUk9y6uL5OMxlVaZ4WrBJ0dEG9g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92361808},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"7bf1ce394bf7e16817a34670ad820846197620fa","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.4.0_1771877170173_0.546751457948792","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"omniroute","version":"1.4.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.4.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"60450566e205c3e831c19d14c570dbe94a788f75","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.4.1.tgz","fileCount":3045,"integrity":"sha512-9QWCoIOUzki0+Av2cZmmqUyEOr7poSxf3RdsvtuI8jilcGpITSitqDFs8gPmHwvuN9Bgbmg26rCyeDZ/gW+lvg==","signatures":[{"sig":"MEYCIQDb2NDOGAiriwm9CuFQRsSBD5rvIVea4XlSuLGOzUBgaAIhAIxukUvrSYoaAwY4GdFahvx3KxULUeDqm1oh0lPqXkU4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92360284},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"3c0c83297ee1c75d4f6f4bb9f8d99ac6d5eb5d79","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^2.4.6","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.4.1_1771884260036_0.3510470657891205","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"omniroute","version":"1.4.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.4.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d5e7ee5e694affce8fa6c20c7fc6a0ef685b1ea2","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.4.2.tgz","fileCount":3045,"integrity":"sha512-6130lygZKo22tWvmi/CmX8Lu9UfhDb9o3sjUSxUdbf1+tdkBes0mG4BV2Aap+890N8sGa6aO4H99rdcXLEi+rg==","signatures":[{"sig":"MEUCIQDZ6pv5dsRfMty/oJZwpE3OEvBegGslm+4DyZ3+WX1m/QIgBmV9gLw5QeAxWjLDowPWzGyf8LqC76XEKHgtnTmXRI4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92362392},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"956a12ce82d68aa41dacc22040e215518d4be6ae","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.4.2_1771890151963_0.5914323380871578","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"omniroute","version":"1.4.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.4.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"a95f024bf374dd7e08188e698172a08d0ecfc32c","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.4.3.tgz","fileCount":3045,"integrity":"sha512-EJi0guI+dyOUF01ETOetRi+01ClTM6GKJ9Oko+KAtr2vgM06vEVf2m7wwwvt8p/XLk0sY2rRGnPYHID0iR4JiA==","signatures":[{"sig":"MEQCIGer2hkNT3Yi0nDHYNfbpOtiPXQYhfRM+TS8lg9XaaXwAiAc1qZAizmfYcZDzeVV+8wCCFX3CIDXK4NxaQZcq/mPjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92362503},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1a0489a9ef1177e3044984bd1e1ada2d72d192f9","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.4.3_1771890893171_0.40240648691559144","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"omniroute","version":"1.4.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.4.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"b09cd3c89a235a22a3afd30fbbe040223dd3c765","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.4.4.tgz","fileCount":3045,"integrity":"sha512-ePmSQUKlS7/mgp90kWclS14ZQW96Z1gDIEsjfB+ZH2Qw4BTt2zZSPGZFm08lxV9L4he8uGuRdDGGV+v7FIpNGg==","signatures":[{"sig":"MEUCIAS1P8atF2nwuBXWeTeHh0sDc1tor8Pgid0uCVPrDYOLAiEA8XGK+9cs3cAswr9VdIS5D8Hj9NLAILdsqMVAWbU6iL4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92369308},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"2f9e66c6f7518b6a09c6bcfb29fd9f755912a6bb","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.4.4_1771951638142_0.8677001097414672","host":"s3://npm-registry-packages-npm-production"}},"1.4.5":{"name":"omniroute","version":"1.4.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.4.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"8f499ddfd466cd2b9ebd1c6e6c4ec798b6bec7b5","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.4.5.tgz","fileCount":3044,"integrity":"sha512-QBXfWEbFu9PjLQ6O/7FwKnNgfxAnqgZgI5zcwuvS7zP64o+iXlEbszf9qXnzS17uAlCBqdfNKgHPcIl1qLDyRA==","signatures":[{"sig":"MEQCIDbKr0gJErfRypV2ft+Z3TUmcOLP7HcL7MZYEl6A2KtNAiAs2r/xk//PuX5qExZeC4BwyuklxaPWBAWG+D960w9z5g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92386054},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"2cc987676ccad1db25044ec4a710b4d213f449fe","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.4.5_1771952597423_0.38264863669950056","host":"s3://npm-registry-packages-npm-production"}},"1.4.7":{"name":"omniroute","version":"1.4.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.4.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"cdb19e5f388ba60bb8836eda3c245c8ad3caaab9","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.4.7.tgz","fileCount":3046,"integrity":"sha512-Nr0D/1q59mFr2rHD/6UtL7lOQjsscCtcwit5hgsfc7g4w2hO8heKv7VDLYgRuzYxtDUh0d5AgmyQp5a0xxSDHA==","signatures":[{"sig":"MEYCIQCbEoQcNstOevnARr0gAblKsUFzlqtF+hG+75CIwfAhvwIhAIwNTcwWndceJ/PYvCLwWbIZFKiWvl2vluheOhU6lyO8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95956510},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"9ed2621ac18868b1e54c9cf1c4e4a6a2bf2dbbec","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.4.7_1772021049829_0.9084231114840293","host":"s3://npm-registry-packages-npm-production"}},"1.4.9":{"name":"omniroute","version":"1.4.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.4.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e907716586a95c532341f521f2b9080e0a30bbb2","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.4.9.tgz","fileCount":2757,"integrity":"sha512-7q33cp1TFvAauhCoxQn/adsFdISqHVOTszr3OhBp0SoZiRHoy+jI1gYD9WKR0XEOKN4InipiR7PYLIuHfnKv8Q==","signatures":[{"sig":"MEQCIERT2zAD1924ozykTntyhnv2drFvP1AscDVTdiA2tHMhAiBMjwsumTC6eRHk7Ehkehnjn33SVibqBqgXb00vzeLWPw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91531774},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"aeb363218bca3960111fb89aaec5ddb7bdc999fa","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.4.9_1772050232653_0.09197390879022205","host":"s3://npm-registry-packages-npm-production"}},"1.4.10":{"name":"omniroute","version":"1.4.10","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.4.10","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"2369b330c4435aa480011318cf0d979cf61d9c80","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.4.10.tgz","fileCount":2757,"integrity":"sha512-XNYcG2bhZSTgJXoqIy+MJBCu+9rBNIMPuQ8a1qZvwDx9GmhMtYtIb6Qc0m7T/q28onp3kcUkL8veBWYni1GLhw==","signatures":[{"sig":"MEYCIQCPqBCx4bwR5iaReSO9U/3V7FGejUVaq+4J1kUv49oJrAIhANVS2qsPdkV5hoxkoIuvLI+t39oPujAebbZEmgXYEGyD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91436393},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"bd70cd77a8ea04620655b138cc31fdd0ebac5ab0","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.4.10_1772055960497_0.28416419103441615","host":"s3://npm-registry-packages-npm-production"}},"1.4.11":{"name":"omniroute","version":"1.4.11","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.4.11","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"8acb5c2c501335c437f07c3f85313e2f392e0640","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.4.11.tgz","fileCount":2757,"integrity":"sha512-oRF3s2emzdNrjFL2mQ3Cm0TBBMUjqUMJgOaZQ8fKyoaWopdKXNzRlvn9jKpSegN3desO0sIG0jsapzjmNFj+MA==","signatures":[{"sig":"MEUCIGCYeLTm6a3uYAKNq54hbnWz7HSTtRRCaWS2C8Yi04fIAiEA5KBLMwD96K21J2cB4RzoW1151EqW++DGZ+LC1w2E3EM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91471175},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"6995c5a1972a6f201b51d941e693511a6b2876e0","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.4.11_1772058467767_0.6609172336810742","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"omniroute","version":"1.5.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.5.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"dd9d88487fa8102fc4a3c439489d7600372225f3","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.5.0.tgz","fileCount":2807,"integrity":"sha512-lUf9WZanIveTO1nfW6Ouqc0++2yNf1dzwLx7lxTh3+4ebbbzfJ8PmDdz18/r9poBUEVTSBqItaMQm7F9l6HjqQ==","signatures":[{"sig":"MEUCIEoJTsiy1g8XVERpDvLVbwOhY2OtEhyKv9jmDzv2s81cAiEArKm5qlEy+9rHeiYMh0pf2xQb8q6T/vpEWlXL9WPq2kg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95951404},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"8b216b4f690ff23c9f7de184d11593ff7c04a129","scripts":{"dev":"next dev --webpack --port 20128","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"next start --port 20128","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.5.0_1772137175932_0.5813802734721458","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"omniroute","version":"1.6.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.6.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"5824b886b20c7ca1a937ad44bacd005ee1e54eef","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.6.0.tgz","fileCount":2808,"integrity":"sha512-haFuqbTWX7vBRqY33nVvAqX7HkHqeISXeyRkOPFIzpRWPHKoZ4w+ssTzT3b1+ZKY7t1dvcWP8S+E7k9wsXSVbw==","signatures":[{"sig":"MEUCIQCUl4yD7OBm0TnXGLEyeY/633gXOWmcRokho2NgTmXZjwIgOKvCyxDQiBaK9ndzRVHb/UdEsp77MGMv5JFvSX0XCHg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95958325},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"a2cde5884103d40f0d27cc4b09cdb741d9bc482c","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.6.0_1772220899077_0.5452512313680036","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"omniroute","version":"1.6.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.6.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"6fa09ca2b0629b4c8debc500c836b0732f9ef87a","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.6.2.tgz","fileCount":2811,"integrity":"sha512-7Olr/3aFvzbjHDq9FVQ1gYVY/4J4MzA87yEUPDR8TzyfAgbmu+cXKJsjDRTAKuLb9yHCJYxoVS32M7vXJJACMg==","signatures":[{"sig":"MEQCIAhZMq6USrhFY2GjYo2cLzZHrMoRlXHGCnRLgosTqd2aAiAx4UHkUYOMfLOPvcFv9rHNFOIEBJ8romihPBZyDVaq+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97141986},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"ad98f08864334140e3ef6f457d395101d3bf6917","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.6.2_1772247681732_0.01439290289116113","host":"s3://npm-registry-packages-npm-production"}},"1.6.3":{"name":"omniroute","version":"1.6.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.6.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"da04e95972f7f22d6be9f99b4a297ec823614c4b","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.6.3.tgz","fileCount":2809,"integrity":"sha512-dMvKPJJlo7m7FNpE3H3h1QNqm+EBfF4yUKYjeFCyrt3v9APGSYjNnULy7CLUWJryGGcIyJwTQBEM7TbgPKwBQw==","signatures":[{"sig":"MEUCIAqwkmunYaG5ExyzJGVg0XLwrRBAjxbYdPxoA2wgC1aiAiEAhuPNu/MW3mmPLGLDW+mv3gXL0qTY0m7fGC4V421OKmM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95963057},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"305561ac5159b9ff0a6b6114ad87706e44fb1eca","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.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:security":"node --test tests/unit/security-fase01.test.mjs","prepublishOnly":"npm run build:cli"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.6.3_1772251111999_0.44879906515627277","host":"s3://npm-registry-packages-npm-production"}},"1.6.4":{"name":"omniroute","version":"1.6.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.6.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"fdccff53b25a643fb9b85cf78fccf8dfaa0fd941","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.6.4.tgz","fileCount":2811,"integrity":"sha512-Swv51xXg2lzA1ouElHh/o5j7CxxVoKBsIkWLBo6NS0B6bani6JxkThBlqUWZYP9xlrWB7CLRxocaxm6DC7oSSw==","signatures":[{"sig":"MEUCIHrGlFR9ufxYB5FmqewhWGyWfmFpEoMRdJfi54xX7WxRAiEAwiBnT5n7Egg0M4CdI+2LHnEg9RtQyeqCKh1I2UmN/MQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97190193},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1a6a155a09094a2fd27e8f323e3af61d69028254","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.6.4_1772278676663_0.25799435316541963","host":"s3://npm-registry-packages-npm-production"}},"1.6.5":{"name":"omniroute","version":"1.6.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.6.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"2cf0daeea50384aa044e7a9e3eed58f2f70b72ed","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.6.5.tgz","fileCount":2809,"integrity":"sha512-t4rNHP3htzmf0OU2b425dlCBWlC0QAOf/PBInkrEYXxlgM0XxmIvbaZGQv77wKA41Gtp0htoQWGto4VTx1jmtA==","signatures":[{"sig":"MEUCIGiJ8OjfqMOof9+FHU/QazUGetMTw4bwJMw7B3cOaBCXAiEAnM9kdTIlbL83dLtyisSrmqQWNtqq0JM9fO91jaD6sG4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95881190},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1897118872d1d15fdb794bd075b5d64938350140","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.6.5_1772285447967_0.1306807125237528","host":"s3://npm-registry-packages-npm-production"}},"1.6.6":{"name":"omniroute","version":"1.6.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.6.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"a4025b16169ae5a74fedcdaca20abfe29867758b","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.6.6.tgz","fileCount":2809,"integrity":"sha512-F8uc21TSmC4Ug7VRQPdvh12g4d/F/wAvqd6VDCszb5SZiebE7wU5DpjbTIgFOXlKY/Th5M/BlZGZY3N4CefURw==","signatures":[{"sig":"MEUCIQDVXEVQKKvYni7Hk9f+0oAVC/mrnS7bHRC+d+ASnd9S9AIgF6+mCykTWWWAHdlYxP9pxgn/Y+rWlDiIIkifLqSypho=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95881211},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"775e9ef910ebe73187dcb4d5a970acbc5c424ebc","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.6.6_1772288408963_0.6370296066530492","host":"s3://npm-registry-packages-npm-production"}},"1.6.7":{"name":"omniroute","version":"1.6.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.6.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"c837076397836a43167e2fae4ca8a69f5a88c9ab","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.6.7.tgz","fileCount":2809,"integrity":"sha512-ebPaAEiUgs/ZdJ3uOvGbkg7OJb1BYVRe/naDf9lQg3vqxU9ZVzGM74uhcRHqcG5bwviG2qPAJe7sXNAKGQQOag==","signatures":[{"sig":"MEQCIGzuWWSw1rlMLJB7vTe6eeTyETznLTzOco0uy9D3ydSOAiB8nwotR0D42rdvxTKoxOEOeoxdh2NPvUpZH1hD4X8TZg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95902200},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"5f88f1e0429a281c97146b3d7838978920ee77e0","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.6.7_1772290582697_0.17717794188771796","host":"s3://npm-registry-packages-npm-production"}},"1.6.8":{"name":"omniroute","version":"1.6.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.6.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"c4208fce59d09f203976a8f8491910b05ad14a3c","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.6.8.tgz","fileCount":2808,"integrity":"sha512-9pgr+SC1T7gmOsugEeB+GfZDmw8RXBz8ilijirIk228QRg+ebqFPnza2noIzQRLReA9d28ABrpNJuTs+KsxKDw==","signatures":[{"sig":"MEYCIQDz+VTmJir5EVDM5FwCtFW2eYcw06qHY9hkRtb8mtcm0gIhAMh6TH78P2bST2GvAlXuzVrFq2iDS5UbpEKQYMjPiA4c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95835205},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1de59bc75b4a349eb61f0b99511ba3bc3454add9","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.6.8_1772303761338_0.30458064420311515","host":"s3://npm-registry-packages-npm-production"}},"1.6.9":{"name":"omniroute","version":"1.6.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.6.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"316dd41979cb4d72d2aa4af9b7c9654045039abe","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.6.9.tgz","fileCount":2808,"integrity":"sha512-m0k9+lS5ElP8UNHEhNqW5KmO04T7ANTya/9TdIEngr+0AxQdFAGpmy53Mm38YECVzfepSt6eWu2UJXkDrojmyQ==","signatures":[{"sig":"MEYCIQChWlariTLvlBNbQDBVI6AwKhO3eAf4WLNbTi7LVjI9ZQIhALjWMUT83tX0Akh0o9jjMXKQVflEepmjw37E7NYYjrF5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95840756},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"f5411811e56a4476f683c2b656f468953bbb3db6","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.6.9_1772307131543_0.6437034284390619","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"omniroute","version":"1.7.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.7.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"2cdd3b80979f038f3316ecfe414a4cb3a21c60ab","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.7.0.tgz","fileCount":2808,"integrity":"sha512-DGTbjNapTXOI/UF0vkAzV00gQErUqH1Tgk5AFmoYQKz2uQGPKVT0RIjxOBTktlwaOV7XQr6YkbfQjz7lUZEBkQ==","signatures":[{"sig":"MEYCIQDM3KvYVEVag+OrqSm4gyP4GxJaXQ5h4N5yAKNquIyHpgIhALNMCGx0Kz4b3XQFG8Edcq4sdh/pZSHJNICqv/pcOwqj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96306351},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"c385878a6db189e91f82d71d135e3368c32825d7","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.7.0_1772311566105_0.46815438392241115","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"omniroute","version":"1.7.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.7.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"2a1b47a2eb607db97a5351f349536ad31c002f30","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.7.1.tgz","fileCount":2811,"integrity":"sha512-v6ar/q4cOKRtTWpepeaHxue3uZoY3UrlOmdYKBoiRhh2YOCmfOH8OWXGMZofMlDh3FC3yC2lKTo7/lT4SWqxXg==","signatures":[{"sig":"MEQCIH1N5mv6xdoWKpfD/VSA1DhQ6y9sQERDKfWOnfyOBNjPAiBTjjk7G48ZEViae7/z35TA56tvyE3yKSIj7n8nUtiQ0g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":120921242},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"462f71df75d311fcca061287379e1179ed1b592c","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.7.1_1772315928130_0.9171454958023086","host":"s3://npm-registry-packages-npm-production"}},"1.7.2":{"name":"omniroute","version":"1.7.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.7.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"02a1109732adb087f89581daf7f9240fd8e69165","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.7.2.tgz","fileCount":2822,"integrity":"sha512-GG5UjPJetA3KRP8D9QU78uhRkpujtMp4zvTSwwG+Q+QPC8ut/WEID8BvyNpnVTlUultMMoydCiFn0++vNH+7eg==","signatures":[{"sig":"MEYCIQCKbxIYSmeoP1AVrMVQPyUcOnUQNVss1kl3dp2ZugltvgIhAIQERiW1VO7ljV+j+Odnrc+Yib2e52EY9IlUxtywYFa4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96633364},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"c94e1d46e75417b9a886f7d553dba87c1bc6faf3","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.7.2_1772361378666_0.8895917369577382","host":"s3://npm-registry-packages-npm-production"}},"1.7.3":{"name":"omniroute","version":"1.7.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.7.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"f2c952519c619005fe89c19f0c838c9cc00fcf86","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.7.3.tgz","fileCount":2832,"integrity":"sha512-2r40xJ/S1wfe2nQVuTj6dE3Svp5S48104KEPPH7FMFSERIVjRFcvvSaFB9cG0gyp13A5TmxV5+/XtnG9Hacpaw==","signatures":[{"sig":"MEUCICOWehmrx8Weqq2UgsxKGOOX7p0Y+extO8B4Q7Kz1+lsAiEAl5GWyEMJq7aABwXgv4WuKcZnIIk23Q4apHP94V3mRHs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96784123},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"a5d7022958139430ee7d3d6f58b2af2c53a5582b","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.7.3_1772412455266_0.002221733966878414","host":"s3://npm-registry-packages-npm-production"}},"1.7.4":{"name":"omniroute","version":"1.7.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.7.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e0c0051bf2f33d7380a3f9c3ca65a9148bcc5ecc","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.7.4.tgz","fileCount":2832,"integrity":"sha512-8YatrESkty2we2odmPkJtFF7j1KNvMEf9l1OeXsYSH/6K8qAVxQt3QO4nTOZxeB3AMfggDmJA3rtGgJs1QSWwA==","signatures":[{"sig":"MEQCICvLsBMFZ+BIUh6ACjumQ8foKGUtc7smL7QAOZYWjPcLAiASPCnrcTCRG5R4EQBvW7xJCPynHIqDsNk89sfwoSkVAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96848118},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"ee9f875f6afc5b75e41077b559e16749ab810154","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.7.4_1772417290756_0.45904378235870813","host":"s3://npm-registry-packages-npm-production"}},"1.7.5":{"name":"omniroute","version":"1.7.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.7.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"72f5146f5b9dbbe206d23e7ad3cde15439a1e8dd","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.7.5.tgz","fileCount":2832,"integrity":"sha512-sKRjOHCZXAziQW5F9tfAjW4noQkKODS3sm8QoL6120WaRuPZHIYpLP8JH9cRZLIKdDHjGXgbmcwlaBtPYgAi2Q==","signatures":[{"sig":"MEYCIQCPzwRgwrA15jA5TKnYXGk0Is6ZIp6xTyb2qF3gfx2k4gIhAPgvPSvauWazJJUXNSxpYCy8yhbPegsr5jxwX66h2O/A","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96848701},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"b0bb1448a6be7635d116bc9c3dc776b6a89dea2f","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.7.5_1772423020431_0.17871240660444254","host":"s3://npm-registry-packages-npm-production"}},"1.7.6":{"name":"omniroute","version":"1.7.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.7.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"63ebfe514e8ed06699a00f79b6c6fb25aded9ac9","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.7.6.tgz","fileCount":2832,"integrity":"sha512-b4INg2O0EC2me68yOaHlNCTnrpyE0mKVAu7TUMEOKDf591gLe9OSOdvcL5xGkn+7tOEdnwx/w8mT+KwkWQaLQw==","signatures":[{"sig":"MEYCIQDNUY3N2VAejNjKpBxoepVjAw1sebmeuqra9nVpG/Jw5gIhAPjOtwWrrJuh59o8bt0RnZtT61qm+u/qGs44WJcWV/JE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96849147},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"67a03ad7ab885cd264329e26928cea3e9d2af110","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.7.6_1772457835805_0.6154625552273705","host":"s3://npm-registry-packages-npm-production"}},"1.7.7":{"name":"omniroute","version":"1.7.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.7.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"9a8ec59be738d9c57ecae1aa4e8d6f461ff2319d","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.7.7.tgz","fileCount":2831,"integrity":"sha512-D32OogYYUk3FPCRAaWGW63SZ6EY3ic2cx5V/DkjrPlT8715+DD3gRDmwnN5xBKAlG3hXRmrUCwIqgJ540rIuqQ==","signatures":[{"sig":"MEUCIAZqCGp4NDr+JgREWGKAn3ZtKBgrxoWwoku0m0e/AeQ9AiEAwRqfLiT0dgHPCO063Ed6zeM2KrX7ZboJpa4xc3iGBd0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96846122},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"03e3fa9d963fcd28ea15cea2ff47f14fbbec38c5","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.7.7_1772458311496_0.8866022439068808","host":"s3://npm-registry-packages-npm-production"}},"1.7.8":{"name":"omniroute","version":"1.7.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.7.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"cceedb55fd79a1b49151e50cc7e9f4fa6875acf6","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.7.8.tgz","fileCount":2831,"integrity":"sha512-fgTSCz8XlFW908zDYZMYL712ve6gXUfJSFjbO6u+F9dSKQ+wWxBNVKZX8LIzTsQtztEiqEed6yVMEzqBJIGdjg==","signatures":[{"sig":"MEQCIFYuOG8DaGKrZ3wkNVoqgJwhoOkCXGphxNoBrNgSr7+mAiBTTF0hT3WUBYScvLX2uHPT5IarPJa1ODDqvtgf0TNhKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96883985},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"9d3917a909fa22e812b38afd9af76f295c77c609","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.7.8_1772464650742_0.004075186805033937","host":"s3://npm-registry-packages-npm-production"}},"1.7.9":{"name":"omniroute","version":"1.7.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.7.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"b4536f0554c05d30fcf122fc4b90c904f4459f03","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.7.9.tgz","fileCount":2831,"integrity":"sha512-uDa0wSc71v2fuGPFHZoULc4AD8gsv5QvDopusKznC/XXmcMhfQ6sY3o194WG3ntu2BrKgvfCqDV4qHJXBLL+Fw==","signatures":[{"sig":"MEYCIQCVcr1u5GJlz98DVDBqikWSQGTFEAw3YWqvikHfaqxVrQIhAJM6f8dP2PZw7+hhjtfRH0mOruJJ/CO9MQR8K+z8HEoM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96884002},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"378b83fec8d139cafbcda344b02ac956daf56593","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.7.9_1772474320612_0.46487951136404027","host":"s3://npm-registry-packages-npm-production"}},"1.7.10":{"name":"omniroute","version":"1.7.10","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.7.10","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"7ad646ed52453c6b4029bb343b88ab8de35d865c","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.7.10.tgz","fileCount":2831,"integrity":"sha512-hh45g3YDP/+brzVfh6ZSws6/R0W844ej8pJcyofAFuyNOVwlVMFhPHRnzGNbacX1zwCKsoryQMz4/np4+e8xEA==","signatures":[{"sig":"MEUCIBJCTTZhLCauPNj+8x4IdMxubX3kAs3aDe5uKf4gmFQmAiEAucOXyqNd4dUqCxQKy+hdLVWWjcoWS8cHe+K/FmB9nFQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96884131},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"8a7bf45b1cccac1697c3c1bda7384231b46b0caf","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.7.10_1772476448072_0.24410388067702304","host":"s3://npm-registry-packages-npm-production"}},"1.7.11":{"name":"omniroute","version":"1.7.11","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.7.11","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d400d92eb6ae0427fd2bf5aa861ef53b1cc52b26","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.7.11.tgz","fileCount":2833,"integrity":"sha512-189ynvtJnXw1tezAzkhQJOyuMZqVtAB/KyGV3vAXAn4xRg4WvtvQOW4yxt/g36kdOJI34D3maWl36RHcoeiNiw==","signatures":[{"sig":"MEQCIBByCmz/i0piTr64K5r09mQzQT0j7d2bTiV4YDq7llN7AiAznIFd9qvC0PZ1Z7hMcCrVaRzzA5ogapYj1xVP//jjtQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97341303},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"32057435f1384f8d3afad82300f89014bd8ca2dd","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.7.11_1772487422265_0.9117897009525622","host":"s3://npm-registry-packages-npm-production"}},"1.7.12":{"name":"omniroute","version":"1.7.12","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.7.12","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"123b3327c671d6563dfab4051f91b4e9c7605c68","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.7.12.tgz","fileCount":2832,"integrity":"sha512-E24np0011yDsWcZi+s/B7GTBIWuJN6c3bdmX3EMUojvn3MdrAENsjZxg86AtIDbmsV2l9uGtSXMQIwSMP8fX/w==","signatures":[{"sig":"MEYCIQCj+Vqd9UfyitOBkM+gjNZwSX1PY1bYKX5rSpq1KxDm+QIhAN61zB9l12DAqbDgKVm6luOBWBhDEtbCbvN6p3eWgiMJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97342311},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"770947cbb7b63e7eaabf728f245326b89bc79c89","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.7.12_1772488184197_0.7744264441979849","host":"s3://npm-registry-packages-npm-production"}},"1.7.13":{"name":"omniroute","version":"1.7.13","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.7.13","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"ccc4c2b40af08ac9daf0594ce0587c0976d17369","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.7.13.tgz","fileCount":2833,"integrity":"sha512-jMn9UJhDXY5L5BKEi2LP3vjXIZVihI63STUsfCog5I/2tazoqwbXoSzaXmElSyl69ZnwXVqCQVZvsdeggNfEZQ==","signatures":[{"sig":"MEUCIQDlnpFBsD9o9Qwnk0PDRShbOMMUbmGu85J054fcbT3YOAIgcnRUZJV6lQFKqY3H4jdiLQ+pwjSV/O6VNWjLL8yPJCQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97345298},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"f350f9dc807ac965a62a0fc47f31b4fe0e15aa92","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.7.13_1772488521571_0.18489306751081425","host":"s3://npm-registry-packages-npm-production"}},"1.7.14":{"name":"omniroute","version":"1.7.14","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.7.14","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"73963175432b90a33616671356ed84ebc8cc6f4b","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.7.14.tgz","fileCount":2832,"integrity":"sha512-9GpTkgfhCHaxa52Bv3nEudinvVKR+9rBaaeEpxUEyLN2Y90R/vCZRvz4DF2+KsWx9BwuLXv0LZgZo474ZKrFlg==","signatures":[{"sig":"MEUCICLtEbuscCWDUj6QRZx53OEW4RjEZ3Od4wZdDZiW16SSAiEA3ywRRaBksOc1GSc7ZrwUpcTsqjEbNnSPBR0A02K/Ook=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97342455},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"dbffb187faf139ac142c43238356992f814d62ff","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.7.14_1772490069437_0.03684586791420763","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"omniroute","version":"1.8.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.8.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e5107a5140d46f3148f95517554845bcb2a75ade","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.8.0.tgz","fileCount":2833,"integrity":"sha512-OiEmdH55MspoxO5uWnKux6IBQKl6TvNd1+xaf/yc29CilWzAwE2NTjhxe7F/IR9/4euFqQ+fO7s/9eoggxS1+g==","signatures":[{"sig":"MEUCIHjotK1slOWG/XOVGYpDPOKP3exyP0wuSiVZ/uER6HDoAiEA4L6bFlWeqad3z3osRiY7M2WrkStqgM2p8zWfZvvvSHw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97345643},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"de41f4a00ed9f7bfbfcf51432a5f533e417355d7","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.8.0_1772547975934_0.4936959522393438","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"omniroute","version":"1.8.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@1.8.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"4463cce4c876cbcf78723cfff7cf2d45b581092c","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-1.8.1.tgz","fileCount":2833,"integrity":"sha512-kMWz6ZolAHlwle9Q3YyqB2y28l1TyDmJv1mWcTYz61qpLI84gCXgp9x06ApsNKPz591ZxkyclYGa8lqFcEkwmQ==","signatures":[{"sig":"MEUCIQC8qxEmUlBhnXcVWxyD/GSfYnyS+01n0xvRAk+BXbUOUgIgU1jp4JezasKKLRgogmu99JSBsM728vaBXKnCX9zjx74=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97346990},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"e5142c6d7990a8d7fd73677e35212393ce27ba49","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"npx playwright test","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:linux":"npm run build && cd electron && npm run build:linux"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.39.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_1.8.1_1772550649415_0.4234014665890442","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"omniroute","version":"2.0.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"19cdec62f483c608a8ebf258238ef17abacaa94f","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.1.tgz","fileCount":2978,"integrity":"sha512-HRK6H0C+EzUxxSvWTmJ2MQBpR2Lf3TIQ7dI29jlkMZk15pvy76tRXNVztNjygmHbk1Xfi5Q8NaANI9m5Qnm+6Q==","signatures":[{"sig":"MEYCIQDRoqXD6WkI5UCaPhBK5NozlOayxTHn+tJbVYNzXRLFYAIhAIKj9LFlHYVGpVeW5h0gnrjZymjQOJRXSn0PXXYjVu7J","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101208425},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"61a9022cd405043865e86bcd4aeaac45ffacd8d3","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.1_1772744580605_0.40581421794987227","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"omniroute","version":"2.0.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"10b75bc2a1171176470d2cfeaefc329ad8c3f194","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.0.tgz","fileCount":2977,"integrity":"sha512-nqW18ZVT2MweVNs7BLBSCZjhs/EhqIc9Df9NQvfetnu9lkm4rl0fbiMTu5yNu7T6Aa3bh6+/0E59+VMGGcNn/w==","signatures":[{"sig":"MEQCICj2CJhCJeLtGwUhO4jtXbye1AN3PLvceklN3LQka6MfAiBIAd/ClDSx61J155AaRHRzkNVK2esbamgcoV/awMjAQw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101206299},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"f3bbe41b23bfeddd91259a56b52ec146e23ea3e8","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.0_1772745302239_0.41665525688330574","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"omniroute","version":"2.0.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"8e61f7744adb4f217b2b1a40ac1aacb677e07d64","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.2.tgz","fileCount":2978,"integrity":"sha512-B7rUg6qDD+Kp28jNsX4erRS+XT+e7UTGH7ec6w2jfFLT4ibqJiROAzX2RKcK4VapCJJynaObu3UH3RHIpW3SHw==","signatures":[{"sig":"MEYCIQDciFRSAGW+Fo1xnhvmhhuB1qaUP+MRcUJL7j2Lc/t9yAIhANkKcdUtAmFQJb0RRfUUZw3UUr2cuFfbD0lkzJefMgV6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101221171},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"8a61009ca9308df4b8a4ca7dac905a67020c19a6","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.2_1772752456659_0.8103594059664945","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"omniroute","version":"2.0.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"0cee91e174a78eb50f2371004b5483da068aa616","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.3.tgz","fileCount":2982,"integrity":"sha512-+zlnbrmo60Ca4WKelVmnGNXT2vJ29oezSYT/OyVrQnzE+ViEPWqYCGPae9VvXV3FD1a/hT1xd7mRfLznGTHgzg==","signatures":[{"sig":"MEUCIQCekyhQLS6ZjoC/hNB7sxJGcuv2OJH0G9yxuIiuv4AlwwIget4D0NqZ0f0BpuFLefLzVUqCXll7uXmOVIXLDGM9xOc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101849718},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"b27af38b59340a6b8d5dc50350c9974e0f99ef18","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.3_1772758894414_0.027081375044448075","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"omniroute","version":"2.0.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"fad79c0a92b18a12b1cd68cdf7bcf26c4cec977d","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.4.tgz","fileCount":3179,"integrity":"sha512-+KoZQFh5KqQ3iQrkn0tImQgeTobjDyKZgI6i8WenJjLrQUcUgGsW1FnDMfHL2bngTC/LYF9E5eVHxH6RwReGTg==","signatures":[{"sig":"MEQCIAhF4XMemoY+9EhtL9DhuYCnhTo9eh2rPPeFQw5HHN2fAiBRaq69CyPAALS7RIdXMvH2trSzNx4nQLjOKcshKezpkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":153433776},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"76800776c5429b2d224068dd4be42dfb7f8ee5e5","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.4_1772764224154_0.4765062286326296","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"omniroute","version":"2.0.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"7a469f7ca7c946606f12964a15282e637eac52bb","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.5.tgz","fileCount":3179,"integrity":"sha512-Vzm1+9YxPQnMXyvJ/LXAyvPmbvd8jEdkCen6K8kWKD2hUWACQPta9l1AhdvwEC6M/QpZtIt32vcmnyXVo9iH0A==","signatures":[{"sig":"MEYCIQDRZ+cx0b7PpjlGs4iPOTrrXJfyEew8eqbuaSaIQ0g0kgIhALWwjZIn6Gzk/eWCn3gHsV0KCMzlxAFlfRhtZjBgj9vx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110858297},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"c2fcb8f7cae857539711946208a2c33403031a85","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.5_1772834084218_0.8589191146048081","host":"s3://npm-registry-packages-npm-production"}},"2.0.6":{"name":"omniroute","version":"2.0.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"4695806ad0a146bec4276d9082c8e36f253e680d","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.6.tgz","fileCount":3179,"integrity":"sha512-yXvLsL1AiiwiH81ccjhpVdqHGOwmYz3SgRWCXPpyvHYa3zau27D3An9m1fiVvRXTloDuPgCLTp3HfRmYTomifw==","signatures":[{"sig":"MEQCICoFXkaXRcOVoGsBHjK8cCuteiyLCv9PwzL6cDRux3PFAiBcKCLtqJXpV5bxPTEWilsP9gtMNjEZFwVku0r82OJbDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110031478},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"9a9833bb57d7bbe71d75b1dd04e4133e68e2b5ed","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.6_1772858419136_0.9041932362870642","host":"s3://npm-registry-packages-npm-production"}},"2.0.7":{"name":"omniroute","version":"2.0.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"66db35bc06bc73425ac7ad3510c23434f0721b81","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.7.tgz","fileCount":3179,"integrity":"sha512-+B07P5LpC3c3OaFsNoLZbXVwrT+tkw7Kei0u7pTpNwbGRsZGmufkOFa79MON9IAc8gHcZL2twVr1BlqypE7CXQ==","signatures":[{"sig":"MEUCIDoYrUmqh/vnBpEVIh3F/9ZC3kJGYxfQpzuFugxu8F19AiEAtfwPlhxgpdtI7RJNm3sfs6fqRBvRjAqC0wTiImiY/kU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110231725},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1d903ada5126374ac44762f78f31468541ac964b","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.7_1772877693621_0.7752817807430712","host":"s3://npm-registry-packages-npm-production"}},"2.0.8":{"name":"omniroute","version":"2.0.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"61097028d1ceae3ec2d384bcb9e0dba0be80f26b","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.8.tgz","fileCount":3179,"integrity":"sha512-Tbay7JtSCdEbc0+2cw0uRDt5mC3s5u/c25dU8eUjsn0tEVx9gC7sDYdVqXKFcKFzRkh4KQXRGjjeoOMAdNiQzA==","signatures":[{"sig":"MEUCIEhP6Lbw6OxmfMAWGCnW1lMSuP2dCGC7uVG2YZJkkNhAAiEAlL09qHXMwJxmh7fDhhYKEdWtfJPozIq/VLZcYQDexec=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110491155},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"5fb16215a8e8af4de2aa80800a920c534e1b2474","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.8_1772888953724_0.8487038761336079","host":"s3://npm-registry-packages-npm-production"}},"2.0.9":{"name":"omniroute","version":"2.0.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"af513c983ac5ae5f3c4df42d2c66631d15594ccc","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.9.tgz","fileCount":3187,"integrity":"sha512-7v8+fH8dkTQr/vmNrDQAFn+XXnALRKFEMK1e2K8CYMh1VKr8HnO3AsQTzxffjA06odaFRarMBpjP0iyPWrsfJg==","signatures":[{"sig":"MEUCICLx1r3J7EiVGAZYjK9f36PXWSkIIY+z3j/NqEBnfp4rAiEApD55ePHGjXWLBHim/sCaRTB+fr3UVYLDfOep2b+WJ1s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110255694},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1a04fafb2b45e56197ddb8c98aacf91ac5bf3f24","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.9_1772890230163_0.8219662508738383","host":"s3://npm-registry-packages-npm-production"}},"2.0.10":{"name":"omniroute","version":"2.0.10","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.10","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"03ad2de5b9a7171b5b6d011cda777f5600da40ad","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.10.tgz","fileCount":3187,"integrity":"sha512-u/dmC6YSYEoiPqAjE0TtPWqyfGUVBpdmcuQ6VkvmAvb03yTd6s4JqvhkCNIW56P9QJxQO+wbX91/kRZtmjYrdQ==","signatures":[{"sig":"MEYCIQCreTwGR6HpYeKdEMbzSmQAXqDLEBuhD/NTg2g8OSUdGwIhAJKlR+S+Iqeq+CLN+PLAFio3YVrkU+tOAPJUvsq7HZz7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110081296},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"6fb96442c32792cc35010db453368a500799279a","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.10_1772892054220_0.061224584956252937","host":"s3://npm-registry-packages-npm-production"}},"2.0.11":{"name":"omniroute","version":"2.0.11","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.11","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"83af393a9cf3d8bcc5d134a627fca1ac83bfcbda","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.11.tgz","fileCount":3191,"integrity":"sha512-ZJY5jBh1Rlti1ftGmZ6CRZ2ncJdIFvgjB2wnQjfaWseA0T2ZFUwS4oIuXTPZO22/68QBSm6yPyZ884AUr0ptag==","signatures":[{"sig":"MEUCIQDdluZuIRFy2SVN5CAMTUJAAedZR1ACSmlBn7NHLMaLyQIgGtYn62u6taDWvBjxNcv7VxHmTsbyF5zYvqVQZFQQklQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109883775},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"8daa9ec0a628aae81c5b3dc7e03126a9c3bee44a","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.11_1772893580766_0.5648460703185636","host":"s3://npm-registry-packages-npm-production"}},"2.0.12":{"name":"omniroute","version":"2.0.12","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.12","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"6279bb16cae6b84f3959c75caa96c47790b16e26","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.12.tgz","fileCount":3191,"integrity":"sha512-4Qggs6tsdQ/oL5GRjV8XOHDMuLnMo4KUXrAo2j60Z4bmrJEGR0rJ2rUwb3tQYNSCsTG0NDRKsXU9G3zUPxNItg==","signatures":[{"sig":"MEUCIQDR1IQ1Ze4H9VLfgZC0zpTqpa1I1uqOB9RuKXmYe+OlJAIgKMd5X5L2K7dlL9G0zZI1eTyztA2QAq/6ZQpyddjxtcA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110633405},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"f11e7d2aecd58d2ef259cf216195cbb302dcca8c","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.12_1772895537136_0.6206348219108506","host":"s3://npm-registry-packages-npm-production"}},"2.0.13":{"name":"omniroute","version":"2.0.13","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.13","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d1140097e70470091e6597bf35f548eec43bed52","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.13.tgz","fileCount":3191,"integrity":"sha512-igUQ/G+/diBV23W/UgLUk7zxt3NpJ6e4UWm8D+9cDhFw6teBg1DjIxFs5khJmP/gh/zqYJ5EDi1Zspp6Fc/fEA==","signatures":[{"sig":"MEUCIQCjIcZh4cjuZ4Q6oXyqQynwkqrLuXckBr8SHpGaXzdduAIgFG6iVyJ/GJY7k7y3mJuiYgLmQnqTFD0kZN0WNpLVUss=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110328932},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"648dbfbda54f0f3268c336c5edc79a39e6950ea3","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.13_1772896946118_0.768242991811702","host":"s3://npm-registry-packages-npm-production"}},"2.0.14":{"name":"omniroute","version":"2.0.14","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.14","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"509466d5bced6ebdbedcadf1ee3b5a4a1ff8766f","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.14.tgz","fileCount":3191,"integrity":"sha512-yvc3voyCFWZK69NBta16MmmTL01J9bWuZQ+U0fSpTSLB1FqIjoDPGsD0pVyejuNRvJvTtcg754CwrNWNz5Cdsw==","signatures":[{"sig":"MEYCIQDesnX6vDeysFgZU6QjpN+tWZOU5sQsVrnOSwNhkM8z4wIhAMiENVl7m0n75Om65naH65oJlQgpfvAeAkM0TEUJwlX/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109457857},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"049ddff6fee19e0656dd5651276569fd8725f490","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.14_1772947396843_0.4298327067886778","host":"s3://npm-registry-packages-npm-production"}},"2.0.15":{"name":"omniroute","version":"2.0.15","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.15","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"cd775ccc2c1ff8c3e555ceb5ea619dc76dac6906","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.15.tgz","fileCount":3194,"integrity":"sha512-mFcubGNPgOrzp08iutyPF5Wzi8yjpP6IDjQIVXZfIoncZ6ePaxQippYU5nBsKRKwZ0PtJo8MXMNZtvO/azaSIA==","signatures":[{"sig":"MEQCIHYr/fjIhcW4J1I9Ux8TDtLK6GXqOW03GXYzmvurgIqrAiA0xP9aDDNiS4AmclsqgFZiKLTa8Wt+TeYUjl4OFTMpKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104803329},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"bc09eb64a66e8c8d587701f5f5f60c666e7da5a8","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.15_1773002596713_0.8462568377142452","host":"s3://npm-registry-packages-npm-production"}},"2.0.16":{"name":"omniroute","version":"2.0.16","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.16","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"7d77b2a593029fb415728bb6204196424aea11c1","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.16.tgz","fileCount":3194,"integrity":"sha512-4fJ91pPenvFj2cdxQh0s3Iv5wjj2TBs+l7KlHJTRWxXxG4uZ7Xt1ySsDe4SkP3ZanX7Ud0mYsg1a+r47KW+8ng==","signatures":[{"sig":"MEYCIQDC1vNBhG+Vqz7tFvwzae0GpdKFSadAF/pj9+oK5jm0nQIhAOZgh2nHbqrXXAnrNry8L9hrVSp0EWDcn3IQwxGIrRHm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104817258},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"db0bda28109f350cfc2f691834086c62305209e1","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.16_1773004239309_0.9795721913009416","host":"s3://npm-registry-packages-npm-production"}},"2.0.17":{"name":"omniroute","version":"2.0.17","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.17","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e08f6ac9f677dbfc47ecbfd0f001e8368df1f2e4","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.17.tgz","fileCount":3195,"integrity":"sha512-pMPbTdZaf9eDqhInd+nHVUEqwXGpbaDGdtMR4R5X1LwsN1/3df7hrfGRkYkc8tTeTGQRbdRSK/7pQcQo2IBbkw==","signatures":[{"sig":"MEYCIQCAwSi1AHG4H4L6kyeDtUvOlM+QnMqJQrgXc7wPIptK8gIhAPRiklXLwIpVlhoB4cYLBdsVxDgz3FvQ7emEjJN6RubD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104825819},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"2ba46a622b4fca78a585c8693636603b91f96bf1","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.17_1773057172844_0.08400082144942211","host":"s3://npm-registry-packages-npm-production"}},"2.0.18":{"name":"omniroute","version":"2.0.18","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.18","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d69deb95d184243f989e2db918dc2ddb80d794fc","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.18.tgz","fileCount":3196,"integrity":"sha512-aW7kQiamvPby98avozOxxgSUEVwFcFg/vaa2rIGxYSP71x/L6ABVt8DlD/r6NrrW8Y5ciXXHrjm8neo0WcCppQ==","signatures":[{"sig":"MEQCIFzwiMrM1Mu8GMbLub1cEXYltFslxd6/8zGGj7ZH/aLfAiAPW2BKoHNdzWUWOgFyFTJG4rKUFdIQ3k8GFxE8DOCs/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104810928},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"9aaebbcd2a74aa701e5bbd9497e753e7e85d8e7c","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.18_1773064761035_0.32209890597161683","host":"s3://npm-registry-packages-npm-production"}},"2.0.19":{"name":"omniroute","version":"2.0.19","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.19","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d0cbe13303dd1ebb226f12a55b7d6f243c7f4df8","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.19.tgz","fileCount":3196,"integrity":"sha512-eQtc7BDzawRsOAN0aiFUKD3/TvFTGriFsoDAtaXk1W4wQPAzasdm3LTneYPCHMo1SgsRcBVGcspOuDDNuLsK9Q==","signatures":[{"sig":"MEYCIQDp1TPkJLWG31kgYoO1In5Dnz0TJjnvE0SST8Je870k4QIhAOjD1EqtJZcf6p+QCD+wVQFBG4ozueMl2rBnOBHiQpRj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104822848},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"47445ebf5ca750a62edd3ba7305ece16a1d0064c","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.19_1773071461876_0.05812509958868439","host":"s3://npm-registry-packages-npm-production"}},"2.0.20":{"name":"omniroute","version":"2.0.20","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.0.20","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"227c7e2d1e4463a2f0a582996af2a21fcae92447","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.0.20.tgz","fileCount":3196,"integrity":"sha512-Ke0/H7fU6tr7Nzoh4/sBrNsZTkGFXsEO74zaS9DpeYj99VRkCUZsj1dCBeJEExbTER3uC4k2rVVacF0C5aDJfQ==","signatures":[{"sig":"MEUCIQDiWI6l0xdWuVEChuTgEElZWGWr9Rkdl9lzweDt6tcxMQIgSHRQUdCsYap1AuTG7MedHGN5gq3QLUXV2tCHxPvPmtU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104838203},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"743cfcbb3c645d4ef54db8342323cf35251b833d","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.0.20_1773075054934_0.9250475554250728","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"omniroute","version":"2.1.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.1.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"75c0b98c1ddc247594986aa29e5470d92d3a69e6","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.1.0.tgz","fileCount":3204,"integrity":"sha512-SPvJ5rRW1aHA08vMo9QXIvN+SqxOtumBFFvQC0adcpovYnCs/euVRnyqq7OtWmo2ip6CHKuaOnZuI15WRTnL5w==","signatures":[{"sig":"MEYCIQCpckcypdzMZI1426rmvh3LnQGRue2W+7WSoZrR2bCxBQIhAMPlVK4xRhnnRzRmIFMUz/We7UE2yY73f73qDkNoUh3A","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104879938},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"986540163683ca589d28f2241fd284974db082de","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.1.0_1773080523900_0.46947152344479726","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"omniroute","version":"2.1.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.1.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"f25fca8cf5dc855a3ffff60c89ca2e3d3b1ac43f","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.1.1.tgz","fileCount":23,"integrity":"sha512-DBjMxXSoMXJKPuEKWJpotIqtDELF0iApWHoXZaau5wcvkZjyuRNBKzOPcPpF08/hX5vSuEFVW/QJWvGVZJQ0TA==","signatures":[{"sig":"MEYCIQDuPMusmxXgUxlfWaUlPwuP64UYD1HS+i00r5X/KA2yKQIhALDo+0tC+JgYsBo8FEPMKfp50TRLW4bEmEi7rMQ6XDXV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":238263},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"ace3e47d22ea706cb458f13f89ada27813aae11f","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.1.1_1773081658399_0.6767541729665207","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"omniroute","version":"2.1.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.1.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"a25da7e731a551936da4bc9f9a29f59a5d72e8d3","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.1.2.tgz","fileCount":3175,"integrity":"sha512-aZYr1rL5X6KgLVaJnYDyNN+ZzfxpdekI6UbukDuOlnJgV9Y6pY2KB86JQD9HatDjKnRmf0lgfFZi224FR18BeQ==","signatures":[{"sig":"MEUCIQCeMcwQJzqbtGEDfxTQBzAENI++oAHQlbqIT1GRzxHrxgIgaWz6xruVS4CUSjyVgDr7H3Gqwa5hBRRxKA8iK62XeDY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102508874},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"0a59ef49969408d776e20cae2c2d195f6a56bf91","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^3.2.4","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.1.2_1773082798409_0.31240158475277946","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"omniroute","version":"2.2.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.2.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"f34a8ae0b6b5ed2c1ccaf77623b28aa61c2577ea","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.2.1.tgz","fileCount":3173,"integrity":"sha512-EggRZv/fFvWymQKy0EAx9qdHj60Wbj0iI7dw6INEWuGywyObj8PkYa34/OSw/tBZU840c2YkWOTI9skxMCxsPg==","signatures":[{"sig":"MEQCIDLDz1N5R6rrHpwdzVXQ7kL9qQMdVgXYav82Hk4AJR9pAiAGrrxoY5I7zGMLqzbPVzBBe47zI+hueph76D90IpWMPg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100467205},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"82a621ec087c14ebdecb21ec77ec953c237451c4","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"^0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.2.1_1773147256242_0.6454033532735564","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"omniroute","version":"2.2.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.2.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"8a56c0b047dc9e6cfc413494e4c5e7b2d8eced98","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.2.2.tgz","fileCount":3173,"integrity":"sha512-ijOE9Xd1o5cGYDWjMagZFJGcqb9tDihGBqCTLYOYdkLPRHZaBsmJ5hxmHzbZfm7UkzhGE35+MTDAhorMSTbThw==","signatures":[{"sig":"MEUCIQDrmzX7CYpfzoPWXjfTvMKjgmSf+RHy9b+0Eb1QZPgeHwIgcD6TZvYinK+MpGVi2fwL2sUZR6OqQB0zlXj8IFNi9AU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100467836},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"d9d0640f6e91f093d4570e424eaa4e531921924d","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"^0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.2.2_1773151463591_0.1350263182916258","host":"s3://npm-registry-packages-npm-production"}},"2.2.3":{"name":"omniroute","version":"2.2.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.2.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"0ee80664288199ef92156d8994403596ab13931f","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.2.3.tgz","fileCount":3173,"integrity":"sha512-i/HyUpMg27LyFwOHPscVaqOtLrZtzvlSDybvSfdqMTfaCwaKhl9h2s36nUnFvq/zILYDx5bYmOpQzwvl/NJ79w==","signatures":[{"sig":"MEUCIEK5srJYmEvjGA5RyYg86eA7fxHL9YvAgllD+ExRC1neAiEAyxdP0FQee+jzeEXVs/IiA/0F1H23R6AxNrg4vPRbaBk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100468012},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"ac680222338d354f421e6592c8e17927cdabdd30","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"^0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.2.3_1773158259987_0.7153653885066131","host":"s3://npm-registry-packages-npm-production"}},"2.2.4":{"name":"omniroute","version":"2.2.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.2.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"71b5bafa4103ae53be3476f0a70ebf6755f95fdb","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.2.4.tgz","fileCount":3173,"integrity":"sha512-F31tIj1upUP5n2vOjdl7z2ipW3C59FEapfLWAqpICLG1qhzuag1RaxQcfw8W5VELJKtnF+H51H9M3jQusZccXg==","signatures":[{"sig":"MEUCIFfFCcF3TWRagYi9Hjyw3OFLzZkzukXUpeq07nV090riAiEAiHZxmyK1Ul2gu9CAxgcov/AlL4VkIJEvWHcHDgBAj/o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100468009},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"57636090089000f5131da204e861e4f8a6750af6","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"^0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.2.4_1773164448058_0.6279663408096399","host":"s3://npm-registry-packages-npm-production"}},"2.2.5":{"name":"omniroute","version":"2.2.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.2.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e6e521a726c10a816d7d910ff35850a2da936ea8","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.2.5.tgz","fileCount":3173,"integrity":"sha512-kHHqFjzjGSCz74yIZJ6EMckmv4zvJZ3ZhNAVSLFvv6amH7GpWWGQAa5Cea1xD/ScGbUZiTZKW3Kd3wgav8OAYA==","signatures":[{"sig":"MEYCIQC9nC0tQTgvu+VSpxCVq/p4FzaHCfxhTHidS/M9ila0OwIhAMOVeJTKXQ9fB3EtCJUoIpI9y8mGhMm5+sNh6KW95zEz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100534095},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"af46f87eed86bd4aa42cf803c7a0834462d75ca1","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"^0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.2.5_1773166720236_0.0637436980082513","host":"s3://npm-registry-packages-npm-production"}},"2.2.6":{"name":"omniroute","version":"2.2.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.2.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"b3c5aa166f5057c2fe9ddf0657af3e7723e9de66","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.2.6.tgz","fileCount":3173,"integrity":"sha512-A8HmpL5yHXpBF3IGp0Rj2lddYigu3BNVnPhdmWd7MnyvQ8EnlrmeYSCX+enr5j+RO5bqIwFEmTclduD9mAzXTg==","signatures":[{"sig":"MEYCIQD+SyYLxARwlZt1vyYazHkweoH+wpbqL7MGGx3jdrXMFgIhAMSJVizS9QPR9YWuoh6NAYFRDChXGExzwZIHSKWMOHWi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100534067},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"902c7244d159a8d7ba30922c1ac00e480eae8774","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"^0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.2.6_1773170748660_0.9468922484050557","host":"s3://npm-registry-packages-npm-production"}},"2.2.7":{"name":"omniroute","version":"2.2.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.2.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"caee9e831a2cc8c9af7e85ba7920bc27b6854d40","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.2.7.tgz","fileCount":3173,"integrity":"sha512-MIXLGR3zCABTsEbufY7qbCKgb0lXz6BAQ9FSrQSclxwpEQcdaIeUvI4RXHLBuOMB7pzElvAHjaXKvDpagN9g/Q==","signatures":[{"sig":"MEUCIHTve1UHfmMmi93dYI3fyWjzXreM3my78wbaZ0ny+6eRAiEA5ILqY8JrZkYXpQXxp4Sy1GxbyZoMCEctG6OzN2IYrXc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100534404},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"542eb0e7195c814c0ca59eddec6a392fae11036c","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"^0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.2.7_1773196662463_0.17326652153790745","host":"s3://npm-registry-packages-npm-production"}},"2.2.8":{"name":"omniroute","version":"2.2.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.2.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"2ae8965d066aea37f62d2d8b0c61cecee6c82d37","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.2.8.tgz","fileCount":3173,"integrity":"sha512-6iuw1+DRvdxVQuS2QLRbR5T9SIKA0eoHPvmX7yaNhwLQ4+IGw5FFnudYSpa/6IN8bnQnW66LXxurtXLZ3T/XeA==","signatures":[{"sig":"MEUCIQCV2dKKJnNDy+vuz0gOSDw4rQfSRI6OgdN2wR0JQh0NRgIgLWZxWKLNorlqN8wLIh7x/21erY0pLdlRFNG04yrUGLw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100534764},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"8df24c855bd7ba393bbc5f456e60bd85bad7709e","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"^0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.2.8_1773199487545_0.1651089503623555","host":"s3://npm-registry-packages-npm-production"}},"2.2.9":{"name":"omniroute","version":"2.2.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.2.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"0dff1ef528a8ba290a3a24e1af2e1c5944f33eae","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.2.9.tgz","fileCount":3173,"integrity":"sha512-b03TIi3oO+Df6L+0gVubzmdY5lz7VLhWgNt1yVbvUSUCEvuOek+Ole+1Ms8Of+ugCDH+yTeOfwYUcjJHqrKRGw==","signatures":[{"sig":"MEUCIQCBDro2bMC3+GhutNsQsNC4G9O8Gk+5ZgOI3fcPLGuyFAIgXLWS4yfO0f+i3izVLfSOKTHLHn31VhcpGfXZBxNM6ZU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100542205},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"c7ae9c30c2c8f8deb4dd0e27fa1b8d8bb9e07624","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.2.9_1773229803863_0.4033852590270457","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"omniroute","version":"2.3.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"eac33b389af8b2684347e8de8a82c7979bc12e70","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.0.tgz","fileCount":3175,"integrity":"sha512-QhjknEW80kxCcDv0lR3zio1UJveR7i9IWC5Dj1y8eaMYBlSqj2Zdgeo7Rm+VTjNwGIkdrATueM0HFdZph64pYw==","signatures":[{"sig":"MEUCIDKYHld5D4RVI5Nv5Zy7quuuIvPFKa0V/bHUjIY2JN34AiEAy9JdF50CZ3yb1Lg8tkI99Nx+uco3zUTuMqcTbUeGUtg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100547293},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"e27a2a0d55bbe8c732660eadf906075597cfb068","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.0_1773244053732_0.5532841528731409","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"omniroute","version":"2.3.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d93780db0c16f0353fdf9467b19161529f2ef2a2","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.1.tgz","fileCount":3175,"integrity":"sha512-UiN4/E0k8K1309Z6abw2T3wp3WMBiLgfCJhCRNargumSa/+Gj/CHa0iDcv1EWPcr3Mz3b7TPBvQ3RbGyzk/9TQ==","signatures":[{"sig":"MEQCIEDeTJ0UGl9Jh4XKigY6T4qKFmRSH6WHZhl59KSLZ/RiAiAKojz6nF2zbU3R+msPWVDhoOfOjDe4EAvChCJZ+McD5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100547296},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"a3ad7c6c2e530e922590534d4aa9d5d8b6c91fe4","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.1_1773273194164_0.2664577526747294","host":"s3://npm-registry-packages-npm-production"}},"2.3.2":{"name":"omniroute","version":"2.3.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"92377770df475e2dd0bce4ec6d52c4a90d27a8ce","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.2.tgz","fileCount":3176,"integrity":"sha512-v7eqhDG1JT1WG2nU48kd8Dv7QbvjxDw7Pe8bFw8kkurFoLSuHcYDXGEP8KhD6U98yWYEtzF0GNmv9pJRLlJvOQ==","signatures":[{"sig":"MEUCIAh7HToAF6dN3radQi+obTy+Vad/OqPyYmXU1lrj+pdpAiEA5jLTBDG89sr26WVOGb6BBi7EP7hQm7K+UPa8kwJE3x0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100557919},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1e9a9adbade8b2433c248f1940310c03a839283a","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.2_1773309848099_0.17862426365476058","host":"s3://npm-registry-packages-npm-production"}},"2.3.3":{"name":"omniroute","version":"2.3.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d5ea3e3f059088e5519457e316ba4ad9555013b5","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.3.tgz","fileCount":3176,"integrity":"sha512-iwqS+pdXfA/M+T0wfpeSsL0C9w+BCsIg16+VrvADJaUEpKUEKglJbk0tSUiEF66U8U4yvkcF1uUwFHgMp7bV4Q==","signatures":[{"sig":"MEUCIDUtx652hQIax/HKUzHMF4FYHkB6p63arGw6ZDyOPI4vAiEApTPM8N7mBLYeyjs9VVsojOeHJ7dB+MjkP3ZXp4yeWiM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100558677},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"845787ab7f643a1e873e185b6cc4d8a59f3ad4ff","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.3_1773320424415_0.1450497519012981","host":"s3://npm-registry-packages-npm-production"}},"2.3.4":{"name":"omniroute","version":"2.3.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"58782e24f9b5f0e8d27b5075d79a363fea09c728","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.4.tgz","fileCount":3183,"integrity":"sha512-fkn+AGauElcfo8qAtRH2yhGYQncLVL3p1pDEIyAW9/yMt0/lrS/PAdGR3vBo6mOTz7BwexDv7339khO/p3uALw==","signatures":[{"sig":"MEQCIEzcmTwhXAoHVph1x3oiYwYMsrhHyLYC763a/sURaf52AiAF6x+/7XhPrqYUzYMXD2iPO7nC3RtcvPhV2ruUE9vASg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100576446},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"8956ffef738ea8bd4a254e8adf2e7c7982563ea5","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.4_1773322344200_0.8628244145380326","host":"s3://npm-registry-packages-npm-production"}},"2.3.6":{"name":"omniroute","version":"2.3.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"ed9c4937c225ec2d15018c89b1ee0485ff04426d","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.6.tgz","fileCount":3183,"integrity":"sha512-jtYl3lbi5Olns4HcC07M0TtjDS3CduSxAoCr42VBmanNCSHSEOUDZ2pV27jt6n5ItGdvoSbZQruziRntiMsRxw==","signatures":[{"sig":"MEUCIQDsDNI85QfOK8Ia6vHZGHz6MF5ku4D27pTgjf+lWSHzeAIgBoC1vXZXYeCSXCR+QfTXO0PaelXiUzozxb3V0B6HdSc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100628638},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"87ffe41d8c02dd41c9a2154a9db5fd06a8de9d3d","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.6_1773324903416_0.6291721426268493","host":"s3://npm-registry-packages-npm-production"}},"2.3.7":{"name":"omniroute","version":"2.3.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"881a105bb4a3d81591f3223e06df890767662a58","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.7.tgz","fileCount":3185,"integrity":"sha512-APIJJyq2QFfpph6YmPIOWqfosQ/BfnGAJWCgFRtWy9G2BjjywMsZwFxPY8C3yS4dvYCcaN6x5RLPGGV5FYPa6Q==","signatures":[{"sig":"MEYCIQCVDeYd6Z9z2mLahpfX8xJ7pY/jDxnow8/euTqT0x9APgIhAIv/LaNN2ZWDvK2SLaoUAsUlhbVh5Qeg0/ZUjbog5VQU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102735192},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"69e9bd81e9504d8c270353ee6599ceaa9184743c","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.7_1773329434530_0.7116253551300689","host":"s3://npm-registry-packages-npm-production"}},"2.3.8":{"name":"omniroute","version":"2.3.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"9b5374b9646c5612a9ca241f5b9a9bcdcc89f0a8","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.8.tgz","fileCount":3185,"integrity":"sha512-l8zpmqlL0a/Z8xKZjMnzaGo7YdZS4CunQuzicb28yvZ7uboPcK/MnEB9DqO7+TRPaW6ZBaPrg5HmQihr9HwKcA==","signatures":[{"sig":"MEQCIB1wqKZacVXUJFufXfQFm6QJ3pm73abXz7Ar5bZZziFFAiAIAMV5QirxGmL+GpWyFGCLo+5VHlD5BXKgu1ZIrzluSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102735860},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"763fdf313539576302e08c9a69ea4e1827629cc2","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.8_1773330468081_0.12785625591962058","host":"s3://npm-registry-packages-npm-production"}},"2.3.9":{"name":"omniroute","version":"2.3.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"03666f20c0eab0434929c11131d5445c67111d8c","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.9.tgz","fileCount":3189,"integrity":"sha512-ylCFo16sBrf/cq53QqQfhKAbr8Iq+rugMlN4jbrbHj277cnFMn/8mMq47/dGcTyjlUSFXhyOmyFvbOSug+BkcQ==","signatures":[{"sig":"MEUCICm17nNeJijQakZBEA180d4uF7KZNNshyIn37rssPjF9AiEAkETKZR1e+cUtuRzG7ewmz/QSzHjlcSGHcJeiV0gLmek=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102804302},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1d7bc5fed736b93fe48d7dcf4cd694a23bbcdbae","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.9_1773331349862_0.807718100363324","host":"s3://npm-registry-packages-npm-production"}},"2.3.10":{"name":"omniroute","version":"2.3.10","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.10","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"b587c59603bd2746da639c2e914cfa07cc2bfece","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.10.tgz","fileCount":3189,"integrity":"sha512-EKu8S1SM6ExCkRg9twTeJGqEdxL7EhJ7PqetZPHA7kejYMhT17T7QpS0yGraCSISIB1k4fLI08gyN2H99sztEQ==","signatures":[{"sig":"MEYCIQCApn9YbxDHi9i5017eSkyGZ9EGHE3T/8fnczjT+yh8rAIhAP6rLlr7BP7vLKlJCRQsw5pKfQpa2Zz6rQMm5rimAxJz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102804310},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1c10cfe4bccb5f79c804c85cc170b50e60b155f1","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.10_1773334391845_0.26259437780821004","host":"s3://npm-registry-packages-npm-production"}},"2.3.12":{"name":"omniroute","version":"2.3.12","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.12","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d7a3d9bf08d0d9532e8e0bb731858ef5b07dfbdc","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.12.tgz","fileCount":3189,"integrity":"sha512-MArPRTxZ7ljlhcHq/lh90GEkk6aLHYGZS4jDjDKYJx7L3KrRuo7Lih/0VB5YCZFejDKQl3WtRnBodsmiuORdBw==","signatures":[{"sig":"MEUCIQCV1WDnuSm+ZaCG35TjuBMkqUfQwi1BwbkOmYI+ZIcsBAIgWszk3xpPZLJ20+bd7w9X5gqQueR6ulLeVcY1w+tjbUg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102806323},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"8dad2d32b68ae5e3a90044a192f5aca6a1e5113f","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"@swc/helpers":"0.5.19"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.12_1773344895492_0.8351488893465453","host":"s3://npm-registry-packages-npm-production"}},"2.3.13":{"name":"omniroute","version":"2.3.13","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.13","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"14c23ae7b449e9511ceec880200d549209ec571c","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.13.tgz","fileCount":3619,"integrity":"sha512-MdZjbxPEpBrlwGnxN7Qt78eDy2kDL89mNWbXTkZs2Zcqfp9gI4lba5h03ao9PW45z5GOtCXvPwP7sdF4wDZUew==","signatures":[{"sig":"MEYCIQCYqTeAgZiwJpm8dfdfcHWqvUBpwb/id0xEmkBZ/kBCBgIhAPcLCFP8+rxBJvA7f3CrLnLsbS13T9J/ofH2EBiIc7RF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103054672},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"f6c0744d677c52882524af0bc919a396cb87fe42","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.13_1773350660418_0.16784752308962148","host":"s3://npm-registry-packages-npm-production"}},"2.3.14":{"name":"omniroute","version":"2.3.14","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.14","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"45d6bfd6bbc6f6e1e84f271cdce14c128ad1b4da","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.14.tgz","fileCount":3624,"integrity":"sha512-ntc5q8s/dP3XjU72cgqE/nnPTsRiUkl7bXQZuvBa1/21n63TbwT73MQodu9AKe/TzHc1mLFseWgUnaSGWahVxA==","signatures":[{"sig":"MEUCIAlB6CPAbUyXu9ADkgn9s2XgLKFT0HPX77x7s1j/6I9KAiEAydSm/QwDaRa+G7uOnJ+fJjNX6tGW5MqwLlmjVHn1nvM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103087436},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"b8fec94b0ded4042e033915e28bd0d159c930d60","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.14_1773408288205_0.24997033944880864","host":"s3://npm-registry-packages-npm-production"}},"2.3.15":{"name":"omniroute","version":"2.3.15","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.15","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"44bbe121ace9bf4eec1d55680ab7fa448eb940ae","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.15.tgz","fileCount":3624,"integrity":"sha512-GIaxpV/loMjkTc5RC7v7CxDloLCCq/5tk+4nqI1fxBCuKazrRQ4E56FnUIbuFr4UtVVEuIHdVm/M999omgLdBA==","signatures":[{"sig":"MEYCIQD86LVrm98FZNdDF9nOUrJUJN0KQSDWCepPzLOzeOzqBQIhANPwmpWZVbHacO7L2hwkI+cvxrTRs3DOuqpqWCIMQ+Ar","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103110158},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1e57ae5923ddd7510e395585f760633860e224df","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.15_1773409582760_0.3535062752956728","host":"s3://npm-registry-packages-npm-production"}},"2.3.16":{"name":"omniroute","version":"2.3.16","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.16","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"1fd050984bd2a6a9fca35b053b0266862ed2c322","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.16.tgz","fileCount":3624,"integrity":"sha512-ZcxYDEpvJ5dd/24AmlAIK+kX7ssjKK/35U3RRpvldmyt/+mK9DdUfr9RKuof9O2vnuwPqzlU/FmcBN5WCgtAeg==","signatures":[{"sig":"MEYCIQCpW+/8gWclogEYRHEfCIvfghGwmtPmQNUyJPKJkGnH6QIhAOPX3hwem6LXoHrhVTTxXfQ0FTEcMLkQixXLbfBREB1b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103113615},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"4e4532c05701fa404308202991ad2ae753c5a0c6","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.16_1773410903113_0.7150335262459107","host":"s3://npm-registry-packages-npm-production"}},"2.3.17":{"name":"omniroute","version":"2.3.17","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.3.17","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"313c8f310adbaebaefe68ce129d847b1108506f2","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.3.17.tgz","fileCount":3625,"integrity":"sha512-Yvz0iEuzHPmLq/8BD0Lm/yEQwKBSW5JuhetP5tf8EMsKvYxkMKJf7TUAJu3F6NeHENZVIK0MXZq8W+97SHs4hg==","signatures":[{"sig":"MEUCIQCPm2suGGW83PjU/gpxhZa8WvQ3srkoucbKSPQbE6cwuQIgCOgh53Z6WAyM6/9YLJtsFYMlCXtfrr0NeaKbxQMIGwk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103102594},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1b6c502c7fbec7febec9db71cbd751d5257a7f32","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.3.17_1773411506015_0.5575821538568289","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"omniroute","version":"2.4.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.4.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"80c857a992080d79fecef29837e948911ac95d3a","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.4.0.tgz","fileCount":3625,"integrity":"sha512-T3/5sVVuzAWiDIWepe6yxYTcYVi4v5GhE0C+Gn1sYw5A3mHhvfZ6JYvlgp6EcjtSvfy6reh9MwCesm0KGiIwFg==","signatures":[{"sig":"MEUCIQCsrJhY82kLGLDhLQ2gJrGscgyAZkPETN9hSbav5XJ6gQIgMN6xFPbs7bkTWviicbXE7ZtF2C8bvCSYN+FsAWj4U2A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103102589},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1e93ee5c342130dc0c6f51eac773c6c05367ff19","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.4.0_1773411941739_0.4408126630281155","host":"s3://npm-registry-packages-npm-production"}},"2.4.1":{"name":"omniroute","version":"2.4.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.4.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"aaa4cfb93a096c352972a692ff17712974a374ec","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.4.1.tgz","fileCount":3625,"integrity":"sha512-XiIJGmtdGTLx0C/vd+V/3k50eSX5pqS0Wv5Q3cgmVkxtnx+5G9fMe7GezBdVPNJ4XoGshv6+Ojm8pLvYsWRtvA==","signatures":[{"sig":"MEYCIQCr20/0qlS8ge0LDpAja4kv3mjEp2PtPYY8Jc95/+7ofAIhAMPl0cbs7kr6CB2C1r+/kp9xMVMrJBcTEPxkGPwousnv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103104734},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"d976abb5e02f0069c9c3c8564229d1934ab723b4","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.4.1_1773413074130_0.09655006659619958","host":"s3://npm-registry-packages-npm-production"}},"2.4.2":{"name":"omniroute","version":"2.4.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.4.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"44f645c507a743af800ba7ab3b90eb1b92f45f0c","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.4.2.tgz","fileCount":3634,"integrity":"sha512-V3SXWtucNzmeNv2cUk/TrJiexqmo0HSW7dGp9YuOhOA2lQFWH8Td3WUZ0+uqTRUwes997eLJ6tdbRTpNKusMow==","signatures":[{"sig":"MEUCIQDaczf5bV5q/OxLKWh+eXEi/Nn9iSqtZYPeE2xA+8VYYgIgUbX33CCHWOa7H1yQhjhLHx5Eu3Dwbp2bIiTY/sMhvs4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101216119},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"b0f5f92f1a19a9cb1f939cf06eb69db9d96e59bc","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.4.2_1773497306939_0.6602262066491027","host":"s3://npm-registry-packages-npm-production"}},"2.4.3":{"name":"omniroute","version":"2.4.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.4.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"f36475bd85efe2e3c133ece35ecf3bd0fd2770be","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.4.3.tgz","fileCount":3636,"integrity":"sha512-ydYZZhm9zJMDYkfuOsXXm08gK6/sMRZ7eqyiLv0ILmThcA4yyTw06/ORIyGJYD4jXMiio/EYRd7cT2ftIt+00g==","signatures":[{"sig":"MEYCIQCgXhPGYqgfwzajQvmy1O5hvdj6P1WTQpr3AjK37fCyuwIhAIA6Hdh7NOG/gBKKQnj37nyOijCf6OhsLsNYRngQm939","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103327212},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"75a6d850fce8bd2a4ad95d4ba9269892afec023a","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.4.3_1773503693561_0.05344956649765131","host":"s3://npm-registry-packages-npm-production"}},"2.4.4":{"name":"omniroute","version":"2.4.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.4.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"3a9d7cfb98651f781a71727b0080fe450ee125e2","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.4.4.tgz","fileCount":3636,"integrity":"sha512-iDxOWdAawug+IEzZiPzXjHl1pIMDFLQAa1UMUVn6ql7QEt8Y3lMrHzUGkbqFBARxnW8BzSnpzFOoQ5A+oy1zwA==","signatures":[{"sig":"MEYCIQCdWyuy7smLyqYR2mn+NYptjZ8LoQE6L8S+OvzT09K1UQIhAO0HMB904BlIpkeAg4RKO4g5SSnpcjqSmUeoLZMyHGtM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103331319},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1b354be8273f4c7bcc8eb91d9a7a743743cd6c03","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.4.4_1773511840200_0.5622448744895554","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"omniroute","version":"2.5.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.5.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"5908cd55c67479f717883973ca39e7c228f21db4","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.5.0.tgz","fileCount":3642,"integrity":"sha512-reW+mjinc0MawhN02ObJVAdAhN/LLddR57nrXpEhbFhmtjTfZwlP6azUi4nWTkfGrhVPcHdCtqH8wh9PcGHMtA==","signatures":[{"sig":"MEYCIQDOrpxaUT96g2Q0TndNObqPCFhXqXMm432i1rTx0PAjDwIhALB4onqL8BOQgHDQDhhLzUh3VXJRVjQtc4IwW+NxOQkK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103503238},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"da14390fe0f86ccbecaf2266963a2a26a8efae55","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.5.0_1773513419627_0.7795305539883974","host":"s3://npm-registry-packages-npm-production"}},"2.5.1":{"name":"omniroute","version":"2.5.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.5.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d4033e7bb8b0204244f235e41cb253e58b439bc2","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.5.1.tgz","fileCount":3647,"integrity":"sha512-miVp8megNzXZ0G0Ztui4iKKlaKNkZbkzcfXRf4imeKi5tLdIjFE0DFD9t9vfr2FP7ONCavv3FZg8ZFifMX4YVQ==","signatures":[{"sig":"MEUCIFLU+N+CaW/HFhI4l09fNmLJI9PzlgzUA3yo+1+F75jZAiEAv3HLakErfWRdU63GlAq/HxZodeBhTqLilPembLdrKAE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101488785},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"759ac0df3df238e0cb2e5d546d8e5c8619b5304e","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.5.1_1773514754170_0.6417140604303795","host":"s3://npm-registry-packages-npm-production"}},"2.5.2":{"name":"omniroute","version":"2.5.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.5.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"9031b6c139e9bf9911f5cfe8e203464252b9a974","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.5.2.tgz","fileCount":3649,"integrity":"sha512-hWz9sOr4FOVFBQE/PogA92qY4/+qY9CoOq7A5OvJL1IOpg67/TjKdl23mUtZdAWPSQjZ91lU0bFaP2a9zA2BSQ==","signatures":[{"sig":"MEYCIQDSA5HRLvSg2Jgc0olJSkuWgkstId/IDjInXhFE44aaQgIhAI/VADZbyRmGS6kOoZo6blYE67z1Bw1NO/d4g5fnGZNo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103595461},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"245243c7e79c62b2a6f71601e14b8ec3cee848b5","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.5.2_1773515170333_0.5384679087326156","host":"s3://npm-registry-packages-npm-production"}},"2.5.3":{"name":"omniroute","version":"2.5.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.5.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"5d3ddf6a934434f641c910d6f20446c48be0b607","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.5.3.tgz","fileCount":3649,"integrity":"sha512-OJcmhkFahzsFHNu/bpFqwKvAnsumNIVwcdEAcJ2Fp4JuVcjDZRh9fogsbFp+VGGHaYg3G29zRKy1lKctxWuh1w==","signatures":[{"sig":"MEUCIQCUddY/7YEZob/tFO4Yv7OtCWZThAe2/WTdIfiDJkmYuQIgI/oCO6W1AeZ1txXaw2q7gDU5shXly2EfqlfP15CkG/Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103596583},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"36856b18db56977ef7fb97553462c848b3f2ca3b","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.5.3_1773529145164_0.4867775030136967","host":"s3://npm-registry-packages-npm-production"}},"2.5.4":{"name":"omniroute","version":"2.5.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.5.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"962908d93d121225ac7f8baa092b4eb7242cc2ff","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.5.4.tgz","fileCount":3647,"integrity":"sha512-wXHzLRM/KNLdtREtMzn2Y/Raz6TOQ2WhuBLO/WqKdftemT7lRBlNC5tnZ1DbzIQ0oIb5yDTq2jbhKoT1elK5cg==","signatures":[{"sig":"MEYCIQCAbwesWDWBZthd38iSXzCOVT8/lzER74KOU7EvPN/r0QIhAMGItjCaScRs8l+mTNL3jy5tDma9/JPgvdEs2/QaDH6n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101490428},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"4b7a9233e78df745406156d1e7eaf05de99d5d20","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.5.4_1773548285895_0.5421579421682938","host":"s3://npm-registry-packages-npm-production"}},"2.5.5":{"name":"omniroute","version":"2.5.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.5.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"22e7fff00361da7b85aed6b899fbdeca6fec1927","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.5.5.tgz","fileCount":3647,"integrity":"sha512-o0NwCnbiG8kV97tOuckyCTe6SlIX98rZiRJeoadaqvAZX1LcElP421SbXG4bAlLKWRGqoelKxVASQsWy7bHG+A==","signatures":[{"sig":"MEYCIQCIyvEp+bVzcIhBEGGaJchHWMtR16S5r6nkg7J+cMsrsgIhAKOKc2duTXwD6/TXpI2c0auKiN38ugPF1uiTmuZ6yvqs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101498272},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"8e06dc5acee27da5977ba85da690be123e81e2ee","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.5.5_1773589230294_0.23333609729014815","host":"s3://npm-registry-packages-npm-production"}},"2.5.6":{"name":"omniroute","version":"2.5.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.5.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"7a03559d919fc0571c38d7af9c8903d7f902d19a","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.5.6.tgz","fileCount":3649,"integrity":"sha512-jjJDvQgz2u+9utUKWhtD0XXTnyYp+gOkSUgQg6Uam5BZ1Ic4TruobEgeOQahNAFrQFixABmdIv4x3q7mvGyD5A==","signatures":[{"sig":"MEQCIFx95hMsBmhBpbfp3ViIOjU4SZ+bDqBDWzgGViO7cZY8AiBMa88IKcMXVg1+neLlXkLB0dqnSyV2Hie0CKDmMonZVg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103621834},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"441534853b1ed904c6609ba1a842b37ad4d352d5","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build --webpack","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.5.6_1773591330800_0.5161052360660081","host":"s3://npm-registry-packages-npm-production"}},"2.5.7":{"name":"omniroute","version":"2.5.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.5.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"ba5bf6a807c40a7eec954d108aba9c6be0a68364","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.5.7.tgz","fileCount":25,"integrity":"sha512-HvUsCjsHCd1H8zagsjIQ9SxolP8Ara8buEoWFG1uy3MKi3idew5cNwKzS7qryYsDwBhhCpe5HsYwMa2tnL5tAw==","signatures":[{"sig":"MEYCIQD9dGHK5yoBSuVYnLlVEt7VMxjvSjkmnMqA5QlTFdi6DwIhAKcgM3v1OzvHkCqbYmO4SCtk0CG59GKtL9RiwicIRwRf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":262842},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"ccf9d9214aa4ee870b725e3a67a826065e1d0e01","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.5.7_1773594077201_0.1177820996734611","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"omniroute","version":"2.6.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.6.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"5a109ce161122a0522ed4ad837265c0a0757917f","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.6.0.tgz","fileCount":5043,"integrity":"sha512-B50N4oQP43Y2SgxxgUIThm+HHz1WuleIN8MVUeXxcU9FbIR/n8FAsTx3W9mT16HnrJJQWFoCEqKtwBsL1bFITw==","signatures":[{"sig":"MEUCIFm9YqY/4XTqm2hIQNMBcAPstPojca/1g70MKRaO84cjAiEAxGJ1f+Dh2NZ5DvNaBgPY+bgJpkcRibS2HB7y33n9L1o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126268293},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"d0fb4576a8e37ac4e6f73131539b3d79b8c4762b","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.6.0_1773617058165_0.04671028176743919","host":"s3://npm-registry-packages-npm-production"}},"2.6.1":{"name":"omniroute","version":"2.6.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.6.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"64734c358bf14c1f3d63535d9a14ea8cdf2976c8","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.6.1.tgz","fileCount":4667,"integrity":"sha512-N7G26QZqqvb7lp2gUoEad67Og0nQHCxgyCbPL9XQoEWrNpWVsVLY+b79uvTvMTqx8k+9WX+sd9vSnV2IsY30jA==","signatures":[{"sig":"MEUCIAUPrmhxOf01dAyqyAL5iUndxMoynrB61xewkhv4J0A+AiEA0TBbmUOd7KY0ugBiMgG30fnKPaGwfjD0eCwQXysiNDU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135046695},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"74d3374d5cd270b99ff72871f6f736c1c30d9954","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.6.1_1773622768878_0.5673880755490295","host":"s3://npm-registry-packages-npm-production"}},"2.6.2":{"name":"omniroute","version":"2.6.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.6.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"a7191c608b0f425810d78d3cc0c01dd7ed03bc13","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.6.2.tgz","fileCount":4667,"integrity":"sha512-mZmWLcfK20SMBEZt2OE2JcxdEbtF0S8OxthDsFxGG786s3stm36lg/CkAcRxnCK/7n1LMSIFvfASWTmOPzjlMA==","signatures":[{"sig":"MEUCIQDq+qKOBAbX9/zmHs0FMt4uaW6Gtg9S17XiRF3ZDhzg2AIgG697cg3esQsVE1PUuUenhn/aEGB6nYi87/kwNzJr3V4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135046695},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"5d7772ecb07746ac555f1ad16d8711ef4e26cbb8","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^7.0.6","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.6.2_1773665806076_0.3708030511441329","host":"s3://npm-registry-packages-npm-production"}},"2.6.6":{"name":"omniroute","version":"2.6.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.6.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"2a23ee27ea124fc04c72c5edd29d10e673ce0cad","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.6.6.tgz","fileCount":5041,"integrity":"sha512-WzmiNLLyMPNvWeecEPkB2MLR0lUJZurJb6JVGYLPwIl7l1p6666UREllCncK/xpzUJwn9CKTcvC5EtKQedqxdA==","signatures":[{"sig":"MEQCIE67eCiA2ltAllRhMONIlRdgt929oqx/7WXn3JwokuPYAiBP7ZL3yy+cJviw0zYylEhcfJEsTmAr14eu/Q9nMrNG0w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126453162},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"a9f69711c618621ecbdcf4e63ac14f65d7f10978","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.6.6_1773733374309_0.6445548268448924","host":"s3://npm-registry-packages-npm-production"}},"2.6.9":{"name":"omniroute","version":"2.6.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.6.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"fd1e2b42ca01de81db6ca064c4c4d832ac99aed4","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.6.9.tgz","fileCount":5177,"integrity":"sha512-tordyCMXFqWrCCER9jUPZUE5X8b7AP1Nw7U+ncl9xEqA9C9lwOQ6ICH/ESxcEU8XQAAv+6FHbLGp4EnjL8LA+Q==","signatures":[{"sig":"MEUCIEy0RFC06GYiUnZDMQBzvjZ+c8a+4+cTjwzI7Vuo1FDFAiEAq0qG/kwrptD6QXHGebzHnBm2+mhR7YifNyh42wgo9u8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128078189},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"838f1d645c6723736e57feeceb585202abdeaf1a","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.6.9_1773749590495_0.9613312458058678","host":"s3://npm-registry-packages-npm-production"}},"2.6.10":{"name":"omniroute","version":"2.6.10","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.6.10","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"23f07fdf30f3a2c55b1d1c5cf566f04d1c554d7e","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.6.10.tgz","fileCount":5177,"integrity":"sha512-rB+D7/mkt9m3Pc/DIHxU+H4P2jdLnQpjzjQoGMl6uMOJksyHUJ6kjLlQbrBabM4AXlHkDnPHRiKjvEgRUe15Ug==","signatures":[{"sig":"MEUCIB2luenFVzkGk08u68gJhhtVDlOBhVcPIuIcO6JbcXxlAiEAhsW03+0kv6ck/oIw+YEZfmjtJ3ByI16rXNJPUP7S3bQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128083442},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"f02c5b5c694fa4a67ff3fc1f7655faf364cb57f8","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.6.10_1773753240093_0.9625174576319191","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"omniroute","version":"2.7.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.7.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"ec94b01a3ad335b3eacec5e1729ea9d2fb43a6b9","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.7.0.tgz","fileCount":6303,"integrity":"sha512-f7oqGGPwnM3I7paadHGIBpGNMg4IL7qISsTs++91LzxLuLbtR0tFaFdcoRQI4dPWazPuHhvAvkOZclL530JMmg==","signatures":[{"sig":"MEUCIQDffmZ6otEvOdft2gKz2ZH5WbZs3jelgxtPpELonb189gIgIigDb/uCOY6HHkf5dSiokiJys274x1QYP/2uB0nXIS4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":188021620},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"e1da1817404690c2be89fae227089ece07e42431","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.11.1","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.7.0_1773770265778_0.3034538461759888","host":"s3://npm-registry-packages-npm-production"}},"2.7.1":{"name":"omniroute","version":"2.7.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.7.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d4089f9289d50c2c8472db8bbb1a88ffbad2bcfe","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.7.1.tgz","fileCount":5208,"integrity":"sha512-Ogyehe3MaFNKspF7PfiNV3QmEXBq0u57qYEoL1GEQKrQdanKDnfZzK/KTmIyitXa/ygKkREIdHgSeUzdlXU1zw==","signatures":[{"sig":"MEYCIQCeWkqdyLope1xm6laX274WSuENnvC+l5wRgKK8ZIlr3AIhAIga+q/bgAEsXwjDk3SPmKPUy4YHYqUJ/NE+fdOi/ePa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128511517},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"928b7120f45c7112d76897c3e1b2dc2bafe2e086","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.7.1_1773775913363_0.6150263959366005","host":"s3://npm-registry-packages-npm-production"}},"2.7.2":{"name":"omniroute","version":"2.7.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.7.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"69595e3e74c5a2883ec9a69a21da50bdc6629845","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.7.2.tgz","fileCount":5208,"integrity":"sha512-ai23DerpW+5v1U31p9TJDU+9BMocLiAt83/v3g0LFn+xquhnOpsIwEpXcGXD+0TeaWag6KMxCo/VNkEgZMD9nw==","signatures":[{"sig":"MEUCIQDTgSzhsDYkWiJrhcrPL3ya72Rn9q4sETWWERzgB/kPgQIgbDxfYPB/Yv2soBsOxmRBreacRdwyFWA/GnT2DKiIU80=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128512188},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"d3dfd9ce5762628eef2500a559dcb83e838f715a","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.7.2_1773805579994_0.0511035063676748","host":"s3://npm-registry-packages-npm-production"}},"2.7.3":{"name":"omniroute","version":"2.7.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.7.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"371e1db63f3f41d51ba3d462cc7b53da0ac89a29","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.7.3.tgz","fileCount":5208,"integrity":"sha512-v/9hdgQf/zSbUa0SjVOglyvudJeqrl4rqDzk5Vt9dauW0O1VRNxynZvIOJb5SkfY3tUSkoRcNAkyNEerDTR0FQ==","signatures":[{"sig":"MEUCIBQkTW523jRb+1W7uQRRgATxbZtEaQMvqvhQMqOd5zlRAiEA+BWhUnSo3EG73sPfF0P61BGC7U96ZnsyUOzBqt7uKVU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128517268},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"896ce9c0e260db21fbc7a26dbeadf84d9be67474","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.7.3_1773834317207_0.7803175898710968","host":"s3://npm-registry-packages-npm-production"}},"2.7.4":{"name":"omniroute","version":"2.7.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.7.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e262cfce83721c843d5611bbdb67fc69e6acc107","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.7.4.tgz","fileCount":5259,"integrity":"sha512-nYF+aZHSYu9O8ZBYksOHIySVhXEGimeYIdhmeJkCtaSfBuLr4AVarS5BeSxTAGEJLeUft0ot3Jquo9eJEqkqrA==","signatures":[{"sig":"MEYCIQCJAvfP6pasJT9Hz/b/DDmsdHSuxwbS4cvH7xXY+PCP8gIhAKExtbmNPT/VELWkbtp4qFsYXGI4yPYFrsz+6QQTl7Ke","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129177694},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"684b81d8358a866c4f687900032a692a3ec94d39","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.7.4_1773846917508_0.008635210836680063","host":"s3://npm-registry-packages-npm-production"}},"2.7.5":{"name":"omniroute","version":"2.7.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.7.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e40141c309085048cb959fda8b6fb06ce37e334e","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.7.5.tgz","fileCount":5259,"integrity":"sha512-LeKkRujamxGrs8MtHyZX349HD9j8LCra5EnsY/omIrR8zUBY/G27rdbjkCuItkMJtevnqHfjXX5yhAZkoogcyA==","signatures":[{"sig":"MEQCIH4wvG5Lu2auzpiXN8d/IW6N0i0q79Tx0YvP48BtSEZhAiBDwCCTyZTJq/Q2qULqU0DQQbm9zWZ2puQoa+Kh5xNyCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129179381},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"146a4917699a07ddbb4fc10fd40ab9a1c74986ca","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.7.5_1773856561864_0.5213577956518949","host":"s3://npm-registry-packages-npm-production"}},"2.7.7":{"name":"omniroute","version":"2.7.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.7.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"c2794f6f3722ee4cbfae7b36cab6f966b4f6c417","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.7.7.tgz","fileCount":5259,"integrity":"sha512-saVtOMNNdIQ26foda5cY6Sq3UFoytCdTCbAK8vl51mM7KNeUACC9/BhTca9RRQX02Lw3a54OWJ13rk0S33zYZw==","signatures":[{"sig":"MEYCIQD3WIHd0dTRYQT0kJvyExtw/SWwqedkvBM1NNPpNsgkrgIhALT90hUMKmih0cpRuFFa/ZGZjM4tH3AcNIseW8SUKq32","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129180588},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"718be831afb64f9b62e51ce8b8bacd20812c0cbd","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.7.7_1773857849810_0.16582193350496732","host":"s3://npm-registry-packages-npm-production"}},"2.7.8":{"name":"omniroute","version":"2.7.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.7.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d68cbda40475bbc9c61ae2a2fede0170ec272299","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.7.8.tgz","fileCount":5259,"integrity":"sha512-kYQ85OCD15vpmZhn2HMRCGsXhAUm96O2Ah24BWTarRfYWqY0ZFzDGOmC7hUV2X9UA/Tom9KlfPtZWnkaBgP1og==","signatures":[{"sig":"MEQCIBD4YxNcxIlwtHy2+BnZbU+B2G4MhVmlj9b9sMblKoD5AiBstxHktFUaypskZDyVh31ryT7re3AtNn4pK+TRVDJ6gg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129191653},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1b68deb0f6bc6a62aa420ff127c0d5303a263b0a","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.7.8_1773859330310_0.08470117354464923","host":"s3://npm-registry-packages-npm-production"}},"2.7.9":{"name":"omniroute","version":"2.7.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.7.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"5b9ee5fdfb6b642fc78a61735fdf82ed6320734d","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.7.9.tgz","fileCount":5269,"integrity":"sha512-OMCFQQmx9iB5greFVdzkYJZI7echNqtZfL+rwcYmgr5gE59KpuGkrnDWr9sZDZb1vOZFg8RSdv88UA5RohNuvw==","signatures":[{"sig":"MEUCIEsRgn1tLFx6NGMrT742CXK4r9HtbUqHtb8Un/qk+EJOAiEA73FO+fRX6MiW4hnSlx7oFo6UE1vYQg8pO7Mm5n36La8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129319420},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"ce34d329d38df2e81ea0bd67616e43b765adf3e4","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.7.9_1773865402559_0.15946825929837538","host":"s3://npm-registry-packages-npm-production"}},"2.7.10":{"name":"omniroute","version":"2.7.10","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.7.10","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d300aa21537ad47c41f520b6036d47cfbf699fcf","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.7.10.tgz","fileCount":5271,"integrity":"sha512-i2jHGwKb2YwgJEWXE5mOB+FQl19+fckS7KT5isrbDbrX8S1c4AJuScbZmP1D6FrT90+vKRXD6+8aS9WzyeC16A==","signatures":[{"sig":"MEYCIQDecn2c2m0l4tkeVKQYhc0RKmRXSOEghq2qsDUqO3H2KgIhALK0pp32g13kpavxHkp62wRqg/SgLrnTTqGO3j+y3+w4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129365334},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"a09b298127e2510e30ec553cc96f01cc24f0eaeb","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.7.10_1773896017293_0.0061071083530803705","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"omniroute","version":"2.8.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.8.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"9a38a6784587667945928ec566c14462efdaf6a7","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.8.0.tgz","fileCount":5273,"integrity":"sha512-56j9nX4uBB8oyqiSAkm4Dlb7PfIMyfiqWANJpkh5+rh2KbIgLvQ/boqGz3U40BFbFeEBKTXEZ5kcaDHJUiLw9A==","signatures":[{"sig":"MEUCIQCZW3kkLWE1c41GwnXAmpVF4onKaNhzwf93KgFm0fyvaQIgPFhHlhqRZvDGNOnBlGai0lzIU2GwuxYBZi10DZYDtlc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129440994},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"fe5c20a04e391971b6acd67348980a2401ccc2e9","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.8.0_1773898345709_0.9132248424990679","host":"s3://npm-registry-packages-npm-production"}},"2.8.1":{"name":"omniroute","version":"2.8.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.8.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"85e70970b5234f59cfd9f30b80530dca28b4c08d","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.8.1.tgz","fileCount":5273,"integrity":"sha512-eltXSSqsCA0GXfW5AKp8pn+hBPx7IZczTX6QEO0TbTpccfw9085lV/LehYEi9p3hkRNxREyhpRqBgtRjGX2RiQ==","signatures":[{"sig":"MEYCIQCcdC7zIxzqPObBgPQZk2tvp79Qhvnod4Az/WuFEXe/lwIhAIbcgpnOuqY3qvF7rf9QAp0x+tzPKeeZWTr/D+fqoICa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129467611},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"a265c7096e2d596720e993fa10af0f1ee3c43623","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.8.1_1773920976027_0.7525320422066237","host":"s3://npm-registry-packages-npm-production"}},"2.8.2":{"name":"omniroute","version":"2.8.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.8.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"262b319190202ff7680193e9ae54a174eeeadfc2","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.8.2.tgz","fileCount":5283,"integrity":"sha512-QjKy2SfXXlSpDl56N34WHcDEdvaSlK7Ko7TlXAp1Ic436hguBBWpqYRwNIfpyGAeyPJANxcUGpNBNZBnuzBsHA==","signatures":[{"sig":"MEUCIQCFHLUM0SUjBXV44LL371+lyjarz9ZoTqpZIcpePtLWAgIgY9ZAqWl7AJ3nr7cLcrRZpKPin8Let+gc74pd26SMRIY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129592330},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"659e2b414db6864334c3345459f18b8824edd46f","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.8.2_1773929864566_0.36611912745191777","host":"s3://npm-registry-packages-npm-production"}},"2.8.3":{"name":"omniroute","version":"2.8.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.8.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"ab6f84e22cfe003dad869099a92d5994f36ae5d2","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.8.3.tgz","fileCount":5308,"integrity":"sha512-+BRmNqAWp8IvyhlfwY1hu0EtfDzXaufi11bDfjoIZuVZ5pYl3JVZUabhyKdTnHgfGeIe3e3T1uoS1kR1Uty1hQ==","signatures":[{"sig":"MEUCIDQtSX/TkGaDJyI7hn/gyDnUXkk4dVdFZc81HG6JzizAAiEA0NreB9Xvl2rIyLAAOReOUKiqXkTK1Kl7V9RbhGSv1m0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130463516},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"8a8a6a4a82bc3350fbcb3cf5a33f2a9b52577f99","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.8.3_1773939854411_0.11671909090254529","host":"s3://npm-registry-packages-npm-production"}},"2.8.4":{"name":"omniroute","version":"2.8.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.8.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e8a92eec6d82115f93ecb53884d1c0d35f0d3dba","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.8.4.tgz","fileCount":5308,"integrity":"sha512-U24qfiSaWAWc74tkbTf2VIs/kTgbiAf/GiX6a2ezUK+LrdRbLXUAT6DFUQm2+ELyWhn30bkmYgyvUt/6EJZHGw==","signatures":[{"sig":"MEYCIQDHoRJIb9qWCkfKt3Z1zOYSNWY/4M62YMr3+/HNMY79IQIhAIpfgJNUyyLh+/2M+LCXiBExgkKoaRsFj+pnTdC5E86i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130501592},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"eeb9c69aa3f60ecd1a3369be16b8c2cd97a82b58","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.8.4_1773948986977_0.663851425714979","host":"s3://npm-registry-packages-npm-production"}},"2.8.5":{"name":"omniroute","version":"2.8.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.8.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"b7217727d04516dbf137b6ff0cb5a62490a32119","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.8.5.tgz","fileCount":5308,"integrity":"sha512-F+YQP6Zrfh+gtwY3qLhhZXl/s0BkRdLKkr2u/hMHHFtgACHu3U9NcR/pu2ffgK31AZdGk2D03TIvHCzDt7GTGg==","signatures":[{"sig":"MEQCIBFNdlO9HC7Q+24qbfBY+fKoN3RfOgNBd270CB/y8AyZAiB5mU6hf3PZ6sN9JJV2jr37aLagEmmxmyInI47ufe2nxg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130503978},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"b62e6c5a69040de4322d57c2ed0ec405dbfd8aa3","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.8.5_1773963202617_0.8403022546080494","host":"s3://npm-registry-packages-npm-production"}},"2.8.6":{"name":"omniroute","version":"2.8.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.8.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"98a89bfbf48d8cf2e2067a028a41a66317b56347","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.8.6.tgz","fileCount":5308,"integrity":"sha512-JnzvM9RYLPjxeJlSQLB17O9zmz2D/o//GMzNnSFabtOnE1ejwvMNmruaBhHYgu5ARvmgpEBYmW6PliWBNiiVuQ==","signatures":[{"sig":"MEYCIQCT/9ysGs0OkSBrgwDUBy3jr0a1B0SopaFDkqSbDxTw4QIhALMeTCROKU8xP9Sa6x10JxDFBJJ2KW+3+Zjh5MiFEtT1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130547877},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"38266bf2fff13e5cf6e683843e2b8f18d7d0a620","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.8.6_1774020642092_0.7902532542293552","host":"s3://npm-registry-packages-npm-production"}},"2.8.7":{"name":"omniroute","version":"2.8.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.8.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"3ee24ac40b7ca59438aa980e5e66c09f87adaae7","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.8.7.tgz","fileCount":5309,"integrity":"sha512-I/qrDAh+XajRLRCYik8ILO4er3BwaBRnU16vaMFCsOPOuXrhUR5LjYItXEwXRIOlZttpm/FDI1yvVh6o2qSLmw==","signatures":[{"sig":"MEUCIEt6YVZgRVIwWW/5Lti0BZbHL7wJ+P1lFjdb0mcNyZZFAiEA6jtjLaLaEWsWNUjfDtPVN8VrZowoN3NsQl0bCwWu7z8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130551132},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"48754fd9997871aa1b8876e04235048e2ccb1ee3","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.8.7_1774022470141_0.16877916880715937","host":"s3://npm-registry-packages-npm-production"}},"2.8.8":{"name":"omniroute","version":"2.8.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.8.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e33829523feadf05ac18f9ce73f27fd5d4c6c769","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.8.8.tgz","fileCount":5309,"integrity":"sha512-PYOTAQu+MAHiZApQ0MciMufJYYFrnThhH8D7upVDmqNZi6GTJdYVBKsKhgk7t4lHy/U/r+78lL2n5W1B0UDFRw==","signatures":[{"sig":"MEQCIDRr7vxZ9MA7wObzAlbrKdwBOR0OC7C9WPiYrwECAf6fAiBLCc79s54yZKwpuvpJAGVIlNCQ0rC8l4QiMA1FRvRz/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130569675},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"4003c38fd12d96111fb94912dafda27e9559f9fb","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.8.8_1774030430472_0.9531359289543953","host":"s3://npm-registry-packages-npm-production"}},"2.8.9":{"name":"omniroute","version":"2.8.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.8.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"895d14a5be06ed41cab1b568c17a8b613c251bcb","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.8.9.tgz","fileCount":5312,"integrity":"sha512-mIuMCOo7CmMdbnwiKhtJKH9QOzAq3yIl2kCvG8ckKL1+/hhY0xNwy/4P+ozErYIq7E2RWLsMsM74jHQfQGuaEw==","signatures":[{"sig":"MEYCIQC/W8s4LC1ByvF275W16RRjNbqMJVSJsNVt65rzT8sjywIhAM/hXKQsuv6iiEboEJjENM46/ZKL3EvoBD2oA/FqDpD9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130638195},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"4d64e64127c7e2ed44e9d6747536ec9a435ee59d","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.8.9_1774034332240_0.9740196686846596","host":"s3://npm-registry-packages-npm-production"}},"2.9.0":{"name":"omniroute","version":"2.9.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.9.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"3cf130f929ecdb7b47bcc86ae243760a02ec2ca0","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.9.0.tgz","fileCount":5324,"integrity":"sha512-4BTLRMZWpeQS4x2ywm5AndQPIdu77OK1tGW1uw7wGcL5LtnME1Mbehgl298XcBl4MBoRBguvJpfwc/PSlVuj7w==","signatures":[{"sig":"MEYCIQDwT/wcaQiNROW6SV9MYVB+6e5i0F6CAfVOn9pjacT52AIhAIfbRuHsxMQpy5SkHkc4WaEnF9f196Kpk/hQ13N2SUy6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130848937},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"c74ed29739a195b892a439dc491b6b1c3d235649","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.9.0_1774048603531_0.10411503424316071","host":"s3://npm-registry-packages-npm-production"}},"2.9.1":{"name":"omniroute","version":"2.9.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.9.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"4856a4ddc83fa570267d72c33c2d6e902a93535b","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.9.1.tgz","fileCount":5328,"integrity":"sha512-hJ1RICAWUOv/rV4Q2c7V1xM8WB5ojrSRjMbvq40OH7wr+0EiiTJ2WIS+wZL40qDOv03frPuRzwDKq+5bd3uCSA==","signatures":[{"sig":"MEUCIQCVc41ptliThUcPHaDDY0s8HNIYCOoFCpzeNovNeEHgDQIgHUojIcbMbVwpOB181auR/TEOg8r/uiu/rUVPyrDAQ4M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130980562},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"03f2ef1e2b8cf978d4cc9a942c96e94486aa5e5a","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.9.1_1774094373541_0.6887683617741029","host":"s3://npm-registry-packages-npm-production"}},"2.9.2":{"name":"omniroute","version":"2.9.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.9.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"c6f14f838457242a9a6c702bee0af59637d4e628","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.9.2.tgz","fileCount":5328,"integrity":"sha512-MNjQmn99EsvDjrdLsyLB8H+tZuk9Z6+TYi4Oscb9JLucX32N0nAyd8nZk4aQDUspCXAosbs+1A3HvL1d507q4A==","signatures":[{"sig":"MEUCIQD7I7/A6qhTLrQGRtqKwL0x7fPTzv/vYPcskF1Tl5jgmwIgZjJdu5cwf1Ou6x36ZBMJF0Ndpjq6tdQsQjqIVjEM5PI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131009819},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"d6f6520a7952c91a047ff19fc5c9c1c0e5d18af9","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.9.2_1774112765709_0.6502324782469155","host":"s3://npm-registry-packages-npm-production"}},"2.9.3":{"name":"omniroute","version":"2.9.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.9.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"13de413b3fcdb99637f875e2d38427cd0e0af36d","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.9.3.tgz","fileCount":5335,"integrity":"sha512-vcg0qzDlXViXuA9K/6HEbw8X+wLUOPIujvQHF1aRA8YPvLqdCJ2RinN1kPr4KYqET8Ed2UVSRCXp//OIikxK/Q==","signatures":[{"sig":"MEUCICfFg5+HN4qDu3l3NxnuSQBtAX99s1IjeQojhj6uFeu9AiEA04EIK84nA97gOwvx9AGV9B/ZsriT7Ir8W8eZ2Y8kDFA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131233204},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"7229af53c337c83f077432a49a67314f3896c07c","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.9.3_1774123497171_0.5829547437943647","host":"s3://npm-registry-packages-npm-production"}},"2.9.4":{"name":"omniroute","version":"2.9.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@2.9.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"31715276cefc34cfa353519bc748f9141100c52a","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-2.9.4.tgz","fileCount":5335,"integrity":"sha512-dh9NvyH0WfOeRwa6RaPdNKbB6xrKDOPIR8aVmKym7uzheVr+RMGDknQEO3bkc0doZ7gt+XC3hzMzZJUAKUctJw==","signatures":[{"sig":"MEUCIGGNugnFWjKwzQzmy8NLihhYynFQEq+kUF6FTBt1PWFfAiEA1kPcFhuIyp7z+m9bNd9/RANi5i/9tD3CQhi99Mr3wJo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131235993},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"bf3f64bea4d8699d48d018bb2fd66df1c21985d5","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"next build","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.1.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.1.6","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_2.9.4_1774125941695_0.13696971393988377","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"omniroute","version":"3.0.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.0.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"7bded8f4c29944e2f9ff518bf17191801b532e79","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.0.0.tgz","fileCount":5567,"integrity":"sha512-A+hSHdeqai6Q76Oe1Q0sIna1RLJAC1Y456T2e6FvYI63+ARAIKMeluLtHSoJTqDoINFDyuCDIF7QmipLIM/bhw==","signatures":[{"sig":"MEUCIFHG7QK3Ctm//nKPUk6V5U7ovQ6aGclhk1BTcxlRZ6kUAiEA8YjQ9ursi2qtwWui1npqobWRmgUUMQzBafStC5Bievo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140315146},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"9e640cac6bb30a655c013238b7edb05609f708d7","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.0.0_1774389680670_0.02271659756107658","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"omniroute","version":"3.0.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.0.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d4e740c7af029509c09d33e47473e621e29e41d3","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.0.1.tgz","fileCount":5567,"integrity":"sha512-H0c0CN5KkHBDWYXfFagUu1sdNPM2ZZWp9tesHW0o26UUzAd4iUxQxskHPItimvq6zFGxCLFaiXn18+SJT0gEbQ==","signatures":[{"sig":"MEYCIQDcho5wXRuoJifAM5jhnKgjfYer0UQYFexA/u/KLqYdLgIhAIrH2HHIayZZwSJzEpBZUdzRxr3gmUnIqv6wilkI2vD5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140344137},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"f62dcc12a0819db45389f72c94a46ac2c45ed53e","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.0.1_1774440606903_0.5251196835376744","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"omniroute","version":"3.0.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.0.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"1aa100edd93585cb3724c414d537a7bb3064e4dd","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.0.2.tgz","fileCount":5567,"integrity":"sha512-fQDc/gjNUcYLytDc2N7hhyGJx5WgwWPabFCIhRTLMbT+/elMz/y5zL1e5Y+Xf7ELvAwIA39Y0dfhGdy93zo5mQ==","signatures":[{"sig":"MEYCIQCJnwaQlEYQ3tGDbakJX01ZCbrYcIGd23C8uuwgEzZ6+wIhAO2tNKmWyNaNuBa1McEmElewiiwdshy54NnvhnbH+OxF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140345592},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"6e7e04839f2cf8a140a01f0c1fd7b96fdac02600","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.0.2_1774440670983_0.16259353943863641","host":"s3://npm-registry-packages-npm-production"}},"3.0.3":{"name":"omniroute","version":"3.0.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.0.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e6d7e03edc4774abef1d24a829036f5449de722a","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.0.3.tgz","fileCount":5581,"integrity":"sha512-Df5vnkYpfA2FUviK4j7g71FPVDdMaPrRaP4CSDpmvX1DjSUcXFrm2MoAuh5IKzWcDpBz4OInkHLcDkrGIMbwmw==","signatures":[{"sig":"MEYCIQD4d1e7Uh43PkaPFsXrzdK2eRXb8GHhvCU1xyayOoqMegIhAMLFPfsDyVvtIFOYH6V+5QTo16z2ven0s3s/6W01opbx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140817608},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1bc8878490646b5fe448152264fb0d8602a4a9c0","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.0.3_1774447027682_0.3519789486855118","host":"s3://npm-registry-packages-npm-production"}},"3.0.4":{"name":"omniroute","version":"3.0.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.0.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"8d397a71f1750ec0b84c25277e1fbe16401af699","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.0.4.tgz","fileCount":5581,"integrity":"sha512-ajGlR3NwvycLQ+pxLd8l+24pmBAZuIIAwfd+oIna6AwBbcBAB9uCVG9IpEMlLGVhsXm+QPweA1mEmuu2B8xW4Q==","signatures":[{"sig":"MEQCIFsXOAnzbX0paTPwh+IgrQtuEs4Wdk46KZPSiFpZ/Fg4AiB/2n7xdfyLkCL3h+7f4sbuAbELMZzu+KATm9wdowzBNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140819481},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"948513ef5f051b110e4cfa32574206946cf053e5","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.0.4_1774449482165_0.4585197832708856","host":"s3://npm-registry-packages-npm-production"}},"3.0.5":{"name":"omniroute","version":"3.0.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.0.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"82c333b7638ae0bf863ceb954cd33902f2517033","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.0.5.tgz","fileCount":5581,"integrity":"sha512-OtyNAUrHjZaiqIC2hb3ewa3Mi8mqP+hmAUZ1QBlYU/30ce0Exqs3yGUH672MkZHj7EuzQ+z6JHo0jNLZI6Y/DQ==","signatures":[{"sig":"MEQCIEDUwL0p4j1Vbp4WDJ/fyr42R7HhQASbxlVBX4sxtG97AiAvNWRnjHTQTqj1JtEX8WCh5T714MaETGPmPXfF/N1TSg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140820388},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"5f6ca23da42425af559c4f3d16473fdc0fa46dc0","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.0.5_1774451825159_0.8772380910569215","host":"s3://npm-registry-packages-npm-production"}},"3.0.6":{"name":"omniroute","version":"3.0.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.0.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"4816804394096a90796af2c52ab5983292c3183b","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.0.6.tgz","fileCount":5581,"integrity":"sha512-oZiJ2LHA/EF1uSBR1Pxd/h5TLprFgiEzS/ILuNVKGHesuHJwo2urbYgVAnL0UNPNRDud83hJ6zF2ytDI07SlsA==","signatures":[{"sig":"MEYCIQDi3WxXWVoulH2Qh+ooIwwgehanajJk+XJgdpWYFrJY8wIhAKILbKYw8ffasCoItFLK4qdt3Ag6O750HM/5U+hT9Pdi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140826476},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"071b874e1b5c85e1097586b60db1e94c9070957c","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.0.6_1774455258680_0.39682788762717536","host":"s3://npm-registry-packages-npm-production"}},"3.0.7":{"name":"omniroute","version":"3.0.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.0.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"a395bc94eb59c162325f99cadffe115bf54835a8","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.0.7.tgz","fileCount":5582,"integrity":"sha512-UriZxapxoDAarWipLvv6i5157FnWQogMYASpbh2xN3S6mHxdb7emp9vEDjH7l1G+vvpK9a7dQh9B6QO68t3BIg==","signatures":[{"sig":"MEQCIEOG+UrSJue8qyS34h7DN2L0vEoPHK3C983eXcmRioCcAiA8zW6gqOPZpjlJYbkdOk3b8kOMYdr2oqK0iUXr5KIN0w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140924315},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"8dae4e50389db57025b4b755e976d4fc6bce9026","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.0.7_1774477992261_0.879468914504216","host":"s3://npm-registry-packages-npm-production"}},"3.0.8":{"name":"omniroute","version":"3.0.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.0.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"22e81046bae2f0adc8c145fb6cf503e7f45ce32e","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.0.8.tgz","fileCount":5582,"integrity":"sha512-q3+SpY8vy4QWjOTK1deUls6OIod2Aq6qEeh4jlfc2wKXAT+5mRXo+Kn2EryCH4Q9IMIr65abGZCF8p/8ZBrlGw==","signatures":[{"sig":"MEYCIQDFbcFFpWuHsfgkkAGGxSQov3wrBAP64mALCPCq6j29ggIhAJ8hu1pbRGzrTnV8fJ/NTp43thB61VtgHF8SxX98mTcb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140931994},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"65833f1ae084f745cdab9c499e3aa3de137d4191","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.0.8_1774492414443_0.23099432395609742","host":"s3://npm-registry-packages-npm-production"}},"3.0.9":{"name":"omniroute","version":"3.0.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.0.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"b9d5a0b4fbd742ebc94022cde8a63203382dbc3c","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.0.9.tgz","fileCount":5582,"integrity":"sha512-56CLCb1i0a9qOrwekiGAoRyzVjjYW80d5y1BUQGv4KSW7aFT8q/0yv3w2uz8SiGoUPEKgTWiGPwOoE0lY15X4g==","signatures":[{"sig":"MEUCIQDLj0iCMUZo8p3DtmJ1qq4pJZreOOMzNmKtatHuthBpbgIgXh8nzsSJ4ljcOoeYWkIvx1MA+KT3lbgVgedfJ7ErU0w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140933520},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"3c6b3c02df2b1cd9ef2a15be322faa4c9d800e04","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.0.9_1774495898553_0.5400314414048142","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"omniroute","version":"3.1.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.1.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"a90f8293fa087593e342b5e3f171b2f3353d07e8","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.1.0.tgz","fileCount":5583,"integrity":"sha512-Df8HiyKaPdswsRDunkHr46RmIlSkJhlDuKTsURQ9th3f1dSmjNskPvFIvj3qBPofiRTzGpfwXxcsZV69inSOOA==","signatures":[{"sig":"MEQCIFqHnN+Dlv3yo06ZCTpnUztCE4stBXPr5dOwccqesShjAiAuaxoZob5zdWoECLs4cpNjeEEeZVNHPglaI0EDxLSMEQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140967836},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"d1178390a958c0954250ebc2c476c5d0becd8954","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.1.0_1774549425658_0.41713717046612064","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"name":"omniroute","version":"3.1.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.1.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"9e48e6d94e0072bba7e8b7efe4d3ffe96d729c21","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.1.1.tgz","fileCount":5583,"integrity":"sha512-SE9EuAjxPqvnkrXl5cNvtUAT8zECuZiVLr2IeIiSUtvQESA/Q4Ly7lqLECfsbvi9neZ6LCUoUXher6mM5Ly4/w==","signatures":[{"sig":"MEYCIQC7ubmtwyu6hXTZ7LVtab7oddTpeI3po4BLawvXyglMsQIhAPYE1t23LWZGiERNWIJrkd4uOInrWoBbHnxQ9kJa6y6g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140974591},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"211a7a4cfee43f1e9cca244abbda0eb50d5037d6","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.1.1_1774551672550_0.35251319079812315","host":"s3://npm-registry-packages-npm-production"}},"3.1.2":{"name":"omniroute","version":"3.1.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.1.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"20aed446b753a5d2940f3d3d12d4aa9ec2e288fa","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.1.2.tgz","fileCount":5583,"integrity":"sha512-ANBS5ZlaplfLW10Lgblee4fOztSD/sAbWisRf356zZ1QxzmS1wKJji+GNgj9NB9KpK2iIjT+a3YAIjO1HNqlZg==","signatures":[{"sig":"MEYCIQD2Re5IN9kjB4WP3uIfN8Cjl1rZsjUh2NdakUsTHKo00gIhAOcv0jPxbdWmSdvrXGp1AKcqsrsSzAPwQuQSldiIFTxL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140975178},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"9ff6353b88b6c5a59e998f4a53bff28264eb3574","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.1.2_1774565667026_0.9094852010935801","host":"s3://npm-registry-packages-npm-production"}},"3.1.3":{"name":"omniroute","version":"3.1.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.1.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"1a97e6b26097b955f42fd13e266c55c1f049bf12","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.1.3.tgz","fileCount":5585,"integrity":"sha512-O9dG3GrtomYJQtgktxZQks4wXjha8n5YkigLHPHGOZSIQyosy6RFohlTIe1LK4p6beQKB+bzvHbbGrfpheWUFA==","signatures":[{"sig":"MEUCIQCifnAUvQSnwRDf6yWfg31Vh6G+lgIQGu1TpyZsVUzKfAIgJxvwDR50V6dyLpNBIzyEsREjGM0aunox/ZGdALA7qtM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141113310},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"3a23dc8b0404a8a8da20d25cb3777ad45241cbf6","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.1.3_1774571843328_0.28908077793368614","host":"s3://npm-registry-packages-npm-production"}},"3.1.4":{"name":"omniroute","version":"3.1.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.1.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e52282db10e94e511196e505cefd501604886060","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.1.4.tgz","fileCount":5585,"integrity":"sha512-KpMi8S/9EQWUlXknh9YjGVI0hcL94LNcQhUn+EMZOx2Ft0DLeTyCz9lp5/0tQ+pOQUH9cEALUcuNp2F4gKBAfQ==","signatures":[{"sig":"MEYCIQD1gSNzMsEFwaLtPbC2t5/RQlglqxagaf98vwX0rbC+XQIhAI15DjtUZ7Kk+UWgT5LUxCHDES5R7Ic8fOAMcaJHItkp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141114592},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"6acd36e374e95053527d43f733af7c9cf7e837aa","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.1.4_1774580034060_0.02801900741945107","host":"s3://npm-registry-packages-npm-production"}},"3.1.5":{"name":"omniroute","version":"3.1.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.1.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"5c22cdb7a1d2c80dedea4e1666ad685b2028e4e2","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.1.5.tgz","fileCount":5585,"integrity":"sha512-RuesyPNVsJCYZKu8sRV0hz9IsTMYUxT1daEuaDMw9Y/114KKslygjm20JzVPOcoGBWDUk/abRH9oVXRlBHQEWQ==","signatures":[{"sig":"MEUCIB++pFAQdro9CWnZoCq35DB/2DPe/Ktrl4e9RTrUaoKjAiEAtrEyT5dNJGO+0+d6UJJEiHFCH3Ps0GjZgy2EdG8knWo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141119427},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"ad4bd800aac296632f10d26f8feb50efaef72528","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.1.5_1774585899592_0.8209717637589977","host":"s3://npm-registry-packages-npm-production"}},"3.1.6":{"name":"omniroute","version":"3.1.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.1.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d5286451dbd17646c1dab866e8fb26296f3a2bc1","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.1.6.tgz","fileCount":5585,"integrity":"sha512-1faAi0YLMzk7oYkNflIcE3xLeQuKx+XtB2B2P6JBAeVaJsL4NWpRmLD3V0b6gLfttt+lPO2Qa4qaumZwKrFswg==","signatures":[{"sig":"MEQCIDJcQTHWbJcKFoIIZUElP4UILXXFrXs5qiQk7AivT8BTAiBnfUtXO7YCNFuPteqIiDr2sS2bpSKyvvyLJ5Ua74PSRQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141088173},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"13829de0d99bd746a5a622a8c4c18f5f385d3900","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.1.6_1774603614816_0.8018508758727687","host":"s3://npm-registry-packages-npm-production"}},"3.1.7":{"name":"omniroute","version":"3.1.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.1.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"757cc9a0fd3b9f60cc567bcf7fb7241e1e8fae5d","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.1.7.tgz","fileCount":5586,"integrity":"sha512-EoLrYa8u7GnTGNL3MOaC8q3IkTK4GoIhlX7NA7oVE0ZbK+VlJtpTwCwf3gXGvnHH8FuecqOF4mxmY0DQ1dbjFg==","signatures":[{"sig":"MEUCIC4KeyQ5Srk9MmUzHJZh7XbouubsxFGOrFatRqkaq4zzAiEAggd/Y1nMw2+JUoCDP9mtiJEI+f057cG8LWerY1gHL7g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141101983},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"508a6d99f5c4e5b850044e7ee98af2c21e94c97d","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.1.7_1774635578092_0.7378476403570704","host":"s3://npm-registry-packages-npm-production"}},"3.1.8":{"name":"omniroute","version":"3.1.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.1.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"86e82b7183d4383b7444ec760035e9f6bbc69352","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.1.8.tgz","fileCount":5632,"integrity":"sha512-dC7nKDpJaWxyEEIVxqPXeJo5S8JR9c1GvS9kaS4T5Sj1JuuuVM9FRzgvGz7PVAoBV3bOaveoDnDvXUhuIH8Y4w==","signatures":[{"sig":"MEQCIG+XX222rpzToqhcWC3ssQxZU+3HxnZJVOpM3mlc3J9QAiAqt2e7nQq100r8gvf72v9bsVCCx/26sTTqp2VTVdVnXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147377237},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"b123fb2cc7392f97fbddd932f7aaa33b093bffc6","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.1.8_1774645943709_0.5779955537057868","host":"s3://npm-registry-packages-npm-production"}},"3.1.9":{"name":"omniroute","version":"3.1.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.1.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"8915ed23882dc3bc64a2a504a1e89528a6193be4","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.1.9.tgz","fileCount":5674,"integrity":"sha512-zcukJ/e3Alcl/6KnUj6LslhpXYNmmnbQW0xdZm/wVlwXMJAG1RhYo8lSuhPgDRt453Kv5SmaUJCG8iMBtUHwpg==","signatures":[{"sig":"MEUCIQDIsUhsC1j9dJccxHWBHpQrFOB8KESZIRSZy2HOj89QUAIgeKcJ8qelgpPpRVCSST+VNmGelGDEHv0/0tf5ctIXZpQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148316111},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"9ffad1005e10725d2f4c5d2217ffc2f62f795ca1","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.1.9_1774730390091_0.8106948429248861","host":"s3://npm-registry-packages-npm-production"}},"3.1.10":{"name":"omniroute","version":"3.1.10","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.1.10","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"96a3c600e55fa06cc431d9fd557ef0098026c824","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.1.10.tgz","fileCount":5674,"integrity":"sha512-7VJ5hYBL5EEuxp/cRSfmEFWPxEt2rPK8mcRHtrNULidcKkiy9NpD8ev90oN7kbwWQ2IdSexL7TMQwHbLmgMc1g==","signatures":[{"sig":"MEUCIQC1lzMr3xQp83eh4SYlPSOwkXmxStFdGdlrRCbAOyoPxwIgcHpdM5rbGxUagB4w25n3btmidndwLCsiARdDsYJDKT4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148317341},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"437cf9bab085d7e3a0e1408eeb8ffd737d8e64cd","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.1.10_1774738650327_0.3667826367329319","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"omniroute","version":"3.2.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.2.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d383c2065d46512d641c905b7785e407fc2a0d31","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.2.0.tgz","fileCount":5695,"integrity":"sha512-hT8NXcAz3TWFvidSTY7by/35lL6J91bL7zRLO6zOR0NfmupGmh2T4R/6/9yQ3bgG3JYKAlcdg4ps/jkwS7jLoA==","signatures":[{"sig":"MEUCIBjdvow2oe5aM6FlEgpYe0pfIAct8QRrMc6UXvqXG8oiAiEAn9DhnZ4dt1XW9Xxi9sdHIImmtgl0EbYOTCSMtLE7Fy4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148848459},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"ad8a4441051c710f8c7376eb2ba344215931b78a","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.2.0_1774741513840_0.9109792761251254","host":"s3://npm-registry-packages-npm-production"}},"3.2.1":{"name":"omniroute","version":"3.2.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.2.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"3359758a1ab19ef2c11dc67b7f7ad53cddc90f2f","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.2.1.tgz","fileCount":5696,"integrity":"sha512-4Ynx/+t7UIqyZv0gtr0yfkrICOOb5NWUIwyw6uHn7tE6in4yG+BXFMbHfKo8cbEk5BrL43/ZAeg9yF96phdRxw==","signatures":[{"sig":"MEQCIF7Or1NLKckyDLHO28oAYOGjxbnNQ/on9rDHPfIYnahTAiBPyODrUykLTIORlN88TIwydu1Pnp9UE8dHTfcr4ocurQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148872431},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"fc24361aa65dbef952003e1662e3199640ddafbf","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.2.1_1774743729503_0.8866659761631615","host":"s3://npm-registry-packages-npm-production"}},"3.2.2":{"name":"omniroute","version":"3.2.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.2.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"ecac1c4e40e37b6e3388b5ac57a02c81d04f27fc","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.2.2.tgz","fileCount":5689,"integrity":"sha512-aZCqn6Vhuyk+wRGTIJoqBhQ+10AM9nUu4RKPApKT736MmlDp5stLWxq0At9PW8AErjquBAbL1coEM1UCaCyTNg==","signatures":[{"sig":"MEYCIQDrZn9NfrzsKEjkQedCsPC+78PRbxvqN8pf9S7eoPuS8AIhAOAMwRfVSUoRsst/oJuHzEhJhrpP/q+kOxw5r9jywQiJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149147931},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"fb8d187f8dc830a1704202c2581c48f38cbd27d5","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.2.2_1774746944578_0.3852404031768075","host":"s3://npm-registry-packages-npm-production"}},"3.2.3":{"name":"omniroute","version":"3.2.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.2.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"8e8a00e5d1b4a83a0e2541eee814237dc280f33a","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.2.3.tgz","fileCount":5690,"integrity":"sha512-zX1TCPBkGB9FoOXsOADfzh+pDdl7WjRn4+3YgREr/bHEgKzJX0vezZqGSVBPkRLh5xRkRShR5hM5bfL/JFpbeQ==","signatures":[{"sig":"MEUCIG3nMMU6iBvp6x+BeJSdaEiAMdsY86mBjuHToI7DjRSAAiEAmGxoS9ha9zXMLczPdDhaLmVu0ieuERhe3cAApEPdi3U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149173154},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"f171b7de968bc90133d77efbcb7363a8ff4503a9","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.2.3_1774751079794_0.5140453212346578","host":"s3://npm-registry-packages-npm-production"}},"3.2.4":{"name":"omniroute","version":"3.2.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.2.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"dbd2a257ed3fbfe4a61664ca28274abd8e3bc4d8","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.2.4.tgz","fileCount":5690,"integrity":"sha512-1EvFiH3T4b1qeqoJjEf6P2XL6AAwcJhN0swCh5onNiAtGF6TpputFGLDfaSSiTZnihXA1gT/7gUybRe8byjbDw==","signatures":[{"sig":"MEYCIQDthdVp1R4P+LZ7N84BcrmFCAXkgcPxFiFZQ/lT+rJ/ywIhAOcObTW4lbFP/224e5el0hkyQWDchY0AAFv+GbBoCEfc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149173712},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"bd462c4e0b05bd4019f713bb23bc684407d61a58","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.2.4_1774752604449_0.8319910461004936","host":"s3://npm-registry-packages-npm-production"}},"3.2.5":{"name":"omniroute","version":"3.2.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.2.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"677fc885826ff9f0fbfe25e35d50a1c0540fc749","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.2.5.tgz","fileCount":5690,"integrity":"sha512-LqD8QD3Ot+AEqRujh3Y62TBNPpW6cXdb816i3PJYUFBcX2tsUFH44oXXOYv7d45QVr2t1IYOFDkDEhH0GZqqcw==","signatures":[{"sig":"MEQCIBa12xBBS+N43ShV8TFYdVtm6u59jEyqGXxFRAlwb48hAiBbKTcT5JY9niudCI8f2djxybqH089ulWKdKPYko+6xGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149239201},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"3a5450039dd7f9fd8c79bbd01690d542c7cb2614","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.2.5_1774759327689_0.26761327103326815","host":"s3://npm-registry-packages-npm-production"}},"3.2.6":{"name":"omniroute","version":"3.2.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.2.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"4b35de3a6344c1f1b537bab38f5c70f7370214ff","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.2.6.tgz","fileCount":5706,"integrity":"sha512-82mC+4GEdfHs2SFPpN51wgK1dGQf2tp/GQL8YQl/vXdhuDxtnTQ8fRkgguJ+OdRZ0+5jQz/LyTSuByXq9tKkgQ==","signatures":[{"sig":"MEUCIQDGv7qpexkZXeCv4gCQj3LKUVQM+SWbLP0g/tF6ydhn/AIgftadt1pK42x8y9lQqY/tUwW+IpuT/uTYTr4v5U4TI/o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149292330},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"dc077bc309d485a90827fe4a22d150ad03bc10a7","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.2.6_1774769982320_0.6481110991749877","host":"s3://npm-registry-packages-npm-production"}},"3.2.7":{"name":"omniroute","version":"3.2.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.2.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"781eedc1a7435d73641d892bf91ce9c374b313de","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.2.7.tgz","fileCount":5706,"integrity":"sha512-uVJlHDCHU+VTYCW2VhnpRhoExL+ezNJ70xmT0yFjf0U4HTv+Ik4LKdNd7iIQpHa0JxBaHTo9ZE1NWzWDi3ZklQ==","signatures":[{"sig":"MEUCIFBKqb0q5wLMi9Ay7M8j6kkn6qjkSZbKDOd+eJy+tYKtAiEA+XSH95OeuMjtioOeQH1fcKfOCxThBMnIvGirav+GRk8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149351733},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"b84e79362ea2195307dc36fff8a4f2dec5b203d0","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.2.7_1774773364090_0.20085120640977405","host":"s3://npm-registry-packages-npm-production"}},"3.2.9":{"name":"omniroute","version":"3.2.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.2.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"ba87a1fd87a654f280d6f629ba35fb30907edca7","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.2.9.tgz","fileCount":5728,"integrity":"sha512-TH/W/k+XnvBa5lXv6/Yj+Gu0tlByJUTtJi80dHxpwCZwqPYeV8EAA1CnqIpWQDxNutnVIyzUGIIU7YZS9Oi64w==","signatures":[{"sig":"MEYCIQD8BWZLBy7V+2uOnWdQ+/FCF9Fvn7pflRRmcOIA1X8LpgIhANWF8lv/qDB5Y8xJWYYPw4qqeBZhqbiSUUvgqFPbvWvP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149710972},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1d51d8ff275c61847955b8e9bdddf88cd6f012ce","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.2.9_1774805640475_0.689394980448252","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"omniroute","version":"3.3.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.3.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"17f8e3e70bc83a1630c111cd7d321383f0cadec5","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.3.0.tgz","fileCount":5728,"integrity":"sha512-eLT7lyLaongEz7dtgFAYWgXnWHTKOH2ArXn8KtijZxhWoUOg+izYaYq8jHrcMcFAmiICIjvP8KNoo49Hmoh/kw==","signatures":[{"sig":"MEQCIArXS+RWzwEJq7b67aP5H0VFNjrw7hOz5f+WUEcvosy5AiA68icCynfe2yQB2SR/e2QFhexW7B5/9lIOCYM3+NLAUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149711728},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"af338d447b176a67a66fe84dd5bd5fcdbc581b20","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.3.0_1774805652362_0.24463225696548063","host":"s3://npm-registry-packages-npm-production"}},"3.3.1":{"name":"omniroute","version":"3.3.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.3.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"42655f289caeb400156972bc4e1c2ae203f9cb52","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.3.1.tgz","fileCount":5741,"integrity":"sha512-vZqLL7+3rkSCIs2zK2Un5Xn790VCvRi+OUSDvqLPn5hMFUYvDf0woE+EtdyHdg/E+vmaC0RFuiSvM8AeN6LYmg==","signatures":[{"sig":"MEUCIQCNx1YKLdZS+ptqh0RiDYg+owpgnayZ+SuBXQlTnyyWAgIgARZCfDv+WChRoTGj2cneqRIdDEdKTVABNcGCcbSJNg4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149944706},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"370070f48942abee9b0ed14932438403de3ddb82","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.3.1_1774814936715_0.33216477688368706","host":"s3://npm-registry-packages-npm-production"}},"3.3.2":{"name":"omniroute","version":"3.3.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.3.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"39ac67f47f207989306b8fd35db2b968aae65fdf","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.3.2.tgz","fileCount":5783,"integrity":"sha512-8neQw322yV2Q1LxcsPNBOPMz/Aw019rDecbt/3M7iZtnQLuSwlUy5IWoSjHsJA8Fzvqh38m+2Mk0J+6XLtzqtA==","signatures":[{"sig":"MEYCIQCI3ptjKmKZZODsBN3WJN4Lf4ncn9aqypcKAdFx8XavAQIhAK/GnAQ4cMa0wyBK7yABDoiEIEoBDb+fdOiGXEDiM+0F","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151073014},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"76a6d8292c488d4a93e4ec59fd1396be67005ba3","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.3.2_1774825667004_0.0006480758648110818","host":"s3://npm-registry-packages-npm-production"}},"3.3.4":{"name":"omniroute","version":"3.3.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.3.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"6fe1629ceadba15a74d3b4b75af4620d4b12b0df","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.3.4.tgz","fileCount":5840,"integrity":"sha512-uRYbbZxHUnyhjwbLuwPQE5B1f4AGmOhA4euLXIqwYmwL3DLbNz4LN7zX48w1n2DYgfyLh57LzcMWwkAsth2cHA==","signatures":[{"sig":"MEUCIDLuj15ux0l7i+eAHNRV59xGPiMb6cu9zu3vJdiM3yG5AiEAmvcS7MTy9YmtEkwc+j47jKE3yHk9w7qXx4v6vcfB/H0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151685869},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"a864258cb8319a4c1f09848078265357f7382374","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.3.4_1774886651599_0.7915398860524749","host":"s3://npm-registry-packages-npm-production"}},"3.3.5":{"name":"omniroute","version":"3.3.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.3.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"8e5fc0dc54a0b6ddb31b07c9d964f57639a602d2","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.3.5.tgz","fileCount":5876,"integrity":"sha512-cgFtufC4BdP5Ana9yQ03G9jW0rV0H+U14ZBU0guXuK2m48GN+9/adhFINGqEZ1hL2XEcg89v6XcH85pcbxAtOA==","signatures":[{"sig":"MEUCIQCYJheejvXKzNY0AsfdOt8bisrk8EQV89cUgR1GR2eScQIgXBHi5/+x0eDId4LTe/EkvRsH0w6hH5o8e8XIjs+hR6Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151879646},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"df23162e9d6a915485f9dad91eadb518493367d5","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.3.5_1774903105648_0.6572818591272662","host":"s3://npm-registry-packages-npm-production"}},"3.3.6":{"name":"omniroute","version":"3.3.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.3.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"fd46c0190b26c1ed9916e3e5d5be26a8dc10c6b1","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.3.6.tgz","fileCount":5878,"integrity":"sha512-xbaks/s701a83ZCf1k7eR/6W+/616rJ1DwmVoGLv3A7wux9RK96wtnUtQQuoiBi2djIkxvnHRiRH6iAeh5q4Eg==","signatures":[{"sig":"MEUCIDu973yJfrTUm1BvR4dz013ZyZmMx4/BvspGl8NoUUdwAiEA37xhGsOR5xjXPhqrWcuyg25qP9JDfko1x5tF3vRToKI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151908069},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"76e135077ba11432dfe8fed962211c47adaa491e","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.3.6_1774906502659_0.3484408140337667","host":"s3://npm-registry-packages-npm-production"}},"3.3.7":{"name":"omniroute","version":"3.3.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.3.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"7b2d1a271f786d43b1a6aa262348dfa1d7cd2099","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.3.7.tgz","fileCount":5878,"integrity":"sha512-XpOuBb6UcPk0O33fT1HWdcun53wfQqFYSntHpcvmJNfRqzuV5v8wSStiBvJZRvZDjVwFgKL++R/mcK5E4hIr0A==","signatures":[{"sig":"MEYCIQDlkcfiA8CCTRLHAYmIea3ZQ7FnYNtRCxBJCAmNMBwu8QIhAIZKXNSil5ErOqqptf2PXEk1IvcvwZOMUlKrZoBlDNya","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151915986},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"ab4914ee6a70969d0c2847200169530fba9b6983","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.3.7_1774909989573_0.15069319710604212","host":"s3://npm-registry-packages-npm-production"}},"3.3.8":{"name":"omniroute","version":"3.3.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.3.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"eb01fdcee7fe0cfbad928779d2a2213c97afe8f5","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.3.8.tgz","fileCount":5883,"integrity":"sha512-PcBh3DC666l7BHCyuXaW1YLKhrrUAko6tssZ1LIkIdIlIzvyk/yOTdjnl8hb++0WHe1473I3+rLBkiKrF+NwEw==","signatures":[{"sig":"MEQCIEtce56QsDlgevMvdVw8PdzQBXyc1KGVV7Qv2kG2BH3LAiBrIXQN7LGkDDDmu4BgBmJ+GMWshAKphcAiEeSvUxRfxw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152257365},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"49e1d51be92203fcca27c3f10f53a425d09923fc","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.3.8_1774915433919_0.7676147082622247","host":"s3://npm-registry-packages-npm-production"}},"3.3.9":{"name":"omniroute","version":"3.3.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.3.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"7d1c43c67563b212400c99dea7683a009037083f","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.3.9.tgz","fileCount":5882,"integrity":"sha512-O5RZ6cqSQ1swmA2YS3wgPevd1/pj436Ilp7h/wlekhqJzr8DGGsgWl+CXzyaJIPPdV3BlmXTEfCln4OFgBFuEw==","signatures":[{"sig":"MEUCIQCwNFS+NURaS06vd9NkHXdvfqpCcu8fq6a7zQkoieE2ggIgDIhw2kLCd0p2++lwc6Z7geqh65OenZzJ3D6rsRbYtjI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152249575},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"028874fd053470186f7f81b1d0e5b2126c8871d9","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.3.9_1774917677442_0.9087407563627918","host":"s3://npm-registry-packages-npm-production"}},"3.3.10":{"name":"omniroute","version":"3.3.10","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.3.10","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"a10960c6ea764323163de481b7cf02280d0f240b","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.3.10.tgz","fileCount":5941,"integrity":"sha512-nis3t2eyBvtUWQWfLQhQ4wfjvInVIoL2OgF2abrFbAT6WHeZYNkJgVpMjCGBGAuKveS5uCzHxfMqwyGaDojNAA==","signatures":[{"sig":"MEQCIAXW4b9+76RTVoLCcMaon5V/U3BBceOeRBNWJd1GYpaKAiBNp2Y/pjknL5mZRk32lwY9L96rcvI8lvavGszEAzWwPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":157286603},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"e071393eb5ed2de0eff9eefa7d275cd313b3b40a","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.3.10_1774927950997_0.3906595795396004","host":"s3://npm-registry-packages-npm-production"}},"3.3.11":{"name":"omniroute","version":"3.3.11","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.3.11","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"ab2ac7208abd0e9dba6ce372d47bcf2c7116ba91","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.3.11.tgz","fileCount":5941,"integrity":"sha512-ib4CQ+RBiYDzbxvT1J7kYr25CoM1otCHk45PytIRD2iKhjDJVrrNe7mF4t3r/nsT2yoGs3k7/4g2gpmgx6KI8Q==","signatures":[{"sig":"MEUCIApbiQrW2yO9ThMTwrfLMPJGqm989PdjNe/Eke1sQBIaAiEA5jtYhPQib7xTTPHGCZj+aZuzcxJb7vLsZmS9QGFOTlk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":157292001},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"dbe17b4b161e8da5b9c4b2313f763e140dc208e1","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.3.11_1774956231340_0.06318029248518009","host":"s3://npm-registry-packages-npm-production"}},"3.4.0":{"name":"omniroute","version":"3.4.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.4.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"0c5ef886fd49f586d232d1f6a9b9a44a02a387fe","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.4.0.tgz","fileCount":5954,"integrity":"sha512-mFLa5ySTLZYxBZbMsI2rkgHX0PZKj6gxDvyB9lq+C+2d6buKFwIVUX71b+PV81ZbdMn65aptosryKzuJxTI+Xw==","signatures":[{"sig":"MEUCIE4ZbohckVCtvNPrEwx0K5k+4EUviGoVPi+F+kLgfe7hAiEA3DNoAI1sxrXPzBD3LNkUC3GB/l+p01A7ms658q7uRsI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":157170092},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"70a4d38d040f8e49407ea12a88a481cb1550f5d7","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.4.0_1774963570790_0.9616736912215169","host":"s3://npm-registry-packages-npm-production"}},"3.4.1":{"name":"omniroute","version":"3.4.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.4.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"311fe389c0a1b1f2c52fbef79c410964941a8bfa","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.4.1.tgz","fileCount":5954,"integrity":"sha512-dJ2z03/8MFzO9/gboeFJzgwbLK2CqCiC8KX9mFek+iNfrKR4XJSUjE0vBZAPUm1VGVKQRawbV6VbZQMTsSoX1Q==","signatures":[{"sig":"MEQCIEeQUs3WDO9/z5M75Fl/7+UKWg4k8R2MdwGjp5zLO57hAiBKMJeWw0v/U+5ZMnEBhv0v8QYrC4k5l26WpnaI8gmuzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":157344426},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"30558764ba7ee8ad3662a3c8181f76a4dc6cd17e","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.4.1_1774995556155_0.5130479512293902","host":"s3://npm-registry-packages-npm-production"}},"3.4.2":{"name":"omniroute","version":"3.4.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.4.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"7c12d775a0a2dae3468b4f3fef3362c76539b310","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.4.2.tgz","fileCount":6062,"integrity":"sha512-kkACVMWWs7QjWwOWcwnzLM2vy3I8z5bqUZhRHLiVe3bxvyiz8oL3F3W+KeGBqqk32w/IANNBicboSqmH0JP1Kw==","signatures":[{"sig":"MEUCIFeR1dvbgDP5TKTD+sTxqOaiAqp6AAJfUugpyYAo8h0eAiEArxb7oBj8AUOcPvb78B/+kQRe55inYuWvFMGP1+hZxeU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156926861},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"e37adcd67e31f4ad67737435d6db944936fa7ba2","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.4.2_1775083854004_0.1155896673368142","host":"s3://npm-registry-packages-npm-production"}},"3.4.3":{"name":"omniroute","version":"3.4.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.4.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d2b64a07a197ff4e5d0facf47eaaa426f2003d15","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.4.3.tgz","fileCount":5822,"integrity":"sha512-SAmuTwjNOyFMLAzAJu256B9FYbGoyaR1sqIDUQmwQ75nWYHt7fbs35Ke/TGAEFVmUa6te/cH2XTG2dCud5BLRQ==","signatures":[{"sig":"MEQCICximYCO7OnDAM2T9U/HAGpGZKnpNtjB2ULMXXd7u24JAiAGA9o/MPusGj0Fldsx3mfd1EGPA+Pl2S6lhpPcjF0xRA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154099092},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"0b677677d1c0e10a23fdd774e652ed2dfb60b185","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.4.3_1775099912117_0.6433200452050787","host":"s3://npm-registry-packages-npm-production"}},"3.4.4":{"name":"omniroute","version":"3.4.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.4.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"0d39c07eab4327294d57a7ce983aca10e51792ce","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.4.4.tgz","fileCount":5822,"integrity":"sha512-54HJoS4sbSHomCxB9VRxSlAIKHU5nEBb1fIjjvEsL/wsqoL+OtwLzUSnLUE1gF7kS4CHAt/VjwECzCmI+tqZsQ==","signatures":[{"sig":"MEYCIQD9R+8gJkG2BqVTZj5exogTdtgxuhomtKdlsuq/7u/DFAIhALlyPyA+8EuuYyqPP7Cspe8yEVHFgotJmRgnjh9Zgjvw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154107756},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"f27936853199541078d4844cc8fc0eed8407ef3e","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.4.4_1775126832497_0.7231665625082926","host":"s3://npm-registry-packages-npm-production"}},"3.4.5":{"name":"omniroute","version":"3.4.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.4.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"3b175b9fa0a3ac3982ef7c3471bbb1bfd4758e4e","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.4.5.tgz","fileCount":5912,"integrity":"sha512-lohJGh6r33ztg0ZIeSBYoUMzMkOQSVF4/U8SLxF1CPyoF5Y/6O/3Vu2dDrfqr9GdCCEEl1oxmfF0szyYPEK0DQ==","signatures":[{"sig":"MEYCIQDSzufHoO+O8ypFv1VAaqTpFyhNGaXxE3jpdiEJp3yaZQIhAJF+miOf/huco7AousofCliGv8FwtRQlkNd0XQgs/l67","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154845382},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"03fb04f4c522f2624adb4a0120d1bb9e6e86cbc5","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.4.5_1775161257783_0.8509706304743874","host":"s3://npm-registry-packages-npm-production"}},"3.4.6":{"name":"omniroute","version":"3.4.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.4.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"89e518f58a90be8132afa03215d4ad79508db035","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.4.6.tgz","fileCount":5912,"integrity":"sha512-QBf9pnxHhUFGid6SzChGeAthUJTlHFpw2hesiy5cYrwRg59fOjQfP/Lpo1Ll8ixBr3B7ZW9TRjJ53VDeRBJntA==","signatures":[{"sig":"MEQCIAv+1juM7CQ6cTMq4+ItGFUxFInlb8e6lDlf4Z5P8zmxAiBUwb0QAHEPdQo3yX4keh68wPKOW37z+zEgiM6cPJ5wFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154864954},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"a65bca6e49f75776d62682fb6f38cc03130db746","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.4.6_1775165285221_0.26223658214123224","host":"s3://npm-registry-packages-npm-production"}},"3.4.7":{"name":"omniroute","version":"3.4.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.4.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"87c9c994c74f16f841abdc40c9d5550e2fca269e","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.4.7.tgz","fileCount":5926,"integrity":"sha512-A/tByfakCgACnGC9ZMeRzP5zIFXSSSQROCFb0PXrVAlaHLiwG4kLMv0vknRDJabTsZWZuvB6iThh5H9FXJMyHQ==","signatures":[{"sig":"MEUCIQCrk0vUCWPwmjn6+NIhkHMNWlJStgHdmT6gePEPE9WllgIgOTZYCgZvjuVpeHJNBr9zsGtaYXClq189HL67uiSmWcE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155598651},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"86030a0fab16da8102eed7d30863e5d65712f2e1","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.4.7_1775181185388_0.5729854029928743","host":"s3://npm-registry-packages-npm-production"}},"3.4.8":{"name":"omniroute","version":"3.4.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.4.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"3098fe3d59f7de33330e8f9ed0caf531df2bdd29","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.4.8.tgz","fileCount":5925,"integrity":"sha512-g7ydy5cli8VJ0t7bIkeGEKpGbsh1eoZ0iPEBmDbbo2VodwdK0+kaoNu+9FZnvJVVvYgTv7Uw6Je5ZlQu4lV+LA==","signatures":[{"sig":"MEQCIEnNaeYZDW/zS/Y0cCLWD9aPS4lkoJGL/Cf8FcWAf5xOAiAv4JFpdfZBK9/ntfCHyExmkAdSjOO28+GVDMYL2m01sg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155548172},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"a36a38bd8d097feb26399c128b724f1c39d1403c","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.4.8_1775191868917_0.6993943297463086","host":"s3://npm-registry-packages-npm-production"}},"3.4.9":{"name":"omniroute","version":"3.4.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.4.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"b5fbc2c4d43f6aa30bc885d73d47747a26c14998","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.4.9.tgz","fileCount":5928,"integrity":"sha512-7+EssuowzS2+DIMKdwIC3ViGn5RqactQk8qwW6nzSqaOUNmz7iU0PwCKXycu00D/0HjKDuaV3nwqKbe6ZoBh+A==","signatures":[{"sig":"MEUCIEsX8BOz0QHf28uaZa8LPokDb1EKgaybEuUHhoZvskrbAiEA7jCnq08+Lt+zwuiNMFKdZZsM/AXGnbl+g0ftoHEpwQU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155635809},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"08f1f05d583d5a25124e866424376d7a3757b8a0","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.4.9_1775199549835_0.5818570026160659","host":"s3://npm-registry-packages-npm-production"}},"3.5.0":{"name":"omniroute","version":"3.5.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.5.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"91250aa4969eba8cda15f8809b8b4e5028a6beb5","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.5.0.tgz","fileCount":6099,"integrity":"sha512-VXM8AARIjcFHqMK02Qr4/P5+3VL8yFW94y4mnd95Ujp54VWeJM67GioeGMb/s2+7Womt3bXRF0dPjDAP1ek6bw==","signatures":[{"sig":"MEUCIQDMwvo8jesmb+AF31NUDWTfeh2+83cs05Tp+DZkIi7v+QIgWIOtwSA9VabyVS1IShgVc6NL6elK4W95zwi3ymfAjp4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162345342},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"c96221c70583889c148ed9c40b14dc4e1d81c675","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.5.0_1775255725611_0.19829420947887577","host":"s3://npm-registry-packages-npm-production"}},"3.5.1":{"name":"omniroute","version":"3.5.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.5.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"490293d593b4ecc3f4962df384b3829b3f33ebab","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.5.1.tgz","fileCount":6116,"integrity":"sha512-zT+/0CPIKS3X8ByCRakrxc9vEWIJYnHBkl0BYwzxu61i9tMF9+hBJxipaZiAm1EiuzV0ajFbJ5TfB7fucWnQLQ==","signatures":[{"sig":"MEUCIG4Zpb3hFk9IwsTjnXNh1Nm92TLYXtkyYwririE7a8kTAiEAxL1tOmZwkiEsWTRIGbq1kkpAs1F1LiYwjahgBu54UaI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162844302},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"0ddfb48a98be74a38c2850b93ec42e1959b030ee","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.5.1_1775310537116_0.4000689233218855","host":"s3://npm-registry-packages-npm-production"}},"3.5.2":{"name":"omniroute","version":"3.5.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.5.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"f3e68e50c4973dd478cb49dc86a8a33fe7a81823","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.5.2.tgz","fileCount":6326,"integrity":"sha512-MGnocRbsyoZ9Y54upj/AGdEFAtQDxXnSLxj5Bl97NaWdpFx7OOz9EBOwuqowguMUZLxlJt6w2uG7v7u0aDubdA==","signatures":[{"sig":"MEQCIDbzFa1IMU7oIPLfAuXfUhz4RGgdtkVu3HeXYjIIITRhAiA59255+szpAsa4ygPTmaM1MmJfawO7jWgrf3VYDgzzLg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":181939118},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"b100325fe0e34ff2cbf20eb3e0b78929d25babbf","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.0.10","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.5.2_1775368668900_0.9529020327070115","host":"s3://npm-registry-packages-npm-production"}},"3.5.3":{"name":"omniroute","version":"3.5.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.5.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"8b4d1272b3b541ba68bb55e8ed7ad416d11992aa","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.5.3.tgz","fileCount":6263,"integrity":"sha512-6BhoW2rFiJPn8x2cOFZjeEExIaX8jqbemZbshUCMefb5ho9X2CRoergKA49IjddgoTNYBlL8YSFQC2zEOzg/OQ==","signatures":[{"sig":"MEUCIAFDiFUcJfF0SnaoVVg7llG+q/tqngvVc4S0m6Yw4yoQAiEAhaP2f9U5DyrMsNhjFTRnrE3Uj585+q3zihVy0TeQwtg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170003851},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"48c777be11ee77c09905287bf22c37a503d02f94","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.2","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^7.19.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.0.10","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.5.3_1775577617245_0.6431359958271126","host":"s3://npm-registry-packages-npm-production"}},"3.5.4":{"name":"omniroute","version":"3.5.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.5.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"96e79adee0d0593e57b03fffe6eeceecf02c3abb","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.5.4.tgz","fileCount":6289,"integrity":"sha512-VSBuM+vw4pcpAvvi3sWGax2rQi8rNceFTHCw+hWLVkWA1VsgeoChQLee3OcYEJAzRVP2QIziaAw54wvB0//6lw==","signatures":[{"sig":"MEYCIQCu6JTCc6YcN5BahSij4AETF8e7BaT1Afpsr/0OFYHi4gIhAJ26YxcciNK7LFrHqyPF4oocDWtUHn7dcEtNzkSWpYOH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170530831},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"ba7712505241d85bce00d6ae143505ddb7632c92","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.2","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^8.0.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.2","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.5.4_1775601896842_0.9042631001800039","host":"s3://npm-registry-packages-npm-production"}},"3.5.5":{"name":"omniroute","version":"3.5.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.5.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"ff9faf8d426547bd7ef3d8da786904dee1fa1134","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.5.5.tgz","fileCount":6326,"integrity":"sha512-TuEw8TSbJtPD8tzBcEZJVOJK71ayKki++VHv6DjFa/cj6NQlP3+Def3QfsnKWcssWS3ZQIhM5eB6sm0HNY1N3Q==","signatures":[{"sig":"MEQCIHHFSS28CG0EOUkXAAm+fZnnL5udnnoKYZk6zWglCxM+AiAXSu4XGZ4JXhKXYWgDfKE+HW3sbdjawWHXIBcx861r3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":171092397},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"bb4e0be5f47382f21881f2e76679d227e41fde16","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.12","react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.2","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^8.0.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.2","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.5.5_1775683819118_0.17949955097242265","host":"s3://npm-registry-packages-npm-production"}},"3.5.6":{"name":"omniroute","version":"3.5.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.5.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"bbb80a7ac31a678a6957afcf50e38a045fb8bc87","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.5.6.tgz","fileCount":1659,"integrity":"sha512-rcDQvhzeUKC6usFUduO/xZ44erK9nc24jfjJlEZTX8VfgAU3KwGh1NQyIY1vhd1J80hTkODGlmWl27RYVTSphw==","signatures":[{"sig":"MEUCIQDle8y+zBWfgAqx3MAduLlU8k1+XVU86mFbuy2isfKnegIgCwbS2IB8pWOsQ7xk1yU6CRddz03AEgsH8yTTWXUi+6Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55721662},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"1442c47bbb68383fc4a1c7295898cc8823d37274","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.12","react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^8.0.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.2","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.5.6_1775761342747_0.20680318227017835","host":"s3://npm-registry-packages-npm-production"}},"3.5.7":{"name":"omniroute","version":"3.5.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.5.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"db5da7bf7ab10bc924c687bfc5e0dddbf8183759","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.5.7.tgz","fileCount":1786,"integrity":"sha512-JPvPEamRZabVW6QXUAM1GeTcRl7vCbTXVGe/mKv/UP8QTK0Q8a1pwp5A1pMzwrvwz2Rukzgy1TnkaTusxRStJA==","signatures":[{"sig":"MEQCIFiYxBjqJewtlv3zz0wuSKbDsDkI/ih3zpFkQiCvImBSAiBI3xLsKjoJPBKcHJtt/bMPYmX2pdTlvu4BC11xhRi8jg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70237412},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"46a532540cc4362b5c74d4f468907a802ce84d18","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.12","react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","lowdb":"^7.0.1","react":"19.2.4","undici":"^8.0.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.2","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.5.7_1775766914549_0.17019876575145676","host":"s3://npm-registry-packages-npm-production"}},"3.5.8":{"name":"omniroute","version":"3.5.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.5.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"c4fa31ebbe6ba70be89a61024533fd466e3e2529","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.5.8.tgz","fileCount":7233,"integrity":"sha512-d27EtBCJHlAOQxch4e2TXJpER+E2evC2GZ+TDrAiGYBcnzcEY9BwpiF/lkBBtjE1qQYgY5u3Z75k0PDAOtoJZg==","signatures":[{"sig":"MEUCIHVyQXYEMuCIaHGbdYYuP5LxPo85xE3G9a0lqD8hVzpQAiEAuAsdtMA84Lg2KfblvkiZ2tNgkiYdgowi2ViFu/QqqW4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":241943172},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"815a7b6e1da4a535b4cdcc948f470fa79b9b9b65","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.12","react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^8.0.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.2","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.5.8_1775774607013_0.7461145208059865","host":"s3://npm-registry-packages-npm-production"}},"3.5.9":{"name":"omniroute","version":"3.5.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.5.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"10a06fd3886a03a0da2ad5cd535b2e323ab2e10a","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.5.9.tgz","fileCount":7249,"integrity":"sha512-MxIBrvGzOfcG5i+DyUBtU0UMBEX8J9GoKw6ssqiCBsu3/T4CBaVwif/FXr5X5wRQcIqeQhYhLRODqu5RTix1DQ==","signatures":[{"sig":"MEQCIAjNG5+jrdwpSFnyMi+4sWamKmPMF3m8qmtb176j1Y09AiAYRgbXohiH04w/g6HAFeFhIc6gTm5XoPSCYVeS++f2aA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242390291},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"4cd43f9c936a09067ef592f71b54962403fc8946","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.12","react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^8.0.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.2","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.5.9_1775784933611_0.8854705901201587","host":"s3://npm-registry-packages-npm-production"}},"3.6.0":{"name":"omniroute","version":"3.6.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.6.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"ba0d7a67f9f0364751192502a3ef2f4eb1646be4","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.6.0.tgz","fileCount":7248,"integrity":"sha512-xLH8tv7X8KYt09bQMPgeVTLHB3MgKL7adgEEp4BeRrb2eUDtu9gbtCenPBb2sAQkDRlAc4i6EJqFRkGPQlYeRg==","signatures":[{"sig":"MEUCIQCagXsrk+O7e7WaH138gePdWf97eS5O1v0TNu8KQrmHGgIgVaoab+me8Z/6FjYgJdR3KU0G5DfxbdcG04p7vnIi+T8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242108605},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"37cc63e4936901ab916f24a73d92b8cdb6b8a681","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.12","react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^8.0.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.2","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.6.0_1775826317483_0.28685079375690115","host":"s3://npm-registry-packages-npm-production"}},"3.6.1":{"name":"omniroute","version":"3.6.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.6.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"dd27edc597832352b2abdbdbe793e0d40857f9ee","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.6.1.tgz","fileCount":7268,"integrity":"sha512-gbK6WzL+eZALVKdb/wKzS+TN8UujAPtnzt0nW0d9YgEs8lT7YkbIzJmh5Ol23O6GlUj4RfUKlS2wixzKm8tPIA==","signatures":[{"sig":"MEQCIFf/ESKIPHEkKRU7ShMBYLzQA8q4KQYDEIsQl3KPzMVGAiBmIyoF7MN5dnXs10jBJCjyeyLXRM5RIcbCRGRcq4CRSQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242842001},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"515674b6cf7cc29b3db027c9119e9b2ef12e0ba7","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.12","react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^8.0.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.2","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.6.1_1775834866139_0.37435104540533315","host":"s3://npm-registry-packages-npm-production"}},"3.6.2":{"name":"omniroute","version":"3.6.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.6.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d17fd471c5e7b0ef9a91b0cb5ea3ca4dab178562","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.6.2.tgz","fileCount":7276,"integrity":"sha512-WmYUzOwpLRmnHFlfziuZXLNydlkhu3E+ptM7gt/5mYGJ82sMa+qVfI2xAFKRC6Fyc6LgYQoF04DlzHDX1eOGFg==","signatures":[{"sig":"MEYCIQDHlWDzNqZPLSboPv5SYO8KIS3ObOhBypEFxX5fLrqWYgIhANYWhvarz0a4JHaPSKoAjmDqlDksEU1EywNdhCTZ6/Bk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243474473},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"9e4495b85b210738c85cf6ad2e5079eb35948f36","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.12","react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.4","undici":"^8.0.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.2","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.6.2_1775931690718_0.7329868786142384","host":"s3://npm-registry-packages-npm-production"}},"3.6.3":{"name":"omniroute","version":"3.6.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.6.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"f5e4391b1134973894bda795876303c9955a6f6f","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.6.3.tgz","fileCount":7297,"integrity":"sha512-bBuzb82xGcXKyP3ECjGTAQCY1WQypacgjBmY9yRTdig5vUvrYpWnJewDVYjITzFmXIcYh8R6Md8lImrzWwHZGQ==","signatures":[{"sig":"MEUCIGmB+wa0jnYaI0u92PB4iW7MnRrqZA5Qbrm7NCZOhXjGAiEA9zSvGrjtCsU06wBExsdBozBhbT+1mDbBA/5TIP930f4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243837161},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"6b64702054903cc97b454fc0fb5abda9fc24c228","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.12","react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.0.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.3","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.6.3_1775944726690_0.6031502084401925","host":"s3://npm-registry-packages-npm-production"}},"3.6.4":{"name":"omniroute","version":"3.6.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.6.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"38226c154177079ef9f201e1d498fa5abc4ece43","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.6.4.tgz","fileCount":7376,"integrity":"sha512-MXq3JW9Wg2gezj+GkXcJ0hPMGOoxayRtMP9eIQqPY8UNH3sQazv1aGYv1MDFqoBwTRlZQrQwNmB9YiMijrC/jA==","signatures":[{"sig":"MEQCIQD3/epWX9C8PMvGcTkB3uu9AniGytmc6WCFHChmxAG0GQIfM9xupBybg0/gYgQsepc6c/Sukv7LXSUHVWsh5FWjQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246633644},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"531d49fa005b9fba34be04ca234c7ef812cfebba","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.12","react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.0.2","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.3","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.6.4_1776035608149_0.4085242285312196","host":"s3://npm-registry-packages-npm-production"}},"3.6.5":{"name":"omniroute","version":"3.6.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.6.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"544d7f332ff0db8175850cf29df340d867d4e89d","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.6.5.tgz","fileCount":7453,"integrity":"sha512-5n9DCZSUj6/gYBrf+aB2Rx+TrZ8T9cOxYG+JtUyZLSBJTF7uwFeN5XwTHc1RPp8CHkHsGsjLi6O1Q9xhcChgpw==","signatures":[{"sig":"MEMCIHE3TSsW0+eSxPYBT5Dcarw78vKShfTuyP01OE2yC0lAAh8i4lW3Rulc2sZJJA5ni0yK2s0C8Mlfr9vTIc44qREj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":248347269},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"eaec3279abfb2e3c63903c92657c0a823b13b551","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.mjs","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.12","react":"$react","dompurify":"^3.3.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.1.0","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.3","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.6.5_1776129195579_0.08780758057212079","host":"s3://npm-registry-packages-npm-production"}},"3.6.6":{"name":"omniroute","version":"3.6.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.6.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.ts","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"eb8acbb382cfbcd63c3c96bf92d2424208c0aeb9","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.6.6.tgz","fileCount":5535,"integrity":"sha512-Y+94QdAJ5lDuOpxlBUqV3y+Ch41qtZM0kGlw5ndkjzVWmCGxCkEc+dikqW37dIhgJiRL7UbC3WQxwayMxD8aug==","signatures":[{"sig":"MEYCIQC+9jIdncTKVytITYEUsjdndzmSGP31Pctll5Xi08+F3AIhAOE86GFIdqyV8nOi//0SSbssKKO+zm0pFGQ/GuxJrCh5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214136010},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=20.20.2 <21 || >=22.22.2 <23"},"gitHead":"9e45baae58644a3001b6d1012a461e7f5726184b","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.ts","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx/esm scripts/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.ts","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.ts","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.ts","check:node-runtime":"node --import tsx/esm scripts/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx/esm scripts/validate-pack-artifact.ts","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.14","react":"$react","dompurify":"^3.4.0","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.1.0","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.4.0","next-intl":"^4.8.3","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.3","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.6.6_1776329276847_0.35066168199091496","host":"s3://npm-registry-packages-npm-production"}},"3.6.7":{"name":"omniroute","version":"3.6.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.6.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.ts","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"437acc5f711f69730d94cfe602f10c342382f5e3","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.6.7.tgz","fileCount":5535,"integrity":"sha512-gTd2SQYfcFvHAg9e4CMuBMaFT7/xrT2MbmzOLU/cVQxvcp0HLXSStr8LmYU1Yc3M1NZoFsHcTonJi9y8xT9+iw==","signatures":[{"sig":"MEUCIC0o/ntnmquuTlJ4p007kqQv9UJbqRK5ByhB4SVxuPO2AiEAnoTEyyYPaNSWh88fmrW5yeTRzNTc5hNUKWwNhcmK28Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214715080},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=20.20.2 <21 || >=22.22.2 <23"},"gitHead":"fb2141382f2b7af57692fae1caf7a24eff742822","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.ts","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx/esm scripts/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.ts","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.ts","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.ts","check:node-runtime":"node --import tsx/esm scripts/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx/esm scripts/validate-pack-artifact.ts","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.14","react":"$react","dompurify":"^3.4.0","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.7","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.2","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.1.0","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.4.0","next-intl":"^4.8.3","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.3","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.6.7_1776340281946_0.06829192087207381","host":"s3://npm-registry-packages-npm-production"}},"3.6.8":{"name":"omniroute","version":"3.6.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.6.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"0f784e03dc95a05f88c5836f1a396a68a5c033c3","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.6.8.tgz","fileCount":6100,"integrity":"sha512-k7GVU727uB1qgbl4mFLtjnWZBA1LqDkh47e3L6Kzt9AuDgOE9fX6m2VUW2ZT8f1twIa2q2WGOYRhhrjsj5bQqQ==","signatures":[{"sig":"MEUCIQCnzSJuQbcP8lFF175XSf842n2wHn4Mn/MxTfzsrsw8swIgG7rK/nmIzOamdySz7G+PVnhPEGnxwXuTei9F8CadIxU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":227501821},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=20.20.2 <21 || >=22.22.2 <23 || >=24.0.0 <25"},"gitHead":"71b256aad56f7e528db285035ff30cee9846934a","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.ts","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx/esm scripts/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.ts","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.ts","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.ts","check:node-runtime":"node --import tsx/esm scripts/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx/esm scripts/validate-pack-artifact.ts","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.14","react":"$react","dompurify":"^3.4.0","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.11.0","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.14.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.1.0","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.4.0","next-intl":"^4.8.3","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.3","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.6.8_1776492236364_0.2981477686789453","host":"s3://npm-registry-packages-npm-production"}},"3.6.9":{"name":"omniroute","version":"3.6.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.6.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"1378d73efc9a3934bf7a24bf1d0493bc10d5f522","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.6.9.tgz","fileCount":6166,"integrity":"sha512-Oy1ty9Wy3+djnsy26/5ckVKgk2Bt35XahauBjn3yuzX3gQiPyxztC9LcDCZv8sjo73DE0ZyZsDVD3R7KRzcIJg==","signatures":[{"sig":"MEQCIH5DZD1ZYzG/xsNwpVhZRtqVPW/5dWMZpCaZIIi4rTYVAiBailADUBqHtAWNedmseRUQ5KWfOIiElo74tCz0DqjxIA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231243803},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=20.20.2 <21 || >=22.22.2 <23 || >=24.0.0 <25"},"gitHead":"3432dfd280e30cba3484974a560dcc55374a59c5","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.ts","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx/esm scripts/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.ts","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=1 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.ts","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.ts","check:node-runtime":"node --import tsx/esm scripts/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx/esm scripts/validate-pack-artifact.ts","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.14","react":"$react","dompurify":"^3.4.0","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.11.0","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.14.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.1.0","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.4.0","next-intl":"^4.8.3","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.3","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.6.9_1776640410439_0.9104236216828798","host":"s3://npm-registry-packages-npm-production"}},"3.7.0":{"name":"omniroute","version":"3.7.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.7.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"c30d1c148f45e28eddaeb5cd258d9e9382c18455","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.7.0.tgz","fileCount":6728,"integrity":"sha512-kTLt44gE0UJiFhSIZizLAi8udAqlZsuw+giKHKUw9OBSSZ1E1iKcfyfpy7kwCi83Rw94eukrKsXsnpOIt/6Kow==","signatures":[{"sig":"MEUCIDbuHpfjl8jolL+f3bXlyC0K74UzGjx9tqMrXFz6kAZdAiEAtg7eXGtqw4udezFvoA+/GA8/9CFZddffvL1fbD51ZmY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":270264158},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=20.20.2 <21 || >=22.22.2 <23 || >=24.0.0 <25"},"gitHead":"6df01aeb34cc32e0ece8fe162275dd679556e12b","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx/esm scripts/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.ts","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.ts","check:node-runtime":"node --import tsx/esm scripts/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx/esm scripts/validate-pack-artifact.ts","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.14","react":"$react","postcss":"^8.5.10","dompurify":"^3.4.0","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.11.0","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.14.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.1.0","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","react-is":"^19.2.5","recharts":"^3.7.0","dompurify":"^3.4.0","next-intl":"^4.8.3","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@swc/helpers":"0.5.21","monaco-editor":"^0.55.1","@lobehub/icons":"^5.5.4","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","tls-client-node":"^0.1.13","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.4","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.7.0_1777189303859_0.9096183511396427","host":"s3://npm-registry-packages-npm-production"}},"3.7.1":{"name":"omniroute","version":"3.7.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.7.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"950c48e57558771a24cc3be40ff6e02bd29a014f","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.7.1.tgz","fileCount":6772,"integrity":"sha512-eCtz5naT2xOWTKY+JDkmDMHTHpk2HaZvwSjT5CqnrWMQwFwHSdJv9SQWUi6A9VWYNvyFB+ieP1PYpP5QmYKHqg==","signatures":[{"sig":"MEQCIAD77gOVJUAYh8H7qoimFzswypueUD+PaWwVOHEgy4GPAiBE7dBmNq66uTC4m/nfxwr7GfIhX7gw+VfFON31KtzTtw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":275319792},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=20.20.2 <21 || >=22.22.2 <23 || >=24.0.0 <25"},"gitHead":"3ff61377673c8ea6b2b3f6af1b57831caad3b23e","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx/esm scripts/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.ts","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.ts","check:node-runtime":"node --import tsx/esm scripts/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx/esm scripts/validate-pack-artifact.ts","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","electron:smoke:packaged":"node scripts/smoke-electron-packaged.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.14","react":"$react","postcss":"^8.5.10","dompurify":"^3.4.0","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.11.0","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.14.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.1.0","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","react-is":"^19.2.5","recharts":"^3.7.0","dompurify":"^3.4.0","next-intl":"^4.8.3","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@swc/helpers":"0.5.21","jsonc-parser":"^3.3.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.5.4","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","tls-client-node":"^0.1.13","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.4","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.7.1_1777265572997_0.6174075582571403","host":"s3://npm-registry-packages-npm-production"}},"3.7.2":{"name":"omniroute","version":"3.7.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.7.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e921c5d30023e31ad1776d844998f1c3a5a0323d","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.7.2.tgz","fileCount":4408,"integrity":"sha512-UT4yEMzCFt6Fe1k/Gf1WAevnFiaEXDfM1WiaPn5QUThbJd2wm728eGHQNVposbABZ8kHjXY4sEaRKVGuU7Zanw==","signatures":[{"sig":"MEUCIQDbn2Fn7o0NshpOySZw/tFREHRmdzDe9ePpnkzxxQdniwIgRupc9XC3a2Gpn8IWDMUARC0TBZS0sn0Na4RFmDpwpb8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132578943},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=20.20.2 <21 || >=22.22.2 <23 || >=24.0.0 <25"},"gitHead":"dc103318abcc4bca61eda79548389c6b84ced4b8","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx/esm scripts/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.ts","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.ts","check:node-runtime":"node --import tsx/esm scripts/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx/esm scripts/validate-pack-artifact.ts","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","electron:smoke:packaged":"node scripts/smoke-electron-packaged.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.14","react":"$react","postcss":"^8.5.10","dompurify":"^3.4.0","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.11.0","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.14.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.1.0","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","react-is":"^19.2.5","recharts":"^3.7.0","dompurify":"^3.4.0","next-intl":"^4.8.3","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@swc/helpers":"0.5.21","jsonc-parser":"^3.3.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.5.4","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","tls-client-node":"^0.1.13","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.4","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.7.2_1777357231203_0.02358703263824702","host":"s3://npm-registry-packages-npm-production"}},"3.7.3":{"name":"omniroute","version":"3.7.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.7.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"663b527df3ff5896f1a18a128f6886cfdbf67800","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.7.3.tgz","fileCount":4408,"integrity":"sha512-LrjPmsBEfS+oLey1LB+WfmxSNAlJf+RxB+bxrvXwfVQWi2x4c0YvD6I9KKIlTHfpSZtfL0zh2q5fzHiGdYbQyw==","signatures":[{"sig":"MEUCIQD0wOyy1ccjYA44nzl1H7kZSdb9Vj8hCfo5DJg5DpY1QgIgOXIeiGjCyFLnEO1foehiqc9Nzc0z/BzEuVE2qY0attg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132573672},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=20.20.2 <21 || >=22.22.2 <23 || >=24.0.0 <25"},"gitHead":"ae8a7d2dc5d1a036a806f8ad8390ad96fc02b7af","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx/esm scripts/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.ts","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.ts","check:node-runtime":"node --import tsx/esm scripts/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx/esm scripts/validate-pack-artifact.ts","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","electron:smoke:packaged":"node scripts/smoke-electron-packaged.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.14","react":"$react","postcss":"^8.5.10","dompurify":"^3.4.0","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.11.0","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.14.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.1.0","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","react-is":"^19.2.5","recharts":"^3.7.0","dompurify":"^3.4.0","next-intl":"^4.8.3","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@swc/helpers":"0.5.21","jsonc-parser":"^3.3.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.5.4","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","tls-client-node":"^0.1.13","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.4","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.7.3_1777381864659_0.786224455854658","host":"s3://npm-registry-packages-npm-production"}},"3.7.4":{"name":"omniroute","version":"3.7.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.7.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"83f3634fcb7886b04b2f2ee7987a2a4493768e56","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.7.4.tgz","fileCount":4427,"integrity":"sha512-vcUGYmszhU0dM0ykOMGEwHQ7BwWQqypJNAxrwFgqBsAW4SBoMLjpPOV4ylyWw7Gj4VG2kA5MCtdHn9SZcTiBiQ==","signatures":[{"sig":"MEUCIGOjRVz8TirMGAPGZoqp4s0hbrzveqar6W31YNqvfIfUAiEA/YS9y1iklxYR8PiP4Y62uE49t4E5HD+XwAvX5+w0vl0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":133272261},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=20.20.2 <21 || >=22.22.2 <23 || >=24.0.0 <25"},"gitHead":"9e0d2f6a70bd9087d16f6c5852e731fc318c1370","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx/esm scripts/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.ts","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.ts","check:node-runtime":"node --import tsx/esm scripts/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx/esm scripts/validate-pack-artifact.ts","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","electron:smoke:packaged":"node scripts/smoke-electron-packaged.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.14","react":"$react","postcss":"^8.5.10","dompurify":"^3.4.0","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.11.0","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.14.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.1.0","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","react-is":"^19.2.5","recharts":"^3.7.0","dompurify":"^3.4.0","next-intl":"^4.8.3","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@swc/helpers":"0.5.21","jsonc-parser":"^3.3.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.5.4","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","node-machine-id":"^1.1.12","tls-client-node":"^0.1.13","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.4","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.7.4_1777422438438_0.9714068686421085","host":"s3://npm-registry-packages-npm-production"}},"3.7.5":{"name":"omniroute","version":"3.7.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.7.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"7cfbc702e104efd513ff74b88d32463709083820","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.7.5.tgz","fileCount":4439,"integrity":"sha512-AFER6E5c77UWukw0pIqGqTXnG/xFEs90qHD4pj86BbtcQjipf3cTNGrkx4S910PM4k4AFOkkVRXQ99Jvo3vGLA==","signatures":[{"sig":"MEYCIQCWlZcp2Uhs/+PmcsYXTXYuLSARB7ezHmkBDYYBVuMVqwIhALDQYBxNlUFO2lptUXkQlS2E8cLucMg2PP1sWL3IIJVG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155546211},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=20.20.2 <21 || >=22.22.2 <23 || >=24.0.0 <25"},"gitHead":"24ffdde03d1551faf762431a6b40a5831607d488","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx/esm scripts/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.ts","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.ts","check:node-runtime":"node --import tsx/esm scripts/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx/esm scripts/validate-pack-artifact.ts","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","electron:smoke:packaged":"node scripts/smoke-electron-packaged.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.14","react":"$react","postcss":"^8.5.10","dompurify":"^3.4.0","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.11.0","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.14.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.1.0","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","react-is":"^19.2.5","recharts":"^3.7.0","dompurify":"^3.4.0","next-intl":"^4.8.3","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.21","jsonc-parser":"^3.3.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.5.4","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","node-machine-id":"^1.1.12","tls-client-node":"^0.1.13","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","prop-types":"^15.8.1","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.4","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.7.5_1777524594345_0.5119897706424803","host":"s3://npm-registry-packages-npm-production"}},"3.7.6":{"name":"omniroute","version":"3.7.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.7.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"c4ac797cded746052b348340b61c9b03286400f8","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.7.6.tgz","fileCount":4443,"integrity":"sha512-lkqYzy8MXy65iaRLetNxcXDhLGdEqwFwoCgAHV1gNIH+SJOSavHEvvZ2DsQ7YYK/JRkLtYRhAjrp9p2011jEDQ==","signatures":[{"sig":"MEYCIQC1F67cV9u8hkfc5ZsIOl7NshBJXLTwQWq5In3WuriOSAIhAOBTOZ1gHGOM7DkLNx7rM9WdBPOwsL5df+Mk7o3oVMTf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156141006},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=20.20.2 <21 || >=22.22.2 <23 || >=24.0.0 <25"},"gitHead":"cc460b36b9ef0ba5b486ffb2eba81c1f461d27b8","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx/esm scripts/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.ts","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.ts","check:node-runtime":"node --import tsx/esm scripts/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx/esm scripts/validate-pack-artifact.ts","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","electron:smoke:packaged":"node scripts/smoke-electron-packaged.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.14","react":"$react","postcss":"^8.5.10","dompurify":"^3.4.0","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.11.0","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.14.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.1.0","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","react-is":"^19.2.5","recharts":"^3.7.0","dompurify":"^3.4.0","next-intl":"^4.8.3","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.21","jsonc-parser":"^3.3.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.5.4","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","node-machine-id":"^1.1.12","tls-client-node":"^0.1.13","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.4","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.7.6_1777572437229_0.5669827985683751","host":"s3://npm-registry-packages-npm-production"}},"3.7.7":{"name":"omniroute","version":"3.7.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.7.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"cede0562f1edf6daa7a4c3b68e7c9e17b2f12507","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.7.7.tgz","fileCount":4480,"integrity":"sha512-bjoFiwYG8UqyrVput5JeQU+mIAJwXhqBbzhBy1InN3wK+gLT7tTZaxNdB07Ut36KxLU3fN3jPtkzmYaYh+m1wA==","signatures":[{"sig":"MEUCIDnE9OwsoOIZui0sC47y6uf1/FymHiib9DHGCNrU85LiAiEAjWV2rn/5pxrPsOL0YZoHr6qyhd5c5x0YiJfzwPLdSBk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156840072},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=20.20.2 <21 || >=22.22.2 <23 || >=24.0.0 <25"},"gitHead":"10b125115e06174d0b0c15a20f35296c0199237a","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx/esm scripts/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","uninstall":"node scripts/uninstall.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.ts","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.ts","check:node-runtime":"node --import tsx/esm scripts/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx/esm scripts/validate-pack-artifact.ts","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","electron:smoke:packaged":"node scripts/smoke-electron-packaged.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.14","react":"$react","postcss":"^8.5.10","dompurify":"^3.4.0","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.11.0","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.14.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.1.0","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","react-is":"^19.2.5","recharts":"^3.7.0","dompurify":"^3.4.0","next-intl":"^4.8.3","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.21","jsonc-parser":"^3.3.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.5.4","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","node-machine-id":"^1.1.12","tls-client-node":"^0.1.13","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.4","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.7.7_1777608208854_0.43487159832505506","host":"s3://npm-registry-packages-npm-production"}},"3.7.8":{"name":"omniroute","version":"3.7.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.7.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"9556b357843d4e8dd18c908bafdd48f37f918ec4","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.7.8.tgz","fileCount":4488,"integrity":"sha512-EPM8Shy+ouCFWqX1jEDX1NG8CjIx+ggw16Ib8zZjCIwaXcG+cPEkzLgWLIUyEh6tcThjQpZcuZesF8AbCX/0xQ==","signatures":[{"sig":"MEUCICjXhKgOOrrjgOqX5wLTZhxYsXzsuEWpw03h9oALX1AbAiEAvibaPdwDSmIP+0xVXWA+dTNhaLk+VmX8dkuMPcX3IPI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":157018906},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=20.20.2 <21 || >=22.22.2 <23 || >=24.0.0 <25"},"gitHead":"476ef48fa5e470df497fa8b34fbacdba325e7ec3","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx/esm scripts/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","uninstall":"node scripts/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.ts","check:node-runtime":"node --import tsx/esm scripts/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx/esm scripts/validate-pack-artifact.ts","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","electron:smoke:packaged":"node scripts/smoke-electron-packaged.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.14","react":"$react","postcss":"^8.5.10","dompurify":"^3.4.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.11.0","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.14.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.15.0","lowdb":"^7.0.1","react":"19.2.5","undici":"^8.1.0","express":"^5.2.1","js-yaml":"^4.1.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","react-is":"^19.2.5","recharts":"^3.7.0","next-intl":"^4.11.0","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.21","jsonc-parser":"^3.3.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.5.4","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","node-machine-id":"^1.1.12","tls-client-node":"^0.1.13","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","jsdom":"^29.0.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^6.0.2","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"16.2.4","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.7.8_1777711923134_0.8081727304514643","host":"s3://npm-registry-packages-npm-production"}},"3.7.9":{"name":"omniroute","version":"3.7.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.7.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"8e87ae2a0283a8bcbeab978d761512d84c4029c8","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.7.9.tgz","fileCount":5886,"integrity":"sha512-ui4mI9VqA9BRtohSVDlfNv3OEYAw9hNgJgdzj+xXkNzVCNdHuH3TbAisMAjnrpS7gjPb1mVqY20KfcdSoXL/5Q==","signatures":[{"sig":"MEUCIDi9lC7oNIT3UzcZI4k4X/FhfU8nRJjfg7KBh4ncuoRcAiEAybQMY6E5WrFk3fSCcDffBmFm1NDecdxfc1+IBuqPvTI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147912794},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=20.20.2 <21 || >=22.22.2 <23 || >=24.0.0 <27"},"gitHead":"7665ad3950bc4bf94f1fdadf58edddb1d13b44da","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","env:sync":"node scripts/sync-env.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx/esm scripts/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","uninstall":"node scripts/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","prebuild:docs":"node scripts/generate-docs-index.mjs","test:coverage":"c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/uninstall.mjs --full","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","test:integration":"node --import tsx/esm --test tests/integration/*.test.ts","check:node-runtime":"node --import tsx/esm scripts/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx/esm scripts/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx/esm src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check-pr-test-policy.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","electron:smoke:packaged":"node scripts/smoke-electron-packaged.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"hono":"^4.12.14","react":"$react","postcss":"^8.5.10","dompurify":"^3.4.2","lodash-es":"^4.18.1","react-dom":"$react-dom","path-to-regexp":"^8.4.0","@hono/node-server":"^1.19.13"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.11.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.14.1","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.4.3","jose":"^6.1.3","next":"^16.2.3","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.0","lowdb":"^7.0.1","react":"19.2.5","marked":"^18.0.3","undici":"^8.2.0","express":"^5.2.1","fuse.js":"^7.3.0","js-yaml":"^4.1.0","mermaid":"^11.14.0","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","react-is":"^19.2.5","recharts":"^3.7.0","next-intl":"^4.11.0","react-dom":"19.2.5","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.21","jsonc-parser":"^3.3.1","lucide-react":"^1.14.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.5.4","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","node-machine-id":"^1.1.12","tls-client-node":"^0.1.13","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","isomorphic-dompurify":"^3.12.0","http-proxy-middleware":"^3.0.5","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.2","vitest":"^4.1.2","wait-on":"^9.0.4","wtfnode":"^0.10.1","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^6.0.2","@types/node":"^25.2.3","gray-matter":"^4.0.3","lint-staged":"^16.2.7","node-loader":"^2.1.0","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.2","eslint-config-next":"16.2.4","@tailwindcss/postcss":"^4.1.18","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.7.9_1778041879042_0.8372604531473549","host":"s3://npm-registry-packages-npm-production"}},"3.8.0":{"name":"omniroute","version":"3.8.0","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.0","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"3e6e85e684c96b14229808705aded83b4c6bf77a","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.0.tgz","fileCount":6464,"integrity":"sha512-FRI2BAjeoFTGwNxJFLCVuhWs2LSbAiAC3gDGnLsTbOHhLyRYXjRVGQ5PKSSUzWLfHUvgZE6ZVsWdEp4F5H095g==","signatures":[{"sig":"MEYCIQCglS+GsoPBH4zp6FQzUWKOx/i5yjRg3JKjaPN/qNfgAgIhAPXUle/3FQvGD843CeX3SV8y7A3YAM0y6/8J5AlRRRQZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204446656},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.22.2 <23 || >=24.0.0 <27"},"gitHead":"39526b2b8c72c86671cdbad6575d9ee3e8d2f95e","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-concurrency=10 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-concurrency=10 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","prebuild:docs":"node scripts/docs/generate-docs-index.mjs && node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 75 --lines 75 --functions 75 --branches 70 node --import tsx --test --test-concurrency=1 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.12.1","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.15.0","dependencies":{"ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.21.1","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.6","fflate":"^0.8.3","marked":"^18.0.3","sql.js":"^1.14.1","undici":"^8.2.0","express":"^5.2.1","fuse.js":"^7.3.0","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^14.0.3","next-intl":"^4.12.0","react-dom":"19.2.6","bottleneck":"^2.19.5","cli-table3":"^0.6.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.3","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.21","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","better-sqlite3":"^12.10.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","isomorphic-dompurify":"^3.13.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.6","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","cross-env":"^10.1.0","typescript":"^6.0.3","@types/node":"^25.7.0","lint-staged":"^17.0.4","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.3","eslint-config-next":"16.2.6","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.1","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.0_1779301133365_0.05851854411066526","host":"s3://npm-registry-packages-npm-production"}},"3.8.1":{"name":"omniroute","version":"3.8.1","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.1","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"2642181152aa7384d604dd28193c2ec013e413b0","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.1.tgz","fileCount":6461,"integrity":"sha512-KaafUish+0vpkxj2fV23HVl153k7UZJ2hpHyb52BTiuf1QAY7g1gZBpNZTZpFBCftbGKPH5iVrJ7T1DJRGXYsA==","signatures":[{"sig":"MEYCIQDI4XV6Ns1uRMtQUuWWcTydto1rvAUOsvFLKs2nB7ZouQIhAPtAq1IorlNurMNff7TecwCZR/m2rP1mug7QbSogs+OL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207486146},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.22.3 <23 || >=24.0.0 <27"},"gitHead":"b804f481d29f51f481e2a3a50b6ef90c04a1651d","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-concurrency=10 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-concurrency=10 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","prebuild:docs":"node scripts/docs/generate-docs-index.mjs && node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 75 --lines 75 --functions 75 --branches 70 node --import tsx --test --test-concurrency=1 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.12.1","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.15.0","dependencies":{"ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.6","fflate":"^0.8.3","marked":"^18.0.4","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","fuse.js":"^7.3.0","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^14.0.3","next-intl":"^4.12.0","react-dom":"19.2.6","bottleneck":"^2.19.5","cli-table3":"^0.6.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.3","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.21","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","https-proxy-agent":"^9.0.0","@monaco-editor/react":"^4.7.0","isomorphic-dompurify":"^3.14.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","cross-env":"^10.1.0","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.6","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.1_1779339898143_0.16099031878413195","host":"s3://npm-registry-packages-npm-production"}},"3.8.2":{"name":"omniroute","version":"3.8.2","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.2","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"7d0d1d95b90981d3d00f99973c7e9d681749db8e","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.2.tgz","fileCount":6528,"integrity":"sha512-OXIcfJY529xt3pGt9hso1nThHZ6j0cD6bGqQjbH4LeoA8siRiQMet4XMdu/3XiLecVJnSoYni62ePWd+Akfcwg==","signatures":[{"sig":"MEUCIQDj6BsX4B2HqpTBwLp7E3TBE1bHBLRCk3WPDGJKjhJxBwIgV0q49MIu17DDFLG4nyYgcuFYtWTsFjrxCvpx/OF8Xso=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":210396306},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.22.3 <23 || >=24.0.0 <27"},"gitHead":"ebe0b6607cb6d9e4d06c9f2856347a51e7f40ad6","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-concurrency=10 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit --test-concurrency=10 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","prebuild:docs":"node scripts/docs/generate-docs-index.mjs && node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 75 --lines 75 --functions 75 --branches 70 node --import tsx --test --test-concurrency=1 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.12.1","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.15.0","dependencies":{"ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.6","fflate":"^0.8.3","marked":"^18.0.4","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","fuse.js":"^7.3.0","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^14.0.3","next-intl":"^4.12.0","react-dom":"19.2.6","bottleneck":"^2.19.5","cli-table3":"^0.6.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.3","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.21","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","isomorphic-dompurify":"^3.14.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","cross-env":"^10.1.0","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.6","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.2_1779513471610_0.30004535107281094","host":"s3://npm-registry-packages-npm-production"}},"3.8.3":{"name":"omniroute","version":"3.8.3","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.3","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"84b54742b876c7421c0e5a938c6fcfb851b6d546","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.3.tgz","fileCount":5441,"integrity":"sha512-EDc+3l9XkPjmOjay7xQHinB0IP4FBylqCk4FYsVP+mmQUvQLySVqLJfnpWqK9lUHnVzO9Qvaq03ACoYmg3kOYg==","signatures":[{"sig":"MEUCIQDj02XUyLsjaBDG0flTehGoRQlUgfXeJJiq2/vGgupapwIgYJOtYEtthQIEe+MLJ4TtehmInV44y8NyeyYzBWel62Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":206123642},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.22.3 <23 || >=24.0.0 <27"},"gitHead":"75d9a83c25dd08130a1825787e4e0660397f2c4f","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-concurrency=10 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit --test-concurrency=10 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 75 --lines 75 --functions 75 --branches 70 node --import tsx --test --test-concurrency=1 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.12.1","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.15.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.6","fflate":"^0.8.3","marked":"^18.0.4","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^14.0.3","next-intl":"^4.12.0","react-dom":"19.2.6","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","cli-table3":"^0.6.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.21","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.6","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.3_1779658522747_0.4848829510567074","host":"s3://npm-registry-packages-npm-production"}},"3.2.8":{"name":"omniroute","version":"3.2.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.2.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"8f10e850598d08745709516be414fa38460152bd","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.2.8.tgz","fileCount":5727,"integrity":"sha512-TEfmPIufABLA/l76+OWavS0L8yWu4Y6TLWHHQkhQjxDhuCSBhuC0GoNfKRdYt/UetQzkSVIjRlk3fribgcqUtw==","signatures":[{"sig":"MEYCIQDNVnaoEN5dWne2Bca0tMa50GYQW4Z8zPM72X6/clIuVQIhAItahdZqndrUiZFCQcOQL6Y7GxxP3RUyzIRKnoCMGitX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149680484},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=18.0.0 <24.0.0"},"gitHead":"3fb72b973a2a0858a4d2f87c0e0dd2afa7640013","scripts":{"dev":"node scripts/run-next.mjs dev","lint":"eslint .","test":"node --import tsx/esm --test tests/unit/*.test.mjs","build":"node scripts/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/run-next.mjs start","prepare":"husky","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node scripts/prepublish.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","postinstall":"node scripts/postinstall.mjs","system-info":"node scripts/system-info.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","check:cycles":"node scripts/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","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:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","check:docs-sync":"node scripts/check-docs-sync.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","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:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"dompurify":"^3.3.2","path-to-regexp":"^8.4.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"10.9.8","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.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"22.22.3","dependencies":{"ora":"^9.1.0","tsx":"^4.21.0","zod":"^4.3.6","jose":"^6.1.3","next":"^16.0.10","open":"^11.0.0","pino":"^10.3.1","uuid":"^13.0.0","lowdb":"^7.0.1","react":"19.2.4","keytar":"^7.9.0","undici":"^7.19.2","express":"^5.2.1","wreq-js":"^2.0.1","zustand":"^5.0.10","bcryptjs":"^3.0.3","recharts":"^3.7.0","dompurify":"^3.3.2","next-intl":"^4.8.3","react-dom":"19.2.4","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.2","pino-pretty":"^13.1.3","@swc/helpers":"0.5.19","monaco-editor":"^0.55.1","@lobehub/icons":"^5.0.1","better-sqlite3":"^12.6.2","node-machine-id":"^1.1.12","https-proxy-agent":"^8.0.0","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^3.0.5","@modelcontextprotocol/sdk":"^1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","wait-on":"^9.0.4","prettier":"^3.8.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","tailwindcss":"^4","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/keytar":"^4.4.0","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.58.2","@types/react-dom":"^19.2.3","typescript-eslint":"^8.56.0","eslint-config-next":"^16.0.10","@tailwindcss/postcss":"^4.1.18","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.2.8_1779659050662_0.875295552417662","host":"s3://npm-registry-packages-npm-production"}},"3.8.4":{"name":"omniroute","version":"3.8.4","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.4","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d125011ae0c7a21a72270a08d5a011fabdf4f869","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.4.tgz","fileCount":5684,"integrity":"sha512-dnmBHxePNPAG+oLD+OMJqcerGl4XLhlFqJBeTrelERW1aphFcfSa1eaLlA6Cr8AGeCfIEBZ1snPDPtKsGmj6SQ==","signatures":[{"sig":"MEYCIQCEIHnyXxpXEp522R3nTbnXUm4scHSXzi/Ipg2cbOazkwIhANV+L90pqgz/GSOhkDPUaw9w/pBGVqlj7c0ppBndJpRX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":212287282},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.22.3 <23 || >=24.0.0 <27"},"gitHead":"9145339a06662bb3fe6754ab27343d1bd14c9b88","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --test --test-concurrency=20 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 75 --lines 75 --functions 75 --branches 70 node --max-old-space-size=8192 --import tsx --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --test --test-force-exit --test-isolation=none tests/unit/*.test.ts","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","cli-table3":{"ansi-regex":"^5.0.1","strip-ansi":"^6.0.1","string-width":"^4.2.3"},"ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.6","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^7.3.0","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","proxifly":"^3.0.1","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^14.0.3","next-intl":"^4.12.0","react-dom":"19.2.6","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","cli-table3":"^0.6.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.21","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.6","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.4_1779858970817_0.7306454910928526","host":"s3://npm-registry-packages-npm-production"}},"3.8.5":{"name":"omniroute","version":"3.8.5","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.5","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"8307460f87fc1645c74ae9509e58aefea4952454","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.5.tgz","fileCount":5684,"integrity":"sha512-kvkevPHIGzq6mFLddZ2z7GDhdGa9WWcY8TFGsObSdTWSSjyeYTYgBc5Yu3rPnU5rXlbuj6B8nGLJLTHFiGMJbw==","signatures":[{"sig":"MEUCIEeYGdDaTgxPahP4Zgdo7ChU27Rcd+IM9Ggh+wDGrzx1AiEAk0eKRf3AHolXRi+fO1NXBmcCB5lG5mSdA6ge6YdCzJk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":212345963},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.22.3 <23 || >=24.0.0 <27"},"gitHead":"f8e726fd1c60ad24c4226de6ae63aafc9074f6ac","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --test --test-concurrency=20 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 75 --lines 75 --functions 75 --branches 70 node --max-old-space-size=8192 --import tsx --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --test --test-force-exit --test-isolation=none tests/unit/*.test.ts","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","cli-table3":{"ansi-regex":"^5.0.1","strip-ansi":"^6.0.1","string-width":"^4.2.3"},"ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.12.1","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.15.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.6","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^7.3.0","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","proxifly":"^3.0.1","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^14.0.3","next-intl":"^4.12.0","react-dom":"19.2.6","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","cli-table3":"^0.6.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.21","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.6","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.5_1779874511515_0.7637233571279856","host":"s3://npm-registry-packages-npm-production"}},"3.8.6":{"name":"omniroute","version":"3.8.6","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.6","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"fed8ff28efe7b2022b3badf7357c19b9894abb23","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.6.tgz","fileCount":5725,"integrity":"sha512-MFPGqb4O/qOU6ocVOjmn6cVo3laco9Mw0+0yLV90Zb7ert98R+wAD5Aeob2cWb/G4jWkABDJoBpaEnEOesXI6g==","signatures":[{"sig":"MEYCIQCyGzmow1i8DsHepv4QETGWsh2KXjYWZAe+1rFjNDJWFQIhALqm+f2KiwPDZYqViKv5KJXVSL9fkejA7nX+GqVL0nIT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":213730710},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"f59f8daa943370fc646c1a01bd39ceff307add11","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 75 --lines 75 --functions 75 --branches 70 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.6","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^7.3.0","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","proxifly":"^3.0.1","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^14.0.3","next-intl":"^4.12.0","react-dom":"19.2.6","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","selfsigned":"^5.5.0","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.21","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.6","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.6_1780070003748_0.6871715687122364","host":"s3://npm-registry-packages-npm-production"}},"3.8.7":{"name":"omniroute","version":"3.8.7","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.7","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"d3e10e6716dec989b7e190449a8f7cb333e29bfb","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.7.tgz","fileCount":5767,"integrity":"sha512-zIqXMikOrN0yRR7U5nkVkTcOaReVRokAxegCCBFU5PTx5vD7ceARlGjDynyUGPOeP+jfPqCjd1Rhed/Iu/7iDg==","signatures":[{"sig":"MEUCIQDYKSZCFGxSLsvG1y0xVycQS4S2nuXij70N/YgKLwXiuwIgK+0Tp2sUG4OHODDxv9QqpS6uHqQkznPlm2+DFCGcThc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214664833},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"7720d5bd47e335c87fcd0014ed8614d80ce0c01e","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 75 --lines 75 --functions 75 --branches 70 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.6","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^7.3.0","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","proxifly":"^3.0.1","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^14.0.3","next-intl":"^4.12.0","react-dom":"19.2.6","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.21","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.6","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.7_1780097987051_0.37811794676818167","host":"s3://npm-registry-packages-npm-production"}},"3.8.8":{"name":"omniroute","version":"3.8.8","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.8","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"bc3d7e5dd03a0f3a3939f5507eb5c6396e8c2b8d","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.8.tgz","fileCount":6250,"integrity":"sha512-7MuwvSZunW7nGWW4yFv93IbVfvN8hw8rWAKuRkE7XxCpU0P0zAcddbhrBYKmU2yivOtSpPjg+Paa2rWOpIFfqQ==","signatures":[{"sig":"MEUCIQC1M0akvvwPSii8lnrp4xjEuy7MDjKP9Cb88WiFXJfvnwIgLcRHmaPzjIHA1nfZadSYRA+cROJpzmApJLiPhArYu34=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":284480056},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"d37693de98f691eccb9587ae1151442fd1e5b581","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 40 --lines 40 --functions 40 --branches 40 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.6","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^7.3.0","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^14.0.3","next-intl":"^4.12.0","react-dom":"19.2.6","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.21","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.6","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.8_1780466355918_0.4452821340501607","host":"s3://npm-registry-packages-npm-production"}},"3.8.9":{"name":"omniroute","version":"3.8.9","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.9","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"c5f6da22e9ef42f8b31cc777caa5d4f92137fada","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.9.tgz","fileCount":6470,"integrity":"sha512-TgWJ4QPVKyvq8GAZnjtAMvQQh2wZgDVfR4Ou/1mu2xhC077d0/3M983gEy+fyC9pwjMu6sanbUUo77GsWrawqw==","signatures":[{"sig":"MEUCIQCppvE+xx9Y1VV3/0i2biWvu7nMbpjZJMgn3jDnMWULdAIgNVIPrdmEaDRFcGCNuMBCFqI2nf+yxDSm9Y3xTbX+iXc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":354876481},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"5057454d21f7f20f914b9020d877c7be25a0daa3","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 40 --lines 40 --functions 40 --branches 40 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.9_1780562082786_0.9204756495545834","host":"s3://npm-registry-packages-npm-production"}},"3.8.10":{"name":"omniroute","version":"3.8.10","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.10","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"ede473fcc361f7528deb3e055ae966c0f6163492","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.10.tgz","fileCount":6481,"integrity":"sha512-UU0ASZEA1oiUxpsERuOf+evH9PbYnzRSH5rhWqC6k0XNSq+PZk+LGRWeRh8J6uRrPxU33aUBcfY/oI/z7X9NGg==","signatures":[{"sig":"MEQCIAHXEd9474PbOz1gk6AyuxsdUxLSwrkoSesriYW92aseAiA42RdS/uiKVQC0RFtAIYGwZrwm76fIBi7o1bNWSkt6Iw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":355265864},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"c27a32d4328d8e8cc6baad7cf0b4a56050f16f91","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 40 --lines 40 --functions 40 --branches 40 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.10_1780616884995_0.6068554067449363","host":"s3://npm-registry-packages-npm-production"}},"3.8.11":{"name":"omniroute","version":"3.8.11","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.11","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"5f51e5184ae060f92eac57285423c56bd8927886","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.11.tgz","fileCount":6500,"integrity":"sha512-xLVRXdorrT5NzhOoD5uo9EXku4uW3zya8nJfEMNBYGAL4we7yS8Vdbo7jt3i19WPC/m0DIvhY62Ehn9hn0O0Dg==","signatures":[{"sig":"MEYCIQDN0cSJopuH3pCOV9ThRLcPVWCC/C0FlEOYFsUuKszz5QIhANqC28jOzwx15f+MzAar3ryQiywFnJ4IyPqLBWToDPf+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":356030927},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"404cfcbbacbd2a2213162781f3d973c2f89c59bf","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 40 --lines 40 --functions 40 --branches 40 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.11_1780693800527_0.5885187335168063","host":"s3://npm-registry-packages-npm-production"}},"3.8.12":{"name":"omniroute","version":"3.8.12","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.12","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"9624cc76f892a86d59a05fe7deefb84fcb0bd427","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.12.tgz","fileCount":6512,"integrity":"sha512-qwqF6ybl/IvHKTlQe1eGvL8914pldreMeezEl9E29XeKBS/QH6y1xe8n3T7Kw6K5YyvbbavBUIA6uWZm7v5J+Q==","signatures":[{"sig":"MEUCIHzkd/DwYZw1XYrWKePeR7aN/qByghpxCKpGB1YVvhGLAiEAhXBmndmaY3DxHuW2VtpbSnkVsv96wWy6bwR5bS35ngI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":356949594},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"78454eed5ea78b6a9ae4593ac12b764dd5780c7d","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.12_1780748180235_0.26004583103794254","host":"s3://npm-registry-packages-npm-production"}},"3.8.13":{"name":"omniroute","version":"3.8.13","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.13","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"64b964b7fc24651d219053b3f9d098747ac17753","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.13.tgz","fileCount":6616,"integrity":"sha512-fWIh5pSXQlOyvVDOHCtd5urENRiOqvvVihi9tOUUeEFFnKvfar4xmF1KtKJ6YA1qrNnW8GRxFZkxx+j+Ll0cJQ==","signatures":[{"sig":"MEUCIFTx8YZns4goboEzrG03i8aYy9i3UUanid/bTO2N0tr2AiEA3fZLcCf3drVPy2cvv7WgxOcFN9XNU+K8AYHDx2vz92c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":361071349},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"a25d5f1ef6e2d0bdd3dc4323c65405357e50eed6","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.13_1780789057522_0.7818771053126778","host":"s3://npm-registry-packages-npm-production"}},"3.8.14":{"name":"omniroute","version":"3.8.14","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.14","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"8a7fe0b453c823af0357391e9facfd30f4339eb8","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.14.tgz","fileCount":6619,"integrity":"sha512-w3hwSufdURtxZZzDrFBOzPIlLOvn1R+OqA72d5tTvdX9KdgyGHp5qeDqO7GWZqL6/Ugi0Gl7mCYnFlroJMdDCQ==","signatures":[{"sig":"MEYCIQCsxT1aIDpBj9jdW9uJlh0QsYinH+fUCtfdd3eqnhTc4gIhAMhVQLLm/LYxSU1wyAWyFA3uj5pthAkCkAISoy3j4U/C","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":361473879},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"000d60b90749fff4e8e268181224308e36f2b4d2","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.14_1780835400666_0.7261483772281934","host":"s3://npm-registry-packages-npm-production"}},"3.8.15":{"name":"omniroute","version":"3.8.15","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.15","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"494b96eed3d64784c7c12393f82ff98550b413e4","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.15.tgz","fileCount":6619,"integrity":"sha512-tsi6Xvhyj1/eHW7T9bfb9BKUJ0pPOmnrdC565kXHMZsLCNnXDStbht3pr/m03BySYWUx+CIzD9kSRAUxM/+hLg==","signatures":[{"sig":"MEUCIQDJOSjJzu+SDACDI0D6+r1ASv/0CQeOxjQHA8TSwyc89AIgJZCGnmMSrAPE3HC7+07Z97OQwvjk4F0kN7PeZ0G6fAY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":361494911},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"929caeb9101374d08f13ca58a0ed5a4204171e20","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.15_1780852686277_0.10503172764716262","host":"s3://npm-registry-packages-npm-production"}},"3.8.16":{"name":"omniroute","version":"3.8.16","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.16","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"19957339b641fa217c97fc48567bd485bb3b929e","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.16.tgz","fileCount":6638,"integrity":"sha512-hdg6dwDsAt7a0EblDtmjzAKECXirY111FRQ/I8thuGvieuY8WlyY/68a3pbMksOz8QAm/E6a8/LCG90iYLIX5w==","signatures":[{"sig":"MEUCIAR9EXeyv7p6zBnltgKKT4wgzMVTHZ54TRniW7Ix0kK8AiEAwJQtanTsQwsWlnQz4EIZGBZPx6TIVmW2NRO02FuPhgM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":362017915},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"60fc41f638ba5ac399e96e01abe49435f0e8e763","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^9.2.1","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.16_1780945362683_0.40621103572143324","host":"s3://npm-registry-packages-npm-production"}},"3.8.17":{"name":"omniroute","version":"3.8.17","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.17","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"7287d0e6fcd01c37c7defb46a65c5fed9fa12427","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.17.tgz","fileCount":6655,"integrity":"sha512-KCqj4kIw6zE7oNpLZHrR69uHnigFlrOWVDHT0UPglbD56SJDJVaYYSRZ+VhB9Q1aM3XIEuEJlRMR2+11QvhN8A==","signatures":[{"sig":"MEUCIGU3JMxbTGwRmXKO5qTIRQgC0QjUZIfHXJHU869E5akLAiEAuYy/YEIOmeF6yoUJKslam7XWJggegLNTAtSdWasvacc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":362963316},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"2441a4f4418c3c0d980c246961f9668299dffb40","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.17_1781003158918_0.843697091682039","host":"s3://npm-registry-packages-npm-production"}},"3.8.18":{"name":"omniroute","version":"3.8.18","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.18","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"de24e91098ccc4c77eb00db98beb267d9dd87e9d","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.18.tgz","fileCount":6659,"integrity":"sha512-9mnSvARWpsy/zNt4PqeZfspoMEXCNn6xq/O5EJDMBqZLPDO3w7YNK4APEn2X7iJjG7xz/wUvxIOFq+hQLrucNg==","signatures":[{"sig":"MEQCIHp2JEWKcR68DoLlUr5cDGd8s7jUVhPsmIS1vvFupmaxAiB0Ddrs6qmTqO1drD58KK4XMtNYHE29SWaVAxEkm0sunw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":362887678},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"8169b97d84c3652b92e0413de86e62c34b0e5fee","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=moderate && npm run audit:electron","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:route-validation:t06":"node scripts/check/check-route-validation.mjs"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.18_1781033547760_0.9790390226589605","host":"s3://npm-registry-packages-npm-production"}},"3.8.19":{"name":"omniroute","version":"3.8.19","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.19","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"a3c205410c57d263b084d7457d0276c883c1a1a2","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.19.tgz","fileCount":6659,"integrity":"sha512-Pe20kT+K7GmBV1Q53z7xT1V2r32S642Vg5IHxsoMmI2XUM5RJ0oVw91hkqxx9qPYQ8nFyIHPQUfBAD1qDZ/CLg==","signatures":[{"sig":"MEUCIGnMgoH9Kv6JGSiOa05ML/Njv/PsoI27w6KC91KNOEywAiEA3W4pACnMBLkF6a7IfAxXCdgz/oe19mrmTpJQXiIkcOo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":362908067},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"630680067c78db153ee75904d0807c2d9ac63b01","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.19_1781071213550_0.40524477611282506","host":"s3://npm-registry-packages-npm-production"}},"3.8.20":{"name":"omniroute","version":"3.8.20","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.20","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"742a0ea1f3ae41e1cfd040020ce5d0b44f531cf6","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.20.tgz","fileCount":6659,"integrity":"sha512-qlIfC9IsfGnNVp+taEExx/JbS4xBEKyMas8+KMzeV6iXMWsGvUiOTYKCpDzEhJ0MS1K2Z9QZvsUgjqB9zq3KCg==","signatures":[{"sig":"MEUCIQD5zMp25dG8Kzpvyyhv0Tqdswsc4Z69rnOaZCLD76AZLQIgA97+S3kb9fCShkXSIEHqQN7FQqR6QWK+740o0vti79E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":362949183},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"d6f008cdaf5b476a832bfde097cf1c6e7dbfd292","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.20_1781120210539_0.9767938242754792","host":"s3://npm-registry-packages-npm-production"}},"3.8.21":{"name":"omniroute","version":"3.8.21","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.21","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"ee9cbd917a2fd0fc86b5740a624d6a591389bf43","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.21.tgz","fileCount":7950,"integrity":"sha512-otxyoupe6+9H+nlFWrJaPdUqwOoGohSaUNnNO/GurdlxkCBJAtKLIR2MaELoRTWt4tLa1tPZ6/veSGuBSUT1vQ==","signatures":[{"sig":"MEYCIQCW94Xryq6k0vb1H6W8rWG99t8qBRXumBCg3W2zL3vF5wIhAJlYyVxi1YWhsdop38+88Ngm0Gt8GdngsVfRLBHuIQmT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":373331605},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"3c328d6a62214dd838683ce19128a7721a77acea","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.21_1781168180177_0.5535659008945786","host":"s3://npm-registry-packages-npm-production"}},"3.8.22":{"name":"omniroute","version":"3.8.22","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.22","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"0d0d2f858f3b150fd5220944b8cf90c8450fced0","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.22.tgz","fileCount":7967,"integrity":"sha512-Ah4JTcd6wzsif7IHQg7IeAt0qMyD06RvQ0WkDKagTPOyH7fKvBVaYSglZhaL6GfLS+fbu4iFkmJ7sfsDzjXJ+Q==","signatures":[{"sig":"MEUCIFLqwy/qDnf0AV7dLkqXr4xugZW29yptd4BTT3fROSL8AiEAukE8UYr1rPlrnaLtIn1ZWnXS4zBDRMnbOdOcEjAeOb0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":373910048},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"b6c65efd2878ed89c96fcceb2dff9304825e8491","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.22_1781227107511_0.7270141057142372","host":"s3://npm-registry-packages-npm-production"}},"3.8.23":{"name":"omniroute","version":"3.8.23","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.23","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"18ca3cfaf781ba495e2b9467c89a7fedc9a719b5","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.23.tgz","fileCount":7996,"integrity":"sha512-bHy+JvdONBFmQ1S29wSBWy2DGuiotFo9L88eyUZ8gvmWZFFDdosy7GXKwWT7vzeywaXvDdwOrdnMx7KPTBiX6A==","signatures":[{"sig":"MEUCIFvDlpiqq7j2lGXnRJgQzGuNM7qABL/hcD8TVprj67JaAiEA8GmobH4V6cWz7ir9pzC3NzBGP88uWDkX5T3LcjEuFcQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":376386809},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"ec78fe3d2c3bd60eb60c946079dcd201d9bbee81","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","glob":"^13.0.6","husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.23_1781320532363_0.5672935832714858","host":"s3://npm-registry-packages-npm-production"}},"3.8.24":{"name":"omniroute","version":"3.8.24","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.24","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"9db9eb11dc4390491c8d1d6aa748034f5f0de40a","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.24.tgz","fileCount":8030,"integrity":"sha512-3DrHcNePwYm/ocKcquqpxTBXyiJ87OjPqNJLLUbdk+P8tadVL8xgn1LdsvJ9z5oYYptqfCaWANcAMPUOFn0jGQ==","signatures":[{"sig":"MEUCIQDJtDnNZR6M0n4yFvKQyacO9sc9pLuQfv0GL06ahGGGagIgSExGapb+F7u9Lnl1rJxRdnll8IVMlPq72n+VDjkURlM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":381603062},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"b7ac403c81994952c61105204dc176cd424f488b","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:type-coverage":"node scripts/check/check-type-coverage.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.16.1","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.24_1781398232338_0.8444913491110697","host":"s3://npm-registry-packages-npm-production"}},"3.8.25":{"name":"omniroute","version":"3.8.25","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.25","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"284f1863886e2e0f8574ce5a670dbc6de013f7cc","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.25.tgz","fileCount":8117,"integrity":"sha512-5FN3fBKny5D/BdLmOz9HUbtrpZaLTx2GbZNhdaDOp4K1zaT5l5rRh5bmVo6X6o9rZju1DXk4mz03w/mOwrFJOQ==","signatures":[{"sig":"MEYCIQDG+XqA+cbaUZQtyL7k+YT3EBV4mu4sZlXigXP4trENMgIhAN9JGhU6AtJOZGO/TPA6cAqmBuvUsFBiQudd3LaIofB+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":394323804},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"35dbf0eea1a1f6cb3804c1ab1ae894ef95a38848","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:type-coverage":"node scripts/check/check-type-coverage.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","postcss":"^8.5.14","dompurify":"^3.4.3","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.16.1","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.0.3","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"4.2.1","@testing-library/jest-dom":"^6.9.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.25_1781507456480_0.7159206030045466","host":"s3://npm-registry-packages-npm-production"}},"3.8.26":{"name":"omniroute","version":"3.8.26","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.26","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"2c04a3eecbeffe9c3ad7a30799989bf193b09179","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.26.tgz","fileCount":8120,"integrity":"sha512-J+/fPPjZeqyjEm+cOcjfLRo/rEqMNGpTZH41N6IdRkoUYKpFU7oJ6vokRmmshqoBqZpQiJj/JukHEle1WMmiNw==","signatures":[{"sig":"MEQCIDcXOPhsqAcYFGuTh67B6BS4lu0ZbqngysCvqYeGTyMhAiAT3WkT3jV45ijcND2UbMx/GQT8wOtOXHMKJNeUrQ84og==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":394040725},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"4d21044ba5a8deb6d28c5354c365fd6d41382c84","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:type-coverage":"node scripts/check/check-type-coverage.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","uuid":"^14.0.0","vite":"^8.0.16","postcss":"^8.5.14","dompurify":"^3.4.3","form-data":"^4.0.6","ip-address":"10.2.0"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.60.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","gray-matter":"^4.0.3","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"^4.2.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.16.1","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.0.3","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"4.2.1","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.26_1781588611814_0.9591626651488603","host":"s3://npm-registry-packages-npm-production"}},"3.8.27":{"name":"omniroute","version":"3.8.27","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.27","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"0670cf4141d8eca895badf0b5eade46388ef2b85","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.27.tgz","fileCount":8466,"integrity":"sha512-ciIGGrh0BmOhQv8G4yjM+W3CFwL90yR74Aii+LVH+rvd5GkBXciFLeWRufzWC1ES6hwQdtXW0Lj1dogJNWtTRA==","signatures":[{"sig":"MEQCIGqcseafSZGUVdX2EorSfnTI9JgMYDw4nAiH8nlIT6MfAiAxOVSVekq++s6khsSQz5g5IulLn6i6ML0yX5kppGegvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":420882740},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"fa367dd99e984fbad20a2bd32143c08680042ef3","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:type-coverage":"node scripts/check/check-type-coverage.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","postcss":"^8.5.14","dompurify":"^3.4.9","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"3.5.2","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.16.1","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.7","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.0.3","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"4.2.1","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.27_1781680433161_0.1376953431950949","host":"s3://npm-registry-packages-npm-production"}},"3.8.28":{"name":"omniroute","version":"3.8.28","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.28","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"f24941f254d95d228b64c3448789c738c58997a0","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.28.tgz","fileCount":8505,"integrity":"sha512-q2JMOzMApNoiwvh9KFUwhGZyVwTV2EG9iPmZ3aOf3K5x8Tq0eOMlptFd70ljSOsN3Ur9tD65cGzyyTxcvPwKtw==","signatures":[{"sig":"MEQCIDJkBgrDYyzjfO7JPK0ShOq2G24oaE5u4/zm6rbU7Z4eAiBltJQynsZy3EJdwG56z0s2bEmTIZEkZYpuS1dQFJcqHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.28","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":427205954},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"dd5a3db55ed9bca1f71398e6e584da2983a70bea","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:type-coverage":"node scripts/check/check-type-coverage.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","postcss":"^8.5.14","dompurify":"^3.4.9","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"3.5.2","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.16.1","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.0.3","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.28_1781739955626_0.750801423400604","host":"s3://npm-registry-packages-npm-production"}},"3.8.29":{"name":"omniroute","version":"3.8.29","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.29","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"5fe0a003065457eeee253c35143ff6de5a7ea6d6","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.29.tgz","fileCount":8622,"integrity":"sha512-YW051X+9Kvrk5VYVUEIIp1czTlZ5oLmWJB9rjZ4+5+NKGwLGn3y5v2biy69dZ9Ify+GV9JMzNfo2DsWeaYDinQ==","signatures":[{"sig":"MEUCIBVGubS6yVoMtVwDSTDqs4D/eAQGAcsNBl7tNC5lHt3EAiEA0R5Kgowstmb31eA9Z/OKI70FdNoGxTzA/MuleTuJaL8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.29","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":430050482},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"3c9883bb7340345607d344a9e8fe197480d48b05","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=moderate","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","bench:compression":"node --import tsx scripts/compression/benchmark.ts","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:type-coverage":"node scripts/check/check-type-coverage.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"node --import tsx scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","postcss":"^8.5.14","dompurify":"^3.4.9","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"3.5.2","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.16.1","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.0.3","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.29_1781863201404_0.5470966506032069","host":"s3://npm-registry-packages-npm-production"}},"3.8.30":{"name":"omniroute","version":"3.8.30","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.30","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"71755e5b6e78f5daa01bcc29680dee200e57ec02","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.30.tgz","fileCount":8671,"integrity":"sha512-li2ZKEnR7tOWBv2KIB7OJ7uSEwdVsUHoQLCzoqCWQIW779nSaEHurUuvzXUdqiOrCjIqDoUMvQ6GOdj/c67yrA==","signatures":[{"sig":"MEQCIEZsH8iIG8idxiWA6q3OxcAWk1NFycImwQQMII4Qk7wgAiAk1bfAZJ7CLfJ1L4mXW08q1mz+4jF98sfPM517hf5alg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.30","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":431423961},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"db362b012632f4d4e96b5ad6116e39f9178efaca","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","bench:compression":"node --import tsx scripts/compression/benchmark.ts","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:type-coverage":"node scripts/check/check-type-coverage.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"node --import tsx scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"3.5.2","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.16.1","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.0.3","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.30_1781950844727_0.6023791773704334","host":"s3://npm-registry-packages-npm-production"}},"3.8.31":{"name":"omniroute","version":"3.8.31","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.31","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"346e8c21a33255b6e4c40adf00d652ddaa755b30","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.31.tgz","fileCount":8693,"integrity":"sha512-0pA5S83lgHEFrkCiYWbia49I05hJWicDtKLBkn/EygR+LNeUMo8AWwwPmbmUwRhojWHL8Nadb4JXzeJxHKLICQ==","signatures":[{"sig":"MEUCIQC9psgot73w/Z6FEc2iRn4xWeas6FHjIhEYW+nHObbtbgIgSJblJXcltrnwQDQ5T1Fuluqep2MtKTxThJkX9pjiNgI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.31","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":432507364},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"d0396c200d6f5175fe74f5f980df3ec291a40933","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","bench:compression":"node --import tsx scripts/compression/benchmark.ts","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:type-coverage":"node scripts/check/check-type-coverage.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"node --import tsx scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"3.5.2","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.16.1","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.0.3","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.31_1781978755671_0.8880583157626614","host":"s3://npm-registry-packages-npm-production"}},"3.8.32":{"name":"omniroute","version":"3.8.32","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.32","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"8cdeaba5fd6a12bd652b7d61d5653ffd8c6d6412","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.32.tgz","fileCount":8713,"integrity":"sha512-EWeIvUXZn8Pia1l8C2KxTWwCMJuecMF0bcuUVqg78IKKIvDkur0f3ckXE+y+EDsynZe1bA2WOY/2v/d2k4u3yw==","signatures":[{"sig":"MEUCIQDEDb6rg8sua0b3vqxjH2ODjukPXS2ntch57kxufLv0vQIgPGlsrPyUwQYAQNoDWKqoheijDqWdqLw+QEdwcAnHqEM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.32","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":433185200},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"bfaf459f3c15e5260a6284eee5e9824f22a8e00d","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","bench:compression":"node --import tsx scripts/compression/benchmark.ts","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:type-coverage":"node scripts/check/check-type-coverage.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"node --import tsx scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"3.5.2","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.16.1","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.0.3","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.32_1782046022645_0.7499770072027716","host":"s3://npm-registry-packages-npm-production"}},"3.8.33":{"name":"omniroute","version":"3.8.33","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.33","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"777804ef14042d7d590ccf32ce0e1004a7225771","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.33.tgz","fileCount":8729,"integrity":"sha512-y7WpAJa6IpG4NSIFdZT0dcl/bgG7FP8HKjiAPr2yHI7Cm0x/b9pJKXf0M/JdRpWfm+XEBzbkiPMa9No//fwn/Q==","signatures":[{"sig":"MEUCIDuTNPAfrWIargHD/DwBMWklp7iJmAwtfOwKNTmpI5caAiEAxrxGDFP3qmNHuSOWcvJL/CSNil3davElGx9ZLOoN6Sg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.33","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":429858582},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"ee24eb52d42f6320917b64b2da464542e0739e23","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","bench:compression":"node --import tsx scripts/compression/benchmark.ts","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:type-coverage":"node scripts/check/check-type-coverage.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"node --import tsx scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.0","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^4.1.1","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.9.0","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.16.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.10.2","csv-stringify":"^6.7.0","fumadocs-core":"^16.9.0","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.1","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"3.5.2","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.16.1","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^25.9.1","lint-staged":"^17.0.5","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.0.3","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.33_1782112481553_0.07083433981047182","host":"s3://npm-registry-packages-npm-production"}},"3.8.34":{"name":"omniroute","version":"3.8.34","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.34","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"dc0c29f5dc19454704562419d19ac8a45d244aa6","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.34.tgz","fileCount":8747,"integrity":"sha512-EQUKu5B7oC2SFgaWk8clwkppXe3BQo/N9//0CUGiVt1VQ67KLBFI7yDuzC4eo6sW772Mi2X4zU9KsGsoZ/Gaww==","signatures":[{"sig":"MEUCIBFINP3jd6gSfhEnnbuwYSm8gckkBOD7m6XLv0FSaFcxAiEA2prJ+TG4Htk2xhOKZttX2r8yI9vNWWGlGTbqBeqViIE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.34","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":430484813},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"19d91d82e2257b9475724109f2cca9d869af5907","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","bench:compression":"node --import tsx scripts/compression/benchmark.ts","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"node --import tsx scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.0.0","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"3.5.2","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.0.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.34_1782195729738_0.07749620733842622","host":"s3://npm-registry-packages-npm-production"}},"3.8.35":{"name":"omniroute","version":"3.8.35","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.35","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"195dc23a7fca158387b594d0b8b5789e34b11d98","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.35.tgz","fileCount":8813,"integrity":"sha512-xU35puVvbbxSMib18RszPaLBJUTtqWJBzd0n1RtoGWR7ijSa8V5Q1f3SYKV/Fy65PDImecT4beocxrCVX7++IQ==","signatures":[{"sig":"MEUCIQDtWq5yN1IvPiKd4hVJevgximXkr2+tVBHmOqkb/2HGZAIgDhUM/FBLdkli/MOhgMJZNMhJa2mdUWY/KMoFa6N9jdY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.35","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":430989021},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"cadc3f10b76a51fa5800e4ae550e0f33fbed6465","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","bench:compression":"node --import tsx scripts/compression/benchmark.ts","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"node --import tsx scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.0.0","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@huggingface/transformers":"3.5.2","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.0.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.35_1782249309848_0.2124437847131011","host":"s3://npm-registry-packages-npm-production"}},"3.8.36":{"name":"omniroute","version":"3.8.36","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.36","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"fe440b3726fe1add00bc266ce117a8128801a42a","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.36.tgz","fileCount":8933,"integrity":"sha512-MZVbItxj3q2eHTAPv8Ou/uc5RB7oIbRlm8RV0V7WbBS920aZvduhKPx0CkIoEcPWhH7TEuU+VClF1oiT1yVOvA==","signatures":[{"sig":"MEYCIQCeI/iKPEFUgYs0AtcfobtfRvbotTmVpoWx1YZzPig3vAIhAJl/SYay5CT/75feSH3p6nxnZdutLZ9qO3spSkvCLQ5Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.36","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":433694076},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"b5c789a3b4a258ac327877e0ea2bf1db697fb4d7","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","bench:compression":"node --import tsx scripts/compression/benchmark.ts","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:test-runner-api":"node scripts/check/check-test-runner-api.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"node --import tsx scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","release:sync-changelog-i18n":"node scripts/release/sync-changelog-i18n.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.17.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.0.0","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.0.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3","@huggingface/transformers":"3.5.2"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.36_1782422258091_0.9758568631735853","host":"s3://npm-registry-packages-npm-production"}},"3.8.37":{"name":"omniroute","version":"3.8.37","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.37","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"2f5843b4f6a373cbe97e4f1b6f4ca5a9503cbd77","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.37.tgz","fileCount":8968,"integrity":"sha512-iPHBFRRXOTKfImAxM9ktoXvePqnVDq8rIkc0lAJkB8qtkaLEfoZtTMsSFqcEoJmIxhDNNj2+MjNlbHLvd/qo8w==","signatures":[{"sig":"MEUCIHpD+DHrEGmMImQMhH5wI/dKXIffUnYYUPZBHmjv0UJMAiEAt696STKrALpg2EbZxlv7GxsikV/xJRp8FOY3fCNXUaI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.37","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":435036285},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"555b21d296d950865a59d9371c8f850bc68ca300","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts","bench:compression":"node --import tsx scripts/compression/benchmark.ts","check:build-scope":"node scripts/check/check-build-scope.mjs","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pack-policy":"node --import tsx scripts/build/validate-pack-artifact.ts --policy-only","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:test-runner-api":"node scripts/check/check-test-runner-api.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"node --import tsx scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","release:sync-changelog-i18n":"node scripts/release/sync-changelog-i18n.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.17.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.0.0","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.0.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3","@huggingface/transformers":"3.5.2"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.37_1782456546715_0.05474411476922847","host":"s3://npm-registry-packages-npm-production"}},"3.8.38":{"name":"omniroute","version":"3.8.38","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.38","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"6eb0e8e64d09ce717456e84c190c8775e8ae1fc0","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.38.tgz","fileCount":9009,"integrity":"sha512-g2HG2FoSwNHxDQtLidNF4pxgcV7MrmDK1qGlKQ9SjJb6iqTIv8ORxlhVZujLFkZlOB61If6eSZkZN14rcO0k2A==","signatures":[{"sig":"MEQCIDhprHzTfApM/w6+eyrX2tbxMtJveJof7/zQRicM4lRjAiBc/toJH8uQ2isdfyOHTSZT50L2XtUtczOuZtF7KSjbLQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.38","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":436137631},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"7b139fdb5e42658a49f9d99ddf0eeeba9a994fd8","scripts":{"dev":"node scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:combo:live":"cross-env RUN_COMBO_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-live/*.live.test.ts\"","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"","bench:compression":"node --import tsx scripts/compression/benchmark.ts","check:build-scope":"node scripts/check/check-build-scope.mjs","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pack-policy":"node --import tsx scripts/build/validate-pack-artifact.ts --policy-only","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:combo:matrix":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-matrix/*.test.ts\"","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","test:combo:live:vps":"node scripts/test/combo-live-vps.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:test-runner-api":"node scripts/check/check-test-runner-api.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"node --import tsx scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","release:sync-changelog-i18n":"node scripts/release/sync-changelog-i18n.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts","test:combo:live:vps:failover":"node scripts/test/combo-live-vps.mjs --failover"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.17.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.0.0","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.0.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3","@huggingface/transformers":"3.5.2"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.38_1782565238599_0.052554635526659954","host":"s3://npm-registry-packages-npm-production"}},"3.8.39":{"name":"omniroute","version":"3.8.39","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.39","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"64f9354b1071b483dd0e2b07f4242d2059f95404","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.39.tgz","fileCount":9027,"integrity":"sha512-Ss3Dez7+Z3uucDNgzogORlJytzTFS2NnLHKjTKvdcIoD9HpjcqtQVpLHEhNJhwROubGvpq+Vb/ZxoG8vWj/Cvw==","signatures":[{"sig":"MEUCIFxUEo8b1VTh7ihNsKW8GZKfmWiS7cnZMajAoSerQuJeAiEArjv/MU5QFWb/UCD9jz2n7exfY2Aq7HaDQZYs7Qvto/U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.39","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":436680409},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"dc40911583575cfcee4f937797861c115e9c33d8","scripts":{"dev":"node --max-old-space-size=8192 scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:combo:live":"cross-env RUN_COMBO_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-live/*.live.test.ts\"","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"","bench:compression":"node --import tsx scripts/compression/benchmark.ts","check:build-scope":"node scripts/check/check-build-scope.mjs","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pack-policy":"node --import tsx scripts/build/validate-pack-artifact.ts --policy-only","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:combo:matrix":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-matrix/*.test.ts\"","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","test:combo:live:vps":"node scripts/test/combo-live-vps.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:test-runner-api":"node scripts/check/check-test-runner-api.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"node --import tsx scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","release:sync-changelog-i18n":"node scripts/release/sync-changelog-i18n.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts","test:combo:live:vps:failover":"node scripts/test/combo-live-vps.mjs --failover"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.17.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.0.0","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.0.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","@types/keytar":"^4.4.2","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@types/bcryptjs":"^3.0.0","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","@types/safe-regex":"^1.1.6","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3","@huggingface/transformers":"3.5.2"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.39_1782642598799_0.1941605657996286","host":"s3://npm-registry-packages-npm-production"}},"3.8.40":{"name":"omniroute","version":"3.8.40","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.40","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e0e452146cadb147e41bc8cdcd2b8c8c588b0166","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.40.tgz","fileCount":10202,"integrity":"sha512-Z8bfPIfy2T+Gn2L7TmOl5fkM/v8Fs5cRJZ+68B+KGuFPsEql29dz+VlhvNqmOVKVA6JlVd7I7pKNK1LgJhf+TA==","signatures":[{"sig":"MEUCIG+yYGBcUGperDbGMnbRqjI64Nkrmb8aHNcVzDyowcQ2AiEA5Z5WcabIfk3hYfgK2CMPlK0tbsd1rAji6TA7CJBZUjo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.40","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":452876219},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"7c23dab64de929686d2326f6824527ba9c746ca9","scripts":{"dev":"node --max-old-space-size=8192 scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:combo:live":"cross-env RUN_COMBO_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-live/*.live.test.ts\"","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"","bench:compression":"node --import tsx scripts/compression/benchmark.ts","check:build-scope":"node scripts/check/check-build-scope.mjs","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pack-policy":"node --import tsx scripts/build/validate-pack-artifact.ts --policy-only","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:combo:matrix":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-matrix/*.test.ts\"","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","test:combo:live:vps":"node scripts/test/combo-live-vps.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:test-runner-api":"node scripts/check/check-test-runner-api.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"node --import tsx scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","release:sync-changelog-i18n":"node scripts/release/sync-changelog-i18n.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts","test:combo:live:vps:failover":"node scripts/test/combo-live-vps.mjs --failover"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6","@yarnpkg/parsers":{"js-yaml":"^4.2.0"}},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.17.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.0.0","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","dompurify":"^3.4.11","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.0.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","@types/safe-regex":"^1.1.6","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3","@huggingface/transformers":"3.5.2"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.40_1782733959980_0.09641873192877704","host":"s3://npm-registry-packages-npm-production"}},"3.8.41":{"name":"omniroute","version":"3.8.41","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.41","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"7fd6a1d1d11e02ba14442200515233f90d184241","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.41.tgz","fileCount":10208,"integrity":"sha512-7XUUVdziBkd0wCDGQ1VbXxmjscUq+RuF1vjO87Z4vxSw+1Adu0NzfpTGWSn99aEtzRUBSAuk1XmeuBZfGRf4QQ==","signatures":[{"sig":"MEUCIQDmPRcxwpYTzcPbQ+WTFJ9g56T4PvgeVxbVTRf9FYqB0gIgbr54+WcgsH9ADSTxWQCyAqiRe8CTqswyPRSrl4MhYRI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.41","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":453006701},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"78f09c8d9fcac13a5c2545282742d19772f1cadb","scripts":{"dev":"node --max-old-space-size=8192 scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:combo:live":"cross-env RUN_COMBO_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-live/*.live.test.ts\"","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"","bench:compression":"node --import tsx scripts/compression/benchmark.ts","check:build-scope":"node scripts/check/check-build-scope.mjs","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pack-policy":"node --import tsx scripts/build/validate-pack-artifact.ts --policy-only","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:combo:matrix":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-matrix/*.test.ts\"","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","test:combo:live:vps":"node scripts/test/combo-live-vps.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:test-runner-api":"node scripts/check/check-test-runner-api.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"node --import tsx scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","release:sync-changelog-i18n":"node scripts/release/sync-changelog-i18n.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts","test:combo:live:vps:failover":"node scripts/test/combo-live-vps.mjs --failover"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6","@yarnpkg/parsers":{"js-yaml":"^4.2.0"}},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.17.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.0.0","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","dompurify":"^3.4.11","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.0","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.0.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","@types/safe-regex":"^1.1.6","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3","@huggingface/transformers":"3.5.2"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.41_1782766505103_0.37106897729631516","host":"s3://npm-registry-packages-npm-production"}},"3.8.42":{"name":"omniroute","version":"3.8.42","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.42","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"2e60974c6b04f4fcfc37089540843abc0b4cb981","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.42.tgz","fileCount":10252,"integrity":"sha512-KDxnxCpF00XE8rdts+2EEPQwirw415FlUmFBMV9kFufMrmbyPnfUuAbIlVvkI7ARqDkI4m/vjT+hQlRrroAJ2Q==","signatures":[{"sig":"MEQCIAG5k6kxQWEsYKva5jwuADeHYfkLx1r1pwV+oXj3jkqxAiA9/aRVOXj+h74HaRcfcVu31Dwt7WsSl7np/3y8oBB4tQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.42","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":454205353},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"0adae00c7b94c7fd132d4c9fadffaa4ae629bf6d","scripts":{"dev":"node --max-old-space-size=8192 scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:combo:live":"cross-env RUN_COMBO_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-live/*.live.test.ts\"","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"","bench:compression":"node --import tsx scripts/compression/benchmark.ts","check:build-scope":"node scripts/check/check-build-scope.mjs","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pack-policy":"node --import tsx scripts/build/validate-pack-artifact.ts --policy-only","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:combo:matrix":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-matrix/*.test.ts\"","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"node --import tsx scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","test:combo:live:vps":"node scripts/test/combo-live-vps.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:test-runner-api":"node scripts/check/check-test-runner-api.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"node --import tsx scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"node --import tsx scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"node --import tsx scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","release:sync-changelog-i18n":"node scripts/release/sync-changelog-i18n.mjs","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts","test:combo:live:vps:failover":"node scripts/test/combo-live-vps.mjs --failover"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6","@yarnpkg/parsers":{"js-yaml":"^4.2.0"}},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.13.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.17.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.0.0","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","dompurify":"^3.4.11","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.1","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.0.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","@types/safe-regex":"^1.1.6","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3","@huggingface/transformers":"3.5.2"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.42_1782814044698_0.719934268588263","host":"s3://npm-registry-packages-npm-production"}},"3.8.43":{"name":"omniroute","version":"3.8.43","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.43","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"daeb28dfd98015562e6df531141aac1025b5d6db","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.43.tgz","fileCount":10333,"integrity":"sha512-Mss0iiFi7aZXodC4JhaGJAyBZ6c/cyYRERmmVqDB8x2FzIlYqF7GR4xbhVJWi0B8YNFJyeYYX2+Vl2gEDtDUnQ==","signatures":[{"sig":"MEUCIFqvUYjGr8IbTWWkgG1RVEHHUx71fRgb2v29iILr9Y0oAiEAtl5N+R5L6qjMbbwJ7PIeNF06bXNQCTjEGT3Up+o5KaY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.43","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":455849925},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"b729a8f27364f072c87082e03bb8e122f3d76251","scripts":{"dev":"node --max-old-space-size=8192 scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:combo:live":"cross-env RUN_COMBO_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-live/*.live.test.ts\"","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"","bench:compression":"bun scripts/compression/benchmark.ts","check:build-scope":"node scripts/check/check-build-scope.mjs","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pack-policy":"node --import tsx scripts/build/validate-pack-artifact.ts --policy-only","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","test:combo:matrix":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-matrix/*.test.ts\"","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"bun scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","test:combo:live:vps":"node scripts/test/combo-live-vps.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:test-runner-api":"node scripts/check/check-test-runner-api.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"bun scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"bun scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"bun scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","release:sync-changelog-i18n":"node scripts/release/sync-changelog-i18n.mjs","check:mutation-test-coverage":"node scripts/check/check-mutation-test-coverage.mjs --strict","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts","test:combo:live:vps:failover":"node scripts/test/combo-live-vps.mjs --failover"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6","@yarnpkg/parsers":{"js-yaml":"^4.2.0"}},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.16.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.0.0","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","dompurify":"^3.4.11","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.1","safe-regex":"^2.1.1","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","@toon-format/toon":"^2.3.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","bun":"1.3.10","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.0.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","@types/safe-regex":"^1.1.6","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3","@huggingface/transformers":"3.5.2"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.43_1783007724844_0.23312760712096114","host":"s3://npm-registry-packages-npm-production"}},"3.8.44":{"name":"omniroute","version":"3.8.44","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.44","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"e6113afc9cc38194bb01c784088b638e33ac6e8c","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.44.tgz","fileCount":10552,"integrity":"sha512-14WZTUuQ5eaVDOHAAn3zWdyS/byDdMhjOnkX8zbi7VUb0iG27Jum+wLyQlyLwWr88SwSwnbRZ+zrEwEE4NO03Q==","signatures":[{"sig":"MEUCIQCBFjfg484zz74U1H9JJ9sonSv/mrbCRaDHPYCcT2WBxwIgRdcNw+zfHW2zRgWjacMPSWT2JoCi6c/aNwsfWxctBjY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.44","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":460223223},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"1bda6c15dc885b645243f6cc198688ba6bb7480c","scripts":{"dev":"node --max-old-space-size=8192 scripts/dev/run-next.mjs dev","lint":"eslint .","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,executors,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,executors,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,executors,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","build:backend":"cross-env OMNIROUTE_BUILD_BACKEND_ONLY=1 node scripts/build/build-next-isolated.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,executors,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,executors,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:combo:live":"cross-env RUN_COMBO_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-live/*.live.test.ts\"","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"","bench:compression":"bun scripts/compression/benchmark.ts","check:build-scope":"node scripts/check/check-build-scope.mjs","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pack-policy":"node --import tsx scripts/build/validate-pack-artifact.ts --policy-only","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","release:uncovered":"node scripts/release/list-uncovered-commits.mjs","test:combo:matrix":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-matrix/*.test.ts\"","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,executors,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,executors,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"bun scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","test:combo:live:vps":"node scripts/test/combo-live-vps.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","release:contributors":"node scripts/release/gen-contributors.mjs","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx --test tests/unit/*.test.ts","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:test-runner-api":"node scripts/check/check-test-runner-api.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"bun scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"bun scripts/check/check-compression-budget.ts","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"bun scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","release:sync-changelog-i18n":"node scripts/release/sync-changelog-i18n.mjs","check:mutation-test-coverage":"node scripts/check/check-mutation-test-coverage.mjs --strict","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts","test:combo:live:vps:failover":"node scripts/test/combo-live-vps.mjs --failover"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6","@yarnpkg/parsers":{"js-yaml":"^4.2.0"}},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.16.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.22.3","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.0.0","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","dompurify":"^3.4.11","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.1","safe-regex":"^2.1.1","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","@toon-format/toon":"^2.3.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","bun":"1.3.10","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.0.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","@types/safe-regex":"^1.1.6","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3","@huggingface/transformers":"3.5.2"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.44_1783183368741_0.4650403365319624","host":"s3://npm-registry-packages-npm-production"}},"3.8.45":{"name":"omniroute","version":"3.8.45","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.45","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"1703c3689df7de18442a73af28df7830183208fc","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.45.tgz","fileCount":18766,"integrity":"sha512-myLdTeJbk8chC16TaERpxW9HEqRrtcmq2buDnpyABJdPiu+WBUEuTlkT808YcD1eqMXcNTue41EinctGEKNI2Q==","signatures":[{"sig":"MEYCIQDmVKMfYi0pskTf1JC+EhhVU6fxt8hJ2eMvIOu105VibwIhALkLorTUv1GUh8B1mdlKQl3MUR/pI/S7olmUXScmzrCB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.45","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":695102758},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"3ddcee6369c54e1c844a6e46cbbc79870d10d30b","scripts":{"dev":"node --max-old-space-size=8192 scripts/dev/run-next.mjs dev","lint":"eslint . --suppressions-location config/quality/eslint-suppressions.json","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 \"tests/unit/dashboard/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 \"tests/unit/dashboard/**/*.test.ts\"","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 \"tests/unit/dashboard/**/*.test.ts\"","build:backend":"cross-env OMNIROUTE_BUILD_BACKEND_ONLY=1 node scripts/build/build-next-isolated.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 npm run test:coverage:runner","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none \"tests/unit/dashboard/**/*.test.ts\"","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:combo:live":"cross-env RUN_COMBO_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-live/*.live.test.ts\"","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"","bench:compression":"bun scripts/compression/benchmark.ts","check:build-scope":"node scripts/check/check-build-scope.mjs","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pack-policy":"node --import tsx scripts/build/validate-pack-artifact.ts --policy-only","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","release:uncovered":"node scripts/release/list-uncovered-commits.mjs","test:combo:matrix":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-matrix/*.test.ts\"","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 \"tests/unit/dashboard/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 \"tests/unit/dashboard/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","test:unit:ci:shard":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 --test-shard=$TEST_SHARD tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 --test-shard=$TEST_SHARD \"tests/unit/dashboard/**/*.test.ts\"","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"bun scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","test:combo:live:vps":"node scripts/test/combo-live-vps.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","release:contributors":"node scripts/release/gen-contributors.mjs","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","test:coverage:runner":"node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 \"tests/unit/dashboard/**/*.test.ts\"","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:test-runner-api":"node scripts/check/check-test-runner-api.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"bun scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:agent-skills-sync":"node --import tsx/esm scripts/skills/generate-agent-skills.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"bun scripts/check/check-compression-budget.ts","check:changelog-integrity":"node scripts/check/check-changelog-integrity.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"bun scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","release:sync-changelog-i18n":"node scripts/release/sync-changelog-i18n.mjs","check:mutation-test-coverage":"node scripts/check/check-mutation-test-coverage.mjs --strict","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts","test:combo:live:vps:failover":"node scripts/test/combo-live-vps.mjs --failover"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6","@yarnpkg/parsers":{"js-yaml":"^4.2.0"}},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.16.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern --suppressions-location config/quality/eslint-suppressions.json"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.23.0","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.0.0","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","dompurify":"^3.4.11","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.1","safe-regex":"^2.1.1","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","@toon-format/toon":"^2.3.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","bun":"1.3.10","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","@types/safe-regex":"^1.1.6","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3","@huggingface/transformers":"3.5.2"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.45_1783319820230_0.5032911684225996","host":"s3://npm-registry-packages-npm-production"}},"3.8.46":{"name":"omniroute","version":"3.8.46","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.46","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"dec5af92d25602c03dde7005a2dbe14755f84fd7","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.46.tgz","fileCount":18919,"integrity":"sha512-tn+ACF/m3auYjduluZL4KDJtWGwvvRBF5rhbwL9OV63ifm++ZKkWSbA6i1gkendiys41Z7mzkbQfajHa7mY29g==","signatures":[{"sig":"MEYCIQCdXGL2qICzkaI8LRHSWcDgHBgR9vl/csBs5CUysYY36AIhAKN3h4ZU6tggcZvgfqhDmMnnde2kiyjiY3HFMJveaB5r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.46","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":690771089},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"92715c8f2c2b0689f26e47e9f80bc54cca3a3576","scripts":{"dev":"node --max-old-space-size=8192 scripts/dev/run-next.mjs dev","lint":"eslint . --suppressions-location config/quality/eslint-suppressions.json","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 \"tests/unit/dashboard/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","test:heap":"node --expose-gc --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","build:backend":"cross-env OMNIROUTE_BUILD_BACKEND_ONLY=1 node scripts/build/build-next-isolated.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 npm run test:coverage:runner","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:combo:live":"cross-env RUN_COMBO_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-live/*.live.test.ts\"","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"","test:unit:serial":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/unit/serial/**/*.test.ts\"","bench:compression":"bun scripts/compression/benchmark.ts","check:build-scope":"node scripts/check/check-build-scope.mjs","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pack-policy":"node --import tsx scripts/build/validate-pack-artifact.ts --policy-only","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","release:uncovered":"node scripts/release/list-uncovered-commits.mjs","test:combo:matrix":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-matrix/*.test.ts\"","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=1/2 \"tests/unit/serial/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=2/2 \"tests/unit/serial/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","test:unit:ci:shard":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 --test-shard=$TEST_SHARD tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 --test-shard=$TEST_SHARD \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=$TEST_SHARD \"tests/unit/serial/**/*.test.ts\"","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"bun scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","test:combo:live:vps":"node scripts/test/combo-live-vps.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","release:contributors":"node scripts/release/gen-contributors.mjs","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","test:coverage:runner":"node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:test-runner-api":"node scripts/check/check-test-runner-api.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"bun scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:agent-skills-sync":"node --import tsx/esm scripts/skills/generate-agent-skills.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"bun scripts/check/check-compression-budget.ts","check:changelog-integrity":"node scripts/check/check-changelog-integrity.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"bun scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","release:sync-changelog-i18n":"node scripts/release/sync-changelog-i18n.mjs","check:mutation-test-coverage":"node scripts/check/check-mutation-test-coverage.mjs --strict","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts","test:combo:live:vps:failover":"node scripts/test/combo-live-vps.mjs --failover"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6","@yarnpkg/parsers":{"js-yaml":"^4.2.0"}},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.16.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern --suppressions-location config/quality/eslint-suppressions.json"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.23.0","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.0.0","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","dompurify":"^3.4.11","next-intl":"^4.12.0","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.1","safe-regex":"^2.1.1","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","@toon-format/toon":"^2.3.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","bun":"1.3.10","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","@types/safe-regex":"^1.1.6","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.9","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"5.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3","@huggingface/transformers":"3.5.2"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.46_1783442867846_0.010790056355484134","host":"s3://npm-registry-packages-npm-production"}},"3.8.47":{"name":"omniroute","version":"3.8.47","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.47","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"082e8424fd145e4533fb51b7515f6732f6efa4e3","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.47.tgz","fileCount":20608,"integrity":"sha512-GTYU7G+px99WC4FE4jfEW9dSMylmSmZ39Q1zXNxslG71hjcl5+bPfV+VMHSOhYMyCKv13e/VoMZtnBRjdlji0A==","signatures":[{"sig":"MEQCIGMxu+FwZROnDHkqRnRjIdlTU7odO+qSudRGcduok5McAiBTkeAGj0xmZeb7MI0GZ6/jx8c0RsCXyW1wIjYcKPHfkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.47","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":739114638},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"e8950ded397aa25bd7bd45a4d2e62e3dc74eb7b5","scripts":{"dev":"node --max-old-space-size=8192 scripts/dev/run-next.mjs dev","lint":"eslint . --cache --cache-location .eslintcache --suppressions-location config/quality/eslint-suppressions.json","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 \"tests/unit/dashboard/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","lint:json":"node scripts/quality/run-eslint-json.mjs","test:heap":"node --expose-gc --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","build:backend":"cross-env OMNIROUTE_BUILD_BACKEND_ONLY=1 node scripts/build/build-next-isolated.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 npm run test:coverage:runner","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:combo:live":"cross-env RUN_COMBO_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-live/*.live.test.ts\"","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"","test:unit:serial":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/unit/serial/**/*.test.ts\"","bench:compression":"bun scripts/compression/benchmark.ts","check:build-scope":"node scripts/check/check-build-scope.mjs","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pack-policy":"node --import tsx scripts/build/validate-pack-artifact.ts --policy-only","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","release:uncovered":"node scripts/release/list-uncovered-commits.mjs","test:combo:matrix":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-matrix/*.test.ts\"","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=1/2 \"tests/unit/serial/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=2/2 \"tests/unit/serial/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:boundary:live":"cross-env RUN_BOUNDARY_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/boundary/*.live.test.ts\"","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","test:unit:ci:shard":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 --test-shard=$TEST_SHARD tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 --test-shard=$TEST_SHARD \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=$TEST_SHARD \"tests/unit/serial/**/*.test.ts\"","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","changelog:aggregate":"node scripts/release/aggregate-changelog.mjs","check:api-docs-refs":"node scripts/check/check-api-docs-refs.mjs","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"bun scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","test:combo:live:vps":"node scripts/test/combo-live-vps.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","release:contributors":"node scripts/release/gen-contributors.mjs","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","test:coverage:runner":"node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:test-runner-api":"node scripts/check/check-test-runner-api.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"bun scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:agent-skills-sync":"node --import tsx/esm scripts/skills/generate-agent-skills.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"bun scripts/check/check-compression-budget.ts","check:changelog-integrity":"node scripts/check/check-changelog-integrity.mjs","check:complexity-ratchets":"node scripts/check/check-complexity-ratchets.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"bun scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","release:sync-changelog-i18n":"node scripts/release/sync-changelog-i18n.mjs","check:mutation-test-coverage":"node scripts/check/check-mutation-test-coverage.mjs --strict","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts","test:combo:live:vps:failover":"node scripts/test/combo-live-vps.mjs --failover"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6","@yarnpkg/parsers":{"js-yaml":"^4.2.0"}},"deprecated":"broken npm package (boot crash, #7065) - use 3.8.48+ (or 3.8.46)","repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.16.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern --suppressions-location config/quality/eslint-suppressions.json"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.23.0","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.0.0","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","dompurify":"^3.4.11","next-intl":"^4.12.0","omniglyph":"^1.0.2","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.1","safe-regex":"^2.1.1","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","@toon-format/toon":"^2.3.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","bun":"1.3.14","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","@types/safe-regex":"^1.1.6","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.10","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"6.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3","@huggingface/transformers":"3.5.2"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.47_1783955423524_0.638365752273554","host":"s3://npm-registry-packages-npm-production"}},"3.8.48":{"name":"omniroute","version":"3.8.48","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.48","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"7319e898c4b77bc912c71a532347aefe232d4d05","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.48.tgz","fileCount":20609,"integrity":"sha512-nCewYpHDJATK0bAiXXakwLgoA6CfdBorS9FNPaAOInCeAydhhwPfkWGtf8VbyI/06S/nKT1IyOqRkMQDgU3NVA==","signatures":[{"sig":"MEUCIQClt1LwPTqp9KdP9hvGuA+LVRDLiIV+OwRv91d97S1UcgIgBVojLm+RwBipHCrlUUBd46U6dUt1s6hSmkgkMfGvRMA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.48","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":739183117},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.0.0 <23 || >=24.0.0 <27"},"gitHead":"7ee5bbc64dbb03e967521227f2afffeb7c9dad1e","scripts":{"dev":"node --max-old-space-size=8192 scripts/dev/run-next.mjs dev","lint":"eslint . --cache --cache-location .eslintcache --suppressions-location config/quality/eslint-suppressions.json","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 \"tests/unit/dashboard/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","lint:json":"node scripts/quality/run-eslint-json.mjs","test:heap":"node --expose-gc --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","build:backend":"cross-env OMNIROUTE_BUILD_BACKEND_ONLY=1 node scripts/build/build-next-isolated.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 npm run test:coverage:runner","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:combo:live":"cross-env RUN_COMBO_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-live/*.live.test.ts\"","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"","test:unit:serial":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/unit/serial/**/*.test.ts\"","bench:compression":"bun scripts/compression/benchmark.ts","check:build-scope":"node scripts/check/check-build-scope.mjs","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pack-policy":"node --import tsx scripts/build/validate-pack-artifact.ts --policy-only","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","release:uncovered":"node scripts/release/list-uncovered-commits.mjs","test:combo:matrix":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-matrix/*.test.ts\"","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=1/2 \"tests/unit/serial/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=2/2 \"tests/unit/serial/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","test:boundary:live":"cross-env RUN_BOUNDARY_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/boundary/*.live.test.ts\"","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","test:unit:ci:shard":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 --test-shard=$TEST_SHARD tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 --test-shard=$TEST_SHARD \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=$TEST_SHARD \"tests/unit/serial/**/*.test.ts\"","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","changelog:aggregate":"node scripts/release/aggregate-changelog.mjs","check:api-docs-refs":"node scripts/check/check-api-docs-refs.mjs","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"bun scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","test:combo:live:vps":"node scripts/test/combo-live-vps.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","release:contributors":"node scripts/release/gen-contributors.mjs","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","test:coverage:runner":"node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:test-runner-api":"node scripts/check/check-test-runner-api.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"bun scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","check:agent-skills-sync":"node --import tsx/esm scripts/skills/generate-agent-skills.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"bun scripts/check/check-compression-budget.ts","check:changelog-integrity":"node scripts/check/check-changelog-integrity.mjs","check:complexity-ratchets":"node scripts/check/check-complexity-ratchets.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:provider-consistency":"bun scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","release:sync-changelog-i18n":"node scripts/release/sync-changelog-i18n.mjs","check:mutation-test-coverage":"node scripts/check/check-mutation-test-coverage.mjs --strict","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts","test:combo:live:vps:failover":"node scripts/test/combo-live-vps.mjs --failover"},"_npmUser":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"overrides":{"qs":"^6.15.2","hono":"^4.12.25","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"postcss":"^8.5.14","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.11","form-data":"^4.0.6","ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6","@yarnpkg/parsers":{"js-yaml":"^4.2.0"}},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.16.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern --suppressions-location config/quality/eslint-suppressions.json"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.23.0","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.6","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.7","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.0.0","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","dompurify":"^3.4.11","next-intl":"^4.12.0","omniglyph":"^1.0.2","react-dom":"19.2.7","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.61.1","safe-regex":"^2.1.1","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","fumadocs-mdx":"^15.0.7","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.55.1","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","@toon-format/toon":"^2.3.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","bun":"1.3.14","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","@types/safe-regex":"^1.1.6","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.10","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"6.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^12.10.0","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3","@huggingface/transformers":"3.5.2"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.48_1783978327151_0.6704777352921258","host":"s3://npm-registry-packages-npm-production"}},"3.8.49":{"name":"omniroute","version":"3.8.49","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"author":{"name":"diegosouzapw"},"license":"MIT","_id":"omniroute@3.8.49","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"homepage":"https://omniroute.online","bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"dist":{"shasum":"28f1e2f6c5bd5a3752ff077915ab6fa1810e0281","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.49.tgz","fileCount":21765,"integrity":"sha512-8D+vfSVzn5LLYPdYrufe/pOGTiyMqd6D1BgE2v7FxoAhcSir3R2BSH8m80KuXHyuTz66N46+uSB4s7eGUviMFQ==","signatures":[{"sig":"MEQCIGKQxpEKeRJisUWUXXRVZRY6Ij4GA78sPuIAAZtSX+scAiAHBiDzK6PUH9DLdRbtFV0w3k8qczmOmU4zn1IHFoNH4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.49","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":830769055},"pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","engines":{"node":">=22.22.2 <23 || >=24.0.0 <27"},"gitHead":"e6523da2a12f0eaebc96ba95650efeec2436ab4d","scripts":{"dev":"node --max-old-space-size=8192 scripts/dev/run-next.mjs dev","lint":"eslint . --cache --cache-location .eslintcache --suppressions-location config/quality/eslint-suppressions.json","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 \"tests/unit/dashboard/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","homolog":"node scripts/homolog/run.mjs","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","lint:json":"node scripts/quality/run-eslint-json.mjs","test:heap":"node --expose-gc --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","eval:router":"node --import tsx scripts/router-eval/index.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:bun:db":"bun test tests/unit/db-adapters/bunSqliteAdapter.test.ts tests/unit/db-adapters/driverFactory.test.ts tests/unit/db-adapters/cliSqlite.test.mjs","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","build:backend":"cross-env OMNIROUTE_BUILD_BACKEND_ONLY=1 node scripts/build/build-next-isolated.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 npm run test:coverage:runner","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","test:vitest:ui":"vitest run --config vitest.config.ts tests/unit/ui","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","bench:heap-body":"node --expose-gc --import tsx/esm scripts/perf/request-body-heap.ts","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:pack-boot":"node scripts/check/check-pack-boot.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:combo:live":"cross-env RUN_COMBO_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-live/*.live.test.ts\"","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"","test:unit:serial":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/unit/serial/**/*.test.ts\"","bench:compression":"bun scripts/compression/benchmark.ts","check:build-scope":"node scripts/check/check-build-scope.mjs","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pack-policy":"node --import tsx scripts/build/validate-pack-artifact.ts --policy-only","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","check:router-eval":"node --import tsx scripts/check/check-router-eval-regression.ts","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","release:uncovered":"node scripts/release/list-uncovered-commits.mjs","test:combo:matrix":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-matrix/*.test.ts\"","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=1/2 \"tests/unit/serial/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=2/2 \"tests/unit/serial/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:ratchet-bank":"node scripts/quality/verify-ratchet-bank.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","eval:router:search":"node --import tsx scripts/router-eval/search.ts","eval:router:trends":"node --import tsx scripts/router-eval/trends.ts","test:boundary:live":"cross-env RUN_BOUNDARY_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/boundary/*.live.test.ts\"","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","test:unit:ci:shard":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 --test-shard=$TEST_SHARD tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 --test-shard=$TEST_SHARD \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=4096 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=$TEST_SHARD \"tests/unit/serial/**/*.test.ts\"","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","changelog:aggregate":"node scripts/release/aggregate-changelog.mjs","check:api-docs-refs":"node scripts/check/check-api-docs-refs.mjs","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"bun scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","eval:router:compare":"node --import tsx scripts/router-eval/compare.ts","i18n:check-glossary":"node scripts/i18n/check-glossary-consistency.mjs","test:combo:live:vps":"node scripts/test/combo-live-vps.mjs","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","release:contributors":"node scripts/release/gen-contributors.mjs","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","test:coverage:runner":"node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:test-runner-api":"node scripts/check/check-test-runner-api.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"bun scripts/docs/gen-provider-reference.ts","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","i18n:check-value-drift":"node scripts/i18n/check-ui-value-drift.mjs","check:agent-skills-sync":"node --import tsx/esm scripts/skills/generate-agent-skills.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"bun scripts/check/check-compression-budget.ts","check:changelog-integrity":"node scripts/check/check-changelog-integrity.mjs","check:complexity-ratchets":"node scripts/check/check-complexity-ratchets.mjs","check:dashboard-typecheck":"node scripts/check/check-dashboard-typecheck.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","eval:router:patch-compare":"node --import tsx scripts/router-eval/patch-compare.ts","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:nvidia-catalog-drift":"node --import tsx/esm scripts/check/check-nvidia-catalog-drift.ts","check:provider-consistency":"bun scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","i18n:check-value-drift:warn":"node scripts/i18n/check-ui-value-drift.mjs --warn","release:sync-changelog-i18n":"node scripts/release/sync-changelog-i18n.mjs","check:mutation-test-coverage":"node scripts/check/check-mutation-test-coverage.mjs --strict","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts","test:combo:live:vps:failover":"node scripts/test/combo-live-vps.mjs --failover"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:942a88d5-f89c-4526-8d73-067d84e0dd10"}},"overrides":{"qs":"^6.15.2","hono":"^4.12.27","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.28.0"},"sharp":"^0.35.0","adm-zip":"^0.6.0","postcss":"^8.5.18","fast-uri":"^3.1.3","node-gyp":{"undici":"^6.27.0"},"dompurify":"^3.4.12","form-data":"^4.0.6","promptfoo":{"js-yaml":"^5.2.2","@apidevtools/json-schema-ref-parser":{"js-yaml":"^4.2.0"}},"ip-address":"10.2.0","protobufjs":"^7.6.3","@babel/core":"^7.29.6","body-parser":"^2.3.0","concurrently":{"shell-quote":"^1.9.0"},"fast-xml-parser":"^5.10.1","@yarnpkg/parsers":{"js-yaml":"^4.2.0"},"@hono/node-server":"^2.0.5"},"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse"],"_npmVersion":"11.16.0","description":"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern --no-warn-ignored --suppressions-location config/quality/eslint-suppressions.json"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.0","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.23.0","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.3","next":"^16.2.11","open":"^11.0.0","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.16.1","lowdb":"^7.0.1","react":"19.2.8","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.4","parse5":"^8.0.1","sql.js":"^1.14.1","undici":"^8.3.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.2.2","mermaid":"^11.15.0","zustand":"^5.0.13","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","commander":"^15.0.0","dompurify":"^3.4.12","next-intl":"^4.12.0","omniglyph":"^1.0.2","react-dom":"19.2.8","smol-toml":"1.7.1","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.62.0","safe-regex":"^2.1.1","selfsigned":"^5.5.0","sqlite-vec":"^0.1.9","fetch-socks":"^1.3.3","fumadocs-ui":"^16.10.5","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.1","csv-stringify":"^6.7.0","fumadocs-core":"^16.10.5","monaco-editor":"^0.56.0","@lobehub/icons":"^5.8.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.45.2","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","@toon-format/toon":"^4.1.0","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1073.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","bun":"1.3.14","ctrf":"^0.2.1","dpdm":"^4.2.0","glob":"^13.0.6","knip":"^6.18.0","husky":"^9.1.7","jscpd":"^4.2.5","jsdom":"^29.1.1","eslint":"^9.39.4","vitest":"^4.1.7","httpyac":"^6.16.7","wait-on":"^9.0.10","wtfnode":"^0.10.1","prettier":"^3.8.3","@types/ws":"^8.18.0","cross-env":"^10.1.0","promptfoo":"^0.121.18","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","node-loader":"^2.1.0","tailwindcss":"^4.3.0","@types/react":"^19.2.15","concurrently":"^10.0.3","fumadocs-mdx":"^15.0.7","junit-to-ctrf":"^0.0.14","lockfile-lint":"^5.0.0","type-coverage":"^2.29.7","@playwright/test":"^1.60.0","@size-limit/file":"^12.1.0","@types/react-dom":"^19.2.3","@types/safe-regex":"^1.1.6","typescript-eslint":"^8.59.4","eslint-config-next":"16.2.10","@axe-core/playwright":"^4.11.3","@tailwindcss/postcss":"^4.3.0","@vitejs/plugin-react":"^6.0.2","@stryker-mutator/core":"^9.6.1","@types/better-sqlite3":"^7.6.13","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"6.0.0","@testing-library/jest-dom":"^6.9.1","@stryker-mutator/tap-runner":"^9.6.1","license-checker-rseidelsohn":"^5.0.1","playwright-ctrf-json-reporter":"^0.0.29"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^2.3.1","js-tiktoken":"^1.0.20","better-sqlite3":"^13.0.1","tls-client-node":"^0.2.0","@tensorflow/tfjs":"4.22.0","@atjsh/llmlingua-2":"2.0.3","@huggingface/transformers":"3.5.2"},"_npmOperationalInternal":{"tmp":"tmp/omniroute_3.8.49_1785380330001_0.03873848795598378","host":"s3://npm-registry-packages-npm-production"}},"3.8.50":{"_id":"omniroute@3.8.50","bin":{"omniroute":"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},"bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"dist":{"shasum":"d7b4fce4f1b00e5e826b76855665dfae42aab97a","tarball":"https://registry.npmjs.org/omniroute/-/omniroute-3.8.50.tgz","integrity":"sha512-qK6REDWQYGh8lwGwDgFMsBqAMXnxIePudr8cSuSYeB9iIlywNhDJxHKt6Cwa31lPci8jXE5bbvl+az0lvyt0Mg==","fileCount":21898,"unpackedSize":452524798,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.50","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQChSuLsy7E4vlW9NNYC7QY0BIhqv1o6KsWWuSHv6nUpNgIgd97UhIdFT8U0rpx8CxvA266oWN3xqPw8uR5/1t8aIe8="}]},"name":"omniroute","pnpm":{"onlyBuiltDependencies":["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},"type":"module","_from":"file:omniroute-3.8.50.tgz","author":{"name":"diegosouzapw"},"engines":{"node":">=22.22.2 <23 || >=24.0.0 <27"},"license":"MIT","scripts":{"dev":"node --max-old-space-size=8192 scripts/dev/run-next.mjs dev","lint":"eslint . --cache --cache-location .eslintcache --suppressions-location config/quality/eslint-suppressions.json","test":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 \"tests/unit/dashboard/**/*.test.ts\"","build":"node scripts/build/build-next-isolated.mjs","check":"npm run lint && npm run test","start":"node scripts/dev/run-next.mjs start","homolog":"node scripts/homolog/run.mjs","lint:md":"npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"","prepare":"husky","env:sync":"node scripts/dev/sync-env.mjs","i18n:run":"node scripts/i18n/run-translation.mjs","test:all":"npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e","test:e2e":"node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts","build:cli":"node --import tsx scripts/build/prepublish.ts","lint:json":"node scripts/quality/run-eslint-json.mjs","postbuild":"node scripts/build/colocate-standalone.mjs","test:heap":"node --expose-gc --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts","test:unit":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","uninstall":"node scripts/build/uninstall.mjs","audit:deps":"npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron","check:deps":"node scripts/check/check-deps.mjs","i18n:check":"node scripts/i18n/check-translation-drift.mjs","lint:prose":"vale docs","test:chaos":"cross-env RUN_CHAOS_INT=1 node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts","test:fixes":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts","test:plan3":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts","eval:router":"node --import tsx scripts/router-eval/index.ts","postinstall":"node scripts/build/postinstall.mjs","system-info":"node scripts/dev/system-info.mjs","test:bun:db":"bun test tests/unit/db-adapters/bunSqliteAdapter.test.ts tests/unit/db-adapters/driverFactory.test.ts tests/unit/db-adapters/cliSqlite.test.mjs","test:scoped":"bash scripts/quality/test-scoped.sh","test:system":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts","test:vitest":"vitest run --config vitest.mcp.config.ts","build:secure":"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs","check:cycles":"node scripts/check/check-cycles.mjs","electron:dev":"concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"","i18n:run:dry":"node scripts/i18n/run-translation.mjs --dry-run","i18n:sync-ui":"node scripts/i18n/sync-ui-keys.mjs","quality:gate":"npm run quality:collect && npm run quality:ratchet -- --allow-missing","quality:scan":"node scripts/quality/run-all-gates.mjs","test:unit:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","build:backend":"cross-env OMNIROUTE_BUILD_BACKEND_ONLY=1 node scripts/build/build-next-isolated.mjs","build:cli-api":"node --import tsx/esm scripts/cli/generate-api-commands.mjs","build:release":"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs","check:secrets":"node scripts/check/check-secrets.mjs","prebuild:docs":"node scripts/docs/gen-openapi-module.mjs","test:coverage":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 npm run test:coverage:runner","test:mutation":"stryker run","test:property":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-force-exit tests/unit/correctness/*.property.test.ts","test:security":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts","audit:electron":"npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')","check:cli-i18n":"node scripts/check/check-cli-i18n.mjs","check:db-rules":"node scripts/check/check-db-rules.mjs","check:docs-all":"npm run check:docs-sync && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs","check:licenses":"node scripts/check/check-licenses.mjs","check:lockfile":"node scripts/check/check-lockfile.mjs","electron:build":"npm run build && cd electron && npm run build","prepublishOnly":"npm run build:cli-api && npm run build:cli && npm run check:pack-artifact","test:ecosystem":"node scripts/dev/run-ecosystem-tests.mjs","test:unit:fast":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","test:vitest:ui":"vitest run --config vitest.config.ts","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","uninstall:full":"node scripts/build/uninstall.mjs --full","bench:heap-body":"node --expose-gc --import tsx/esm scripts/perf/request-body-heap.ts","check:dead-code":"node scripts/check/check-dead-code.mjs","check:doc-links":"node scripts/check/check-doc-links.mjs","check:docs-sync":"node scripts/check/check-docs-sync.mjs","check:file-size":"node scripts/check/check-file-size.mjs","check:pack-boot":"node scripts/check/check-pack-boot.mjs","check:workflows":"node scripts/check/check-workflows.mjs","coverage:report":"cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","quality:collect":"node scripts/quality/collect-metrics.mjs","quality:ratchet":"node scripts/quality/check-quality-ratchet.mjs","test:combo:live":"cross-env RUN_COMBO_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-live/*.live.test.ts\"","test:unit:shard":"concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"","check:complexity":"node scripts/check/check-complexity.mjs","coverage:summary":"node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md","eval:compression":"node --import tsx scripts/compression-eval/index.ts","i18n:sync-ui:dry":"node scripts/i18n/sync-ui-keys.mjs --dry-run","omniroute:verify":"node scripts/check/omniroute-verify.mjs","test:integration":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"","test:unit:serial":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/unit/serial/**/*.test.ts\"","bench:compression":"bun scripts/compression/benchmark.ts","check:build-scope":"node scripts/check/check-build-scope.mjs","check:bundle-size":"node scripts/check/check-bundle-size.mjs","check:docs-counts":"node scripts/check/check-docs-counts-sync.mjs","check:duplication":"node scripts/check/check-duplication.mjs","check:pack-policy":"node --import tsx scripts/build/validate-pack-artifact.ts --policy-only","check:pr-evidence":"node scripts/check/check-pr-evidence.mjs","check:router-eval":"node --import tsx scripts/check/check-router-eval-regression.ts","check:rtl-ratchet":"node scripts/check/check-rtl-ratchet.mjs","quality:scan:fast":"node scripts/quality/run-all-gates.mjs --fast","release:uncovered":"node scripts/release/list-uncovered-commits.mjs","test:combo:matrix":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-matrix/*.test.ts\"","test:unit:shard:1":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=1/2 \"tests/unit/serial/**/*.test.ts\"","test:unit:shard:2":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=2/2 \"tests/unit/serial/**/*.test.ts\"","check:docs-symbols":"node scripts/check/check-docs-symbols.mjs","check:env-doc-sync":"node scripts/check/check-env-doc-sync.mjs","check:error-helper":"node scripts/check/check-error-helper.mjs","check:node-runtime":"node --import tsx scripts/check/check-supported-node-runtime.ts","check:public-creds":"node scripts/check/check-public-creds.mjs","check:ratchet-bank":"node scripts/quality/verify-ratchet-bank.mjs","check:test-masking":"node scripts/check/check-test-masking.mjs","check:vuln-ratchet":"node scripts/check/check-vuln-ratchet.mjs","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:win":"npm run build && cd electron && npm run build:win","eval:router:search":"node --import tsx scripts/router-eval/search.ts","eval:router:trends":"node --import tsx scripts/router-eval/trends.ts","test:boundary:live":"cross-env RUN_BOUNDARY_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/boundary/*.live.test.ts\"","test:protocols:e2e":"node scripts/dev/run-protocol-clients-tests.mjs","test:scoped:staged":"bash scripts/quality/test-scoped.sh --staged","test:unit:ci:shard":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 --test-shard=$TEST_SHARD tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 --test-shard=$TEST_SHARD \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=$TEST_SHARD \"tests/unit/serial/**/*.test.ts\"","build:native:tproxy":"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild","changelog:aggregate":"node scripts/release/aggregate-changelog.mjs","check:api-docs-refs":"node scripts/check/check-api-docs-refs.mjs","check:circular-deps":"node scripts/check/check-circular-deps.mjs","check:fetch-targets":"node scripts/check/check-fetch-targets.mjs","check:known-symbols":"bun scripts/check/check-known-symbols.ts","check:pack-artifact":"node --import tsx scripts/build/validate-pack-artifact.ts","check:release-green":"node scripts/quality/validate-release-green.mjs","check:type-coverage":"node scripts/check/check-type-coverage.mjs","eval:router:compare":"node --import tsx scripts/router-eval/compare.ts","i18n:check-glossary":"node scripts/i18n/check-glossary-consistency.mjs","test:combo:live:vps":"node scripts/test/combo-live-vps.mjs","test:integration:ci":"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=$TEST_SHARD tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"","backfill-aggregation":"node --import tsx src/scripts/backfillAggregation.ts","bench:routing-events":"node --import tsx/esm scripts/perf/routing-events-bench.ts","check:any-budget:t11":"node scripts/check/check-t11-any-budget.mjs","check:codeql-ratchet":"node scripts/check/check-codeql-ratchet.mjs","check:openapi-routes":"node scripts/check/check-openapi-routes.mjs","check:pr-test-policy":"node scripts/check/check-pr-test-policy.mjs","check:test-discovery":"node scripts/check/check-test-discovery.mjs","docs:render-diagrams":"node scripts/docs/render-diagrams.mjs","electron:build:linux":"npm run build && cd electron && npm run build:linux","release:contributors":"node scripts/release/gen-contributors.mjs","test:coverage:legacy":"c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts","test:coverage:runner":"node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial","check:fabricated-docs":"node scripts/check/check-fabricated-docs.mjs --strict","check:install-upgrade":"node scripts/check/check-install-upgrade.mjs","check:provider-assets":"node scripts/check/check-provider-assets.mjs","check:test-runner-api":"node scripts/check/check-test-runner-api.mjs","sweep:stale-fragments":"node scripts/release/sweep-stale-fragments.mjs","alibaba:sync-allowlist":"node --import tsx/esm scripts/ops/sync-alibaba-allowlist.mjs","check:mutation-ratchet":"node scripts/check/check-mutation-ratchet.mjs","check:openapi-breaking":"node scripts/check/check-openapi-breaking.mjs","check:openapi-coverage":"node scripts/check/check-openapi-coverage.mjs","coverage:report:legacy":"c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary","gen:provider-reference":"bun scripts/docs/gen-provider-reference.ts","i18n:check-glossary:ko":"node scripts/i18n/check-glossary-consistency.mjs --locale=ko","i18n:check-ui-coverage":"node scripts/i18n/check-ui-keys-coverage.mjs","i18n:check-value-drift":"node scripts/i18n/check-ui-value-drift.mjs","check:agent-skills-sync":"node --import tsx/esm scripts/skills/generate-agent-skills.mjs","check:tracked-artifacts":"node scripts/check/check-tracked-artifacts.mjs","electron:smoke:packaged":"node scripts/dev/smoke-electron-packaged.mjs","check:compression-budget":"bun scripts/check/check-compression-budget.ts","check:open-sse-typecheck":"node scripts/check/check-open-sse-typecheck.mjs","check:changelog-integrity":"node scripts/check/check-changelog-integrity.mjs","check:complexity-ratchets":"node scripts/check/check-complexity-ratchets.mjs","check:dashboard-typecheck":"node scripts/check/check-dashboard-typecheck.mjs","check:deprecated-versions":"node scripts/check/check-deprecated-versions.mjs","check:migration-numbering":"node scripts/check/check-migration-numbering.mjs","eval:router:patch-compare":"node --import tsx scripts/router-eval/patch-compare.ts","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","check:cognitive-complexity":"node scripts/check/check-cognitive-complexity.mjs","check:nvidia-catalog-drift":"node --import tsx/esm scripts/check/check-nvidia-catalog-drift.ts","check:provider-consistency":"bun scripts/check/check-provider-consistency.ts","check:route-validation:t06":"node scripts/check/check-route-validation.mjs","i18n:check-value-drift:warn":"node scripts/i18n/check-ui-value-drift.mjs --warn","release:sync-changelog-i18n":"node scripts/release/sync-changelog-i18n.mjs","check:mutation-test-coverage":"node scripts/check/check-mutation-test-coverage.mjs --strict","check:openapi-security-tiers":"node scripts/check/check-openapi-security-tiers.mjs","check:route-guard-membership":"node --import tsx scripts/check/check-route-guard-membership.ts","test:combo:live:vps:failover":"node scripts/test/combo-live-vps.mjs --failover","check:forgotten-sibling-tests":"node scripts/check/check-forgotten-sibling-tests.mjs","check:ts7-diagnostics-ratchet":"node scripts/check/check-ts7-diagnostics-ratchet.mjs"},"version":"3.8.50","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:942a88d5-f89c-4526-8d73-067d84e0dd10"},"approver":{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}},"homepage":"https://omniroute.online","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"_resolved":"/home/runner/work/OmniRoute/OmniRoute/omniroute-3.8.50.tgz","overrides":{"qs":"^6.15.2","tar":"^7.5.21","hono":"^4.12.34","uuid":"^14.0.0","vite":"^8.0.16","jsdom":{"undici":"^7.29.0"},"sharp":"^0.35.3","nanoid":"^3.3.17","rimraf":{"minimatch":{"brace-expansion":"^2.1.4"}},"adm-zip":"^0.6.0","postcss":"^8.5.18","fast-uri":"^3.1.5","node-gyp":{"undici":"^6.28.0"},"form-data":"^4.0.6","libxmljs2":{"minimatch":{"brace-expansion":"^2.1.4"}},"minimatch":{"brace-expansion":"^1.1.18"},"promptfoo":{"undici":"^7.29.0","js-yaml":"^5.2.2"},"ip-address":"^10.3.1","protobufjs":"^7.6.5","@babel/core":"^7.29.6","body-parser":"^2.3.0","xmlbuilder2":{"js-yaml":"^4.3.1"},"concurrently":{"shell-quote":"^1.9.0"},"lockfile-lint":{"js-yaml":"^4.3.1"},"monaco-editor":{"dompurify":"^3.4.13"},"brace-expansion":"^5.0.9","fast-xml-parser":"^5.10.1","@eslint/eslintrc":{"js-yaml":"^4.3.1"},"@yarnpkg/parsers":{"js-yaml":"^4.3.1"},"onnxruntime-node":"1.24.3","socket.io-parser":"^4.2.7","@hono/node-server":"^2.0.5","@apidevtools/json-schema-ref-parser":{"js-yaml":"^4.3.1"}},"_integrity":"sha512-qK6REDWQYGh8lwGwDgFMsBqAMXnxIePudr8cSuSYeB9iIlywNhDJxHKt6Cwa31lPci8jXE5bbvl+az0lvyt0Mg==","repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"workspaces":["open-sse","packages/browser-pool"],"_npmVersion":"11.17.0","description":"Unified AI router with 352 providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern --no-warn-ignored --suppressions-location config/quality/eslint-suppressions.json"],"*.{json,md,yml,yaml,css}":["prettier --write"]},"maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"_nodeVersion":"24.19.0","allowScripts":{"keytar":true,"esbuild":true,"@swc/core":true,"protobufjs":true,"unrs-resolver":true,"better-sqlite3":true,"@parcel/watcher":true},"dependencies":{"ws":"^8.21.3","ink":"^7.0.3","ora":"^9.4.1","tsx":"^4.23.12","zod":"^4.4.3","clsx":"^2.1.1","jose":"^6.2.9","next":"16.3.1","open":"^11.0.1","pino":"^10.3.1","uuid":"^14.0.0","yazl":"^3.3.1","axios":"^1.19.0","lowdb":"^7.0.1","react":"19.2.8","sharp":"^0.35.3","socks":"^2.8.7","fflate":"^0.8.3","marked":"^18.0.9","parse5":"^8.0.1","sql.js":"^1.14.2","undici":"^8.10.0","express":"^5.2.1","ioredis":"^5.10.1","js-yaml":"^5.3.0","mermaid":"^11.15.0","zustand":"^5.0.15","bcryptjs":"^3.0.3","react-is":"^19.2.6","recharts":"^3.8.1","turndown":"7.2.4","commander":"^15.0.0","dompurify":"^3.4.13","next-intl":"^4.13.7","omniglyph":"^1.4.0","react-dom":"19.2.8","smol-toml":"1.8.0","@types/mdx":"^2.0.13","bottleneck":"^2.19.5","playwright":"1.62.1","safe-regex":"^2.1.1","selfsigned":"^5.5.0","cron-parser":"^5.10.0","fetch-socks":"^1.3.3","fumadocs-ui":"^16.14.4","ink-spinner":"^5.0.0","next-themes":"^0.4.6","pino-pretty":"^13.1.3","xxhash-wasm":"^1.1.0","@ngrok/ngrok":"^1.7.0","@swc/helpers":"0.5.23","jsonc-parser":"^3.3.1","lucide-react":"^1.21.0","@dnd-kit/core":"^6.3.1","@xyflow/react":"^12.11.3","csv-stringify":"^6.8.3","fumadocs-core":"^16.14.4","monaco-editor":"^0.56.0","@lobehub/icons":"^5.16.0","ink-text-input":"^6.0.0","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","marked-terminal":"^7.3.0","node-machine-id":"^1.1.12","update-notifier":"^7.3.1","material-symbols":"^0.46.0","react-reconciler":"^0.33.0","@dnd-kit/sortable":"^10.0.0","@toon-format/toon":"^4.1.1","https-proxy-agent":"^9.0.0","@dnd-kit/utilities":"^3.2.2","turndown-plugin-gfm":"1.0.2","@monaco-editor/react":"^4.7.0","http-proxy-middleware":"^4.0.0","pino-abstract-transport":"^3.0.0","@modelcontextprotocol/sdk":"^1.29.0","@aws-sdk/client-bedrock-runtime":"^3.1112.0"},"devDependencies":{"c8":"^12.0.0","bun":"1.3.14","ctrf":"^0.3.0","dpdm":"^4.3.0","glob":"^13.0.6","knip":"^6.32.2","husky":"^9.1.7","jscpd":"^4.3.0","jsdom":"^30.0.1","eslint":"^9.39.4","vitest":"^4.1.7","httpyac":"^6.16.7","wait-on":"^9.1.0","wtfnode":"^0.10.1","prettier":"^3.9.6","@types/ws":"^8.18.0","cross-env":"^10.1.0","promptfoo":"^0.122.0","@types/bun":"latest","fast-check":"^4.8.0","size-limit":"^13.0.3","typescript":"^6.0.3","@types/node":"^26.2.0","lint-staged":"^17.3.0","node-loader":"^2.1.0","opencode-ai":"1.18.18","tailwindcss":"^4.3.0","@types/react":"^19.2.18","concurrently":"^10.0.5","fumadocs-mdx":"^15.2.3","junit-to-ctrf":"^0.0.14","lockfile-lint":"^5.0.1","type-coverage":"^2.30.1","@playwright/test":"^1.62.1","@size-limit/file":"^13.0.3","@types/react-dom":"^19.2.4","@types/safe-regex":"^1.1.6","typescript-eslint":"^8.67.0","eslint-config-next":"16.3.1","@axe-core/playwright":"^4.13.0","@tailwindcss/postcss":"^4.3.0","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.0.5","@stryker-mutator/core":"^10.0.0","@types/better-sqlite3":"^9.6.0","eslint-plugin-sonarjs":"^4.1.0","@testing-library/react":"^16.3.2","@cyclonedx/cyclonedx-npm":"6.0.1","@testing-library/jest-dom":"^7.0.1","@stryker-mutator/tap-runner":"^10.0.0","@testing-library/user-event":"^14.6.6","license-checker-rseidelsohn":"^5.0.1","playwright-ctrf-json-reporter":"^0.0.29"},"optionalDependencies":{"keytar":"^7.9.0","wreq-js":"^3.0.0","sqlite-vec":"^0.1.9","js-tiktoken":"^1.0.20","better-sqlite3":"^13.0.2","tls-client-node":"^0.2.0","onnxruntime-node":"1.24.3","@atjsh/llmlingua-2":"3.0.0","@huggingface/transformers":"^4.2.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/omniroute_3.8.50_1787933986650_0.7145993192482762"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-14T07:41:10.173Z","modified":"2026-08-28T16:19:48.762Z","0.1.0":"2026-02-14T07:41:11.088Z","0.2.0":"2026-02-14T16:54:19.162Z","0.3.0":"2026-02-15T05:09:17.184Z","0.4.0":"2026-02-15T16:01:47.311Z","0.5.0":"2026-02-15T22:06:01.770Z","0.6.0":"2026-02-16T03:25:41.500Z","0.7.0":"2026-02-16T12:51:38.671Z","0.8.0":"2026-02-16T17:36:27.836Z","0.8.5":"2026-02-17T12:15:29.515Z","0.8.8":"2026-02-17T17:50:32.818Z","0.9.0":"2026-02-17T21:13:01.975Z","1.0.0":"2026-02-18T03:02:56.501Z","1.0.1":"2026-02-18T04:45:51.758Z","1.0.2":"2026-02-18T20:13:29.757Z","1.0.3":"2026-02-19T07:42:29.089Z","1.0.4":"2026-02-20T01:47:02.298Z","1.0.5":"2026-02-20T04:47:23.992Z","1.0.6":"2026-02-20T06:03:04.354Z","1.0.7":"2026-02-20T14:54:36.165Z","1.0.8":"2026-02-21T12:36:36.477Z","1.0.9":"2026-02-21T13:04:20.009Z","1.0.10":"2026-02-21T15:40:31.658Z","1.1.0":"2026-02-21T21:44:50.021Z","1.1.1":"2026-02-22T19:51:40.052Z","1.2.0":"2026-02-22T21:40:45.776Z","1.3.1":"2026-02-23T19:59:57.367Z","1.4.0":"2026-02-23T20:06:11.157Z","1.4.1":"2026-02-23T22:04:21.000Z","1.4.2":"2026-02-23T23:42:33.057Z","1.4.3":"2026-02-23T23:54:54.080Z","1.4.4":"2026-02-24T16:47:19.148Z","1.4.5":"2026-02-24T17:03:18.363Z","1.4.7":"2026-02-25T12:04:10.771Z","1.4.9":"2026-02-25T20:10:33.690Z","1.4.10":"2026-02-25T21:46:01.433Z","1.4.11":"2026-02-25T22:27:48.762Z","1.5.0":"2026-02-26T20:19:36.989Z","1.6.0":"2026-02-27T19:35:00.064Z","1.6.2":"2026-02-28T03:01:22.718Z","1.6.3":"2026-02-28T03:58:32.944Z","1.6.4":"2026-02-28T11:37:57.741Z","1.6.5":"2026-02-28T13:30:49.011Z","1.6.6":"2026-02-28T14:20:09.981Z","1.6.7":"2026-02-28T14:56:23.635Z","1.6.8":"2026-02-28T18:36:02.329Z","1.6.9":"2026-02-28T19:32:12.589Z","1.7.0":"2026-02-28T20:46:07.088Z","1.7.1":"2026-02-28T21:58:49.084Z","1.7.2":"2026-03-01T10:36:19.629Z","1.7.3":"2026-03-02T00:47:36.258Z","1.7.4":"2026-03-02T02:08:11.754Z","1.7.5":"2026-03-02T03:43:41.397Z","1.7.6":"2026-03-02T13:23:56.853Z","1.7.7":"2026-03-02T13:31:52.517Z","1.7.8":"2026-03-02T15:17:31.813Z","1.7.9":"2026-03-02T17:58:41.627Z","1.7.10":"2026-03-02T18:34:09.158Z","1.7.11":"2026-03-02T21:37:03.274Z","1.7.12":"2026-03-02T21:49:45.405Z","1.7.13":"2026-03-02T21:55:22.756Z","1.7.14":"2026-03-02T22:21:10.449Z","1.8.0":"2026-03-03T14:26:16.970Z","1.8.1":"2026-03-03T15:10:50.492Z","2.0.1":"2026-03-05T21:03:01.569Z","2.0.0":"2026-03-05T21:15:03.290Z","2.0.2":"2026-03-05T23:14:17.736Z","2.0.3":"2026-03-06T01:01:35.533Z","2.0.4":"2026-03-06T02:30:25.160Z","2.0.5":"2026-03-06T21:54:45.215Z","2.0.6":"2026-03-07T04:40:20.413Z","2.0.7":"2026-03-07T10:01:34.666Z","2.0.8":"2026-03-07T13:09:14.749Z","2.0.9":"2026-03-07T13:30:31.094Z","2.0.10":"2026-03-07T14:00:55.182Z","2.0.11":"2026-03-07T14:26:21.753Z","2.0.12":"2026-03-07T14:58:58.163Z","2.0.13":"2026-03-07T15:22:27.056Z","2.0.14":"2026-03-08T05:23:17.868Z","2.0.15":"2026-03-08T20:43:17.671Z","2.0.16":"2026-03-08T21:10:40.380Z","2.0.17":"2026-03-09T11:52:53.867Z","2.0.18":"2026-03-09T13:59:22.345Z","2.0.19":"2026-03-09T15:51:03.320Z","2.0.20":"2026-03-09T16:50:55.894Z","2.1.0":"2026-03-09T18:22:05.189Z","2.1.1":"2026-03-09T18:40:58.569Z","2.1.2":"2026-03-09T18:59:59.402Z","2.2.1":"2026-03-10T12:54:17.157Z","2.2.2":"2026-03-10T14:04:24.505Z","2.2.3":"2026-03-10T15:57:41.213Z","2.2.4":"2026-03-10T17:40:49.071Z","2.2.5":"2026-03-10T18:18:41.235Z","2.2.6":"2026-03-10T19:25:49.644Z","2.2.7":"2026-03-11T02:37:43.499Z","2.2.8":"2026-03-11T03:24:48.646Z","2.2.9":"2026-03-11T11:50:04.825Z","2.3.0":"2026-03-11T15:47:34.687Z","2.3.1":"2026-03-11T23:53:15.358Z","2.3.2":"2026-03-12T10:04:09.037Z","2.3.3":"2026-03-12T13:00:25.338Z","2.3.4":"2026-03-12T13:32:25.246Z","2.3.6":"2026-03-12T14:15:04.541Z","2.3.7":"2026-03-12T15:30:35.474Z","2.3.8":"2026-03-12T15:47:49.060Z","2.3.9":"2026-03-12T16:02:30.996Z","2.3.10":"2026-03-12T16:53:12.950Z","2.3.12":"2026-03-12T19:48:16.556Z","2.3.13":"2026-03-12T21:24:21.481Z","2.3.14":"2026-03-13T13:24:49.263Z","2.3.15":"2026-03-13T13:46:23.678Z","2.3.16":"2026-03-13T14:08:24.569Z","2.3.17":"2026-03-13T14:18:27.041Z","2.4.0":"2026-03-13T14:25:42.650Z","2.4.1":"2026-03-13T14:44:35.101Z","2.4.2":"2026-03-14T14:08:28.012Z","2.4.3":"2026-03-14T15:54:54.482Z","2.4.4":"2026-03-14T18:10:41.152Z","2.5.0":"2026-03-14T18:37:00.709Z","2.5.1":"2026-03-14T18:59:15.143Z","2.5.2":"2026-03-14T19:06:11.367Z","2.5.3":"2026-03-14T22:59:06.100Z","2.5.4":"2026-03-15T04:18:06.844Z","2.5.5":"2026-03-15T15:40:31.438Z","2.5.6":"2026-03-15T16:15:31.779Z","2.5.7":"2026-03-15T17:01:17.362Z","2.6.0":"2026-03-15T23:24:19.349Z","2.6.1":"2026-03-16T00:59:30.253Z","2.6.2":"2026-03-16T12:56:47.129Z","2.6.6":"2026-03-17T07:42:55.376Z","2.6.9":"2026-03-17T12:13:11.724Z","2.6.10":"2026-03-17T13:14:01.247Z","2.7.0":"2026-03-17T17:57:47.361Z","2.7.1":"2026-03-17T19:31:54.436Z","2.7.2":"2026-03-18T03:46:21.046Z","2.7.3":"2026-03-18T11:45:18.374Z","2.7.4":"2026-03-18T15:15:18.579Z","2.7.5":"2026-03-18T17:56:02.999Z","2.7.7":"2026-03-18T18:17:31.105Z","2.7.8":"2026-03-18T18:42:11.377Z","2.7.9":"2026-03-18T20:23:23.683Z","2.7.10":"2026-03-19T04:53:38.435Z","2.8.0":"2026-03-19T05:32:27.027Z","2.8.1":"2026-03-19T11:49:37.121Z","2.8.2":"2026-03-19T14:17:45.657Z","2.8.3":"2026-03-19T17:04:15.495Z","2.8.4":"2026-03-19T19:36:28.105Z","2.8.5":"2026-03-19T23:33:23.778Z","2.8.6":"2026-03-20T15:30:43.290Z","2.8.7":"2026-03-20T16:01:11.450Z","2.8.8":"2026-03-20T18:13:51.627Z","2.8.9":"2026-03-20T19:18:53.395Z","2.9.0":"2026-03-20T23:16:44.653Z","2.9.1":"2026-03-21T11:59:34.681Z","2.9.2":"2026-03-21T17:06:06.856Z","2.9.3":"2026-03-21T20:04:58.300Z","2.9.4":"2026-03-21T20:45:42.925Z","3.0.0":"2026-03-24T22:01:21.816Z","3.0.1":"2026-03-25T12:10:08.076Z","3.0.2":"2026-03-25T12:11:12.380Z","3.0.3":"2026-03-25T13:57:08.901Z","3.0.4":"2026-03-25T14:38:03.393Z","3.0.5":"2026-03-25T15:17:06.312Z","3.0.6":"2026-03-25T16:14:19.837Z","3.0.7":"2026-03-25T22:33:13.480Z","3.0.8":"2026-03-26T02:33:35.907Z","3.0.9":"2026-03-26T03:31:39.770Z","3.1.0":"2026-03-26T18:23:47.004Z","3.1.1":"2026-03-26T19:01:14.030Z","3.1.2":"2026-03-26T22:54:28.253Z","3.1.3":"2026-03-27T00:37:24.801Z","3.1.4":"2026-03-27T02:53:55.223Z","3.1.5":"2026-03-27T04:31:40.853Z","3.1.6":"2026-03-27T09:26:56.025Z","3.1.7":"2026-03-27T18:19:39.262Z","3.1.8":"2026-03-27T21:12:24.982Z","3.1.9":"2026-03-28T20:39:51.326Z","3.1.10":"2026-03-28T22:57:31.683Z","3.2.0":"2026-03-28T23:45:15.056Z","3.2.1":"2026-03-29T00:22:10.746Z","3.2.2":"2026-03-29T01:15:45.775Z","3.2.3":"2026-03-29T02:24:41.016Z","3.2.4":"2026-03-29T02:50:05.721Z","3.2.5":"2026-03-29T04:42:08.951Z","3.2.6":"2026-03-29T07:39:43.507Z","3.2.7":"2026-03-29T08:36:05.285Z","3.2.9":"2026-03-29T17:34:01.682Z","3.3.0":"2026-03-29T17:34:13.634Z","3.3.1":"2026-03-29T20:08:58.031Z","3.3.2":"2026-03-29T23:07:48.242Z","3.3.4":"2026-03-30T16:04:12.826Z","3.3.5":"2026-03-30T20:38:26.883Z","3.3.6":"2026-03-30T21:35:03.938Z","3.3.7":"2026-03-30T22:33:10.900Z","3.3.8":"2026-03-31T00:03:55.199Z","3.3.9":"2026-03-31T00:41:18.753Z","3.3.10":"2026-03-31T03:32:32.413Z","3.3.11":"2026-03-31T11:23:52.635Z","3.4.0":"2026-03-31T13:26:12.216Z","3.4.1":"2026-03-31T22:19:17.500Z","3.4.2":"2026-04-01T22:50:55.282Z","3.4.3":"2026-04-02T03:18:33.498Z","3.4.4":"2026-04-02T10:47:13.871Z","3.4.5":"2026-04-02T20:20:59.206Z","3.4.6":"2026-04-02T21:28:06.517Z","3.4.7":"2026-04-03T01:53:06.732Z","3.4.8":"2026-04-03T04:51:10.300Z","3.4.9":"2026-04-03T06:59:11.163Z","3.5.0":"2026-04-03T22:35:26.994Z","3.5.1":"2026-04-04T13:48:58.582Z","3.5.2":"2026-04-05T05:57:50.419Z","3.5.3":"2026-04-07T16:00:18.701Z","3.5.4":"2026-04-07T22:44:58.246Z","3.5.5":"2026-04-08T21:30:20.536Z","3.5.6":"2026-04-09T19:02:23.508Z","3.5.7":"2026-04-09T20:35:15.523Z","3.5.8":"2026-04-09T22:43:28.916Z","3.5.9":"2026-04-10T01:35:36.046Z","3.6.0":"2026-04-10T13:05:19.434Z","3.6.1":"2026-04-10T15:27:47.983Z","3.6.2":"2026-04-11T18:21:32.567Z","3.6.3":"2026-04-11T21:58:48.532Z","3.6.4":"2026-04-12T23:13:29.935Z","3.6.5":"2026-04-14T01:13:17.554Z","3.6.6":"2026-04-16T08:47:58.410Z","3.6.7":"2026-04-16T11:51:23.648Z","3.6.8":"2026-04-18T06:03:58.233Z","3.6.9":"2026-04-19T23:13:32.173Z","3.7.0":"2026-04-26T07:41:45.880Z","3.7.1":"2026-04-27T04:52:55.030Z","3.7.2":"2026-04-28T06:20:32.357Z","3.7.3":"2026-04-28T13:11:05.854Z","3.7.4":"2026-04-29T00:27:19.646Z","3.7.5":"2026-04-30T04:49:55.765Z","3.7.6":"2026-04-30T18:07:18.675Z","3.7.7":"2026-05-01T04:03:30.618Z","3.7.8":"2026-05-02T08:52:04.543Z","3.7.9":"2026-05-06T04:31:20.230Z","3.8.0":"2026-05-20T18:18:54.667Z","3.8.1":"2026-05-21T05:04:59.112Z","3.8.2":"2026-05-23T05:17:52.644Z","3.8.3":"2026-05-24T21:35:23.698Z","3.2.8":"2026-05-24T21:44:11.434Z","3.8.4":"2026-05-27T05:16:11.853Z","3.8.5":"2026-05-27T09:35:12.679Z","3.8.6":"2026-05-29T15:53:24.708Z","3.8.7":"2026-05-29T23:39:48.143Z","3.8.8":"2026-06-03T05:59:17.135Z","3.8.9":"2026-06-04T08:34:44.395Z","3.8.10":"2026-06-04T23:48:06.587Z","3.8.11":"2026-06-05T21:10:02.191Z","3.8.12":"2026-06-06T12:16:22.000Z","3.8.13":"2026-06-06T23:37:39.140Z","3.8.14":"2026-06-07T12:30:02.225Z","3.8.15":"2026-06-07T17:18:07.885Z","3.8.16":"2026-06-08T19:02:44.960Z","3.8.17":"2026-06-09T11:06:00.521Z","3.8.18":"2026-06-09T19:32:29.365Z","3.8.19":"2026-06-10T06:00:15.136Z","3.8.20":"2026-06-10T19:36:52.174Z","3.8.21":"2026-06-11T08:56:22.006Z","3.8.22":"2026-06-12T01:18:29.234Z","3.8.23":"2026-06-13T03:15:34.323Z","3.8.24":"2026-06-14T00:50:34.038Z","3.8.25":"2026-06-15T07:10:58.246Z","3.8.26":"2026-06-16T05:43:33.493Z","3.8.27":"2026-06-17T07:13:54.977Z","3.8.28":"2026-06-17T23:45:58.087Z","3.8.29":"2026-06-19T10:00:03.239Z","3.8.30":"2026-06-20T10:20:46.630Z","3.8.31":"2026-06-20T18:05:57.775Z","3.8.32":"2026-06-21T12:47:04.488Z","3.8.33":"2026-06-22T07:14:43.345Z","3.8.34":"2026-06-23T06:22:11.950Z","3.8.35":"2026-06-23T21:15:12.258Z","3.8.36":"2026-06-25T21:17:40.109Z","3.8.37":"2026-06-26T06:49:08.495Z","3.8.38":"2026-06-27T13:00:40.411Z","3.8.39":"2026-06-28T10:30:00.601Z","3.8.40":"2026-06-29T11:52:41.839Z","3.8.41":"2026-06-29T20:55:06.965Z","3.8.42":"2026-06-30T10:07:26.652Z","3.8.43":"2026-07-02T15:55:26.710Z","3.8.44":"2026-07-04T16:42:50.596Z","3.8.45":"2026-07-06T06:37:02.226Z","3.8.46":"2026-07-07T16:47:49.954Z","3.8.47":"2026-07-13T15:10:26.384Z","3.8.48":"2026-07-13T21:32:09.221Z","3.8.49":"2026-07-30T02:58:52.207Z","3.8.50":"2026-08-28T16:19:48.276Z"},"bugs":{"url":"https://github.com/diegosouzapw/OmniRoute/issues"},"author":{"name":"diegosouzapw"},"license":"MIT","homepage":"https://omniroute.online","keywords":["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],"repository":{"url":"git+https://github.com/diegosouzapw/OmniRoute.git","type":"git"},"description":"Unified AI router with 352 providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.","maintainers":[{"name":"diegosouza.pw","email":"diegosouza.pw@outlook.com"}],"readme":"<div align=\"center\">\n\n<img src=\"./docs/screenshots/MainOmniRoute.png\" alt=\"OmniRoute Dashboard\" width=\"820\"/>\n\n<br/>\n<br/>\n\n# 🚀 OmniRoute — The Free AI Gateway\n\n<img src=\"./docs/diagrams/readme-hero.svg\" width=\"100%\" alt=\"OmniRoute — Never stop coding. Every AI tool → 352 providers — 90+ free — through one endpoint. Claude Code, Codex, Cursor, Cline, Copilot & Antigravity into FREE Claude / GPT / Gemini with auto-fallback. RTK + Caveman stacked compression saves 15–95% tokens (~89% avg) — never hit limits. 352 AI providers · 90+ free tiers · ~1.51B free tokens/mo · 19 routing strategies · $0 to start.\"/>\n\n</div>\n\n<div align=\"center\">\n\n## 💰 ~1.51B Free Tokens / Month\n\n</div>\n\n> Stacking free tiers by hand is painful — dozens of SDKs, dozens of rate limits, and no idea how much you actually have. OmniRoute catalogs **455 free-tier entries across 40 recurring pool keys** and computes the token headline from the **20 pools with a published positive monthly budget**, deduplicated by shared pool. The result stays visible on the dashboard (`/dashboard/free-tiers`).\n\n<img src=\"./docs/diagrams/free-tier-budget.svg\" width=\"100%\" alt=\"OmniRoute free-tier budget card: ~1.51B free tokens per month steady, up to ~2.13B in the first month with signup credits, from 40 documented recurring pool keys covering 455 cataloged free-tier entries behind one endpoint. Honest pool-deduped math — each shared pool counted once, including 20 recurring pools with a published positive monthly token budget; 15 providers are marked avoid in the terms-risk catalog so you decide. Budget bar includes Mistral 1B, LLM7 150M, Nara 150M, Gemini 60M and smaller pools, plus first-month signup credits and permanently-free no-token-cap providers surfaced separately so they never inflate the headline. Live used/remaining on /dashboard/free-tiers.\"/>\n\n> Animated summary of the live `/dashboard/free-tiers` page. Full methodology (pool dedupe, credit tiers, provider terms): **[docs/reference/FREE_TIERS.md](docs/reference/FREE_TIERS.md)**.\n>\n> <sub>These figures are re-audited every two weeks against the live catalog and **move both ways** — a provider ends a free tier and the number drops; a new one lands and it climbs. We publish what the catalog actually computes, never a rounded-up best case.</sub>\n\n<br/>\n\n<div align=\"center\">\n\n<h3>\n\n⭐ Star the repo if OMNIROUTE helped you save money and make your work easier.\n\n</h3>\n\n[![Stars](https://img.shields.io/github/stars/diegosouzapw/OmniRoute?style=social)](https://github.com/diegosouzapw/OmniRoute)\n<a href=\"https://trendshift.io/repositories/23589\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/23589\" alt=\"diegosouzapw%2FOmniRoute | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n[![Star History Rank](https://api.star-history.com/badge?repo=diegosouzapw/OmniRoute&theme=dark)](https://www.star-history.com/diegosouzapw/omniroute)\n[![olud.ai](https://olud.ai/badge.php?tool=diegosouzapw-omniroute)](https://olud.ai/project/diegosouzapw-omniroute.html)\n\n### 💬 Join the community\n\n**👋 Follow the maintainer — get new providers, releases & tips first:**\n\n[![Follow Diego on LinkedIn](https://img.shields.io/badge/Follow_Diego_on-LinkedIn-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/diegosouzapw/)\n[![Follow @diegosouzapw on GitHub](https://img.shields.io/github/followers/diegosouzapw?style=for-the-badge&logo=github&logoColor=white&label=Follow%20on%20GitHub&color=181717)](https://github.com/diegosouzapw)\n\n[![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/U47eFqAXCn)\n[![Telegram](https://img.shields.io/badge/Telegram-26A5E4?style=for-the-badge&logo=telegram&logoColor=white)](https://t.me/omnirouteOficial)\n[![WhatsApp Global](https://img.shields.io/badge/WhatsApp_Global-25D366?style=for-the-badge&logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)\n[![WhatsApp Brasil](https://img.shields.io/badge/WhatsApp_Brasil-25D366?style=for-the-badge&logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/LTSpdFhXTxjH4R6CCNiKWz)\n[![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online)\n\n**Questions, provider tips, roadmap & support → [Discord](https://discord.gg/U47eFqAXCn) · [Telegram](https://t.me/omnirouteOficial) · WhatsApp [🌍 Global](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) / [🇧🇷 Brasil](https://chat.whatsapp.com/LTSpdFhXTxjH4R6CCNiKWz)**\n\n<br/>\n\n## 📈 The Gateway Keeps Growing\n\n<div align=\"center\">\n\n|                           | v3.8.49 |        **v3.8.50**        | `v3.8.51+`  |\n| ------------------------- | :-----: | :-----------------------: | :---------: |\n| 🌐 Providers              |   290   |          **352**          | more queued |\n| 🧠 Unique chat model IDs  |  1185   |         **1312**          |      —      |\n| 🖼️ Modality Bridge        |    —    | 🆕 vision + audio + video |      —      |\n| 📡 Radar free catalog     |    —    |         🆕 opt-in         |      —      |\n| ⚖️ Quota-aware scheduling |    —    |      🆕 Quota-Share       |      —      |\n| 📊 Quota telemetry        |    —    |          🆕 live          |      —      |\n\n**→ [Roadmap](ROADMAP.md) — riding the rail to `v3.9.0 LTS`**\n\n</div>\n\n<br/>\n\n## 🧩 Available\n\n[![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute)\n![NPM Monthly](https://img.shields.io/npm/dm/omniroute?label=npm/month&color=cb3837&logo=npm)\n[![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](LICENSE)\n![Docker Pulls](https://img.shields.io/docker/pulls/diegosouzapw/omniroute?label=docker%20pulls&logo=docker&color=2496ED)\n![Electron Downloads](https://img.shields.io/github/downloads/diegosouzapw/omniroute/total?style=flat&label=electron%20downloads&logo=electron&color=47848F)\n\n<table>\n  <tr>\n    <td align=\"right\"><b>🚀 Start</b></td>\n    <td align=\"center\"><a href=\"#-quick-start\">🚀 Quick Start</a></td>\n    <td align=\"center\"><a href=\"#-more-install-methods--docker-source-pnpm-arch\">📦 Install</a></td>\n    <td align=\"center\"><a href=\"#-works-the-second-you-install-it--no-keys-no-config\">🆓 Zero-config</a></td>\n  </tr>\n  <tr>\n    <td align=\"right\"><b>💡 Learn</b></td>\n    <td align=\"center\"><a href=\"#-the-promise\">💥 The Promise</a></td>\n    <td align=\"center\"><a href=\"#-why-omniroute\">🤔 Why OmniRoute</a></td>\n    <td align=\"center\"><a href=\"#-what-sets-omniroute-apart\">🏆 What Sets Apart</a></td>\n  </tr>\n  <tr>\n    <td align=\"right\"><b>⚙️ Features</b></td>\n    <td align=\"center\"><a href=\"#-combos--the-flagship\">🎯 Combos</a></td>\n    <td align=\"center\"><a href=\"#-352-ai-providers--154-catalog-marked-free\">🌐 Providers</a></td>\n    <td align=\"center\"><a href=\"#-full-cli--a2a--mcp\">🔌 CLI &amp; MCP</a></td>\n  </tr>\n  <tr>\n    <td align=\"right\"></td>\n    <td align=\"center\"><a href=\"#%EF%B8%8F-save-1595-tokens--automatically\">🗜️ Compression</a></td>\n    <td align=\"center\"><a href=\"#%EF%B8%8F-where-omniroute-runs--anywhere\">🖥️ Where It Runs</a></td>\n    <td align=\"center\"><a href=\"#-private--local-first\">🔒 Private</a></td>\n  </tr>\n  <tr>\n    <td align=\"right\"><b>👀 See it</b></td>\n    <td align=\"center\"><a href=\"#-omniroute-in-action\">🎬 In Action</a></td>\n    <td align=\"center\"><a href=\"#-whats-new\">✨ What's New</a></td>\n    <td align=\"center\"><a href=\"#-compatible-clis--coding-agents\">🤖 Compatible CLIs</a></td>\n  </tr>\n  <tr>\n    <td align=\"right\"><b>💚 Support</b></td>\n    <td align=\"center\"><a href=\"#-support-omniroute\">💚 Support / Donate</a></td>\n    <td align=\"center\"><a href=\"#-community--help\">💬 Community</a></td>\n    <td align=\"center\"><a href=\"#-sponsors\">💖 Sponsors</a></td>\n  </tr>\n  <tr>\n    <td align=\"right\"><b>📦 Project</b></td>\n    <td align=\"center\"><a href=\"#%EF%B8%8F-tech-stack\">🛠️ Tech Stack</a></td>\n    <td align=\"center\"><a href=\"#-documentation\">📖 Docs</a></td>\n    <td align=\"center\"><a href=\"#-600-contributors\">👥 Contributors</a></td>\n  </tr>\n</table>\n\n</div>\n\n<div align=\"center\">\n  <b>🌐 In 43 languages</b>\n  <br/><br/>\n  <a href=\"README.md\"><img src=\"docs/assets/flags/us.svg\" width=\"30\" alt=\"English (en)\" title=\"English (en)\"></a>\n  <a href=\"docs/i18n/pt-BR/README.md\"><img src=\"docs/assets/flags/br.svg\" width=\"30\" alt=\"Português — Brasil (pt-BR)\" title=\"Português — Brasil (pt-BR)\"></a>\n  <a href=\"docs/i18n/pt/README.md\"><img src=\"docs/assets/flags/pt.svg\" width=\"30\" alt=\"Português (pt)\" title=\"Português (pt)\"></a>\n  <a href=\"docs/i18n/es/README.md\"><img src=\"docs/assets/flags/es.svg\" width=\"30\" alt=\"Español (es)\" title=\"Español (es)\"></a>\n  <a href=\"docs/i18n/fr/README.md\"><img src=\"docs/assets/flags/fr.svg\" width=\"30\" alt=\"Français (fr)\" title=\"Français (fr)\"></a>\n  <a href=\"docs/i18n/it/README.md\"><img src=\"docs/assets/flags/it.svg\" width=\"30\" alt=\"Italiano (it)\" title=\"Italiano (it)\"></a>\n  <a href=\"docs/i18n/de/README.md\"><img src=\"docs/assets/flags/de.svg\" width=\"30\" alt=\"Deutsch (de)\" title=\"Deutsch (de)\"></a>\n  <a href=\"docs/i18n/nl/README.md\"><img src=\"docs/assets/flags/nl.svg\" width=\"30\" alt=\"Nederlands (nl)\" title=\"Nederlands (nl)\"></a>\n  <a href=\"docs/i18n/ru/README.md\"><img src=\"docs/assets/flags/ru.svg\" width=\"30\" alt=\"Русский (ru)\" title=\"Русский (ru)\"></a>\n  <a href=\"docs/i18n/uk-UA/README.md\"><img src=\"docs/assets/flags/ua.svg\" width=\"30\" alt=\"Українська (uk-UA)\" title=\"Українська (uk-UA)\"></a>\n  <a href=\"docs/i18n/pl/README.md\"><img src=\"docs/assets/flags/pl.svg\" width=\"30\" alt=\"Polski (pl)\" title=\"Polski (pl)\"></a>\n  <a href=\"docs/i18n/cs/README.md\"><img src=\"docs/assets/flags/cz.svg\" width=\"30\" alt=\"Čeština (cs)\" title=\"Čeština (cs)\"></a>\n  <a href=\"docs/i18n/sk/README.md\"><img src=\"docs/assets/flags/sk.svg\" width=\"30\" alt=\"Slovenčina (sk)\" title=\"Slovenčina (sk)\"></a>\n  <a href=\"docs/i18n/ro/README.md\"><img src=\"docs/assets/flags/ro.svg\" width=\"30\" alt=\"Română (ro)\" title=\"Română (ro)\"></a>\n  <a href=\"docs/i18n/hu/README.md\"><img src=\"docs/assets/flags/hu.svg\" width=\"30\" alt=\"Magyar (hu)\" title=\"Magyar (hu)\"></a>\n  <a href=\"docs/i18n/bg/README.md\"><img src=\"docs/assets/flags/bg.svg\" width=\"30\" alt=\"Български (bg)\" title=\"Български (bg)\"></a>\n  <a href=\"docs/i18n/da/README.md\"><img src=\"docs/assets/flags/dk.svg\" width=\"30\" alt=\"Dansk (da)\" title=\"Dansk (da)\"></a>\n  <a href=\"docs/i18n/fi/README.md\"><img src=\"docs/assets/flags/fi.svg\" width=\"30\" alt=\"Suomi (fi)\" title=\"Suomi (fi)\"></a>\n  <a href=\"docs/i18n/no/README.md\"><img src=\"docs/assets/flags/no.svg\" width=\"30\" alt=\"Norsk (no)\" title=\"Norsk (no)\"></a>\n  <a href=\"docs/i18n/sv/README.md\"><img src=\"docs/assets/flags/se.svg\" width=\"30\" alt=\"Svenska (sv)\" title=\"Svenska (sv)\"></a>\n  <a href=\"docs/i18n/zh-CN/README.md\"><img src=\"docs/assets/flags/cn.svg\" width=\"30\" alt=\"中文 — 简体 (zh-CN)\" title=\"中文 — 简体 (zh-CN)\"></a>\n  <a href=\"docs/i18n/zh-TW/README.md\"><img src=\"docs/assets/flags/tw.svg\" width=\"30\" alt=\"中文 — 繁體 (zh-TW)\" title=\"中文 — 繁體 (zh-TW)\"></a>\n  <a href=\"docs/i18n/ja/README.md\"><img src=\"docs/assets/flags/jp.svg\" width=\"30\" alt=\"日本語 (ja)\" title=\"日本語 (ja)\"></a>\n  <a href=\"docs/i18n/ko/README.md\"><img src=\"docs/assets/flags/kr.svg\" width=\"30\" alt=\"한국어 (ko)\" title=\"한국어 (ko)\"></a>\n  <a href=\"docs/i18n/th/README.md\"><img src=\"docs/assets/flags/th.svg\" width=\"30\" alt=\"ไทย (th)\" title=\"ไทย (th)\"></a>\n  <a href=\"docs/i18n/vi/README.md\"><img src=\"docs/assets/flags/vn.svg\" width=\"30\" alt=\"Tiếng Việt (vi)\" title=\"Tiếng Việt (vi)\"></a>\n  <a href=\"docs/i18n/id/README.md\"><img src=\"docs/assets/flags/id.svg\" width=\"30\" alt=\"Bahasa Indonesia (id)\" title=\"Bahasa Indonesia (id)\"></a>\n  <a href=\"docs/i18n/ms/README.md\"><img src=\"docs/assets/flags/my.svg\" width=\"30\" alt=\"Bahasa Melayu (ms)\" title=\"Bahasa Melayu (ms)\"></a>\n  <a href=\"docs/i18n/phi/README.md\"><img src=\"docs/assets/flags/ph.svg\" width=\"30\" alt=\"Filipino (phi)\" title=\"Filipino (phi)\"></a>\n  <a href=\"docs/i18n/in/README.md\"><img src=\"docs/assets/flags/in.svg\" width=\"30\" alt=\"हिन्दी (in)\" title=\"हिन्दी (in)\"></a>\n  <a href=\"docs/i18n/hi/README.md\"><img src=\"docs/assets/flags/in.svg\" width=\"30\" alt=\"हिन्दी (hi)\" title=\"हिन्दी (hi)\"></a>\n  <a href=\"docs/i18n/gu/README.md\"><img src=\"docs/assets/flags/in.svg\" width=\"30\" alt=\"ગુજરાતી (gu)\" title=\"ગુજરાતી (gu)\"></a>\n  <a href=\"docs/i18n/mr/README.md\"><img src=\"docs/assets/flags/in.svg\" width=\"30\" alt=\"मराठी (mr)\" title=\"मराठी (mr)\"></a>\n  <a href=\"docs/i18n/ta/README.md\"><img src=\"docs/assets/flags/in.svg\" width=\"30\" alt=\"தமிழ் (ta)\" title=\"தமிழ் (ta)\"></a>\n  <a href=\"docs/i18n/te/README.md\"><img src=\"docs/assets/flags/in.svg\" width=\"30\" alt=\"తెలుగు (te)\" title=\"తెలుగు (te)\"></a>\n  <a href=\"docs/i18n/bn/README.md\"><img src=\"docs/assets/flags/bd.svg\" width=\"30\" alt=\"বাংলা (bn)\" title=\"বাংলা (bn)\"></a>\n  <a href=\"docs/i18n/ur/README.md\"><img src=\"docs/assets/flags/pk.svg\" width=\"30\" alt=\"اردو (ur)\" title=\"اردو (ur)\"></a>\n  <a href=\"docs/i18n/fa/README.md\"><img src=\"docs/assets/flags/ir.svg\" width=\"30\" alt=\"فارسی (fa)\" title=\"فارسی (fa)\"></a>\n  <a href=\"docs/i18n/ar/README.md\"><img src=\"docs/assets/flags/sa.svg\" width=\"30\" alt=\"العربية (ar)\" title=\"العربية (ar)\"></a>\n  <a href=\"docs/i18n/he/README.md\"><img src=\"docs/assets/flags/il.svg\" width=\"30\" alt=\"עברית (he)\" title=\"עברית (he)\"></a>\n  <a href=\"docs/i18n/tr/README.md\"><img src=\"docs/assets/flags/tr.svg\" width=\"30\" alt=\"Türkçe (tr)\" title=\"Türkçe (tr)\"></a>\n  <a href=\"docs/i18n/az/README.md\"><img src=\"docs/assets/flags/az.svg\" width=\"30\" alt=\"Azərbaycan (az)\" title=\"Azərbaycan (az)\"></a>\n  <a href=\"docs/i18n/sw/README.md\"><img src=\"docs/assets/flags/tz.svg\" width=\"30\" alt=\"Kiswahili (sw)\" title=\"Kiswahili (sw)\"></a>\n</div>\n\n<br/>\n<br/>\n\n<div align=\"center\">\n\n## 🆓 Works the second you install it — no keys, no config\n\n</div>\n\n<img src=\"./docs/diagrams/works-zero-config.svg\" width=\"100%\" alt=\"Works the second you install it — zero config. Three steps: 1. Install — npm i -g omniroute, server boots on localhost:20128. 2. Point your tool at http://localhost:20128/v1 — any OpenAI-compatible tool (Claude Code, Cursor, Cline). 3. It answers — call model auto for an instant reply, with no API key, no signup, no configuration. Keyless free providers OpenCode Free and Felo are pre-wired into the auto combo, so a fresh install responds out of the box.\"/>\n\n```bash\n# Fresh install, zero credentials — `auto` already works:\ncurl http://localhost:20128/v1/chat/completions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"model\":\"auto\",\"messages\":[{\"role\":\"user\",\"content\":\"Hello!\"}]}'\n```\n\n<sub>Prefer a specific free backend? Call it directly, e.g. `oc/…` (OpenCode Free) or `felo/…` (Felo). Then graduate to `auto` and let OmniRoute pick.</sub>\n\n<sub>📦 Copy-paste quickstart scripts for **Python, Node.js, PHP, and cURL** → [`examples/quickstart/`](examples/quickstart/)</sub>\n\n<br/>\n\n<div align=\"center\">\n\n# 💥 The Promise\n\n</div>\n\n<img src=\"./docs/diagrams/promise-pillars.svg\" width=\"100%\" alt=\"The Promise — One endpoint and 352 providers. Automatic fallback keeps routing while another healthy target is available. Six pillars: resilient fallback across 352 providers · up to 95% token savings on eligible workloads · $0 to start with 90+ free tiers and 56 recurring/keyless free-forever providers · 35 CLI/agent integrations through one config · OpenAI, Claude, Gemini and Responses API compatibility at /v1 · production controls including circuit breakers, TLS stealth, MCP 110 tools, A2A, memory, guardrails, evals and 39,000+ static test declarations across 5,100+ tracked test files.\"/>\n\n<br/>\n<br/>\n\n<div align=\"center\">\n\n# 🤔 Why OmniRoute?\n\n</div>\n\n<img src=\"./docs/diagrams/why-pain-fix.svg\" width=\"100%\" alt=\"Why OmniRoute — stop juggling 10 dashboards, dead API keys and surprise bills. Ten daily pains vs fixes: quota expiring unused → maximize subscriptions; rate limits mid-coding → 4-tier auto-fallback (Subscription → API → Cheap → Free); tool outputs burning tokens → RTK + Caveman compression (15–95%); expensive APIs → cost-optimized routing; every tool its own setup → one endpoint, one dashboard; AI blocked → 3-level proxy + TLS stealth; dead keys → 3-layer resilience (circuit breakers, key cooldown, model lockout); team sharing one subscription → key pools with fair-share quotas; prompts through someone's cloud → local-first with AES-256-GCM encrypted keys; no spend visibility → live analytics (usage, quota, savings, p95 latency).\"/>\n\n<div align=\"center\">\n\n<img src=\"./docs/diagrams/tier-cascade.svg\" width=\"100%\" alt=\"OmniRoute request flow: your IDE or CLI (Claude Code, Cursor, Cline…) calls one local endpoint (http://localhost:20128/v1); the OmniRoute Smart Router (RTK + Caveman compression, 19 routing strategies, circuit breakers, TLS stealth, MCP, A2A, guardrails) can fall back across 4 provider tiers while an eligible healthy target remains — Tier 1 Subscription, Tier 2 API Key, Tier 3 Cheap and Tier 4 Free.\"/>\n\n</div>\n\n<br/>\n\n<div align=\"center\">\n\n## 🤝 Supported by our Open Source Friends\n\n</div>\n\n<p align=\"center\">\n  <a href=\"https://platform.kimi.ai?track_id=track-8197581fdd7d4139a0f562e4a03c3798&aff=omniroute\">\n    <img src=\"public/sponsors/kimi-k3-banner.png\" width=\"100%\" alt=\"Kimi K3 — Open Frontier Intelligence · 2.8T parameters · 1M-token context\"/>\n  </a>\n</p>\n\n> **Want to join as an Open Source Friend?** These are the companies that back open source and help keep OmniRoute moving — and we say publicly where every token they give us goes. Reach out: [diegosouza.pw@outlook.com](mailto:diegosouza.pw@outlook.com)\n\n<table>\n  <tr>\n    <td align=\"center\" width=\"150\">\n      <a href=\"https://platform.kimi.ai?track_id=track-8197581fdd7d4139a0f562e4a03c3798&aff=omniroute\">\n        <picture>\n          <source media=\"(prefers-color-scheme: dark)\" srcset=\"public/providers/kimi-logomark-dark.svg\">\n          <img src=\"public/providers/kimi-logomark-light.svg\" width=\"64\" alt=\"Kimi (Moonshot AI)\"/>\n        </picture>\n      </a>\n      <br/><b>Kimi</b><br/><sub>Moonshot AI</sub><br/><br/>\n      <img src=\"https://img.shields.io/badge/Founding_Friend-1783FF?style=flat-square\" alt=\"Founding Open Source Friend\"/>\n    </td>\n    <td>\n      Thanks to <b>Kimi (Moonshot AI)</b>, our founding Open Source Friend, for backing this project! Kimi is the AI lab behind the open-weight K2 and K3 model families — <b>Kimi K3</b> delivers a 1M-token context window, native vision and frontier-level coding at a fraction of closed-model prices, and works out of the box with Claude Code, Codex and every coding tool OmniRoute serves.\n      <br/><br/>\n      <b>What Kimi's support powers:</b> Kimi's API credits power OmniRoute's AI-validated release pipeline — the <i>merge validation powered by Kimi K3</i> stage that reviews every pull request before it ships — plus day-to-day feature development. First-class Kimi support ships on both rails: the direct <a href=\"https://platform.kimi.ai?track_id=track-8197581fdd7d4139a0f562e4a03c3798&aff=omniroute\">Kimi API</a> (<code>kimi-k3</code>) and the <a href=\"https://www.kimi.com/code?aff=omniroute\">Kimi Code coding plan</a> (OAuth and API key). OmniRoute is also the first Brazilian open-source project in Kimi's support program. <a href=\"https://platform.kimi.ai?track_id=track-8197581fdd7d4139a0f562e4a03c3798&aff=omniroute\"><b>Get a Kimi API key with 15% extra credits →</b></a>\n    </td>\n  </tr>\n  <tr>\n    <td align=\"center\" width=\"150\">\n      <a href=\"https://cheaperinference.com/?utm_source=omniroute\">\n        <img src=\"public/providers/cheaperinference.svg\" width=\"64\" alt=\"Cheaper Inference\"/>\n      </a>\n      <br/><b>Cheaper Inference</b><br/><sub>cheaperinference.com</sub><br/><br/>\n      <img src=\"https://img.shields.io/badge/Open_Source_Friend-31f889?style=flat-square&labelColor=04170d\" alt=\"Open Source Friend\"/>\n    </td>\n    <td>\n      Thanks to <b>Cheaper Inference</b>, an OmniRoute Open Source Friend, for backing this project! Cheaper Inference is a cost-ranked gateway that resells 42 frontier models — Claude, GPT-5.x, Gemini, Kimi K3, GLM, DeepSeek, Grok and MiniMax — behind one OpenAI-compatible endpoint, routing each request to the cheapest eligible provider without ever charging above the model maker's list price.\n      <br/><br/>\n      <b>First-class support in OmniRoute:</b> Chat Completions, the native <code>/v1/responses</code> endpoint, vision, tool calling and 3 image models (<code>grok-imagine</code>, <code>nano-banana-pro</code>, <code>nano-banana-2</code>, reachable as <code>cheaperinference/&lt;model&gt;</code>). <a href=\"https://cheaperinference.com/?utm_source=omniroute\"><b>Get an API key →</b></a>\n    </td>\n  </tr>\n</table>\n\n<sub>Links tagged <code>aff=omniroute</code> are partner links. They fund the project at no extra cost to you.</sub>\n\n<br/>\n\n<details open>\n<summary><sub><b>🎟️ Affiliates Promo</b> — free signup coupons from providers we don't sponsor (click to expand)</sub></summary>\n\n<sub><i>This section is for referral/coupon codes only. Sponsored partnerships live in <b>🤝 Supported by our Open Source Friends</b> above. OmniRoute has no sponsorship or partnership with the providers listed here — these are public coupons anyone can use.</i></sub>\n\n<table>\n  <tr>\n    <td align=\"center\" width=\"120\">\n      <a href=\"https://agentrouter.org/register?aff=70LM\">\n        <img src=\"public/providers/agentrouter.png\" width=\"32\" alt=\"AgentRouter\"/>\n      </a>\n      <br/><sub><b>AgentRouter</b></sub><br/><sub>agentrouter.org</sub>\n    </td>\n    <td>\n      <sub><b><a href=\"https://agentrouter.org/register?aff=70LM\">AgentRouter</a></b> — affiliate signup · <b>$100 free credits</b> on signup (free server, expect higher latency — best for testing, not production). First-class support in OmniRoute since <b>v3.8.50</b>: Chat Completions, the Anthropic-compatible wire format and the OpenAI-compatible path. Available models include <code>claude-opus-4-8</code>, <code>claude-opus-5</code>, <code>gpt-5.6-sol</code> and more. <b><a href=\"https://agentrouter.org/register?aff=70LM\">Grab your $100 →</a></b></sub>\n      <br/><br/>\n      <sub>⚠️ <i>Affiliate link — OmniRoute has no sponsorship or partnership with this provider.</i></sub>\n    </td>\n  </tr>\n</table>\n\n<sub>Know another provider with a generous free signup coupon that benefits OmniRoute users? Open an issue and we'll add it here.</sub>\n\n</details>\n\n<br/>\n\n<div align=\"center\">\n\n## 🎯 Combos — The Flagship\n\n</div>\n\n<img src=\"./docs/diagrams/strategies-grid.svg\" width=\"100%\" alt=\"All 19 combo routing strategies animated — one tile per strategy: priority, fill-first, weighted, round-robin, p2c, least-used, random, strict-random, cost-optimized, headroom, reset-window, reset-aware, context-relay, context-optimized, cache-optimized, lkgp, auto, fusion, pipeline. See the table above for what each one does.\"/>\n\n> A **combo** is a chain of models OmniRoute routes across **automatically**. If quota runs out, a provider fails, or costs spike, the combo can move to the next eligible healthy model. 🛡️\n\n### ⚡ Zero-config — just use `auto`\n\nNo combo to create. Set your model to `auto` (or a variant) and OmniRoute builds a virtual combo from your connected providers, scored live:\n\n<table>\n  <tr><th align=\"left\">Model ID</th><th align=\"left\">What it optimizes for</th></tr>\n  <tr><td align=\"left\" nowrap><code>auto</code></td><td align=\"left\">🎯 Balanced default (LKGP — sticks to your last good provider)</td></tr>\n  <tr><td align=\"left\" nowrap><code>auto/coding</code></td><td align=\"left\">🧑‍💻 Quality-first weights for code generation</td></tr>\n  <tr><td align=\"left\" nowrap><code>auto/fast</code></td><td align=\"left\">⚡ Lowest latency first</td></tr>\n  <tr><td align=\"left\" nowrap><code>auto/cheap</code></td><td align=\"left\">💰 Cheapest per token first</td></tr>\n  <tr><td align=\"left\" nowrap><code>auto/offline</code></td><td align=\"left\">🔋 Most quota / rate-limit headroom first</td></tr>\n  <tr><td align=\"left\" nowrap><code>auto/smart</code></td><td align=\"left\">🔭 Quality-first + 10% exploration to discover better models</td></tr>\n</table>\n\n##\n\n### 🔀 Or build your own — 19 routing strategies\n\nAll **19** strategies — mix & match per combo step:\n\n<table>\n  <tr>\n    <th>#</th>\n    <th align=\"left\">Strategy</th>\n    <th align=\"left\">What it does</th>\n  </tr>\n  <tr>\n    <td align=\"center\">1</td>\n    <td nowrap><code>priority</code></td>\n    <td>First-target ordered list — drain each before the next 🥇</td>\n  </tr>\n  <tr>\n    <td align=\"center\">2</td>\n    <td nowrap><code>fill-first</code></td>\n    <td>Fill each target's quota fully before moving on</td>\n  </tr>\n  <tr>\n    <td align=\"center\">3</td>\n    <td nowrap><code>weighted</code></td>\n    <td>Weighted random by per-target weight</td>\n  </tr>\n  <tr>\n    <td align=\"center\">4</td>\n    <td nowrap><code>round-robin</code></td>\n    <td>Cycle through targets in order</td>\n  </tr>\n  <tr>\n    <td align=\"center\">5</td>\n    <td nowrap><code>p2c</code></td>\n    <td>Power-of-two-choices random load balancing</td>\n  </tr>\n  <tr>\n    <td align=\"center\">6</td>\n    <td nowrap><code>least-used</code></td>\n    <td>Pick the target with the lowest current load</td>\n  </tr>\n  <tr>\n    <td align=\"center\">7</td>\n    <td nowrap><code>random</code></td>\n    <td>Uniform random pick (deduplicated)</td>\n  </tr>\n  <tr>\n    <td align=\"center\">8</td>\n    <td nowrap><code>strict-random</code></td>\n    <td>Random without de-duplicating repeats 🎲</td>\n  </tr>\n  <tr>\n    <td align=\"center\">9</td>\n    <td nowrap><code>cost-optimized</code></td>\n    <td>Minimize $ per request from live catalog pricing 💸</td>\n  </tr>\n  <tr>\n    <td align=\"center\">10</td>\n    <td nowrap><code>headroom</code></td>\n    <td>Pick the target with the most remaining quota</td>\n  </tr>\n  <tr>\n    <td align=\"center\">11</td>\n    <td nowrap><code>reset-window</code></td>\n    <td>Prefer the target whose quota window resets soonest</td>\n  </tr>\n  <tr>\n    <td align=\"center\">12</td>\n    <td nowrap><code>reset-aware</code></td>\n    <td>Rank by quota reset time — short windows first 📊</td>\n  </tr>\n  <tr>\n    <td align=\"center\">13</td>\n    <td nowrap><code>context-relay</code></td>\n    <td>Hand off context across targets for long conversations 🧠</td>\n  </tr>\n  <tr>\n    <td align=\"center\">14</td>\n    <td nowrap><code>context-optimized</code></td>\n    <td>Pick the best fit for the current context size</td>\n  </tr>\n  <tr>\n    <td align=\"center\">15</td>\n    <td nowrap><code>cache-optimized</code></td>\n    <td>Pin each reusable prompt prefix to the same account — maximize prompt-cache hits 🎯</td>\n  </tr>\n  <tr>\n    <td align=\"center\">16</td>\n    <td nowrap><code>lkgp</code></td>\n    <td>Last-Known-Good Path — sticky to the last successful target</td>\n  </tr>\n  <tr>\n    <td align=\"center\">17</td>\n    <td nowrap><code>auto</code></td>\n    <td>15-factor live scoring across every connection 🤖</td>\n  </tr>\n  <tr>\n    <td align=\"center\">18</td>\n    <td nowrap><code>fusion</code></td>\n    <td>Fan out to a panel of models + a judge synthesizes one answer 🧬</td>\n  </tr>\n  <tr>\n    <td align=\"center\">19</td>\n    <td nowrap><code>pipeline</code></td>\n    <td>Chain steps — each target's output feeds the next one 🔗</td>\n  </tr>\n</table>\n\n<sub>The Auto-Combo engine scores every candidate on **15 factors** (health, quota, cost, latency, task fit, quality, session availability…) — see [`docs/routing/AUTO-COMBO.md`](docs/routing/AUTO-COMBO.md).</sub>\n\n##\n\n### 🧱 Resilience is built in (3 independent layers)\n\n<img src=\"./docs/diagrams/resilience-layers.svg\" width=\"100%\" alt=\"OmniRoute resilience — 3 independent self-healing layers, the right layer for the right failure. Layer 1 provider circuit breaker (whole provider): trips only on 408/5xx, thresholds OAuth 10× / API-key 15× / local 2×, resets 60s/30s/15s into a HALF-OPEN probe, lazy recovery; while OPEN the combo reroutes to the next provider. Layer 2 connection cooldown (one key/account): base 5s OAuth / 3s API-key, exponential ×2 backoff with anti-thundering-herd guard, 429 honors Retry-After, success clears all error state; one cooling key is skipped while sibling keys keep serving. Layer 3 model lockout (one model): per-model 429, local 404 or mode denials lock just that model — never the whole connection. Terminal states (banned, expired, credits exhausted) are for the operator, not cooldowns.\"/>\n\n<sub>📖 [Auto-Combo Engine](docs/routing/AUTO-COMBO.md) · [Resilience Guide](docs/architecture/RESILIENCE_GUIDE.md)</sub>\n\n<br/>\n\n<div align=\"center\">\n\n## 🏆 What Sets OmniRoute Apart\n\n</div>\n\n<img src=\"./docs/diagrams/comparison-table.svg\" width=\"100%\" alt=\"What sets OmniRoute apart — a dated feature snapshot vs 9router, OpenRouter, CLIProxyAPI and LiteLLM across 13 capabilities. OmniRoute: 352 providers, 90+ free tiers built in, 19 routing strategies, 12-engine token compression, built-in MCP server with 110 tools, A2A agent protocol, persistent memory, guardrails, cloud agents, TLS fingerprint stealth, Desktop/Termux/PWA and 43 i18n UI locales. OmniRoute is MIT-licensed and self-hostable. Competitor capabilities and counts may change; see the linked methodology.\"/>\n\n<sub>📊 Full methodology &amp; per-feature detail vs 9router, OpenRouter, CLIProxyAPI &amp; LiteLLM → [`docs/comparison/OMNIROUTE_VS_ALTERNATIVES.md`](docs/comparison/OMNIROUTE_VS_ALTERNATIVES.md)</sub>\n\n<br/>\n\n## 💚 Support OmniRoute\n\nOmniRoute is MIT-licensed and maintained in the open. If it saves you time or money, here's how to keep it independent — pick whatever fits you. Sponsorship never affects routing priority; it buys visibility, not ranking.\n\n<table>\n  <tr><td nowrap>⭐ <b>Star the repo</b></td><td>Free — genuinely helps visibility</td><td><a href=\"https://github.com/diegosouzapw/OmniRoute\">Star OmniRoute</a></td></tr>\n  <tr><td nowrap>🐙 <b>GitHub Sponsors</b></td><td>One-off or monthly · zero platform fee</td><td><a href=\"https://github.com/sponsors/diegosouzapw\">github.com/sponsors/diegosouzapw</a></td></tr>\n  <tr><td nowrap>☕ <b>Ko-fi</b></td><td>Quick one-off tip, no signup for the donor</td><td><a href=\"https://ko-fi.com/diegosouzapw\">ko-fi.com/diegosouzapw</a></td></tr>\n  <tr><td nowrap>🧋 <b>Buy Me a Coffee</b></td><td>Small, informal gesture</td><td><a href=\"https://www.buymeacoffee.com/diegosouzapw\">buymeacoffee.com/diegosouzapw</a></td></tr>\n  <tr><td nowrap>🖐 <b>Liberapay</b></td><td>Recurring · non-profit · open source</td><td><a href=\"https://liberapay.com/diegosouzapw\">liberapay.com/diegosouzapw</a></td></tr>\n  <tr><td nowrap>🇧🇷 <b>PIX</b> (Brazil)</td><td>Instant, no fees</td><td>key &amp; QR below</td></tr>\n  <tr><td nowrap>₿ <b>Crypto</b></td><td>BTC · ETH · USDT-TRC20 · USDC-Solana</td><td>addresses below</td></tr>\n</table>\n\n**🇧🇷 PIX** — instant, no fees (Brazil)\n\n<img src=\"docs/assets/pix-qr.png\" width=\"140\" align=\"right\" alt=\"OmniRoute PIX QR code\"/>\n\nKey (random): `5d865059-bc44-483a-962d-43ceb80126eb`\n\nPix copia-e-cola:\n\n```\n00020101021126580014br.gov.bcb.pix01365d865059-bc44-483a-962d-43ceb80126eb5204000053039865802BR5922OMNIROUTE CONTRIBUICAO6006BRASIL62070503***630475DD\n```\n\n<br clear=\"right\"/>\n\n<details>\n<summary><b>₿ Crypto</b> — BTC · ETH · USDT-TRC20 · USDC-Solana (click to expand)</summary>\n\n<table>\n  <tr><td nowrap><b>₿ BTC</b></td><td nowrap>Bitcoin (SegWit)</td><td><code>bc1qh00smz004sy85wyl28v77tenkt3ckl6eaep7fd</code></td></tr>\n  <tr><td nowrap><b>Ξ ETH</b></td><td nowrap>Ethereum (ERC20)</td><td><code>0x64Cf6B68A6Ff34288e89172950a2d00102337a84</code></td></tr>\n  <tr><td nowrap><b>₮ USDT</b></td><td nowrap>Tron (TRC20)</td><td><code>TKAF41JpuQrHbKTnsQa9svJE2T192Hvsc2</code></td></tr>\n  <tr><td nowrap><b>$ USDC</b></td><td nowrap>Solana</td><td><code>2emNNZzVVWQc3FQ2wk9M6qXUQmW8AKdjjL174fXR28Tu</code></td></tr>\n</table>\n\n<sub>⚠️ Send each coin only on the network shown — sending on the wrong network can lose the funds.</sub>\n\n</details>\n\n🐛 Found a bug or have feedback? Open a [Discussion](https://github.com/diegosouzapw/OmniRoute/discussions).\n\n<br/>\n\n<p><strong>Developer notes:</strong> The project may generate a local <code>.env</code> file during npm install/postinstall for developer convenience. This file is intentionally ignored via <code>.gitignore</code> (see <code>.gitignore</code>) and must never be committed — if accidentally committed, rotate any exposed secrets and remove the file from history. See <a href=\"docs/DEVELOPER-ENVIRONMENT.md\">docs/DEVELOPER-ENVIRONMENT.md</a> for guidance on managing local environment files and secrets.</p>\n\n## 📡 OmniRoute Radar\n\nThe main free-tier headline remains **~1.51B tokens/month** from the documented,\npool-deduplicated catalog above. Temporary provider signup credits can separately lift the first\nmonth to **~2.13B**. Radar is an optional, signed catalog overlay for people who want fresher\nfree-model availability between OmniRoute releases; the community catalog and every existing free\nfeature remain free.\n\nSupporters can receive the live catalog and additional provider opportunities. Its separate,\nmutable ceiling is **approximately 3B tokens/month at most**, depending on provider availability.\nThat ceiling is not a guarantee: providers can change quotas, eligibility, models, or regions at\nany time.\n\nRadar is opt-in and GET-only. The OmniRoute client does not upload prompts, traffic, provider\nconfiguration, usage telemetry, or local announcement-dismiss state. Learn about eligibility and\nthe current catalog at **[radar.omniroute.online/planos](https://radar.omniroute.online/planos)**.\n\n<br/>\n\n<div align=\"center\">\n\n## ✨ What's New\n\n</div>\n\n> Recent highlights from **v3.8.20 → v3.8.50**. Full history in [`CHANGELOG.md`](CHANGELOG.md).\n\n- **🎛️ OmniConductor** — inbound A2A delegation to your agent fleet, Conductor skills on the Agent Card, and a dashboard panel with Faro push-to-talk voice chat. → [A2A Server](docs/frameworks/A2A-SERVER.md)\n- **🛂 Adaptive admission & overload protection** — heavyweight chat requests queue instead of 503ing, with atomic RPM rolling leases per connection. → [Resilience Guide](docs/architecture/RESILIENCE_GUIDE.md)\n- **🗂️ Canonical `/v1/models` ordering** — one contiguous provider-grouped block per provider (combos pinned first), stable across every catalog source. → [API Reference](docs/reference/API_REFERENCE.md)\n- **🗜️ Compression hardening** — default-on inflation guard, Caveman packs for DE / FR / JA + Chinese (wényán), RTK filters for Gradle & .NET. → [Compression](docs/compression/COMPRESSION_ENGINES.md)\n- **💸 Honest flat-rate cost** — subscription / coding-plan providers read **$0** in cost analytics; budget, quota & routing keep estimating. → [API Reference](docs/reference/API_REFERENCE.md)\n- **⚖️ Quota-Share routing** — split a shared account's quota fairly across pooled keys, work-conserving so idle slices are lent out. → [Resilience Guide](docs/architecture/RESILIENCE_GUIDE.md)\n- **🤖 One-command CLI/agent setup** — 12 registered `setup-*` commands; `omniroute run` launches 7 CLIs (Claude Code, Codex, Aider, Goose, OpenCode, Qwen Code, Gemini CLI); `omniroute configure` supports 9 targets with an interactive provider+model picker and per-context favorites. → [CLI Integrations](docs/guides/CLI-INTEGRATIONS.md)\n- **🛰️ Remote mode** — drive a remote OmniRoute with scoped tokens (`connect` / `contexts` / `tokens`) + an `antigravity` OAuth helper for VPS installs. → [Remote Mode](docs/guides/REMOTE-MODE.md)\n- **🧭 Smarter auto-routing** — `auto/<category>:<tier>` combos, **Fusion** (model panel + judge), task-aware routing, per-request model / mode / USD-budget overrides. → [Auto-Combo](docs/routing/AUTO-COMBO.md)\n- **🗜️ Pluggable compression** — 12 composable engines + Compression Studios: LLMLingua-2, two-tier Ultra, omniglyph, per-step fidelity gate, GCF v3.2, drag-reorder editor. → [Compression](docs/compression/COMPRESSION_ENGINES.md)\n- **🕵️ Transparent MITM decrypt (TPROXY)** — capture CLIs that ignore proxy env vars, with a per-SNI CA + trust-store installer. → [MITM/TPROXY](docs/security/MITM-TPROXY-DECRYPT.md)\n- **💸 Cost telemetry everywhere** — `X-OmniRoute-*` cost/usage headers on every endpoint, cache-HIT savings header, per-key USD spend quotas. → [API Reference](docs/reference/API_REFERENCE.md)\n- **🧠 Memory you control** — off by default, opt-in int8 vector quantization + typed decay, per-request `x-omniroute-no-memory`. → [Memory](docs/frameworks/MEMORY.md)\n- **🛡️ Security** — prompt-injection guard on every LLM route (red-team suite), opt-in credential-masking guardrail (redacts leaked API keys/secrets in both directions), free DuckDuckGo last-resort web search, and an optional OIDC login gate for the dashboard (password login always stays available). → [Guardrails](docs/security/GUARDRAILS.md)\n- **🖼️ New endpoints** — `/v1/ocr` (Mistral OCR) and `/v1/audio/translations` (Whisper-style) round out the media surface. → [API Reference](docs/reference/API_REFERENCE.md)\n- **🎨 Image / video / audio generation** — one API for media: xAI Grok Imagine & Novita AI video, ComfyUI, Freepik, Adobe Firefly, Microsoft Designer, Segmind, EdgeTTS. → [API Reference](docs/reference/API_REFERENCE.md)\n- **🌍 Deployment & ops** — reverse-proxy `basePath`, browser-language auto-detect, per-key device tracking, root-less MITM trust, zh-TW localization. → [Environment](docs/reference/ENVIRONMENT.md)\n- **🤝 More providers & agents** — Cursor Cloud Agent, Grok Build (xAI) with browser + OAuth login, Ollama first-class card, Claude Opus 5 & Sonnet 5, Kimi official partnership (Code/Web/Moonshot), Zed, Requesty, SenseNova, Yuanbao, Agnes AI… and a refreshed **352-provider catalog**. → [Providers](docs/reference/PROVIDER_REFERENCE.md)\n- **📡 Routing transparency** — every response carries an `X-OmniRoute-Decision` header naming the strategy/provider/latency that served it, a new `cache-optimized` combo strategy + Auto-Combo `cacheAffinity` factor route repeat requests back to the connection holding the cached prefix, and a read-only `/v1/auto-combo/{channel}/candidates` endpoint exposes an `auto/*` channel's live candidate pool. → [Auto-Combo](docs/routing/AUTO-COMBO.md)\n- **⚡ Local performance & infra** — one-click local Redis, Cloudflare Workers / Deno Deploy relay deployers, Bifrost & Mux as supervised embedded services. → [Embedded Services](docs/frameworks/EMBEDDED-SERVICES.md)\n\n<br/>\n\n<div align=\"center\">\n\n## 🤖 Compatible CLIs & Coding Agents\n\n> One config — `http://localhost:20128/v1` — and **every** AI IDE or CLI runs on free & low-cost models.\n\n<div align=\"center\">\n<table>\n  <tr>\n    <td align=\"center\" width=\"76\"><a href=\"https://github.com/anthropics/claude-code\"><img src=\"./public/providers/claude.svg\" width=\"40\" alt=\"Claude Code\"/><br/><sub><b>Claude Code</b></sub><br/><sub>                           </sub></a></td>\n    <td align=\"center\" width=\"76\"><a href=\"https://github.com/openai/codex\"><img src=\"./public/providers/codex.svg\" width=\"40\" alt=\"Codex CLI\"/><br/><sub><b>Codex CLI</b></sub><br/><sub>                           </sub></a></td>\n    <td align=\"center\" width=\"76\"><picture><source media=\"(prefers-color-scheme:dark)\" srcset=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.91.0/dark/cline.png\"/><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/cline.svg\" width=\"40\" alt=\"Cline\"/></picture><br/><sub><b>Cline</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><a href=\"https://github.com/Kilo-Org/kilocode\"><img src=\"./public/providers/kilocode.svg\" width=\"40\" alt=\"Kilo Code\"/><br/><sub><b>Kilo Code</b></sub><br/><sub>                           </sub></a></td>\n    <td align=\"center\" width=\"76\"><a href=\"https://github.com/Zoo-Code-Org/Zoo-Code\"><img src=\"./public/providers/zoocode.png\" width=\"40\" alt=\"Zoo Code\"/><br/><sub><b>Zoo Code</b></sub><br/><sub>                           </sub></a></td>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/continue.svg\" width=\"40\" alt=\"Continue\"/><br/><sub><b>Continue</b></sub><br/><sub>                           </sub></td>\n  </tr>\n  <tr>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/cli-generic.svg\" width=\"40\" alt=\"Aider\"/><br/><sub><b>Aider</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/cli-generic.svg\" width=\"40\" alt=\"ForgeCode\"/><br/><sub><b>ForgeCode</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/cli-generic.svg\" width=\"40\" alt=\"jcode\"/><br/><sub><b>jcode</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/deepseek.svg\" width=\"40\" alt=\"DeepSeek TUI\"/><br/><sub><b>DeepSeek TUI</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/cli-generic.svg\" width=\"40\" alt=\"CodeWhale\"/><br/><sub><b>CodeWhale</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><a href=\"https://github.com/anomalyco/opencode\"><picture><source media=\"(prefers-color-scheme:dark)\" srcset=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.91.0/dark/opencode.png\"/><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/opencode.svg\" width=\"40\" alt=\"OpenCode\"/></picture><br/><sub><b>OpenCode</b></sub><br/><sub>                           </sub></a></td>\n  </tr>\n  <tr>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/droid.svg\" width=\"40\" alt=\"Factory Droid\"/><br/><sub><b>Factory Droid</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/copilot.svg\" width=\"40\" alt=\"GitHub Copilot CLI\"/><br/><sub><b>Copilot CLI</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/cursor.svg\" width=\"40\" alt=\"Cursor CLI\"/><br/><sub><b>Cursor CLI</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/cli-generic.svg\" width=\"40\" alt=\"Smelt\"/><br/><sub><b>Smelt</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/cli-generic.svg\" width=\"40\" alt=\"Pi (pi-coding-agent)\"/><br/><sub><b>Pi</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/grok.svg\" width=\"40\" alt=\"Grok Build (xAI)\"/><br/><sub><b>Grok Build</b></sub><br/><sub>                           </sub></td>\n  </tr>\n  <tr>\n    <td align=\"center\" width=\"76\"><picture><source media=\"(prefers-color-scheme:dark)\" srcset=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.91.0/dark/nousresearch.png\"/><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/nousresearch.svg\" width=\"40\" alt=\"Hermes Agent (Nous Research)\"/></picture><br/><sub><b>Hermes Agent</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/openclaw.svg\" width=\"40\" alt=\"OpenClaw\"/><br/><sub><b>OpenClaw</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><picture><source media=\"(prefers-color-scheme:dark)\" srcset=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.91.0/dark/goose.png\"/><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/goose.svg\" width=\"40\" alt=\"Goose\"/></picture><br/><sub><b>Goose</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/cli-generic.svg\" width=\"40\" alt=\"Open Interpreter\"/><br/><sub><b>Open Interpreter</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/cli-generic.svg\" width=\"40\" alt=\"Warp AI\"/><br/><sub><b>Warp AI</b></sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"76\"><img src=\"./public/providers/cli-generic.svg\" width=\"40\" alt=\"Agent Deck\"/><br/><sub><b>Agent Deck</b></sub><br/><sub>                           </sub></td>\n  </tr>\n</table>\n</div>\n\n<div align=\"center\">\n<b>＋ also works with</b> · Kiro · Command Code · Antigravity · Windsurf · AMP · <b>any OpenAI-compatible tool</b>\n</div>\n\n<sub>📖 Per-tool setup for all 35 tools (26 CLI Code's + 9 CLI Agents) → [`docs/reference/CLI-TOOLS.md`](docs/reference/CLI-TOOLS.md) · 🧩 OpenCode plugin → [`@omniroute/opencode-provider`](https://www.npmjs.com/package/@omniroute/opencode-provider)</sub>\n\n</div>\n\n<br/>\n\n**Launch any supported CLI through OmniRoute in one command** — no config files written,\ncredentials injected per process, Qwen/Gemini get a throwaway isolated home:\n\n```bash\nomniroute run claude   --model openai/gpt-5.4          # Claude Code\nomniroute run codex    --model glm/glm-5.2             # OpenAI Codex CLI\nomniroute run aider    --model glm/glm-5.2 -- --message \"reply OK\"\nomniroute run goose    --model glm/glm-5.2\nomniroute run opencode --model glm/glm-5.2 -- run \"reply OK\"\nomniroute run qwen     --model glm/glm-5.2 -- -p \"reply OK\"\nomniroute run gemini   --model glm/glm-5.2 -- --skip-trust -p \"reply OK\"\n\n# Or pick provider+model interactively and write the tool's own config:\nomniroute configure codex          # also: claude opencode qwen aider goose cline continue kilo\n```\n\nEvery command honors the active remote context (`omniroute connect <host>`), `--dry-run`\npreviews the exact env/args without executing, and `--api-key-env NAME` keeps secrets out\nof your shell history. → [CLI Integrations](docs/guides/CLI-INTEGRATIONS.md)\n\n<br/>\n\n<div align=\"center\">\n\n## 🌐 352 AI Providers — 154 Catalog-Marked Free\n\n</div>\n\n> **352 registered providers** across the canonical chat, media, search, local, cloud-agent and system collections, including **154 carrying `hasFree: true` discovery metadata**. The chat model registry covers **268 providers / 2,566 distinct provider-model pairs / 1,312 raw model IDs**; the separate free-budget catalog has **455 per-model rows**, **40 recurring pools** and **56 recurring/keyless free-forever providers**. These are different denominators by design; definitions and pool-deduped calculations live in the [Provider Reference](docs/reference/PROVIDER_REFERENCE.md) and [Free Tiers](docs/reference/FREE_TIERS.md).\n\n<div align=\"center\">\n\n### 🏢 Every major lab — through one endpoint\n\n<table>\n  <tr>\n    <td align=\"center\" width=\"80\"><picture><source media=\"(prefers-color-scheme:dark)\" srcset=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.91.0/dark/openai.png\"/><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/openai.svg\" width=\"40\" alt=\"OpenAI\"/></picture><br/><sub>OpenAI</sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"80\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/claude-color.svg\" width=\"40\" alt=\"Anthropic\"/><br/><sub>Anthropic</sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"80\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/gemini-color.svg\" width=\"40\" alt=\"Gemini\"/><br/><sub>Gemini</sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"80\"><picture><source media=\"(prefers-color-scheme:dark)\" srcset=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.91.0/dark/grok.png\"/><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/grok.svg\" width=\"40\" alt=\"xAI Grok\"/></picture><br/><sub>xAI Grok</sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"80\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/deepseek-color.svg\" width=\"40\" alt=\"DeepSeek\"/><br/><sub>DeepSeek</sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"80\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/mistral-color.svg\" width=\"40\" alt=\"Mistral\"/><br/><sub>Mistral</sub><br/><sub>                           </sub></td>\n  </tr>\n  <tr>\n    <td align=\"center\" width=\"80\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/qwen-color.svg\" width=\"40\" alt=\"Qwen\"/><br/><sub>Qwen</sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"80\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/meta-color.svg\" width=\"40\" alt=\"Meta Llama\"/><br/><sub>Meta Llama</sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"80\"><picture><source media=\"(prefers-color-scheme:dark)\" srcset=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.91.0/dark/groq.png\"/><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/groq.svg\" width=\"40\" alt=\"Groq\"/></picture><br/><sub>Groq</sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"80\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/nvidia-color.svg\" width=\"40\" alt=\"NVIDIA\"/><br/><sub>NVIDIA</sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"80\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/minimax-color.svg\" width=\"40\" alt=\"MiniMax\"/><br/><sub>MiniMax</sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"80\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/cohere-color.svg\" width=\"40\" alt=\"Cohere\"/><br/><sub>Cohere</sub><br/><sub>                           </sub></td>\n  </tr>\n  <tr>\n    <td align=\"center\" width=\"80\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/perplexity-color.svg\" width=\"40\" alt=\"Perplexity\"/><br/><sub>Perplexity</sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"80\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/huggingface-color.svg\" width=\"40\" alt=\"Hugging Face\"/><br/><sub>HuggingFace</sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"80\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/together-color.svg\" width=\"40\" alt=\"Together\"/><br/><sub>Together</sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"80\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/fireworks-color.svg\" width=\"40\" alt=\"Fireworks\"/><br/><sub>Fireworks</sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"80\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/cloudflare-color.svg\" width=\"40\" alt=\"Cloudflare\"/><br/><sub>Cloudflare</sub><br/><sub>                           </sub></td>\n    <td align=\"center\" width=\"80\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/baidu-color.svg\" width=\"40\" alt=\"Baidu\"/><br/><sub>Baidu</sub><br/><sub>                           </sub></td>\n  </tr>\n</table>\n\n<sub>…and 330+ more — every icon resolves live from the dashboard's provider catalog. 📖 [Provider Reference](docs/reference/PROVIDER_REFERENCE.md)</sub>\n\n<br/>\n\n### 🆓 Free Forever — $0, no card\n\n<table>\n  <tr>\n    <td align=\"center\" width=\"150\"><img src=\"./public/providers/opencode.svg\" width=\"42\" alt=\"OpenCode Zen\"/><br/><b>OpenCode Zen</b><br/><sub>DeepSeek V4, Nemotron 3<br/>No token cap</sub></td>\n    <td align=\"center\" width=\"150\"><img src=\"./public/providers/kilocode.svg\" width=\"42\" alt=\"Kilo Code\"/><br/><b>Kilo Code</b><br/><sub>Auto-router, Tencent Hy3<br/>Free forever</sub></td>\n    <td align=\"center\" width=\"150\"><img src=\"./public/providers/requesty.svg\" width=\"42\" alt=\"Requesty\"/><br/><b>Requesty</b><br/><sub>GPT-OSS 120B, Nemotron<br/>Free forever</sub></td>\n    <td align=\"center\" width=\"150\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/siliconcloud-color.svg\" width=\"42\" alt=\"SiliconFlow\"/><br/><b>SiliconFlow</b><br/><sub>DeepSeek V3.2 / R1<br/>Free tier</sub></td>\n    <td align=\"center\" width=\"150\"><img src=\"./public/providers/zhipu.svg\" width=\"42\" alt=\"Z.AI GLM\"/><br/><b>Z.AI GLM</b><br/><sub>GLM-4.7 / 4.5-Flash<br/>Free forever</sub></td>\n    <td align=\"center\" width=\"150\"><img src=\"./public/providers/baidu.svg\" width=\"42\" alt=\"Baidu ERNIE\"/><br/><b>Baidu ERNIE</b><br/><sub>ERNIE 4.0<br/>Free forever</sub></td>\n  </tr>\n  <tr>\n    <td align=\"center\" width=\"150\"><img src=\"https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@1.91.0/icons/qoder-color.svg\" width=\"42\" alt=\"Qoder AI\"/><br/><b>Qoder AI</b><br/><sub>Qwen3-Max, Kimi-K2<br/>Unlimited FREE</sub></td>\n    <td align=\"center\" width=\"150\"><img src=\"./public/providers/pollinations.svg\" width=\"42\" alt=\"Pollinations\"/><br/><b>Pollinations</b><br/><sub>GPT, Llama, Claude<br/>No key needed</sub></td>\n    <td align=\"center\" width=\"150\"><img src=\"./public/providers/cloudflare.svg\" width=\"42\" alt=\"Cloudflare AI\"/><br/><b>Cloudflare AI</b><br/><sub>50+ models<br/>10K neurons/day</sub></td>\n    <td align=\"center\" width=\"150\"><img src=\"./public/providers/nvidia.svg\" width=\"42\" alt=\"NVIDIA NIM\"/><br/><b>NVIDIA NIM</b><br/><sub>GLM, MiniMax<br/>~40 RPM free</sub></td>\n    <td align=\"center\" width=\"150\"><img src=\"./public/providers/cerebras.svg\" width=\"42\" alt=\"Cerebras\"/><br/><b>Cerebras</b><br/><sub>GLM 4.7, GPT-OSS<br/>1M tokens/day</sub></td>\n    <td align=\"center\" width=\"150\"><img src=\"./public/providers/openrouter.svg\" width=\"42\" alt=\"OpenRouter\"/><br/><b>OpenRouter</b><br/><sub>:free models<br/>+$10 → higher RPM</sub></td>\n  </tr>\n</table>\n\n📖 Full machine-readable catalog → [`docs/reference/PROVIDER_REFERENCE.md`](docs/reference/PROVIDER_REFERENCE.md)\n\n<br/>\n</div>\n\n<div align=\"center\">\n\n## 🖥️ Where OmniRoute Runs — Anywhere\n\n</div>\n\n> Same app, your machine, your rules. From a global npm install to **your phone** via Termux.\n\n<table>\n  <tr><th align=\"left\">Platform</th><th align=\"left\">Install</th><th align=\"left\">Highlights</th></tr>\n  <tr><td align=\"left\" nowrap>📦 <b>npm (global)</b></td><td align=\"left\" nowrap><code>npm install -g omniroute</code></td><td align=\"left\">One command, any OS</td></tr>\n  <tr><td align=\"left\" nowrap>🐳 <b>Docker</b></td><td align=\"left\" nowrap><code>docker run … diegosouzapw/omniroute</code></td><td align=\"left\">Multi-arch <b>AMD64 + ARM64</b></td></tr>\n  <tr><td align=\"left\" nowrap>🖥️ <b>Desktop (Electron)</b></td><td align=\"left\" nowrap><code>npm run electron:build</code></td><td align=\"left\">Native window + system tray — <b>Windows / macOS / Linux</b></td></tr>\n  <tr><td align=\"left\" nowrap>💪 <b>ARM</b></td><td align=\"left\" nowrap>native <code>arm64</code></td><td align=\"left\">Raspberry Pi, ARM servers, Apple Silicon</td></tr>\n  <tr><td align=\"left\" nowrap>📱 <b>Android (Termux)</b></td><td align=\"left\" nowrap><code>pkg install nodejs && npx -y omniroute</code></td><td align=\"left\">Runs <b>on your phone</b>, 24/7, no root</td></tr>\n  <tr><td align=\"left\" nowrap>📲 <b>PWA</b></td><td align=\"left\" nowrap>\"Add to Home Screen\"</td><td align=\"left\">Fullscreen, offline, installable from browser</td></tr>\n  <tr><td align=\"left\" nowrap>🧩 <b>OpenCode plugin</b></td><td align=\"left\" nowrap><code>@omniroute/opencode-provider</code></td><td align=\"left\">Native OpenCode integration</td></tr>\n  <tr><td align=\"left\" nowrap>🤖 <b>VS Code Copilot Chat</b></td><td align=\"left\" nowrap>install <b>OmniCopilot</b> extension</td><td align=\"left\">Every OmniRoute model in the native Copilot Chat picker — stable &amp; Insiders</td></tr>\n  <tr><td align=\"left\" nowrap>🛠️ <b>From source</b></td><td align=\"left\" nowrap><code>npm install && npm run dev</code></td><td align=\"left\">Hack on it, contribute</td></tr>\n</table>\n\n<sub>📖 [Docker Guide](docs/guides/DOCKER_GUIDE.md) · [Desktop](electron/README.md) · [Termux](docs/guides/TERMUX_GUIDE.md) · [PWA](docs/guides/PWA_GUIDE.md) · [OpenCode](docs/frameworks/OPENCODE.md)</sub>\n\n<br/>\n\n<div align=\"center\">\n\n### 🧩 New: OmniRoute inside VS Code's native Copilot Chat\n\n</div>\n\n> No new sidebar, no new chat UI — every model OmniRoute serves shows up right in the\n> **Copilot Chat model picker you already use**. Since VS Code 1.122, provider models work\n> without a GitHub sign-in or a Copilot subscription — agent mode, tool calling and vision, for\n> free.\n\nInstall the **[OmniCopilot](https://github.com/diegosouzapw/OmniCopilot)** extension, point it\nat your OmniRoute server (defaults to `localhost:20128`), then open Copilot Chat → model picker\n→ **Manage Models…** → **OmniRoute**.\n\n<table>\n  <tr><th align=\"left\">Store</th><th align=\"left\">Link</th><th align=\"left\">Works with</th></tr>\n  <tr><td align=\"left\" nowrap>🧩 <b>VS Code Marketplace</b></td><td align=\"left\"><a href=\"https://marketplace.visualstudio.com/items?itemName=diegosouzapw.omnicopilot\">Install →</a></td><td align=\"left\">VS Code — stable &amp; Insiders</td></tr>\n  <tr><td align=\"left\" nowrap>🔓 <b>Open VSX Registry</b></td><td align=\"left\"><a href=\"https://open-vsx.org/extension/diegosouzapw/omnicopilot\">Install →</a></td><td align=\"left\">Cursor, Windsurf, VSCodium, Theia, code-server, Gitpod, Antigravity, Kiro…</td></tr>\n</table>\n\nFrom inside the editor: open the **Extensions** view, search **\"OmniRoute\"**, click **Install**\n— works the same way on both stores. Source, issues and the publishing runbook live at\n[diegosouzapw/OmniCopilot](https://github.com/diegosouzapw/OmniCopilot).\n\n<sub>📖 [VS Code Copilot Chat guide](docs/guides/VSCODE-COPILOT.md) — setup, what the picker shows, dashboard-in-a-tab, troubleshooting</sub>\n\n<br/>\n\n<div align=\"center\">\n\n## 🔒 Private & Local-First\n\n</div>\n\n<img src=\"./docs/diagrams/privacy-local.svg\" width=\"100%\" alt=\"Private and local-first — OmniRoute's gateway and control plane run on your machine. Prompts are sent to the upstream provider selected for each request; OmniRoute adds no hosted prompt-processing hop and telemetry is disabled by default. Credentials are encrypted at rest with AES-256-GCM; controls include API-key scoping, IP filtering, rate limits, prompt-injection guards, upstream-header scrubbing, opt-in PII redaction, sanitized errors and a local SQLite audit trail. OmniRoute is MIT-licensed and self-hostable.\"/>\n\n<sub>📖 [Authorization](docs/architecture/AUTHZ_GUIDE.md) · [Guardrails](docs/security/GUARDRAILS.md) · [Compliance](docs/security/COMPLIANCE.md)</sub>\n\n<br/>\n\n<div align=\"center\">\n\n## 🔌 Full CLI + A2A & MCP\n\n</div>\n\n> Beyond the server, OmniRoute is a **full command-line cockpit** with **80+ commands**, plus open agent protocols so an AI agent can drive it **on its own**.\n\n### ⌨️ A real CLI (not just `start`)\n\n```bash\nomniroute               # serve gateway + dashboard (port 20128)\nomniroute chat          # interactive TUI chat client (slash: /model /combo /skill /memory)\nomniroute setup         # guided first-run wizard\nomniroute doctor        # diagnose providers, ports, native deps\n```\n\n### 🛰️ Remote mode — run the CLI here, OmniRoute on a VPS\n\nOmniRoute on a server? Drive it from your laptop with the **same CLI**. Log in once\nwith a scoped access token; every command then targets the remote.\n\n```bash\nomniroute connect 192.168.0.15            # password → scoped token, saved as a context\nomniroute models list                     # ← runs against the REMOTE server\nomniroute configure codex                 # ← picks a remote model, writes a local Codex profile\nomniroute tokens create --name ci --scope read   # mint narrower tokens for other machines\nomniroute contexts use default            # ← switch back to the local server\n```\n\nTokens are scoped `read` / `write` / `admin`; process-spawning routes stay loopback-only.\n<sub>📖 [Remote Mode](docs/guides/REMOTE-MODE.md)</sub>\n\n<div align=\"left\">\n\n<img src=\"./docs/diagrams/cli-terminal.svg\" width=\"50%\" alt=\"Animated terminal demoing the OmniRoute CLI — omniroute providers list, omniroute combo list and omniroute health — cycling over the 85-command top-level surface: providers · oauth · keys · combo · nodes · models · cache · compression · cost · usage · quota · health · resilience · telemetry · logs · audit · mcp · a2a · cloud · memory · skills · eval · tunnel · backup · sync · webhooks · policy · pricing · translator · simulate …\"/>\n\n</div>\n\n### 🤝 Connect an agent — and it controls OmniRoute itself\n\nExpose OmniRoute over **MCP**, **A2A**, a **REST API**, **webhooks** or a **remote CLI** — any capable agent (or your own code) gets the keys to the whole gateway: routing, providers, combos, cache, compression, memory — autonomously. HTTP endpoints below are served under `http://localhost:20128`.\n\n<table>\n  <tr><th align=\"left\">Interface</th><th align=\"left\">Endpoint / command</th><th align=\"left\">Use it for</th></tr>\n  <tr><td align=\"left\" nowrap>🧰 <b>MCP (stdio)</b></td><td align=\"left\" nowrap><code>omniroute --mcp</code></td><td align=\"left\">Plug into Claude Desktop, Cursor, any MCP client</td></tr>\n  <tr><td align=\"left\" nowrap>🌊 <b>MCP (HTTP)</b></td><td align=\"left\" nowrap><code>/api/mcp/stream</code></td><td align=\"left\">Remote MCP — <b>110 tools</b>, 33 scopes, full audit trail</td></tr>\n  <tr><td align=\"left\" nowrap>📡 <b>MCP (SSE)</b></td><td align=\"left\" nowrap><code>/api/mcp/sse</code></td><td align=\"left\">Streaming MCP transport</td></tr>\n  <tr><td align=\"left\" nowrap>🤝 <b>A2A</b></td><td align=\"left\" nowrap><code>/.well-known/agent.json</code></td><td align=\"left\">Agent-to-agent, <b>JSON-RPC 2.0</b> + SSE, 6 skills</td></tr>\n  <tr><td align=\"left\" nowrap>🌐 <b>REST API</b></td><td align=\"left\" nowrap><code>/v1/*</code></td><td align=\"left\">OpenAI-compatible — chat, embeddings, images, audio, OCR</td></tr>\n  <tr><td align=\"left\" nowrap>🔔 <b>Webhooks</b></td><td align=\"left\" nowrap><code>/api/webhooks</code></td><td align=\"left\">Push events (usage, quota, errors, routing) to your URL</td></tr>\n  <tr><td align=\"left\" nowrap>🛰️ <b>Remote CLI</b></td><td align=\"left\" nowrap><code>omniroute connect <host></code></td><td align=\"left\">Drive a remote instance with scoped access tokens</td></tr>\n</table>\n\n```bash\n# Give Claude Code the full OmniRoute toolset over MCP:\nclaude mcp add-server omniroute --type http --url http://localhost:20128/api/mcp/stream\n```\n\n<sub>📖 [MCP Server](docs/frameworks/MCP-SERVER.md) · [A2A Server](docs/frameworks/A2A-SERVER.md) · [Agent Protocols](docs/frameworks/AGENT_PROTOCOLS_GUIDE.md)</sub>\n\n<br/>\n\n<div align=\"center\">\n\n## 🗜️ Save 15–95% Tokens — Automatically\n\n</div>\n\n### 📖 How it works — pipeline, architecture & savings math\n\n<img src=\"./docs/diagrams/compression-pipeline.svg\" width=\"100%\" alt=\"OmniRoute compression pipeline: an illustrative 10,000-token client request passes through 12 composable engines — Session-Dedup, CCR, Lite, RTK, Responses Tool Output, Headroom, Relevance, Caveman, Aggressive, LLMLingua-2, Ultra and OmniGlyph — and can reach the provider at about 1,080 tokens in the documented stacked example. Structured content is protected by preservation guards and per-step fidelity gates; explicit lossy or experimental modes may transform eligible content.\"/>\n\nDefault stacked combo runs `RTK → Caveman`. When both act on the same tool/context payload, savings compound:\n\n```txt\ncombined = 1 − (1 − RTK) × (1 − Caveman_input)\naverage  = 1 − (1 − 0.80) × (1 − 0.46) = 89.2%\nrange    = 78.4 – 94.6%\n```\n\nCode blocks, URLs, JSON and structured data are **always protected** by the preservation engine.\n\n> **Why use many tokens when few tokens do the trick?** Every request passes through OmniRoute's compression pipeline **transparently** — no client changes. It's now a **stack of 12 composable engines** that run in order and mix & match per routing combo — building on ideas from [RTK](https://github.com/rtk-ai/rtk), [Caveman](https://github.com/JuliusBrussee/caveman) (⭐ 90K+), [LLMLingua-2](https://github.com/microsoft/LLMLingua), and [Troglodita](https://github.com/leninejunior/troglodita) (PT-BR).\n\n### 🧱 The 12-engine stack\n\nEngines run in pipeline order; each is independently toggleable and configurable per combo:\n\n<table>\n  <tr><th align=\"center\">#</th><th align=\"left\">Engine</th><th align=\"left\">What it does</th></tr>\n  <tr><td align=\"center\" nowrap>1</td><td align=\"left\" nowrap><b>Session-Dedup</b></td><td align=\"left\">Drops content repeated across turns (content-addressed, cross-turn)</td></tr>\n  <tr><td align=\"center\" nowrap>2</td><td align=\"left\" nowrap><b>CCR</b></td><td align=\"left\">Archives large blocks behind retrieve markers, fetched on demand</td></tr>\n  <tr><td align=\"center\" nowrap>3</td><td align=\"left\" nowrap><b>Lite</b></td><td align=\"left\">Whitespace + image-URL trimming (latency-light baseline)</td></tr>\n  <tr><td align=\"center\" nowrap>4</td><td align=\"left\" nowrap><b>RTK</b></td><td align=\"left\">Smart tool-result filtering, dedup & truncation (command-aware)</td></tr>\n  <tr><td align=\"center\" nowrap>5</td><td align=\"left\" nowrap><b>Responses Tool Output</b></td><td align=\"left\">Lossless-first JSON + bounded diagnostic compression for shell/patch/search/build outputs (Responses API)</td></tr>\n  <tr><td align=\"center\" nowrap>6</td><td align=\"left\" nowrap><b>Headroom</b></td><td align=\"left\">Lossless tabular compaction of JSON arrays (~30%) via a vendored <b>GCF</b> codec</td></tr>\n  <tr><td align=\"center\" nowrap>7</td><td align=\"left\" nowrap><b>Relevance</b></td><td align=\"left\">Extractive sentence scoring against the last user query</td></tr>\n  <tr><td align=\"cen","readmeFilename":"README.md"}