Batch 3 (last) of the locale-expansion plan: ha, yo, ig, am, uz, ka, hy on every surface â dashboard catalog, docs mirror (22-file core + llm.txt + CHANGELOG), CLI catalog, README flag block, locale tables and đ language bars. Also closes the key gap the batch-1 (43 keys) and batch-2 (10 keys) catalogs carried since their base merges, fixes the Igbo "Model" copy and allowlists the Uzbek cognate. Translation-ratio baseline covers 65 locales. â ď¸ base-red inherited: #12732
42 KiB
Contributing to OmniRoute (ááźááşááŹ)
đ Languages: đşđ¸ English ¡ đŞđš am ¡ đ¸đŚ ar ¡ đŚđż az ¡ đ§đŹ bg ¡ đ§đŠ bn ¡ đ¨đż cs ¡ đŠđ° da ¡ đŠđŞ de ¡ đŹđˇ el ¡ đŞđ¸ es ¡ đŞđŞ et ¡ đŽđˇ fa ¡ đŤđŽ fi ¡ đŤđˇ fr ¡ đŽđŞ ga ¡ đŽđł gu ¡ đłđŹ ha ¡ đŽđą he ¡ đŽđł hi ¡ đđˇ hr ¡ đđş hu ¡ đŚđ˛ hy ¡ đŽđŠ id ¡ đłđŹ ig ¡ đŽđš it ¡ đŻđľ ja ¡ đŹđŞ ka ¡ đ°đ km ¡ đŽđł kn ¡ đ°đˇ ko ¡ đąđš lt ¡ đąđť lv ¡ đŽđł ml ¡ đŽđł mr ¡ đ˛đž ms ¡ đ˛đš mt ¡ đłđľ ne ¡ đłđą nl ¡ đłđ´ no ¡ đŽđł or ¡ đŽđł pa ¡ đľđ phi ¡ đľđą pl ¡ đľđš pt ¡ đ§đˇ pt-BR ¡ đˇđ´ ro ¡ đˇđş ru ¡ đąđ° si ¡ đ¸đ° sk ¡ đ¸đŽ sl ¡ đˇđ¸ sr ¡ đ¸đŞ sv ¡ đ°đŞ sw ¡ đŽđł ta ¡ đŽđł te ¡ đšđ th ¡ đšđˇ tr ¡ đşđŚ uk-UA ¡ đľđ° ur ¡ đşđż uz ¡ đťđł vi ¡ đłđŹ yo ¡ đ¨đł zh-CN ¡ đšđź zh-TW
ááŤáááşáá°ááŽáááş á áááşáááşá áŹá¸áááˇáşáĄáá˝ááş ááťáąá¸áá°á¸áááşááŤáááşá á¤áááşá¸áá˝ážááşáá˝ááş á áááşáááş áááŻáĄááşáááťážáĄáŹá¸ááŻáśá¸ ááŤáááşááŤáááşá
ááźáąáŹááşá¸áá˛áážáŻáá áşááŻááťááşá¸á áŽáĄáá˝ááş áááŹá¸áááşááŻááşáááşá¸á ááşááᯠContribution Golden Path ááž á áááşááŤá áááşá¸áá˝ááş providerá routingá UI/UXá i18ná CLIá database áážááˇáş build/deploy ááźáąáŹááşá¸áá˛áážáŻááťáŹá¸ááᯠáááşá¸áááŻáˇá contract ááťáŹá¸á ááŽá¸áááˇáşáĄáŹááŻáśá ááŻááşááŹá¸ááąáŹ test ááťáŹá¸á CI áá˝ážááşá¸ááźáŻáśáážáŻáážááˇáş ááźááşáááşáážááážááŻááşá¸ááźááşá¸áĄáááˇáşááťáŹá¸áážááˇáş ááťáááşáááşááąáŹáşááźááŹá¸áááşá
áá˝áśáˇááźááŻá¸áááŻá¸áááşááąá¸ áááşáááşá¸ááťááşááźááşáááşááźááşá¸
ááźááŻáááşáááŻáĄááşááťááşááťáŹá¸
- Node.js
>=22.22.3 <23áááŻáˇáááŻááş>=24.0.0 <27(áĄááźáśááźáŻááťááş- 24 LTS) - npm 10+
npm v11+ áĄááŻáśá¸ááźáŻáá°ááťáŹá¸ (Node 24+):
npm installááźáŻááŻááşááźáŽá¸ááąáŹááş native module ááťáŹá¸ áááˇáşáá˝ááşá¸ááźáŽá¸ááźá áşááźáąáŹááşá¸ á á áşááąá¸ááŤ-node -e "require('better-sqlite3')"áMODULE_NOT_FOUNDááźááˇáş ááĄáąáŹááşááźááşááŤánpm approve-scripts better-sqlite3 && npm installááᯠááŻááşááąáŹááşááŤá áĄááąá¸á áááşááᯠááźáżááŹááźáąáážááşá¸ááźááşá¸ áá˝ááş ááźááˇáşááŤá
- Git
Clone ááźáŻááŻááşááźááşá¸áážááˇáş áááˇáşáá˝ááşá¸ááźááşá¸
git clone https://github.com/diegosouzapw/OmniRoute.git
cd OmniRoute
npm install
áááşáááşá¸ááťááş Variable ááťáŹá¸
# template ááž áááşá .env ááᯠáááşááŽá¸ááŤ
cp .env.example .env
# áááŻáĄááşááąáŹ secret ááťáŹá¸ááᯠááŻááşááŻááşááŤ
echo "JWT_SECRET=$(openssl rand -base64 48)" >> .env
echo "API_KEY_SECRET=$(openssl rand -hex 32)" >> .env
áá˝áśáˇááźááŻá¸áááŻá¸áááşááąá¸áĄáá˝ááş áĄááá variable ááťáŹá¸-
| Variable | áá˝áśáˇááźááŻá¸áááŻá¸áááşááąá¸ áá°ááááşáááŻá¸ | ááąáŹáşááźááťááş |
|---|---|---|
PORT |
20128 |
Server port |
NEXT_PUBLIC_BASE_URL |
http://localhost:20128 |
Frontend áĄáá˝ááş áĄááźáąááś URL |
JWT_SECRET |
(áĄáááşáá˝ááş ááŻááşááŻááşááŤ) | JWT áááşáážááşáááŻá¸ secret |
INITIAL_PASSWORD |
CHANGEME |
áááááŻáśá¸ login password |
APP_LOG_LEVEL |
info |
Log áĄááąá¸á áááşáĄáááˇáş |
Dashboard áááşáááşááťáŹá¸
Dashboard áá˝ááş áááşáááşá¸ááťááş variable ááťáŹá¸áážáá áşáááˇáşáááşá¸ áááşáážááşáááŻááşááąáŹ feature ááťáŹá¸áĄáá˝ááş UI toggle ááťáŹá¸ ááŤáááşáááş-
| áááşáááşáááşááąáᏠ| Toggle | ááąáŹáşááźááťááş |
|---|---|---|
| Settings â Advanced | Debug Mode | Debug request log ááťáŹá¸ááᯠáá˝ááˇáşáááş (UI) |
| Settings â General | Sidebar Visibility | Sidebar áĄáááŻááşá¸ááťáŹá¸ááᯠááźáááş/ááťáąáŹááşáááş |
á¤áááşáááşááťáŹá¸ááᯠdatabase áá˝ááş ááááşá¸áááşá¸ááŹá¸ááźáŽá¸ restart ááźáŻááŻááşááźáŽá¸ááąáŹááşáá˝ááşáááşá¸ áááşáááşáááşáážááᏠáááşáážááşááŹá¸ááŤá env var áá°ááááşáááŻá¸ááťáŹá¸ááᯠáĄá áŹá¸áááŻá¸áĄááŻáśá¸ááźáŻáááşá
Local áá˝ááş ááŻááşááąáŹááşááźááşá¸
# áá˝áśáˇááźááŻá¸áááŻá¸áááşááąá¸ mode (áĄáááŻáĄááťáąáŹááş ááźááşáááşáááşááźááşá¸)
npm run dev
# Production build
npm run build # next build â .build/next/ áááŻáˇááąáŹááş assembleStandalone â dist/
npm run start
# ááŤáááşáá°ááŽáá°á ááźáąáŹááşá¸áá˛áážáŻááťáŹá¸áĄáá˝ááş ááťááşááźááşááąáŹ backend/API-only compile
npm run build:contributor
# Release build (áážááşá¸áááşá¸á ááźááşáááş build ááŻááşááźááşá¸ + HEAD sentinel â deploy áĄáá˝ááş áááŻáĄááşáááş)
npm run build:release # rm -rf .build dist && build + dist/BUILD_SHA ááᯠááąá¸ááŹá¸áááş
# áĄááŻáśá¸ááťáŹá¸ááąáŹ port áááşáážááşááťááş
PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
Contributor build áááş compile-only á á áşááąá¸áážáŻááᯠááŻááşááąáŹááşáááş- standalone ááźááˇáşááťááážáŻááᯠá áŻá ááşá¸ááźááşá¸ áááŻáˇáááŻááş áá˝áąá¸ááťááşáááŻááşááąáŹ native packaging asset ááťáŹá¸ááᯠbuild ááŻááşááźááşá¸ áááźáŻááŤá ááźááˇáşááťááááŻááşááąáŹ bundle ááᯠá á áşááąá¸áááş áááŻáĄááşáááˇáşáĄá፠ááŻáśáážááş production build ááᯠáĄááŻáśá¸ááźáŻááŤá
Build Output áá˝á˛áˇá ááşá¸ááŻáś
| Directory | ááŤáááşááąáŹáĄááŹááťáŹá¸ | ááźáąááŹááśááŹá¸áážáŻ |
|---|---|---|
src/ |
Application source (TypeScript / TSX) | ááŻááşáááş |
.build/ |
ááźáŹá¸ááśáááŻááşááťáŹá¸ â next build output (gitignoredá distDir = .build/next) |
áááŻááşá፠|
dist/ |
ááźááˇáşááťááááŻááşááąáŹ bundle â assembleStandalone ááźááˇáş á
áŻá
ááşá¸ááŹá¸áááş (gitignored) |
áááŻááşá፠|
Build pipeline áááş áá áşááźáááşáááşá¸ááźááˇáş ááŻááşááąáŹááşáááş-
npm run build
ââ next build â .build/next/standalone (Next.js output)
ââ assembleStandalone() (standalone + static + public + native asset ááťáŹá¸ááᯠáá°á¸áá°áááş)
ââ output: dist/ (server.js, .next/static/, public/, node_modules/)
npm run build:release áááş áááŻáˇáĄááźááş directory áážá
áşááŻááŻáśá¸ááᯠáŚá¸á
á˝áŹáážááşá¸áááşá¸ááźáŽá¸
deploy áĄááźááˇáşáĄá
áŻáśáážááşáááşááźáąáŹááşá¸ á
á
áşááąá¸áááˇáş sentinel áĄááźá
áş dist/BUILD_SHA (= git rev-parse --short HEAD) ááᯠááąá¸ááŹá¸áááşá
npm run build:contributor áááş backend-only build profile ááᯠáĄááŻáśá¸ááźáŻáááşá Build ááŻááşááąá
ááş
dashboard UI áááŻááşááťáŹá¸ááᯠááŹáᎠstub ááŻááşááźáŽá¸ API route handler ááťáŹá¸ááᯠáááşáááşááŹá¸áážááᏠbuild ááźáŽá¸ááąáŹááş áá°áááşá¸áááŻááşááťáŹá¸áááŻ
ááźááşáááşááŹá¸áážááááşá Dashboard UI ááᯠáááşááąáŹááşááąáŹ ááźáąáŹááşá¸áá˛áážáŻááťáŹá¸ áááŻáˇáááŻááş release áĄááźááˇáşáĄá
áŻáś
á
á
áşááąá¸áážáŻáĄáá˝ááş npm run build ááᯠáĄááŻáśá¸ááźáŻááŤá Contributor profile áááş release build ááᯠáĄá
áŹá¸áááŻá¸ááźááşá¸áááŻááşááŤá
VPS deploy áážááşááťááş: remote image directory
/usr/lib/node_modules/omniroute/app/áááş áááźáąáŹááşá¸áá˛ááŤá Deploy skill ááťáŹá¸áááşdist/á áĄááźáąáŹááşá¸áĄááŹááťáŹá¸ááᯠáááşá¸áá˛áááŻáˇ rsync ááŻááşáááşá Repository áĄáá˝ááşá¸áážá build output path áᏠááźáąáŹááşá¸áá˝áŹá¸áááş (app/âdist/)á
áá°á URL ááťáŹá¸-
- Dashboard:
http://localhost:20128/dashboard - API:
http://localhost:20128/v1
Git áĄááŻááşá áŽá¸áááşá¸áážáŻ
â ď¸
maináááŻáˇ áááŻááşáááŻááş commit ááŻáśá¸á áááŻááşááŤáážááˇáşá Feature branch ááťáŹá¸ááᯠáĄááźá˛áĄááŻáśá¸ááźáŻááŤáPR base: áááşáážááĄááŻáśá¸ááźáŻááąááąáŹ
release/vX.Y.Zbranch ááᯠáŚá¸áááşá፠(maináááŻááşááŤ)á release áá áşááŻááťážááş branch áá áşáᯠ+ ááźááˇáşááťáááťáááşáá˝ááş tag áááşáážááşáááˇáş ááŻáśá áśáĄááźáąáŹááşá¸docs/ops/BRANCHING_MODEL.mdáá˝ááş ááźááˇáşááŤá
# áááşáážááĄááŻáśá¸ááźáŻááąááąáŹ release á ááąáŹááşááŻáśá¸ commit ááž branch áá˝á˛á፠(áĽáááŹ: release/v3.8.49)
git fetch origin
git checkout -b feat/your-feature-name origin/release/v3.8.49
# ... ááźáąáŹááşá¸áá˛áážáŻááťáŹá¸ ááźáŻááŻááşá፠...
git commit -m "feat: describe your change"
git push -u origin feat/your-feature-name
# base = release/v3.8.49 ááźááˇáş Pull Request áá
áşáᯠáá˝ááˇáşááŤ
Branch áĄáááşááąá¸ááźááşá¸
| Prefix | áááşáá˝ááşááťááş |
|---|---|
feat/ |
Feature áĄáá áşááťáŹá¸ |
fix/ |
Bug ááźááşáááşáážáŻááťáŹá¸ |
refactor/ |
Code áá˝á˛áˇá ááşá¸ááŻáś ááźááşáááşááźááşáááşááźááşá¸ |
docs/ |
Documentation ááźáąáŹááşá¸áá˛áážáŻááťáŹá¸ |
test/ |
Test áááˇáşáá˝ááşá¸áážáŻááťáŹá¸/ááźááşáááşáážáŻááťáŹá¸ |
chore/ |
Toolingá CIá dependency ááťáŹá¸ |
Commit Message ááťáŹá¸
Conventional Commits ááᯠáááŻááşááŹááŤá
feat: add circuit breaker for provider calls
fix: resolve JWT secret validation edge case
docs: update SECURITY.md with PII protection
test: add observability unit tests
refactor(db): consolidate rate limit tables
Scope ááťáŹá¸ (v3.8): db, sse, oauth, dashboard, api, cli, docker, ci, mcp, a2a, memory, skills, cloud-agent, guardrails, compression, auto-combo, resilience, providers, executors, translator, domain, authzá
Test ááťáŹá¸ ááŻááşááąáŹááşááźááşá¸
# Test áĄáŹá¸ááŻáśá¸ (unit + vitest + ecosystem + e2e)
npm run test:all
# Test file áá
áşááŻáááşá¸ (Node.js á áá°áááşá¸ test runner â test áĄááťáŹá¸á
áŻá áááşá¸ááᯠáĄááŻáśá¸ááźáŻáááş)
node --import tsx/esm --test tests/unit/your-file.test.ts
# áááşáááźáąáŹááşá¸áá˛áážáŻááźáąáŹááˇáş áááşááąáŹááşáážáŻáážáááąáŹ unit test ááťáŹá¸áᏠ(CI gateá #8084 áážááˇáş áá°ááŽááąáŹ TIA selector)
npm run test:scoped # ááąáŹááşááŻáśá¸ commit (áááŻáˇáááŻááş working tree) áážá ááźáąáŹááşá¸áá˛áážáŻááťáŹá¸
npm run test:scoped:staged # staged ááŻááşááŹá¸ááąáŹ ááźáąáŹááşá¸áá˛áážáŻááťáŹá¸áᏠâ pre-commit run áážááˇáş ááąáŹááşá¸áá˝ááşá
á˝áŹ áá˝á˛áááşáĄááŻáśá¸ááźáŻáááŻááşáááş
npm run test:scoped:full # import-graph map ááᯠáŚá¸á
á˝áŹ ááźááşáááşáááşááąáŹááşá፠(file ááťáŹá¸ áááˇáşáá˝ááşá¸/áá˝ážáąáˇááźáąáŹááşá¸ááźáŽá¸ááąáŹááş)
# Exit 1 + "run the full suite" áááŻáááşáážáŹ hub file (tsconfig, package.json, âŚ) áááŻáˇáááŻááş
# mapping ááážáááąáŹ source ááźáąáŹááşá¸áá˛áá˝áŹá¸ááźááşá¸ááᯠáááŻáááŻáááş â selector áááş ááąá¸áááşá¸á
á˝áŹ fail ááźá
áşááźáŽá¸ áááşáááˇáşáĄááŹáááŻááťáž ááááşáááááş áááťáąáŹáşáá˝áŹá¸ááŤá
# Vitest (MCP serverá autoComboá cache)
npm run test:vitest
# E2E test ááťáŹá¸ (Playwright áááŻáĄááşáááş)
npm run test:e2e
# Protocol client E2E (MCP transport ááťáŹá¸á A2A)
npm run test:protocols:e2e
# Ecosystem áááŻááşáááşááŽáážáŻ test ááťáŹá¸
npm run test:ecosystem
# Coverage gate: statement/line/function/branch ááťáŹá¸á 60%
npm run test:coverage
npm run coverage:report
# Lint + format á
á
áşááąá¸ááźááşá¸
npm run lint
npm run check
# Gate ááźááˇáş áááˇáşáááşááŹá¸ááąáŹ áĄáážááşááááş upstream combo smoke test (VPS áĄááŻáśá¸ááźáŻáá˝ááˇáş + provider credit áĄá
á
áşááťáŹá¸ áááŻáĄááşáááş)
# áĄáážááşááááş provider ááťáŹá¸ááᯠááąáŤáşáá°áááş â áĄáááşá¸áááş ááŻááşááťáááşá CI áá˝ááş ááŻáśá¸á áááŻááşááąáŹááşááŤá Gate ááážáááŤá ááźáżááŹáááźá
áşá
áąáᲠááťáąáŹáşáá˝áŹá¸áááşá
# áááŻáĄááşááťááş: ssh root@192.168.0.15 áĄááŻáśá¸ááźáŻáá˝ááˇáş (VPS ááž read-only DB snapshot ááᯠsource ááŻááşáááş)á
RUN_COMBO_LIVE=1 npm run test:combo:live
# Phase-3 VPS live smoke â áááŻá¸áááŻá¸ Node ESM script ááťáŹá¸ááźá
áşááźáŽá¸ live .15 server ááᯠáááŻááşáááŻááşááąáŤáşáá°áááşá
# áááŻáĄááşááťááş: ssh root@192.168.0.15 áĄááŻáśá¸ááźáŻáá˝ááˇáş (combo ááťáŹá¸ááᯠSSH sqlite áážáá
áşáááˇáş áááşááŽá¸/ááťááşááááşá¸áááş)á
# áĄáážááşááááş provider ááťáŹá¸ááᯠááąáŤáşáá°áááş (ááŻááşááťá
ááááş áĄáááşá¸áááşáážááááş)á __live_test__* combo ááťáŹá¸áááŻáᏠáááşááŽá¸/ááťááşáá
áşáááşá CI áá˝ááş ááŻáśá¸á áááŻááşááąáŹááşááŤá
# .15 áá˝ááş REQUIRE_API_KEY=false ááźá
áşáááźááˇáş API key ááááŻáĄááşááąáŹáşáááşá¸ áááşáážááşááŹá¸ááŤá COMBO_LIVE_BASE_URL / COMBO_LIVE_API_KEY ááᯠáááŻááşááŹáĄááŻáśá¸ááźáŻáááşá
npm run test:combo:live:vps # HTTP scenario 7 áᯠ(priority/round-robin/weighted/cost/fusion/auto + health)
npm run test:combo:live:vps:failover # áĄáážááşááááş cross-provider failover scenario áá
áşáᯠáááşáááˇáşáááş (á
áŻá
áŻááąáŤááşá¸ 8 ááŻ)
Coverage áážááşááťááşááťáŹá¸-
npm run test:coverageáááş áĄááá unit test suite áĄáá˝ááş source coverage ááᯠáááŻááşá¸ááŹááźáŽá¸tests/**ááᯠááťááşáážááşááŹopen-sse/**ááᯠáááˇáşáá˝ááşá¸áááş- Pull request ááťáŹá¸áááş statement/line/function/branch ááťáŹá¸áĄáá˝ááş coverage gate ááᯠ60%+ áá˝ááş ááááşá¸ááŹá¸ááááş
- PR áá
áşááŻá
src/,open-sse/,electron/áááŻáˇáááŻááşbin/áážá production code ááᯠááźáąáŹááşá¸áá˛ááŤá áá°ááŽááąáŹ PR áá˛áá˝ááş automated test ááťáŹá¸ááᯠáááˇáşáá˝ááşá¸áááş áááŻáˇáááŻááş áĄááşááááşááŻááşáááş áááŻáĄááşáááş npm run coverage:reportáááş ááąáŹááşááŻáśá¸ coverage run ááž file áá áşááŻááťááşá¸á áŽáĄáááŻááş áĄááąá¸á áááş report ááᯠááąáŹáşááźáááşnpm run test:coverage:legacyáááş ááááşáĄááźáąáĄááąáážááˇáş áážááŻááşá¸áážááşáááŻááşáááş áĄááąáŹááşá¸ metric ááᯠááááşá¸ááááşá¸ááŹá¸áááş- áĄáááˇáşáááŻááş coverage ááźážááˇáşáááşááąá¸ áááşá¸ááźáĄá
áŽáĄá
ááşáĄáá˝ááş
docs/ops/COVERAGE_PLAN.mdááᯠááźááˇáşááŤ
Pull Request áááŻáĄááşááťááşááťáŹá¸
PR áá áşáᯠááá˝ááˇáşáᎠáááşááźáąáŹááşá¸áá˛ááŹá¸áááˇáşáĄááŹáĄáá˝ááş ááŽá¸áááˇáşáĄáŹááŻáśá ááŻááşááŹá¸ááąáŹ ááŻááşáááşá¸á ááşááᯠááŻááşááąáŹááşáááş Contribution Golden Path ááᯠáĄááŻáśá¸ááźáŻááŤá Unit suite áĄááźááˇáşáĄá áŻáś (CI shard 4 ááŻ)á Vitestá 60%+ coverage gate áážááˇáş production build áááŻáˇáááş CI á ááŹáááşááźá áşáááş â áááşá¸áááŻáˇááᯠlocal áá˝ááş ááŻááşááąáŹááşááźááşá¸áááş PR á á áşááąá¸áážáŻááťáŹá¸á áááąá¸áááŻááşááąá¸ááąáŹ ááąáŹááşáááşáĄááťááşáĄáááş áááąá¸áááŻááşáááˇáşáĄááźááş á á˝ááşá¸ááąáŹááşáááşááááˇáşááąáŹ á ááşááťáŹá¸áá˝ááş host ááᯠáĄááźááˇáşáĄá áĄááŻáśá¸ááźáŻááá áąáááŻááşáááş (#8084)-
- áááşáááźáąáŹááşá¸áá˛áážáŻááᯠáá˝ážááşá¸ááźáŻáśááąáŹ test file ááťáŹá¸ááᯠááŻááşááąáŹááşááŤ-
node --import tsx/esm --test tests/unit/<file>.test.ts npm run lintááᯠááŻááşááąáŹááşááŤ- Production code ááźáąáŹááşá¸áá˛áááˇáşáĄááŤáááŻááşá¸ áá°ááŽááąáŹ PR áá˛áá˝ááş automated test ááťáŹá¸ááᯠáááˇáşáá˝ááşá¸á፠áááŻáˇáááŻááş áĄááşááááşááŻááşááŤ
- Production code ááźáąáŹááşá¸áá˛áááˇáşáĄá፠ááźáąáŹááşá¸áá˛ááŹá¸ááąáŹ áááŻáˇáááŻááş áĄáá áşáááˇáşááŹá¸ááąáŹ test file ááťáŹá¸ááᯠPR ááąáŹáşááźááťááşáá˛áá˝ááş áááˇáşáá˝ááşá¸ááŤ
- Project secret ááťáŹá¸ááᯠCI áá˝ááş configure ááŻááşááŹá¸ááŤá PR ááąáŤáşáážá SonarQube ááááşááᯠá á áşááąá¸ááŤ
áááşáážá test áĄááźáąáĄááą- áĄáąáŹááşááŤáááŻáˇááᯠáá˝ážááşá¸ááźáŻáśááŹá¸áááˇáş unit test file 122 ááŻ-
- Provider translator ááťáŹá¸áážááˇáş format ááźáąáŹááşá¸áá˛ááźááşá¸
- Rate limitingá circuit breaker áážááˇáş resilience
- Semantic cacheá idempotency áážááˇáş progress tracking
- Database operation ááťáŹá¸áážááˇáş schema (DB module 21 ááŻ)
- OAuth flow ááťáŹá¸áážááˇáş authentication
- API endpoint validation (Zod v4)
- MCP server tool ááťáŹá¸áážááˇáş scope enforcement
- Memory áážááˇáş Skills system ááťáŹá¸
ááŻááşá áááŻááş
- ESLint â commit áááźáŻááŻááşááŽ
npm run lintááᯠrun á፠- Prettier â commit ááźáŻááŻááşááťáááşáá˝ááş
lint-stagedáážáá áşáááˇáş áĄáááŻáĄááťáąáŹááş format ááŻááşáááş (space 2 ááŻá semicolon ááťáŹá¸á double quote ááťáŹá¸á á áŹááŻáśá¸áĄááťááş 100á es5 trailing comma ááťáŹá¸) - TypeScript â
src/áážá ááŻááşáĄáŹá¸ááŻáśá¸áááş.ts/.tsxááᯠáĄááŻáśá¸ááźáŻáááşáopen-sse/áááş.ts/.jsááᯠáĄááŻáśá¸ááźáŻáááşá TSDoc (@param,@returns,@throws) ááźááˇáş documentation ááąá¸ááŹá¸á፠eval()áááŻáśá¸á â ESLint áno-eval,no-implied-eval,no-new-funcááᯠáááźá áşáááą áááŻááşááŹá áąáááş- Zod validation â API input validation áĄáŹá¸ááŻáśá¸áĄáá˝ááş Zod v4 schema ááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻááŤ
- áĄáááşááąá¸ááźááşá¸: áááŻááşááťáŹá¸ = camelCase/kebab-caseá component ááťáŹá¸ = PascalCaseá constant ááťáŹá¸ = UPPER_SNAKE
Error áááŻááşáá˝ááşááźááşá¸ / áĄáá˝ááş catch block ááťáŹá¸
áááşáááˇáş catch áááŻááťáž áážááşá¸áááşá¸ááťááşáááŤáᲠáááŹá¸ááŤáážááˇáşá áááşá¸ááᯠáĄáąáŹááşá፠áĄááťááŻá¸áĄá
áŹá¸áážá
áşááťááŻá¸áĄáááş
áá
áşááťááŻá¸áĄááźá
áş áá˝á˛ááźáŹá¸á፠("SSE stream ááťáŹá¸áá˝ááş error ááťáŹá¸ááᯠáááşáááˇáşáĄááŤááťáž ááááşáááááş ááťááŻááťáááŹá¸á"
áá°ááąáŹ áááşá¸ááťááşáááˇáş á
ááşá¸ááťááşá¸ááᯠáááşáá˝áąáˇáĄááŻáśá¸ááťááźááşá¸ááźá
áşáááş):
-
áááşáá˝ááşááťááşáážáááąáŹ (ááťá˝ááşáŻááşáááŻáˇáááŻááşáááŻááşá áĄááąáŹááşá¸ááŻáśá¸ááźááŻá¸áááşá¸áážáŻ cleanup/telemetry) â á¤ááąááŹáá˝ááş failure ááźá áşááźááşá¸ááᯠááťážáąáŹáşáááˇáşááŹá¸ááźáŽá¸ áĄáášáááŹááşááážáááŤá áĄááźáąáŹááşá¸áááşá¸áážááşá¸áááşá¸ááťááş comment áá áşááźáąáŹááşá¸ áááˇáşááŤá logging áááźáŻááŻááşááŤáážááˇáş (request áááŻááşá¸áá˝ááş logging ááźáŻááŻááşááźááşá¸ááźáąáŹááˇáş ááźá áşááąáŤáşááŹáááˇáş ááááŻáĄááşááąáŹ noise ááᯠá¤áááşáážááşááťááşá áážáąáŹááşáážáŹá¸ááąá¸áááş)á
} catch {} // client ááťáááşáááşáážáŻááźááşááąáŹááşááźáŽá¸ááąáŹááş ááááşááŹá¸ááźáŽá¸ááŹá¸ controller ááᯠáááşááśááááşááźááşá¸áážáŹ ááťážáąáŹáşáááˇáşááŹá¸ááąáŹáĄááŹááźá áşáááş -
Log ááźáŻááŻááşáááˇáşááąáŹ (ááźááşá/ááąáŤáşáá°áá°á ááąá¸ááŹá¸áááˇáş ááŻááşá áááŻáˇáááŻááş error ááᯠááťááŻááťááŹá¸ááźááşá¸á control flow ááᯠááźáąáŹááşá¸áá˛á áąáááˇáşáĄááŤ) â catch ááᯠáááşáááşááŹá¸áážáá፠(stream ááᯠáááşáááˇáşáĄááŤááťáž áááťááşá áąááŤáážááˇáş)á áááŻáˇááąáŹáş failure ááᯠáážáŹáá˝áąáá˝áąáˇáážááááŻááşá áąáááş áááşá ááşáĄááźáąáŹááşá¸áĄááŹááŤáááˇáş
console.debug/warnááᯠááŻááşááąá¸ááŤá} catch (e) { console.debug("[STREAM] onFailure callback error:", e); }
áááşáá˝áąáˇáĄááŻáśá¸ááźáŻááŹá¸áááˇáş ááá°ááŹááťáŹá¸áĄáá˝ááş open-sse/utils/stream.ts áážááˇáş open-sse/utils/streamHandler.ts ááᯠááźááˇáşááŤá
áááąáŹááťááşáá˝á˛áˇá ááşá¸ááŻáś
src/ # TypeScript (.ts / .tsx)
âââ app/ # Next.js 16 App Router
â âââ (dashboard)/ # Dashboard á
áŹááťááşáážáŹááťáŹá¸ (ááášá 23 ááŻ)
â âââ api/ # API route ááťáŹá¸ (directory 51 ááŻ)
â âââ login/ # áĄááąáŹááşáĄááŹá¸á
áá
á
áşááźááşá¸ á
áŹááťááşáážáŹááťáŹá¸ (.tsx)
âââ domain/ # Policy engine (policyEngine, comboResolver, costRules á
áááş)
âââ lib/ # áĄááá business logic (.ts)
â âââ a2a/ # Agent-to-Agent v0.3 protocol server
â âââ acp/ # Agent Communication Protocol registry
â âââ compliance/ # Compliance policy engine
â âââ db/ # SQLite domain module ááťáŹá¸ + migration 130 ááŻ
â âââ memory/ # ááąáážááşááááşá¸áááşá¸ááŹá¸ááąáŹ á
ááŹá¸áááŻááşá¸áážááşááŹááş
â âââ oauth/ # OAuth provider ááťáŹá¸á service ááťáŹá¸áážááˇáş utility ááťáŹá¸
â âââ skills/ # áááŻá¸ááťá˛áˇáááŻááşááąáŹ skill framework
â âââ usage/ # áĄááŻáśá¸ááźáŻáážáŻ ááźáąááŹááśááźááşá¸áážááˇáş ááŻááşááťá
ááááşáá˝ááşááťááşááźááşá¸
â âââ localDb.ts # ááźááşáááş export ááŻááşáááˇáş layer ááŽá¸áááˇáş â á¤ááąááŹáá˝ááş logic ááᯠáááşáááˇáşáĄááŤááťáž ááááˇáşááŤáážááˇáş
âââ middleware/ # Request middleware (promptInjectionGuard)
âââ mitm/ # MITM proxy (certificateá DNSá áá
áşáážááş routing)
âââ shared/
â âââ components/ # React component ááťáŹá¸ (.tsx)
â âââ constants/ # Provider áááşáážááşááťááşááťáŹá¸ (329)á MCP scope ááťáŹá¸á routing strategy 19 ááŻ
â âââ utils/ # Circuit breakerá sanitizerá auth helper ááťáŹá¸
â âââ validation/ # Zod v4 schema ááťáŹá¸
âââ sse/ # SSE proxy pipeline
open-sse/ # @omniroute/open-sse workspace
âââ executors/ # Executor implementation module 89 ááŻ
âââ handlers/ # Request handler 11 áᯠ(chatá responsesá embeddingsá images á
áááş)
âââ mcp-server/ # MCP server (ááŽá¸ááźáŹá¸ tool 110 ááŻá transport 3 ááŻá scope 33 ááŻ)
âââ services/ # ááááşáááşá¸áĄáááˇáş service 178 áᯠ(comboá autoComboá rateLimitManager á
áááş)
âââ translator/ # Format translator ááťáŹá¸ (OpenAI â Claude â Gemini â Responses â Ollama)
âââ transformer/ # Responses API transformer
âââ utils/ # Utility module 22 áᯠ(streamá TLSá proxyá logging)
electron/ # Electron desktop app (platform áĄááťááŻá¸ááťááŻá¸áá˝ááş áĄááŻáśá¸ááźáŻáááŻááşááąáŹ)
tests/
âââ unit/ # Node.js test runner (test áááŻááş 1,574 ááŻ)
âââ integration/ # Integration test ááťáŹá¸
âââ e2e/ # Playwright test ááťáŹá¸
âââ security/ # ááŻáśááźáŻáśááąá¸ test ááťáŹá¸
âââ translator/ # Translator ááŽá¸áááˇáş test ááťáŹá¸
âââ load/ # Load test ááťáŹá¸
docs/
âââ adr/ # Architecture Decision Record ááťáŹá¸
âââ architecture/ # á
áá
áş architecture áážááˇáş resilience
âââ comparison/ # OmniRoute áážááˇáş áĄááźáŹá¸áá˝áąá¸ááťááşá
ááŹááťáŹá¸ááᯠáážááŻááşá¸áážááşááźááşá¸
âââ compression/ # Compression áááşá¸áá˝ážááşááťáŹá¸áážááˇáş á
ááşá¸ááťááşá¸ááťáŹá¸
âââ dev/ # áá˝áśáˇááźááŻá¸áááŻá¸áááşááąá¸ áááşá¸áá˝ážááşááťáŹá¸
âââ diagrams/ # Architecture diagram ááťáŹá¸
âââ frameworks/ # MCPá A2Aá OpenCodeá Memoryá Skills
âââ guides/ # áĄááŻáśá¸ááźáŻáá°áááşá¸áá˝ážááşá Dockerá á
áá
áşáááşáááşááźááşá¸á ááźáżááŹááźáąáážááşá¸ááźááşá¸
âââ i18n/ # ááŹááŹá
ááŹá¸ááťááŻá¸á
áŻáśááźááˇáş ááźááşáááŻááŹá¸ááąáŹ README ááťáŹá¸
âââ marketing/ # á
áťáąá¸áá˝ááşááźážááˇáşáááşááąá¸ áá
ášá
ááşá¸ááťáŹá¸
âââ ops/ # Deploymentá proxyá coverageá release ááťáŹá¸
âââ providers/ # Provider ááŽá¸áááˇáş documentation
âââ reference/ # API referenceá env var ááťáŹá¸á CLI tool ááťáŹá¸á áĄááá˛áˇáĄáááˇáşááťáŹá¸
âââ releases/ # Release note ááťáŹá¸
âââ routing/ # Auto-combo engineá reasoning replay
âââ screenshots/ # Dashboard screenshot ááťáŹá¸
âââ security/ # Guardrail ááťáŹá¸á complianceá stealthá token ááťáŹá¸
âââ specs/ # ááŽáááŻááşá¸áááşáážááşááťááşááťáŹá¸
Provider áĄáá áşáá áşáᯠáááˇáşáá˝ááşá¸ááźááşá¸
áĄáááˇáş 1: Provider Constants ááťáŹá¸ááᯠá áŹáááşá¸áá˝ááşá¸ááźááşá¸
src/shared/constants/providers.ts áá˝ááş áááˇáşáá˝ááşá¸á፠â module ááᯠload ááŻááşááťáááşáá˝ááş Zod ááźááˇáş áĄáááşááźáŻá
á
áşááąá¸ááŤáááşá
áĄáááˇáş 2: Executor áááˇáşáá˝ááşá¸ááźááşá¸ (á áááşááźááŻááş logic áááŻáĄááşááŤá)
áĄááźáąááś executor ááᯠáááŻá¸ááťá˛áˇááŹá¸áááˇáş executor ááᯠopen-sse/executors/your-provider.ts áá˝ááş áááşááŽá¸ááŤá
áĄáááˇáş 3: Translator áááˇáşáá˝ááşá¸ááźááşá¸ (OpenAI format áááŻááşááŤá)
Request/response translator ááťáŹá¸ááᯠopen-sse/translator/ áá˝ááş áááşááŽá¸ááŤá
áĄáááˇáş 4: OAuth Config áááˇáşáá˝ááşá¸ááźááşá¸ (OAuth áĄááźáąááśááźá áşááŤá)
OAuth credentials ááťáŹá¸ááᯠsrc/lib/oauth/constants/oauth.ts áá˝ááş áááˇáşáá˝ááşá¸ááźáŽá¸ service ááᯠsrc/lib/oauth/services/ áá˝ááş áááˇáşáá˝ááşá¸ááŤá
Upstream provider áááş áĄááťáŹá¸ááŻáśá¸ OAuth client_id/secret áááŻáˇáááŻááş Firebase Web API key ááᯠáááşá¸á áĄááťáŹá¸ááŻáśá¸ CLI / browser bundle áĄáá˝ááşá¸ ááźááˇáşááąááŹá¸ááŤáá áááşá¸ááᯠstring literal áĄááźá
áş ááááˇáşáá˝ááşá¸ááŤáážááˇáşá open-sse/utils/publicCreds.ts ááž resolvePublicCred() ááᯠáĄááŻáśá¸ááźáŻááźáŽá¸ masked byte entry áá
áşááŻááᯠEMBEDDED_DEFAULTS áá˝ááş áááˇáşáá˝ááşá¸ááŤá áááźá
áşáááąáááŻááşááŹááááˇáş workflow áĄááźááˇáşáĄá
áŻáśááᯠdocs/security/PUBLIC_CREDS.md áá˝ááş áážááşáááşá¸áááşááŹá¸ááŤáááşá
Handlers/executors ááťáŹá¸áĄáá˝ááşá¸ client ááśááąáŹááşáážááááˇáş error message ááťáŹá¸áááş open-sse/utils/error.ts ááž buildErrorBody() / sanitizeErrorMessage() ááᯠááźááşáááşá¸ááááş â raw err.stack áááŻáˇáááŻááş err.message ááᯠResponse body áá˛áá˝ááş ááŻáśá¸áááááˇáşááŤáážááˇáşá docs/security/ERROR_SANITIZATION.md ááᯠááźááˇáşááŤá
áĄáááˇáş 5: Models ááťáŹá¸ááᯠá áŹáááşá¸áá˝ááşá¸ááźááşá¸
Model definition ááťáŹá¸ááᯠopen-sse/config/providerRegistry.ts áá˝ááş áááˇáşáá˝ááşá¸ááŤá
áĄáááˇáş 6: Tests ááťáŹá¸ áááˇáşáá˝ááşá¸ááźááşá¸
áĄáááşá¸ááŻáśá¸ áĄáąáŹááşááŤáĄááźáąáŹááşá¸áĄááŹááťáŹá¸ááᯠá
ááşá¸áááşááŹá¸áááˇáş unit tests ááťáŹá¸ááᯠtests/unit/ áá˝ááş ááąá¸ááŹá¸ááŤ-
- Provider á áŹáááşá¸áá˝ááşá¸ááźááşá¸
- Request/response ááŹááŹááźááşááźáąáŹááşá¸áá˛ááźááşá¸
- Error áááŻááşáá˝ááşááźááşá¸
Pull Request á á áşááąá¸áááşá áŹáááşá¸
- Tests ááťáŹá¸ áĄáąáŹááşááźááşáááş (
npm test) - Linting áĄáąáŹááşááźááşáááş (
npm run lint) - Build áĄáąáŹááşááźááşáááş (
npm run build) - Public function áážááˇáş interface áĄáá áşááťáŹá¸áĄáá˝ááş TypeScript types ááťáŹá¸ áááˇáşáá˝ááşá¸ááŹá¸áááş
- Hardcoded secrets áááŻáˇáááŻááş fallback values ááťáŹá¸ ááážáááŤ
- áĄááťáŹá¸ááŻáśá¸ upstream credentials ááťáŹá¸ááᯠliteral ááťáŹá¸áĄááźá
áş ááŻáśá¸áááááˇáşáá˛
resolvePublicCred()áážáá áşáááˇáş áááˇáşáá˝ááşá¸ááŹá¸áááş (docs/security/PUBLIC_CREDS.mdááᯠááźááˇáşááŤ) - Error response ááťáŹá¸áááş
buildErrorBody()/sanitizeErrorMessage()ááᯠááźááşáááşá¸áááş â response body ááťáŹá¸áá˛áá˝ááş raw stack trace ááťáŹá¸ áááŤáááşá፠(docs/security/ERROR_SANITIZATION.mdááᯠááźááˇáşááŤ) - Shell commands (
exec/spawn) ááťáŹá¸áááş runtime values ááťáŹá¸ááᯠstring interpolation ááźááˇáş áááŻááşáá˛enváážáá áşáááˇáş ááąá¸áááŻáˇáááş - Input áĄáŹá¸ááŻáśá¸ááᯠZod schemas ááťáŹá¸ááźááˇáş áĄáááşááźáŻá á áşááąá¸ááŹá¸áááş
- áĄááŻáśá¸ááźáŻáá°áážááˇáş áááşáááŻááşááąáŹ ááźáąáŹááşá¸áá˛áážáŻááťáŹá¸áĄáá˝ááş Changelog fragment áááŻ
changelog.d/{features|fixes|maintenance}/<PR>-<slug>.mdáĄáąáŹááşáá˝ááş áááˇáşáá˝ááşá¸ááŹá¸áááş (changelog.d/README.mdááᯠááźááˇáşááŤ) âCHANGELOG.mdááᯠáááŻááşáááŻááş áááźááşáááşááŤáážááˇáşá Fragment ááťáŹá¸ááᯠrelease ááŻááşááťáááşáá˝ááş á áŻá ááşá¸ááźáŽá¸ PR ááťáŹá¸áĄááźáŹá¸ áááşáááˇáşáĄááŤááťáž conflict áááźá áşá፠- Documentation ááᯠáĄááşááááşááŻááşááŹá¸áááş (áááşáááŻááşááŤá)
- CodeQL / Secret-Scanning alert áĄáá
áşááťáŹá¸ ááá˝ááˇáşááŹá¸ááŤá áááŻáˇáááŻááş alert áá
áşááŻááťááşá¸á
áŽááᯠáááşáááŻááşááŹ
docs/security/doc ááᯠáááŻá¸ááŹá¸áááˇáş áááşá¸áááŹáááŻááşáᏠáĄááźáąáŹááşá¸ááźááťááşááźááˇáş áááşááťááşááŹá¸áááş - Child process ááťáŹá¸ááᯠá
áááşáááˇáş routes (
/api/mcp/,/api/cli-tools/runtime/) áááŻsrc/server/authz/routeGuard.tsáážáisLocalOnlyPath()áĄááźá áş áĄááťááŻá¸áĄá áŹá¸áááşáážááşááŹá¸áááş â áááşá¸ááťááşááąáŹ á ááşá¸ááťááşá¸ #15 ááᯠááźááˇáşá፠- Commit message ááťáŹá¸áá˝ááş
Co-Authored-Bytrailers áááŤáááşá፠â commit ááťáŹá¸áááş repository áááŻááşáážááşá Git identity áá áşááŻáááşá¸áĄáąáŹááşáá˝ááşáᏠááąáŤáşááááş (áááşá¸ááťááşááąáŹ á ááşá¸ááťááşá¸ #16)
ááźááˇáşááťáááźááşá¸
ááźááˇáşááťááážáŻááťáŹá¸ááᯠ/generate-release workflow áážáá
áşáááˇáş á
áŽááśáááˇáşáá˝á˛ááŤáááşá GitHub Release áĄáá
áşáá
áşáᯠáááşááŽá¸áááˇáşáĄá፠package ááᯠGitHub Actions áážáá
áşáááˇáş npm áááŻáˇ áĄáááŻáĄááťáąáŹááş áá˝ážááˇáşáááşááŤáááşá
VPS deploy ááťáŹá¸áĄáá˝ááş npm run build áĄá
áŹá¸ npm run build:release ááᯠáĄááŻáśá¸ááźáŻá፠â áááşá¸áááş áĄá
ááž ááźááşáááş build ááŻááşááźááşá¸á bundle ááᯠdist/ áĄáá˝ááşá¸ á
áŻá
ááşá¸ááźááşá¸áážááˇáş dist/BUILD_SHA sentinel ááᯠááąá¸ááŹá¸ááźááşá¸áááŻáˇááᯠááŻááşááąáŹááşááŤáááşá
áááŻáˇááąáŹááş dist/ ááᯠáĄááąá¸áážá app/ directory áááŻáˇ rsync ááŻááşááąá¸áááˇáş /deploy-vps-*-cc skills ááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻááŤá
áĄáá°áĄááŽááá°ááźááşá¸
- Architecture:
docs/architecture/ARCHITECTURE.mdááᯠááźááˇáşá፠- API áááŻá¸ááŹá¸ááťááş:
docs/reference/API_REFERENCE.mdááᯠááźááˇáşá፠- ááŻáśááźáŻáśááąá¸áááŻááşáᏠá
áŹáá˝ááşá
áŹáááşá¸ááťáŹá¸:
docs/security/CLI_TOKEN.md,docs/security/ROUTE_GUARD_TIERS.md,docs/security/ERROR_SANITIZATION.md,docs/security/PUBLIC_CREDS.md - ááŻááşáááşá¸áááşáááşáážáŻáááŻááşáᏠá
áŹáá˝ááşá
áŹáááşá¸ááťáŹá¸:
docs/ops/SQLITE_RUNTIME.md - ááźáżááŹááťáŹá¸: github.com/diegosouzapw/OmniRoute/issues
- ADRs: ááááŻááŹáááŻááşáᏠááŻáśá¸ááźááşááťááşáážááşáááşá¸ááťáŹá¸áĄáá˝ááş
docs/adr/ááᯠááźááˇáşááŤ