🌐 Languages: 🇺🇸 English · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇧🇦 bs · 🇨🇿 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
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ው በአካባቢ ተለዋዋጮችም ሊዋቀሩ ለሚችሉ ባህሪያት የ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 ይጠቀሙ።
| ማውጫ | ይዘቶች | በ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
⚠️ በፍጹም በቀጥታ ወደ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 ይክፈቱ| Prefix | ዓላማ |
|---|---|
feat/ |
አዳዲስ ባህሪያት |
fix/ |
የስህተት ማስተካከያዎች |
refactor/ |
የኮድ መዋቅር ማሻሻያ |
docs/ |
የሰነድ ለውጦች |
test/ |
የሙከራ ጭማሪዎች/ማስተካከያዎች |
chore/ |
መሣሪያዎች፣ CI፣ ጥገኛ ጥቅሎች |
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ን ይመልከቱ
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 ያለማብራሪያ ፈጽሞ አይተዉ። ከሁለት ምድቦች በአንዱ ይመድቡት (ይህም
“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/ # የንድፍ ዝርዝር መግለጫዎች
ወደ src/shared/constants/providers.ts ያክሉ — ሞጁሉ ሲጫን በZod የሚረጋገጥ።
መሠረታዊውን executor የሚያራዝም executor በopen-sse/executors/your-provider.ts ውስጥ ይፍጠሩ።
የጥያቄ/ምላሽ translators በopen-sse/translator/ ውስጥ ይፍጠሩ።
የ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ን ይመልከቱ።
የmodel ትርጓሜዎችን በopen-sse/config/providerRegistry.ts ውስጥ ያክሉ።
ቢያንስ የሚከተሉትን የሚሸፍኑ unit tests በtests/unit/ ውስጥ ይጻፉ፦
- የአቅራቢ ምዝገባ
- የጥያቄ/ምላሽ ትርጉም
- የስህተት አያያዝ
- 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/ይመልከቱ