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
29 KiB
Contributing to OmniRoute (á ááá)
ð Languages: ðºðž English · ðžðŠ 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 · ð²ð² my · ð³ðµ 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
ááá áášáµ ááááµ áµáá³á© á¥ááá°áááá! áá áááªá« ááááá ášáá«áµáááááµá áá áážáááá¢
áá¥á«áá³áá± ááᥠááá ášá¥á« áá°áµá£ á ášá áµá°ááœáŠ áááá ááááµ áááá©á¢ áá á providerᣠroutingᣠUI/UXᣠi18nᣠCLIᣠdatabase á¥á build/deploy áááŠáœá ášááá»ážáᣠášá°á®á© áášá«ááœá£ ášCI áœáá á¥á ášááµá³ášá á°ášááᜠáá á«ááá³áá¢
ášáááµ áááá
á áµá ááá³ááœ
- Node.js
>=22.22.3 <23ᣠááá>=24.0.0 <27(ášááášáአ24 LTS) - npm 10+
ášnpm v11+ á°á áááᜠ(Node 24+): áš
npm installá áá native modules áá«áážáá á«ášááá¡áŠ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
ášá á«á£á¢ á°áááá®áœ
# .enváá ášá á¥áá± ááá á©
cp .env.example .env
# á áµááá ááµá¥á®áœá ááá á©
echo "JWT_SECRET=$(openssl rand -base64 48)" >> .env
echo "API_KEY_SECRET=$(openssl rand -hex 32)" >> .env
ááááµ ááá á°áááá®áœáŠ
| á°áááá | áá£áª ášáááµ á¥áŽáµ | áááá« |
|---|---|---|
PORT |
20128 |
ášá°áášá áá°á¥ |
NEXT_PUBLIC_BASE_URL |
http://localhost:20128 |
ášfrontend áá ášá³á URL |
JWT_SECRET |
(ášáá ááá á©) | ášJWT ááá ááµá¥á |
INITIAL_PASSWORD |
CHANGEME |
ášááááªá« ááá¢á« ášááá áá |
APP_LOG_LEVEL |
info |
ášlog ááááááµ á°ášá |
ášDashboard á áá¥á®áœ
Dashboardá á á á«á£á¢ á°áááá®áœá áááá© áááœá á£á áªá«áµ ášUI áá¥áªá«/áá¥áá«ááœá á«ááá£ááŠ
| ášá áá¥á ááá | áá¥áªá«/áá¥áá« | áááá« |
|---|---|---|
| Settings â Advanced | Debug Mode | ášdebug request logsá á áá (UI) |
| Settings â General | Sidebar Visibility | ášsidebar ááááœá á á³á/á°á¥á |
á¥ááá á áá¥á®áœ á database ááµá¥ áášáá»áᣠá¥á á²ááá á© ášenv var áá£áª á¥áŽá¶áœá á áá»á ášá³áá ááµááá á ááá ááá«áá¢
á á á«á£á¢á«á ááá³ ááµá¬áµ
# ášáááµ ááá³ (áá£á á³áá áááµ)
npm run dev
# ášáááµ build
npm run build # next build â .build/next/ ášáá« assembleStandalone â dist/
npm run start
# áá áµá°ááœáŠ á áµá«á áááŠáœ áá£á backend/API-á¥á» compile
npm run build:contributor
# ášrelease build (áá¹á á³áá build + HEAD sentinel â ádeploy á«áµáááá)
npm run build:release # rm -rf .build dist && build + dist/BUILD_SHAá ááœáá
# ášá°ááá° ášáá°á¥ áá
á
PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
ášá áµá°ááœáŠ á áµá«áá build compile-á¥á» áášááá«á á«ášááááአstandalone áµááá±á ááá á áá«á native packaging assetsá á áááá£áᢠááá ášááœááá bundle áášááᥠá²ááá áá°á ááá ášáááµ build áá ááá¢
ášBuild áá€áµ á áááá¥
| ááá« | ááá¶áœ | á Git ášáášá³á°á |
|---|---|---|
src/ |
ášáá°áá áªá« ááá (TypeScript / TSX) | á á |
.build/ |
áá«ášáá áá€á¶áœ â ášnext build áá€áµ (gitignoredᣠdistDir = .build/next) |
á á |
dist/ |
ááá ášááœá bundle â á assembleStandalone ášáááᣠ(gitignored) |
á á |
ášbuild pipeline á ááµ áá á¥á» áááŠ
npm run build
ââ next build â .build/next/standalone (ášNext.js áá€áµ)
ââ assembleStandalone() (standalone + static + public + native assetsá ááá³á)
ââ áá€áµáŠ dist/ (server.js, .next/static/, public/, node_modules/)
npm run build:release á á°ášá᪠á ááááªá« ááá±áá ááá«áᜠá«ážá³áᣠá¥á
dist/BUILD_SHA (= git rev-parse --short HEAD)á á¥áá° deploy integrity sentinel ááœááá¢
npm run build:contributor backend-á¥á» ášáááá build profile áá áááᢠá build áá
ášdashboard UI ááááœá áááá stub á«á°áááᣠášAPI route handlersá á«áá«áᣠá¥á ášbuild á áá
áááá¹á áááᜠáá°áá á©á áµ áááá³áᢠDashboard UIá áááá© áááŠáœ ááá ááá
release áášááá« npm run buildá áá ááဠášá áµá°ááœáŠ á áµá«áá profile ášrelease build ááµá á áá°ááá¢
ášVPS deploy ááµá³áá»áŠ ášá©á image ááá«
/usr/lib/node_modules/omniroute/app/á áá°ááá áᢠášdeploy skills ášdist/á ááá¶áœ áá°áá« rsync á«á°áááᢠášá°ááá á á repo ááµá¥ á«áá ášbuild áá€áµ á±á« á¥á» áá (app/âdist/)á¢
áá£áª URLsáŠ
- Dashboard:
http://localhost:20128/dashboard - API:
http://localhost:20128/v1
ášGit ášá¥á« áá°áµ
â ïž á áá¹á á áá¥á³ áá°
maincommit á á³áµááᢠáááá feature branch-ááœá áá ááá¢ášPR base: áááá
release/vX.Y.Zbranch (mainá á³ááá) ááá á«áµááᢠáµá release-per-branch + tag-at-ship ááŽádocs/ops/BRANCHING_MODEL.mdá áááášá±á¢
# ášááá release á«á 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/ |
á á³á²áµ á£á áªá«áµ |
fix/ |
ášáµá á°áµ ááµá°á«ášá«áᜠ|
refactor/ |
ášá®áµ ááá á áá»á»á« |
docs/ |
ášá°ááµ áááŠáœ |
test/ |
ášáášá« áááªááœ/ááµá°á«ášá«áᜠ|
chore/ |
áá£áªá«ááœá£ CIᣠá¥áá á¥á áᜠ|
ášCommit ááááá¶áœ
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
Scopes (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á¢
áášá«ááœá ááµá¬áµ
# ááá áášá«áᜠ(unit + vitest + ecosystem + e2e)
npm run test:all
# á ááµ ášáášá« ááá (ášNode.js á€á°á test runner â á á¥ááá¹ áášá«áᜠáá
á áá ááá)
node --import tsx/esm --test tests/unit/your-file.test.ts
# á ááá¥á ášá°áá©áµ unit tests á¥á» (ášCI gate áá á°áá³á³á TIA selectorᣠ#8084)
npm run test:scoped # á áášášá»á commit (ááá á working tree) ááµá¥ á«á áááŠáœ
npm run test:scoped:staged # staged áááŠáœ á¥á» â ášpre-commit ááµá¬áµ áá á ááᣠáá£áá«á
npm run test:scoped:full # á ááááªá« import-graph mapá á¥áá°áá áááá£á (ááááœá á«ášá/á«ááá³áá± á áá)
# Exit 1 + "run the full suite" áááµ hub file (tsconfigᣠpackage.jsonᣠâŠ) ááá
# unmapped source á°ááá§á áááµ áá â selector á á°á
áááµ ááá³ áááµááဠá áá«áœ á«ááá³áá
á ááááá¢
# Vitest (MCP serverᣠautoComboᣠcache)
npm run test:vitest
# E2E áášá«áᜠ(Playwrightá ááááá)
npm run test:e2e
# ášProtocol clients E2E (MCP transportsᣠA2A)
npm run test:protocols:e2e
# ášEcosystem á°á³ááááµ áášá«ááœ
npm run test:ecosystem
# ášCoverage gateአ60% statements/lines/functions/branches
npm run test:coverage
npm run coverage:report
# Lint + ášá
áážáµ áášááá«
npm run lint
npm run check
# Gated real-upstream combo smoke (ášVPS áá³ášá» + ášá¥ááá°á provider credits ááááá)
# á¥ááá°á providersá áá ááá â áµáᜠá᪠á ááᢠá CI ááµá¥ á áá¹á á áá°á«áᢠgate ášáá á á áá£á¡ ááááá¢
# ášáá«áµááááአssh root@192.168.0.15 áá³ášá» (ášVPS ášread-only DB snapshot áááá)á¢
RUN_COMBO_LIVE=1 npm run test:combo:live
# Phase-3 VPS live smoke â á°á« Node ESM scriptsဠlive .15 serverá á áá¥á³ áá áááá¢
# ášáá«áµááááአssh root@192.168.0.15 áá³ášá» (combos á SSH sqlite á á©á ááá á«á/áááá³á)á¢
# á¥ááá°á providersá áá ááá (á ááµá°á ááª)ᢠ__live_test__* combosá á¥á» ááá¥á«á/áá°áááᢠá CI ááµá¥ á áá¹á á áá°á«áá¢
# REQUIRE_API_KEY=false á .15 áá áµááá API key á á«áµááááဠááá áá COMBO_LIVE_BASE_URL / COMBO_LIVE_API_KEY ášá°ááá© á«ášá¥á«ážááá¢
npm run test:combo:live:vps # 7 HTTP scenarios (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 requests ášcoverage gateá á 60%+ statements/lines/functions/branches ááášáµ á áá£ážá
- PR á
src/á£open-sse/á£electron/ᣠááábin/ááµá¥ á«á production codeá ášááá ᣠá áá«á PR ááµá¥ automated testsá áášá ááá áááá á áá áµ npm run coverage:reportášá áᥠááá coverage run ášá°áááá áááá ášááá-á -ááá áªáááµ á«áµáánpm run test:coverage:legacyáá³áªá«á ááœáœá ášááµááá metric áá á¥áá- á°ášá á á°ášá ášcoverage áá»á»á« roadmapá ááášáµ
docs/ops/COVERAGE_PLAN.mdá áááášá±
ášPull Request ááµááá¶áœ
PR ášááááµá á ááµá£ áááá¡áµ ááá á«á°á®ášáá loop áááµá¬áµ Contribution Golden Pathá áá ááᢠááá unit suite (4 CI shards)ᣠVitestᣠ60%+ coverage gateᣠá¥á production build ášCI áááááµ áážá â á¥ááá á á á á«á£á¢á ááµá¬áµ PR checks á áµááµáá ášáá°á¡áµ áá á°ášá᪠áášá á áá°á¥áᣠá¥á á ááµá°á ááœáᜠáá hostá áá«ášááá ááœáá (#8084)áŠ
- ááá¥áá ášáážáá ášáášá« ááááœá á«áµáªá±áŠ
node --import tsx/esm --test tests/unit/<file>.test.ts npm run lintá á«áµáªá±- production code á á°ááá áá¥á automated testsá á áá«á PR ááµá¥ á«á«áµá± ááá á«ááá
- production code á²ááᥠášá°ááá¡áµá ááá ášá³ášááµá ášáášá« áááᜠá PR áááá« ááµá¥ á«á«áµá±
- ášproject secrets á CI ááµá¥ á²ááá© á PR áá á«ááá ášSonarQube áá€áµ á«ášááá¡
ášá áá ášáášá« ááá³áŠ 122 unit test files ášáášá°ááµá áážááááŠ
- ášProvider translators á¥á ášá áážáµ ááá£
- Rate limitingᣠcircuit breakerᣠá¥á resilience
- Semantic cacheᣠidempotencyᣠá¥á progress tracking
- ášDatabase operations á¥á schema (21 DB modules)
- OAuth flows á¥á authentication
- ášAPI endpoint validation (Zod v4)
- ášMCP server tools á¥á scope enforcement
- ášMemory á¥á Skills systems
ášá®áµ ááá€
- ESLint â commit ášááµášáá á ááµ
npm run lintá«áá± - Prettier â commit á²á°ášá á
lint-stagedá á©á á á«áµ-á°á á áážáµ áá°á áá (2 ááá°á¶áœá£ áŽáá®áááœá£ áµáᥠá¥á á¶áœá£ áš100 ááá áµááµá£ es5 á°ášá³á á®áááœ) - TypeScript â ááá áš
src/á®áµ.ts/.tsxáá áááá€open-sse/.ts/.jsáá áááဠá TSDoc (@paramá£@returnsá£@throws) ááááá¡ eval()á áá áá â ESLintno-evalá£no-implied-evalá£no-new-funcá á«áµááµá³á- ášZod áášááá« â áááá ášAPI áá¥ááµ áášááá«áᜠášZod v4 ááµááœá áá áá
- áµá«áአáááᜠ= camelCase/kebab-caseᣠá®ááááá¶áœ = PascalCaseᣠáááᜠ= UPPER_SNAKE
ášáµá á°áµ á á«á«á / á£á¶ catch á¥áá®áœ
á ááµá catch á«ááá¥á«áªá« ááœá á áá°áᢠášáááµ ááµáŠáœ á á áá± áááµá¡áµ (áá
á
âSSE á¥ášá¶áœ ááµá¥ áµá
á°á¶áœá á ááá³ ááœá á áµáá¡â ášáááá á¥á¥á
á°áᥠá°áá£á«á á«á°ááá)áŠ
-
áá á°á¥á ášá°á°ášá (ášá«á³áœá ááá¥-á¥ášáµ ááœá³áµ/áŽáááµáª) â á¥áá á«á ááµááµ ášáá á á á¥á áá³áµ ášááá ááဠášá ááµ ááµáá ášáááá«áµ á áµá°á«ášáµ á«ááᣠáá á á«áµáá (á á¥á«áá³áá± á¥á«á áá áá ááµášá áá áááµ áá«áµááá°á ášááááá á«á«á³ áá)á¢
} catch {} // á°áá áá ááááá±á á«áášá á áá á áµááµá ášá°áá controllerá ááááµ ášáá á á áá -
áá áá°ášá á«áá áµ (áá«á/á á áªá ášáášá á®áµá£ ááá áµá á°á±á ááá£áµ ášáá¥á¥á áá°á±á á²ááá) â
catchá á«áá©áµ (á¥ášá±á á¥áá²á«ááᥠááœá á áááá±ááµ)ᣠááá áá ááµáá± ááá á¥áá²áœá á áá³áconsole.debug/warná«áá¡á¢} catch (e) { console.debug("[STREAM] ášonFailure callback áµá á°áµáŠ", e); }
áá°á°áá á© áá³ááᜠopen-sse/utils/stream.tsá á¥á open-sse/utils/streamHandler.tsá áááášá±á¢
ášáá®áááµ ááá á
src/ # TypeScript (.ts / .tsx)
âââ app/ # Next.js 16 App Router
â âââ (dashboard)/ # ášá³áœáŠááµ ááŸáœ (23 ááááœ)
â âââ api/ # ášAPI áááá¶áœ (51 ááá«ááœ)
â âââ login/ # ášáášááá« ááŸáœ (.tsx)
âââ domain/ # ášááá² áá°á (policyEngine, comboResolver, costRules, ááá°)
âââ lib/ # áá ášáááµ á¥á« á áááá® (.ts)
â âââ a2a/ # Agent-to-Agent v0.3 áá®á¶á®á á°áášá
â âââ acp/ # Agent Communication Protocol áááá¥
â âââ compliance/ # ášá°áá¢ááµ ááá² áá°á
â âââ db/ # ášSQLite á¶ááá áááᜠ+ 130 ááá°á¶áœ
â âââ memory/ # áá£áááµ á«áá ášááááµ áá
á°áš áµááµá³
â âââ oauth/ # ášOAuth á á
á«á¢ááœá£ á ááááá¶áœ á¥á ááááá«ááœ
â âââ skills/ # áá°á ášááœá ášáá
ááµ áááá
â âââ usage/ # ášá á ááá ááµáµá á¥á á᪠áµááµ
â âââ localDb.ts # á³áá-áá°áá-áááªá« áá¥áá¥á á¥á» â á¥áá
á áááá® ááœá á áášáá©
âââ middleware/ # ášá¥á«á middleware (promptInjectionGuard)
âââ mitm/ # MITM áá®áá² (ášááµáá áášááµá£ DNSᣠášááá áááªá«)
âââ shared/
â âââ components/ # React á®ááááá¶áœ (.tsx)
â âââ constants/ # ášá á
á«á¢ áµááááᜠ(329)ᣠMCP áá°ááœá£ 19 ášáááªá« áµáá¶áœ
â âââ utils/ # Circuit breakerᣠsanitizerᣠášáášááá« á áᥠá°áá£á«áµ
â âââ validation/ # ášZod v4 ááµááœ
âââ sse/ # ášSSE áá®áá² pipeline
open-sse/ # @omniroute/open-sse workspace
âââ executors/ # 89 ášexecutor áµáá á« ááááœ
âââ handlers/ # 11 ášá¥á«á handlers (ááááµá£ áááŸáœá£ embeddingsᣠááµááœá£ ááá°)
âââ mcp-server/ # MCP á°áášá (110 áá© áá³áªá«ááœá£ 3 transportsᣠ33 áá°ááœ)
âââ services/ # 178 ášáá°á-á°ášá á ááááá¶áœ (combo, autoCombo, rateLimitManager, ááá°)
âââ translator/ # ášá
áážáµ á°ááááᜠ(OpenAI â Claude â Gemini â Responses â Ollama)
âââ transformer/ # Responses API transformer
âââ utils/ # 22 ášááááá« áááᜠ(á¥ášáµá£ TLSᣠáá®áá²á£ áá ááµášá)
electron/ # Electron ášáŽáµáá¶á áá°áá áªá« (á¥á-ááµášá)
tests/
âââ unit/ # Node.js test runner (1,574 ášáášá« ááááœ)
âââ integration/ # ášáá
á°áµ áášá«ááœ
âââ e2e/ # Playwright áášá«ááœ
âââ security/ # ášá°á
áááµ áášá«ááœ
âââ translator/ # á°ááá-á°á®á áášá«ááœ
âââ load/ # ášáááµ áášá«ááœ
docs/
âââ adr/ # ášá¥á-ááá áá³á ááááŠáœ
âââ architecture/ # ášáµáááµ á¥á-ááá á¥á ášáááá á á
á
âââ comparison/ # OmniRoute ášá áá«á®áœ áá
âââ compression/ # ášááááá« áááªá«áᜠá¥á á°ááŠáœ
âââ dev/ # ášáááµ áááªá«ááœ
âââ diagrams/ # ášá¥á-ááá ááµááœ
âââ frameworks/ # MCPᣠA2AᣠOpenCodeᣠáá
á°áš áµááµá³á£ áá
áá¶áœ
âââ guides/ # ášá°á áá áááªá«á£ Dockerᣠá
áá¥áᣠáá ááá
âââ i18n/ # áá° ááá á áá ááááᜠášá°á°ášáá README áµááááœ
âââ marketing/ # ášáá¥ááµ áá³áá¶áœ
âââ ops/ # áá°áá«áµá£ áá®áá²á£ áœááᣠááá¶áœ
âââ providers/ # áá á
á«á¢-á°á®á á°áá¶áœ
âââ reference/ # ášAPI áá£áá»á£ env varsᣠCLI áá³áªá«ááœá£ áá» á°ášáááœ
âââ releases/ # ášáááµ ááµá³áá»ááœ
âââ routing/ # Auto-combo áá°áᣠášá áááá® á³áá áá«ááµ
âââ screenshots/ # ášá³áœáŠááµ á
áœá á³á áᜠááá³ááœ
âââ security/ # ášáášáášá« áá°áŠáœá£ á°áá¢ááµá£ áµá¥á
ááµá£ tokens
âââ specs/ # ášááµá áááá áááá«ááœ
á á²áµ á á á«á¢ áášá
á°ášá 1አášá á á«á¢ ááááœá ááááá¡
áá° src/shared/constants/providers.ts á«áá â ááá á²á«á á Zod ášáášááá¥á¢
á°ášá 2አExecutor á«áá (á¥á ááá á«áµááá)
áá ášá³ááá executor ášáá«á«áá executor á open-sse/executors/your-provider.ts ááµá¥ ááá á©á¢
á°ášá 3አTranslator á«áá (OpenAI á«ááá á áážáµ ášáá)
ášá¥á«á/ááᜠtranslators á open-sse/translator/ ááµá¥ ááá á©á¢
á°ášá 4አOAuth áá á á«áá (á OAuth áá ášá°áá ášá° ášáá)
ášOAuth áášááá« áášáááœá á src/lib/oauth/constants/oauth.ts á¥á serviceá á src/lib/oauth/services/ ááµá¥ á«ááá¢
ášáááá á á
á«á¢ ááá OAuth client_id/secret ááá Firebase Web API keyá á ááá CLI / browser bundle ááµá¥ ášáá«á°á«á ášááᣠá¥áá° string literal á á«á«áµá±áµá¢ resolvePublicCred()á ášopen-sse/utils/publicCreds.ts áá áá á¥á ášá°ážáá byte entry áá° EMBEDDED_DEFAULTS á«ááᢠááá á áµáá³á
ášá¥á« áá°áµ á docs/security/PUBLIC_CREDS.md ááµá¥ á°áááá§áá¢
á handlers/executors ááµá¥á£ client ášáá°áá± ášáµá
á°áµ ááááá¶áœ á buildErrorBody() / sanitizeErrorMessage() ášopen-sse/utils/error.ts ááá á áá£ážá â á¥á¬ err.stack ááá err.messageá á Response body ááµá¥ ááœá á á«áµááá¡á¢ docs/security/ERROR_SANITIZATION.mdá áááášá±á¢
á°ášá 5አModelsá ááááá¡
ášmodel áµáááááœá á open-sse/config/providerRegistry.ts ááµá¥ á«ááá¢
á°ášá 6አTests á«áá
á¢á«ááµ ášáášá°ááµá ášáážáá unit tests á tests/unit/ ááµá¥ áá»ááŠ
- ášá á á«á¢ áááá£
- ášá¥á«á/ááᜠáµááá
- ášáµá á°áµ á á«á«á
ášPull Request áášááá« áááá
- Tests á áµááá á«ááá (
npm test) - Linting á áµááá á«ááá (
npm run lint) - Build áá³á«á (
npm run build) - áá á²áµ ááá functions á¥á interfaces ášTypeScript types á³áááá
- á á®áµ ááµá¥ á áá¥á³ ášá°á»á secrets ááá fallback values ášáá
- ááá ášupstream áášááá« áášááᜠá
resolvePublicCred()á°á«áµá°áá (docs/security/PUBLIC_CREDS.mdá áááášá±)ᣠááœá á¥áá° literals á áá°á»áá - ášáµá
á°áµ áááŸáœ á
buildErrorBody()/sanitizeErrorMessage()á«ááá â á response bodies ááµá¥ á¥á¬ stack traces ášáá (docs/security/ERROR_SANITIZATION.mdá áááášá±) - Shell commands (
exec/spawn) ášruntime valuesá á string interpolation á³ááá áenvá«áµá°áááá - ááá inputs á Zod schemas á°ášááá áá
- áá°á áá ášáá³á© áááŠáœ Changelog fragment á
changelog.d/{features|fixes|maintenance}/<PR>-<slug>.mdáµá á³ááá (changelog.d/README.mdá áááášá±) âCHANGELOG.mdá á áá¥á³ á á«ááµáဠfragments á release áá á ááµ áá áá°á á°á£á á¥á á PRs áá«ášá ááœá á ááá©á - Documentation áááá (á áµááá ášáá)
- ááá á á²áµ CodeQL / Secret-Scanning alerts á áá°ášáá±áᣠááá á¥á«áá³áá³ážá á°áááá
docs/security/doc á áá á áµ áŽááá«á áááá«áµ ááµá á°á°áááá - child processes ášáááá© Routes (
/api/mcp/,/api/cli-tools/runtime/) ásrc/server/authz/routeGuard.tsááµá¥ á¥áá°isLocalOnlyPath()á°ááµá áá â Hard Rule #15á áááášá± - á commit messages ááµá¥
Co-Authored-Bytrailers ášáá â commits á repository owner Git identity áµá á¥á» áá³ášáµ á áá£ážá (Hard Rule #16)
áááµ ááá£áµ
ááá¶áœ á /generate-release ášá¥á« áá°áµ áá°á³á°á«áᢠá á²áµ GitHub Release á²áá áᣠáá¬á á GitHub Actions á áá«áááµ á á«áµ-á°á áá° npm áá³á°ááá¢
áVPS áá°áá«á¶áœá£ npm run build:releaseá (npm run buildá á³ááá) áá áá â áá áá¹á
á³áá ááá£á³ á«ášááááᣠá¥á
áá á dist/ ááµá¥ á«ááááᣠá¥áá²áá ášdist/BUILD_SHA ááááµ áááá ááœááá¢
ášáá« dist/á áá° áááµ ášapp/ ááá« rsync ášáá«á°áááµá áš/deploy-vps-*-cc áá
áá¶áœ áá ááá¢
á¥áá ááááµ
- á áááŽáážááŠ
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/áááášá±