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
28 KiB
Contributing to OmniRoute (Yorùbá)
🌐 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 · 🇲🇲 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 · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Ẹ ṣé fún ìfẹ́ yín láti ṣàfikún sí iṣẹ́ yìí! Ìtọ́sọ́nà yìí ṣàlàyé gbogbo ohun tí ẹ nílò láti bẹ̀rẹ̀.
Fún ìlànà iṣẹ́ àṣẹ-àyípadà kọ̀ọ̀kan tó jẹ́ ti ìjọba, bẹ̀rẹ̀ pẹ̀lú Ọ̀nà Àṣeyọrí Ìkópa. Ó so àwọn àyípadà olupèsè, ìdarí ọ̀nà, UI/UX, i18n, CLI, ibi ìpamọ́ dátà, àti ìkọ́/ìmúṣiṣẹ́ pọ̀ mọ́ àwọn àdéhùn wọn, àwọn ìdánwò pàtó, àgbègbè CI, àti àwọn ìgbésẹ̀ ìbámu.
Ìṣètò Ìdàgbàsókè
Àwọn Ohun Tí A Nílò Ṣáájú
- Node.js
>=22.22.3 <23, tàbí>=24.0.0 <27(àbá: 24 LTS) - npm 10+
Àwọn olumulo npm v11+ (Node 24+): Lẹ́yìn
npm install, ṣàyẹ̀wò pé a ti fi àwọn native modules sílẹ̀:node -e "require('better-sqlite3')". Tí ó bá kùnà pẹ̀lúMODULE_NOT_FOUND, ṣiṣẹ́npm approve-scripts better-sqlite3 && npm install. Wo Ìtọ́jú Àwọn Ìṣòro.
- Git
Ṣe Ẹ̀dà & Fi Sílẹ̀
git clone https://github.com/diegosouzapw/OmniRoute.git
cd OmniRoute
npm install
Àwọn Àyípadà Àyíká
# Ṣẹ̀dá .env rẹ láti inú àdàkọ
cp .env.example .env
# Ṣẹ̀dá àwọn aṣírí tó pọndandan
echo "JWT_SECRET=$(openssl rand -base64 48)" >> .env
echo "API_KEY_SECRET=$(openssl rand -hex 32)" >> .env
Àwọn àyípadà pàtàkì fún ìdàgbàsókè:
| Àyípadà | Ìpìlẹ̀ Ìdàgbàsókè | Àpèjúwe |
|---|---|---|
PORT |
20128 |
Pọ́ọ̀tù olupin |
NEXT_PUBLIC_BASE_URL |
http://localhost:20128 |
URL ìpìlẹ̀ fún frontend |
JWT_SECRET |
(ṣẹ̀dá lókè) | Aṣírí ìfọwọ́sí JWT |
INITIAL_PASSWORD |
CHANGEME |
Ọ̀rọ̀ aṣínà ìwọlé àkọ́kọ́ |
APP_LOG_LEVEL |
info |
Ìpele àlàyé àkọsílẹ̀ |
Àwọn Ìṣètò Dásíbọ́ọ̀dù
Dásíbọ́ọ̀dù náà pèsè àwọn bọ́tìnì yíyí UI fún àwọn ẹ̀ya tí a tún lè ṣètò nípasẹ̀ àwọn àyípadà àyíká:
| Ibi Ìṣètò | Bọ́tìnì Yíyí | Àpèjúwe |
|---|---|---|
| Settings → Advanced | Ipo Ìṣàtúnṣe Àṣìṣe | Mú àwọn àkọsílẹ̀ ìbéèrè àṣìṣe ṣiṣẹ́ (UI) |
| Settings → General | Ìfarahàn Sidebar | Fi àwọn abala sidebar hàn/pamọ́ |
A tọ́jú àwọn ìṣètò wọ̀nyí sínú ibi ìpamọ́ dátà, wọ́n sì máa ń dúró lẹ́yìn àwọn ìtunbẹ̀rẹ̀, nípa fífi àwọn iye ìpìlẹ̀ àyípadà àyíká sí ẹ̀gbẹ́ nígbà tí a bá ṣètò wọn.
Ṣíṣiṣẹ́ Ní Ẹ̀rọ Àdúgbò
# Ipo ìdàgbàsókè (àtúnrù aládàáṣiṣẹ́)
npm run dev
# Ìkọ́ fún ìmújáde
npm run build # next build → .build/next/ lẹ́yìn náà assembleStandalone → dist/
npm run start
# Ìkójọ backend/API-nìkan tó yára fún àwọn àyípadà olùkópa
npm run build:contributor
# Ìkọ́ ìtúsílẹ̀ (àtúnkọ́ mímọ́ + àmì ìṣọ́ HEAD — ó pọndandan fún ìmúṣiṣẹ́)
npm run build:release # rm -rf .build dist && build + kọ dist/BUILD_SHA
# Ìṣètò pọ́ọ̀tù tó wọ́pọ̀
PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
Ìkọ́ olùkópa ń ṣe ìfọwọ́sí ìkójọ-nìkan: kì í kó ìpínkiri standalone jọ tàbí kọ́ àwọn ohun ìṣàkójọpọ̀ native àṣàyàn. Lo ìkọ́ ìmújáde déédéé nígbà tí ẹ bá nílò láti fọwọ́sí àkójọpọ̀ tí a lè pín kiri.
Ètò Àbájáde Ìkọ́
| Àpò-ìtọ́sọ́nà | Àkóónú | Títọpinpin |
|---|---|---|
src/ |
Orísun ìṣàfilọ́lẹ̀ (TypeScript / TSX) | Bẹ́ẹ̀ni |
.build/ |
Àwọn àbájáde àárín — àbájáde next build (gitignored, distDir = .build/next) |
Rárá |
dist/ |
Àkójọpọ̀ tí a lè pín — èyí tí assembleStandalone kó jọ (gitignored) |
Rárá |
Ìlànà ìkọ́ náà jẹ́ ìgbésẹ̀ ẹyọ kan:
npm run build
└─ next build → .build/next/standalone (Àbájáde Next.js)
└─ assembleStandalone() (ń da standalone + static + public + àwọn ohun èlò native kọ)
└─ àbájáde: dist/ (server.js, .next/static/, public/, node_modules/)
npm run build:release tún kọ́kọ́ nu àwọn àpò-ìtọ́sọ́nà méjèèjì, ó sì kọ
dist/BUILD_SHA (= git rev-parse --short HEAD) gẹ́gẹ́ bí àmì ìṣọ́ ìdúróṣinṣin ìmúṣiṣẹ́.
npm run build:contributor ń lo àkóónú ìkọ́ backend-nìkan. Ó máa ń fi àwọn fáìlì UI dásíbọ́ọ̀dù
arọ́pò fún ìgbà díẹ̀ nígbà ìkọ́, ó pa àwọn olùdarí ọ̀nà API mọ́, ó sì dá àwọn fáìlì ojúlówó padà
lẹ́yìn ìkọ́ náà. Lo npm run build fún àwọn àyípadà tó kan UI dásíbọ́ọ̀dù tàbí fún
ìfọwọ́sí ìtúsílẹ̀ ní kíkún; àkóónú olùkópa kì í ṣe arọ́pò fún ìkọ́ ìtúsílẹ̀.
Àkíyèsí ìmúṣiṣẹ́ VPS: àpò-ìtọ́sọ́nà àwòrán jíjìn
/usr/lib/node_modules/omniroute/app/kò yí padà. Àwọn ọgbọ́n ìmúṣiṣẹ́ ń lo rsync láti da àkóónúdist/sínú rẹ̀. Ọ̀nà àbájáde ìkọ́ inú ibi ìpamọ́ kóòdù nìkan ló yí padà (app/→dist/).
Àwọn URL ìpìlẹ̀:
- Dásíbọ́ọ̀dù:
http://localhost:20128/dashboard - API:
http://localhost:20128/v1
Ìṣàn-iṣẹ́ Git
⚠️ MÁ ṢE commit tààrà sí
mainLÁÉ. Máa lo àwọn ẹ̀ka feature ní gbogbo ìgbà.Ìpìlẹ̀ PR: dojú kọ ẹ̀ka
release/vX.Y.Ztó ń ṣiṣẹ́ lọ́wọ́ (kì í ṣemain). Wodocs/ops/BRANCHING_MODEL.mdfún àwòṣe release-fún-ẹ̀ka-kọ̀ọ̀kan + tag-nígbà-fífi-ránṣẹ́.
# Ṣẹ̀dá ẹ̀ka láti orí release tó ń ṣiṣẹ́ lọ́wọ́ (àpẹẹrẹ: release/v3.8.49)
git fetch origin
git checkout -b feat/your-feature-name origin/release/v3.8.49
# ... ṣe àwọn àyípadà ...
git commit -m "feat: describe your change"
git push -u origin feat/your-feature-name
# Ṣí Pull Request kan pẹ̀lú base = release/v3.8.49
Ìsọlórúkọ Ẹ̀ka
| Ìṣáájú | Ète |
|---|---|
feat/ |
Àwọn ẹ̀yà tuntun |
fix/ |
Àwọn àtúnṣe àṣìṣe |
refactor/ |
Àtúntò kóòdù |
docs/ |
Àwọn àyípadà àkọsílẹ̀ |
test/ |
Àfikún/àtúnṣe ìdánwò |
chore/ |
Irinṣẹ́, CI, àwọn ìgbẹ́kẹ̀lé |
Àwọn Ìfiránṣẹ́ Commit
Tẹ̀lé 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
Àwọn 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.
Ṣíṣe Àwọn Ìdánwò
# Gbogbo ìdánwò (unit + vitest + ecosystem + e2e)
npm run test:all
# Fáìlì ìdánwò kan ṣoṣo (ẹ̀rọ ìṣiṣẹ́ ìdánwò abinibi Node.js — èyí ni ọ̀pọ̀ ìdánwò ń lò)
node --import tsx/esm --test tests/unit/your-file.test.ts
# Àwọn ìdánwò unit tí àyípadà rẹ kan nìkan (TIA selector kan náà bí ẹnu-ọ̀nà CI, #8084)
npm run test:scoped # àwọn àyípadà nínú commit tó kọjá (tàbí igi iṣẹ́)
npm run test:scoped:staged # àwọn àyípadà staged nìkan — ó bá ìṣiṣẹ́ pre-commit mu dáadáa
npm run test:scoped:full # kọ́ àwòrán import-graph náà padà kọ́kọ́ (lẹ́yìn fífi fáìlì kún un/gbigbé àwọn fáìlì)
# Exit 1 + "run the full suite" túmọ̀ sí pé fáìlì hub kan (tsconfig, package.json, …) tàbí
# orísun tí kò sí lórí àwòrán yí padà — selector náà máa ń kùnà láìléwu, kì í fo ohun kankan ní ìkọ̀kọ̀.
# Vitest (sáfà MCP, autoCombo, cache)
npm run test:vitest
# Àwọn ìdánwò E2E (ń béèrè Playwright)
npm run test:e2e
# E2E àwọn client protocol (àwọn transport MCP, A2A)
npm run test:protocols:e2e
# Àwọn ìdánwò ìbámu ecosystem
npm run test:ecosystem
# Ẹnu-ọ̀nà coverage: 60% statements/lines/functions/branches
npm run test:coverage
npm run coverage:report
# Àyẹ̀wò lint + format
npm run lint
npm run check
# Ìdánwò combo smoke real-upstream tí a fi ẹnu-ọ̀nà dáàbò bo (ń béèrè ààyè sí VPS + kirẹ́díìtì provider gidi)
# Ó kan àwọn provider GIDI — ó ná díẹ̀. KÌ Í ṣiṣẹ́ nínú CI LÁÉ. Ó máa fo lọ́nà tó bójú mu láìsí ẹnu-ọ̀nà náà.
# Ohun tí a nílò: ààyè ssh root@192.168.0.15 (ó ń gba snapshot DB kíkà-nìkan láti VPS).
RUN_COMBO_LIVE=1 npm run test:combo:live
# Ìdánwò smoke VPS live Phase-3 — àwọn script Node ESM lásán, wọ́n kan sáfà .15 live tààrà.
# Ó nílò: ààyè ssh root@192.168.0.15 (a ń ṣẹ̀dá/tú àwọn combo ká nípasẹ̀ SSH sqlite).
# Ó kan àwọn provider GIDI (owó díẹ̀). Ó ṣẹ̀dá/pa àwọn combo __live_test__* nìkan. KÌ Í ṣiṣẹ́ nínú CI LÁÉ.
# REQUIRE_API_KEY=false lórí .15 nítorí náà kò nílò API key, ṣùgbọ́n ó bọ̀wọ̀ fún COMBO_LIVE_BASE_URL / COMBO_LIVE_API_KEY bí a bá ṣètò wọn.
npm run test:combo:live:vps # àwọn scenario HTTP 7 (priority/round-robin/weighted/cost/fusion/auto + health)
npm run test:combo:live:vps:failover # ó ṣàfikún scenario failover cross-provider gidi kan (8 lápapọ̀)
Àwọn àkíyèsí coverage:
npm run test:coverageń díwọ̀n coverage orísun fún àkójọpọ̀ ìdánwò unit àkọ́kọ́, ó yọtests/**kúrò, ó sì fiopen-sse/**kún un- Àwọn Pull Request gbọ́dọ̀ jẹ́ kí ẹnu-ọ̀nà coverage wà ní 60%+ fún statements/lines/functions/branches
- Bí PR kan bá yí kóòdù production padà nínú
src/,open-sse/,electron/, tàbíbin/, ó gbọ́dọ̀ ṣàfikún tàbí ṣàfikún sí àwọn ìdánwò aládàáṣiṣẹ́ nínú PR kan náà npm run coverage:reportń tẹ̀ jáde ìròyìn fáìlì-kọ̀ọ̀kan tó kún fún ìṣiṣẹ́ coverage tuntun jù lọnpm run test:coverage:legacyń pa metric àtijọ́ mọ́ fún ìfiwéra ìtàn- Wo
docs/ops/COVERAGE_PLAN.mdfún ètò-ọ̀nà ìmúdára coverage ní ipele-ìpele
Àwọn Ohun Tí Pull Request Gbọ́dọ̀ Ní
Kí o tó ṣí PR kan, lo Contribution Golden Path láti ṣiṣẹ́ loop tó dojú kọ ohun tí o yí padà. Gbogbo àkójọpọ̀ unit (àwọn shard CI 4), Vitest, ẹnu-ọ̀nà coverage 60%+, àti build production jẹ́ ojúṣe CI — ṣíṣe wọn ní local kò fi àmì tuntun kankan kún ohun tí àwọn àyẹ̀wò PR kò ní fún ọ tẹ́lẹ̀, àti pé lórí àwọn ẹ̀rọ kékeré ó lè mú kí host kún rẹ́rẹ́ (#8084):
- Ṣiṣẹ́ àwọn fáìlì ìdánwò tó bo àyípadà rẹ:
node --import tsx/esm --test tests/unit/<file>.test.ts - Ṣiṣẹ́
npm run lint - Fi àwọn ìdánwò aládàáṣiṣẹ́ kún un tàbí ṣàfikún sí wọn nínú PR kan náà ní gbogbo ìgbà tí kóòdù production bá yí padà
- Fi àwọn fáìlì ìdánwò tí a yí padà tàbí tí a ṣàfikún sí àpèjúwe PR nígbà tí kóòdù production bá yí padà
- Ṣàyẹ̀wò àbájáde SonarQube lórí PR nígbà tí a bá ti ṣètò àwọn àṣírí project nínú CI
Ipò ìdánwò lọ́wọ́lọ́wọ́: àwọn fáìlì ìdánwò unit 122 tó bo:
- Àwọn translator provider àti ìyípadà format
- Rate limiting, circuit breaker, àti resilience
- Semantic cache, idempotency, àti títọpa progress
- Àwọn iṣẹ́ database àti schema (àwọn module DB 21)
- Àwọn ìṣàn OAuth àti authentication
- Ìfọwọ́sí endpoint API (Zod v4)
- Àwọn irinṣẹ́ sáfà MCP àti fífi scope múlò
- Àwọn ètò Memory àti Skills
Ìlànà Kóòdù
- ESLint — Ṣe
npm run lintkí o tó commit - Prettier — A máa ṣe àtúnṣe fòórùmù laifọwọyi nípasẹ̀
lint-stagednígbà commit (ààyè 2, semicolons, double quotes, ìbú àmì-ọ̀rọ̀ 100, es5 trailing commas) - TypeScript — Gbogbo kóòdù inú
src/lo.ts/.tsx;open-sse/lo.ts/.js; ṣe àkọsílẹ̀ pẹ̀lú TSDoc (@param,@returns,@throws) - Má ṣe lo
eval()— ESLint fi agbára múno-eval,no-implied-eval,no-new-func - Ìfọwọ́sí Zod — Lo àwọn schema Zod v4 fún ìfọwọ́sí gbogbo ìwọlé API
- Ìsọlórúkọ: Àwọn fáìlì = camelCase/kebab-case, àwọn component = PascalCase, àwọn constant = UPPER_SNAKE
Ìṣàkóso àṣìṣe / àwọn bulọ́ọ̀kù catch tí ó ṣófo
Má ṣe fi catch sílẹ̀ láìṣàlàyé láéláé. Pín in sí ọ̀kan nínú ẹ̀ka méjì (èyí ń sọ
òfin líle náà di ohun tí a lè lò pé “má ṣe gbé àwọn àṣìṣe inú àwọn stream SSE mì ní ìdákẹ́jẹ láéláé”):
-
Àfọ̀mọ́ (ìmọ́tótó/telemetry best-effort tiwa fúnra wa) — a retí ìkùnà níbí, kò sì léwu; ṣàfikún comment ìdáláre onílà-kan, láìsí logging (logging lórí gbogbo request ni ariwo tí àṣà yìí ń yẹra fún).
} catch {} // a retí pípa controller tí a ti pa tẹ́lẹ̀ lẹ́yìn tí client bá já asopọ̀ -
Ó yẹ kí a ṣe log rẹ̀ (kóòdù láti ìta/tí caller pèsè, tàbí gbígbé e mì bá yí control flow padà) — fi catch náà sílẹ̀ (má ṣe jẹ́ kí ó ba stream náà jẹ́ láéláé), ṣùgbọ́n ṣe
console.debug/warnpẹ̀lú ọ̀rọ̀ àyíká kí ìkùnà náà lè ṣeé ṣàwárí.} catch (e) { console.debug("[STREAM] àṣìṣe callback onFailure:", e); }
Wo open-sse/utils/stream.ts àti open-sse/utils/streamHandler.ts fún àwọn àpẹẹrẹ tí a ti lò.
Ìṣètò Project
src/ # TypeScript (.ts / .tsx)
├── app/ # Next.js 16 App Router
│ ├── (dashboard)/ # Àwọn ojú-ewé dashboard (ẹ̀ka 23)
│ ├── api/ # Àwọn route API (directory 51)
│ └── login/ # Àwọn ojú-ewé ìfàṣẹ̀sí (.tsx)
├── domain/ # Ẹ̀rọ policy (policyEngine, comboResolver, costRules, àti bẹ́ẹ̀ bẹ́ẹ̀ lọ)
├── lib/ # Kókó business logic (.ts)
│ ├── a2a/ # Server protocol Agent-to-Agent v0.3
│ ├── acp/ # Registry Agent Communication Protocol
│ ├── compliance/ # Ẹ̀rọ policy ìbámu
│ ├── db/ # Àwọn module domain SQLite + migration 130
│ ├── memory/ # Iranti ìjíròrò tí ó dúró pẹ́
│ ├── oauth/ # Àwọn provider OAuth, service, àti utility
│ ├── skills/ # Framework skill tí a lè mú gbòòrò sí i
│ ├── usage/ # Ìtọ́pa lílò àti ìṣírò iye owó
│ └── localDb.ts # Layer àtún-gbé-jáde nìkan — má ṣe ṣàfikún logic síbí láéláé
├── middleware/ # Middleware request (promptInjectionGuard)
├── mitm/ # Proxy MITM (cert, DNS, ìdarí target)
├── shared/
│ ├── components/ # Àwọn component React (.tsx)
│ ├── constants/ # Àwọn ìtumọ̀ provider (329), àwọn scope MCP, ọ̀nà ìdarí 19
│ ├── utils/ # Circuit breaker, sanitizer, àwọn olùrànlọ́wọ́ auth
│ └── validation/ # Àwọn schema Zod v4
└── sse/ # Pipeline proxy SSE
open-sse/ # Workspace @omniroute/open-sse
├── executors/ # Module ìmúlò executor 89
├── handlers/ # Olùṣàkóso request 11 (chat, responses, embeddings, images, àti bẹ́ẹ̀ bẹ́ẹ̀ lọ)
├── mcp-server/ # Server MCP (irinṣẹ́ aláìlẹ́ẹ̀mejì 110, transport 3, scope 33)
├── services/ # Service ipele-òkè 178 (combo, autoCombo, rateLimitManager, àti bẹ́ẹ̀ bẹ́ẹ̀ lọ)
├── translator/ # Àwọn olùtumọ̀ format (OpenAI ↔ Claude ↔ Gemini ↔ Responses ↔ Ollama)
├── transformer/ # Transformer Responses API
└── utils/ # Module utility 22 (stream, TLS, proxy, logging)
electron/ # App desktop Electron (oríṣiríṣi platform)
tests/
├── unit/ # Olùṣiṣẹ́ test Node.js (fáìlì test 1,574)
├── integration/ # Àwọn test integration
├── e2e/ # Àwọn test Playwright
├── security/ # Àwọn test ààbò
├── translator/ # Àwọn test pàtó fún translator
└── load/ # Àwọn test ẹrù
docs/
├── adr/ # Àwọn Àkọsílẹ̀ Ìpinnu Architecture
├── architecture/ # Architecture ètò àti agbára ìfaradà
├── comparison/ # OmniRoute pẹ̀lú àwọn àṣàyàn mìíràn
├── compression/ # Àwọn ìtọ́sọ́nà àti òfin compression
├── dev/ # Àwọn ìtọ́sọ́nà development
├── diagrams/ # Àwọn àwòrán architecture
├── frameworks/ # MCP, A2A, OpenCode, Memory, Skills
├── guides/ # Ìtọ́sọ́nà olumulo, Docker, setup, ìyanjú ìṣòro
├── i18n/ # Àwọn ìtumọ̀ README sí onírúurú èdè
├── marketing/ # Àwọn ohun èlò marketing
├── ops/ # Deployment, proxy, coverage, releases
├── providers/ # Àwọn doc pàtó fún provider
├── reference/ # Ìtọ́kasí API, env vars, àwọn irinṣẹ́ CLI, free tiers
├── releases/ # Àwọn àkọsílẹ̀ release
├── routing/ # Ẹ̀rọ auto-combo, àtúnṣeré reasoning
├── screenshots/ # Àwọn screenshot dashboard
├── security/ # Guardrails, compliance, stealth, tokens
└── specs/ # Àwọn spec design
Fí Olùpèsè Tuntun Kún Un
Ìgbésẹ̀ 1: Forúkọsílẹ̀ Àwọn Àìyípadà Olùpèsè
Fi kún src/shared/constants/providers.ts — Zod yóò fìdí rẹ̀ múlẹ̀ nígbà tí module bá ń ṣiṣẹ́.
Ìgbésẹ̀ 2: Fi Executor Kún Un (bí ọgbọ́n àkànṣe bá ṣe pàtàkì)
Ṣẹ̀dá executor sínú open-sse/executors/your-provider.ts tí yóò jogún láti inú executor ìpìlẹ̀.
Ìgbésẹ̀ 3: Fi Translator Kún Un (bí kì í bá ṣe ọ̀nà-àgbékalẹ̀ OpenAI)
Ṣẹ̀dá àwọn translator fún request/response sínú open-sse/translator/.
Ìgbésẹ̀ 4: Fi Àtòpọ̀ OAuth Kún Un (bí ó bá dá lórí OAuth)
Fi àwọn ẹ̀rí ìdánimọ̀ OAuth kún src/lib/oauth/constants/oauth.ts àti service sínú src/lib/oauth/services/.
Bí olùpèsè upstream bá ń pín OAuth client_id/secret ti gbogbo ènìyàn tàbí kọ́kọ́rọ́ Firebase Web API kan sínú CLI gbogbogbò tàbí bundle browser rẹ̀, má ṣe fi sínú kóòdù gẹ́gẹ́ bí string literal. Lo resolvePublicCred() láti open-sse/utils/publicCreds.ts, kí o sì fi àkọsílẹ̀ byte tí a bo mọ́lẹ̀ kún EMBEDDED_DEFAULTS. A ṣàkọsílẹ̀ gbogbo ìlànà iṣẹ́ tó jẹ́ dandan sínú docs/security/PUBLIC_CREDS.md.
Nínú àwọn handler/executor, àwọn ìfiránṣẹ́ àṣìṣe tí yóò dé ọ̀dọ̀ client gbọ́dọ̀ gba inú buildErrorBody() / sanitizeErrorMessage() láti open-sse/utils/error.ts kọjá — má ṣe fi err.stack tàbí err.message aláìṣe-àtúnṣe sínú body Response láé. Wo docs/security/ERROR_SANITIZATION.md.
Ìgbésẹ̀ 5: Forúkọsílẹ̀ Àwọn Model
Fi àwọn ìtumọ̀ model kún open-sse/config/providerRegistry.ts.
Ìgbésẹ̀ 6: Fi Àwọn Ìdánwò Kún Un
Kọ àwọn unit test sínú tests/unit/ tí yóò kéré tán bo:
- Ìforúkọsílẹ̀ olùpèsè
- Ìtumọ̀ request/response
- Ìṣàkóso àṣìṣe
Àtòjọ Àyẹ̀wò Pull Request
- Àwọn ìdánwò kọjá (
npm test) - Linting kọjá (
npm run lint) - Build ṣàṣeyọrí (
npm run build) - A fi àwọn type TypeScript kún un fún àwọn function àti interface gbogbogbò tuntun
- Kò sí secret tàbí iye fallback tí a kọ sínú kóòdù
- A fi àwọn ẹ̀rí ìdánimọ̀ upstream gbogbogbò sínú kóòdù nípasẹ̀
resolvePublicCred()(wodocs/security/PUBLIC_CREDS.md), kì í ṣe gẹ́gẹ́ bí literal láé - Àwọn ìdáhùn àṣìṣe gba inú
buildErrorBody()/sanitizeErrorMessage()kọjá — kò sí stack trace aláìṣe-àtúnṣe nínú body ìdáhùn (wodocs/security/ERROR_SANITIZATION.md) - Àwọn àṣẹ shell (
exec/spawn) ń fi àwọn iye runtime ránṣẹ́ nípasẹ̀env, kì í ṣe nípasẹ̀ string interpolation - A fìdí gbogbo àwọn input múlẹ̀ pẹ̀lú schema Zod
- A fi fragment changelog kún abẹ́
changelog.d/{features|fixes|maintenance}/<PR>-<slug>.mdfún àwọn àyípadà tí olumulo yóò rí (wochangelog.d/README.md) — má ṣe ṣàtúnṣeCHANGELOG.mdní tààrà; a máa ń kó àwọn fragment jọ nígbà release, wọn kì í sì í fa ìtakora láàárín àwọn PR láé - A ṣe àfikún sí àkọsílẹ̀ ìtọ́sọ́nà (bí ó bá yẹ)
- Kò sí ìkìlọ̀ CodeQL / Secret-Scanning tuntun tí a ṣí, tàbí a kọ ọ̀kọ̀ọ̀kan sílẹ̀ pẹ̀lú ìdáláre ìmọ̀-ẹ̀rọ tó tọ́ka sí doc tó bá a mu nínú
docs/security/ - Àwọn route tí ń dá child process sílẹ̀ (
/api/mcp/,/api/cli-tools/runtime/) ni a pín síisLocalOnlyPath()nínúsrc/server/authz/routeGuard.ts— wo Òfin Líle #15 - Kò sí trailer
Co-Authored-Bynínú àwọn ìfiránṣẹ́ commit — àwọn commit gbọ́dọ̀ farahàn lábẹ́ Git identity olówó repository nìkan (Òfin Líle #16)
Ṣíṣe Ìtújáde
A ń ṣàkóso àwọn ìtújáde nípasẹ̀ workflow /generate-release. Nígbà tí a bá ṣẹ̀dá GitHub Release tuntun, a máa ṣe àtẹ̀jáde package náà sí npm láìfọwọ́ṣe nípasẹ̀ GitHub Actions.
Fún ìmúṣiṣẹ́ lórí VPS, lo npm run build:release (kì í ṣe npm run build) — ó máa ń ṣe
àtúnkọ́ tó mọ́, kó bundle náà jọ sínú dist/, ó sì kọ sentinel dist/BUILD_SHA.
Lẹ́yìn náà, lo àwọn skill /deploy-vps-*-cc tí ó máa ń lo rsync láti fi dist/ sí directory app/ tó wà lórí ẹ̀rọ jíjìn.
Bí A Ṣe Lè Rí Ìrànlọ́wọ́
- Àwòrán-ẹ̀rọ: Wo
docs/architecture/ARCHITECTURE.md - Ìtọ́kasí API: Wo
docs/reference/API_REFERENCE.md - Àwọn ìwé ààbò:
docs/security/CLI_TOKEN.md,docs/security/ROUTE_GUARD_TIERS.md,docs/security/ERROR_SANITIZATION.md,docs/security/PUBLIC_CREDS.md - Àwọn ìwé iṣẹ́-ìṣàkóso:
docs/ops/SQLITE_RUNTIME.md - Àwọn ìṣòro: github.com/diegosouzapw/OmniRoute/issues
- Àwọn ADR: Wo
docs/adr/fún àwọn àkọsílẹ̀ ìpinnu àwòrán-ẹ̀rọ