1,104 mirrors rewritten over five passes of run-translation on the 22-source core set: the 14 sources edited since their translation, the 322 mirrors that were still English copies, and the frontmatter the old extractor leaked into the newer locales' bodies. The pipeline now caches per-`## `-section hashes and retranslates only changed sections, never reuses a section that is still English, rebuilds English-copy / leaked mirrors even when the source is unchanged, merges the state on save (parallel runs), and the drift gate (scoped to the core set) is blocking. Final audit: 0 stale, 0 English copies, 0 leaked frontmatter across 1,430 core mirrors. ⚠️ base-red inherited: #12732
28 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 · 🇲🇲 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 · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Thank you for your interest in contributing! This guide covers everything you need to get started.
ڈیولپمنٹ سیٹ اپ
پیشگی ضروریات
- Node.js
>=22.22.3 <23، یا>=24.0.0 <27(تجویز کردہ: 24 LTS) - npm 10+
npm v11+ صارفین (Node 24+):
npm installکے بعد تصدیق کریں کہ مقامی ماڈیولز انسٹال ہو گئے ہیں: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 |
فرنٹ اینڈ کا بنیادی URL |
JWT_SECRET |
(اوپر تیار کریں) | JWT دستخطی راز |
INITIAL_PASSWORD |
CHANGEME |
پہلے لاگ اِن کا پاس ورڈ |
APP_LOG_LEVEL |
info |
لاگ کی تفصیل کی سطح |
ڈیش بورڈ کی ترتیبات
ڈیش بورڈ ان خصوصیات کے لیے UI ٹوگلز فراہم کرتا ہے جنہیں ماحولیاتی متغیرات کے ذریعے بھی ترتیب دیا جا سکتا ہے:
| ترتیب کا مقام | ٹوگل | تفصیل |
|---|---|---|
| ترتیبات → اعلیٰ اختیارات | ڈیبگ موڈ | ڈیبگ درخواست لاگز فعال کریں (UI) |
| ترتیبات → عمومی | سائڈبار کی مرئیت | سائڈبار کے حصے دکھائیں/چھپائیں |
یہ ترتیبات ڈیٹابیس میں محفوظ ہوتی ہیں اور دوبارہ شروع ہونے کے بعد بھی برقرار رہتی ہیں، اور مقرر ہونے کی صورت میں env var کی طے شدہ اقدار کو اوور رائیڈ کرتی ہیں۔
مقامی طور پر چلانا
# ڈیولپمنٹ موڈ (ہاٹ ری لوڈ)
npm run dev
# پروڈکشن بلڈ
npm run build # next build → .build/next/ پھر assembleStandalone → dist/
npm run start
# کنٹریبیوٹر تبدیلیوں کے لیے تیز رفتار صرف بیک اینڈ/API کمپائلیشن
npm run build:contributor
# ریلیز بلڈ (صاف دوبارہ بلڈ + HEAD سینٹینل — ڈیپلائے کے لیے ضروری)
npm run build:release # rm -rf .build dist && build + dist/BUILD_SHA لکھتا ہے
# عام پورٹ کنفیگریشن
PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
کنٹریبیوٹر بلڈ صرف کمپائلیشن کی توثیق انجام دیتا ہے: یہ اسٹینڈ الون ڈسٹری بیوشن کو اسمبل یا اختیاری مقامی پیکیجنگ اثاثوں کو بلڈ نہیں کرتا۔ جب آپ کو قابلِ ترسیل بنڈل کی توثیق کرنی ہو تو باقاعدہ پروڈکشن بلڈ استعمال کریں۔
بلڈ آؤٹ پٹ کی ساخت
| ڈائریکٹری | مندرجات | ٹریک شدہ |
|---|---|---|
src/ |
ایپلیکیشن سورس (TypeScript / TSX) | ہاں |
.build/ |
درمیانی فائلیں — next build آؤٹ پٹ (gitignored، distDir = .build/next) |
نہیں |
dist/ |
قابلِ ترسیل بنڈل — assembleStandalone کے ذریعے اسمبل کردہ (gitignored) |
نہیں |
بلڈ پائپ لائن ایک ہی پاس پر مشتمل ہے:
npm run build
└─ next build → .build/next/standalone (Next.js آؤٹ پٹ)
└─ assembleStandalone() (اسٹینڈ الون + static + public + مقامی اثاثے کاپی کرتا ہے)
└─ آؤٹ پٹ: dist/ (server.js, .next/static/, public/, node_modules/)
npm run build:release پہلے دونوں ڈائریکٹریز بھی صاف کرتا ہے اور ڈیپلائے کی سالمیت کے سینٹینل کے طور پر
dist/BUILD_SHA (= git rev-parse --short HEAD) لکھتا ہے۔
npm run build:contributor صرف بیک اینڈ والا بلڈ پروفائل استعمال کرتا ہے۔ یہ بلڈ کے دوران عارضی طور پر
ڈیش بورڈ UI فائلوں کے اسٹب بناتا ہے، API روٹ ہینڈلرز برقرار رکھتا ہے، اور بلڈ کے بعد اصل فائلیں
بحال کر دیتا ہے۔ ڈیش بورڈ UI کو متاثر کرنے والی تبدیلیوں یا مکمل ریلیز کی توثیق کے لیے npm run build
استعمال کریں؛ کنٹریبیوٹر پروفائل ریلیز بلڈ کا متبادل نہیں ہے۔
VPS ڈیپلائے نوٹ: ریموٹ امیج ڈائریکٹری
/usr/lib/node_modules/omniroute/app/میں کوئی تبدیلی نہیں ہوئی۔ ڈیپلائے اسکلزdist/کے مندرجات کو rsync کے ذریعے اس میں منتقل کرتی ہیں۔ صرف ریپوزٹری کے اندر بلڈ آؤٹ پٹ کا پاتھ تبدیل ہوا (app/→dist/)۔
طے شدہ URLs:
- ڈیش بورڈ:
http://localhost:20128/dashboard - API:
http://localhost:20128/v1
Git ورک فلو
⚠️ کبھی بھی براہِ راست
mainمیں commit نہ کریں۔ ہمیشہ feature branches استعمال کریں۔PR کی بنیاد: فعال
release/vX.Y.Zبرانچ کو ہدف بنائیں (mainکو نہیں)۔ ہر ریلیز کے لیے علیحدہ برانچ + شپ کرتے وقت tag کے ماڈل کے لیےdocs/ops/BRANCHING_MODEL.mdدیکھیں۔
# فعال ریلیز کے تازہ ترین سرے سے برانچ بنائیں (مثال: 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 کھولیں
برانچ کا نام رکھنا
| سابقہ | مقصد |
|---|---|
feat/ |
نئی خصوصیات |
fix/ |
بگ کی اصلاحات |
refactor/ |
کوڈ کی تنظیمِ نو |
docs/ |
دستاویزات میں تبدیلیاں |
test/ |
ٹیسٹس میں اضافے/اصلاحات |
chore/ |
ٹولنگ، CI، dependencies |
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
دائرۂ کار (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۔
ٹیسٹس چلانا
# تمام ٹیسٹس (یونٹ + vitest + ایکوسسٹم + e2e)
npm run test:all
# ایک ٹیسٹ فائل (Node.js کا مقامی ٹیسٹ رنر — زیادہ تر ٹیسٹس یہی استعمال کرتے ہیں)
node --import tsx/esm --test tests/unit/your-file.test.ts
# صرف وہ یونٹ ٹیسٹس جو آپ کی تبدیلی سے متاثر ہوئے ہیں (CI گیٹ جیسا ہی TIA سلیکٹر، #8084)
npm run test:scoped # آخری commit (یا working tree) میں ہونے والی تبدیلیاں
npm run test:scoped:staged # صرف staged تبدیلیاں — pre-commit رن کے ساتھ بخوبی کام کرتا ہے
npm run test:scoped:full # پہلے import-graph میپ دوبارہ بنائیں (فائلیں شامل یا منتقل کرنے کے بعد)
# Exit 1 + "مکمل سوٹ چلائیں" کا مطلب ہے کہ کوئی مرکزی فائل (tsconfig، package.json، …) یا کوئی
# غیر نقشہ شدہ سورس تبدیل ہوا ہے — سلیکٹر محفوظ انداز میں ناکام ہوتا ہے، یہ کبھی خاموشی سے نظر انداز نہیں کرتا۔
# Vitest (MCP سرور، autoCombo، کیش)
npm run test:vitest
# E2E ٹیسٹس (Playwright درکار ہے)
npm run test:e2e
# پروٹوکول کلائنٹس E2E (MCP ٹرانسپورٹس، A2A)
npm run test:protocols:e2e
# ایکوسسٹم مطابقت کے ٹیسٹس
npm run test:ecosystem
# کوریج گیٹ: statements/lines/functions/branches کے لیے 60%
npm run test:coverage
npm run coverage:report
# Lint + فارمیٹ کی جانچ
npm run lint
npm run check
# گیٹ شدہ حقیقی upstream combo اسموک ٹیسٹ (VPS رسائی + حقیقی provider کریڈٹس درکار ہیں)
# حقیقی providers کو استعمال کرتا ہے — معمولی لاگت آتی ہے۔ CI میں کبھی نہیں چلتا۔ گیٹ کے بغیر صاف طور پر نظر انداز ہو جاتا ہے۔
# درکار ہے: ssh root@192.168.0.15 رسائی (VPS سے read-only DB snapshot حاصل کرتا ہے)۔
RUN_COMBO_LIVE=1 npm run test:combo:live
# Phase-3 VPS لائیو اسموک — سادہ Node ESM اسکرپٹس، براہِ راست لائیو .15 سرور کو استعمال کرتے ہیں۔
# درکار ہے: ssh root@192.168.0.15 رسائی (combos کو SSH sqlite کے ذریعے بنایا/ختم کیا جاتا ہے)۔
# حقیقی providers کو استعمال کرتا ہے (معمولی لاگت)۔ صرف __live_test__* combos بناتا/حذف کرتا ہے۔ CI میں کبھی نہیں چلتا۔
# .15 پر REQUIRE_API_KEY=false ہے، اس لیے API key درکار نہیں، لیکن سیٹ ہونے پر COMBO_LIVE_BASE_URL / COMBO_LIVE_API_KEY کا احترام کرتا ہے۔
npm run test:combo:live:vps # 7 HTTP منظرنامے (priority/round-robin/weighted/cost/fusion/auto + health)
npm run test:combo:live:vps:failover # ایک حقیقی cross-provider failover منظرنامہ شامل کرتا ہے (کل 8)
کوریج سے متعلق نوٹس:
npm run test:coverageمرکزی یونٹ ٹیسٹ سوٹ کی سورس کوریج ماپتا ہے،tests/**کو خارج کرتا ہے، اورopen-sse/**کو شامل کرتا ہے- Pull requests میں statements/lines/functions/branches کے لیے کوریج گیٹ 60%+ برقرار رہنا چاہیے
- اگر کوئی PR
src/،open-sse/،electron/، یاbin/میں production code تبدیل کرتا ہے، تو اسی PR میں خودکار ٹیسٹس شامل یا اپ ڈیٹ کرنا ضروری ہے npm run coverage:reportتازہ ترین کوریج رن کی تفصیلی، فائل بہ فائل رپورٹ دکھاتا ہےnpm run test:coverage:legacyتاریخی موازنے کے لیے پرانا میٹرک محفوظ رکھتا ہے- مرحلہ وار کوریج بہتری کے روڈمیپ کے لیے
docs/ops/COVERAGE_PLAN.mdدیکھیں
Pull Request کے تقاضے
PR کھولنے سے پہلے، اپنی تبدیلی کے لیے مرکوز عمل چلانے کی خاطر Contribution Golden Path استعمال کریں۔ مکمل یونٹ سوٹ (4 CI shards)، Vitest، 60%+ کوریج گیٹ، اور production build کی ذمہ داری CI کی ہے — انہیں مقامی طور پر چلانے سے ایسی کوئی اضافی مفید معلومات حاصل نہیں ہوتیں جو PR کی جانچ پہلے ہی فراہم نہ کرے، اور چھوٹی مشینوں پر یہ host کو مکمل طور پر مصروف کر سکتا ہے (#8084):
- اپنی تبدیلی کا احاطہ کرنے والی ٹیسٹ فائلیں چلائیں:
node --import tsx/esm --test tests/unit/<file>.test.ts npm run lintچلائیں- جب بھی production code تبدیل ہو، اسی PR میں خودکار ٹیسٹس شامل یا اپ ڈیٹ کریں
- production code تبدیل ہونے پر PR کی تفصیل میں تبدیل یا شامل کی گئی ٹیسٹ فائلیں درج کریں
- جب CI میں project secrets ترتیب دیے گئے ہوں تو PR پر SonarQube نتیجہ چیک کریں
موجودہ ٹیسٹ کی صورتِ حال: 122 یونٹ ٹیسٹ فائلیں جو درج ذیل کا احاطہ کرتی ہیں:
- Provider translators اور فارمیٹ کی تبدیلی
- Rate limiting، circuit breaker، اور resilience
- Semantic cache، idempotency، اور progress tracking
- Database operations اور schema (21 DB ماڈیولز)
- OAuth flows اور authentication
- API endpoint validation (Zod v4)
- MCP server tools اور scope enforcement
- Memory اور Skills سسٹمز
کوڈ کا انداز
- ESLint — commit کرنے سے پہلے
npm run lintچلائیں - Prettier — commit کے وقت
lint-stagedکے ذریعے خودکار طور پر فارمیٹ کیا جاتا ہے (2 spaces، semicolons، double quotes، 100 حروف کی چوڑائی، es5 trailing commas) - TypeScript — تمام
src/کوڈ.ts/.tsxاستعمال کرتا ہے؛open-sse/میں.ts/.jsاستعمال ہوتے ہیں؛ TSDoc (@param،@returns،@throws) کے ساتھ دستاویز کریں eval()ممنوع ہے — ESLint،no-eval،no-implied-eval،no-new-funcنافذ کرتا ہے- Zod validation — تمام API input validation کے لیے Zod v4 schemas استعمال کریں
- نام رکھنے کا طریقہ: فائلیں = camelCase/kebab-case، components = PascalCase، constants = UPPER_SNAKE
خرابیوں کو سنبھالنا / خالی catch blocks
کبھی بھی کسی catch کو بغیر وضاحت کے نہ چھوڑیں۔ اسے درج ذیل دو اقسام میں سے کسی ایک میں
درجہ بند کریں (یہ سخت اصول "SSE streams میں خرابیوں کو کبھی خاموشی سے نظر انداز نہ کریں"
کو عملی شکل دیتا ہے):
-
دانستہ (ہماری اپنی best-effort cleanup/telemetry) — یہاں ناکامی متوقع اور بے ضرر ہے؛ وجہ بتانے کے لیے ایک سطری comment شامل کریں، logging نہ کریں (ہر request پر logging سے پیدا ہونے والے شور سے یہ اصول بچاتا ہے)۔
} catch {} // کلائنٹ کے منقطع ہونے کے بعد پہلے سے بند controller کو بند کرنا متوقع ہے -
لاگ ہونا چاہیے (بیرونی/caller کی فراہم کردہ code، یا نظر انداز کرنے سے control flow تبدیل ہوتا ہو) —
catchبرقرار رکھیں (اسے کبھی stream میں خلل نہ ڈالنے دیں)، لیکن سیاق و سباق کے ساتھconsole.debug/warnجاری کریں تاکہ ناکامی کا پتا چل سکے۔} catch (e) { console.debug("[STREAM] onFailure callback میں خرابی:", e); }
عملی مثالوں کے لیے open-sse/utils/stream.ts اور open-sse/utils/streamHandler.ts دیکھیں۔
Project Structure
src/ # TypeScript (.ts / .tsx)
├── app/ # Next.js 16 App Router
│ ├── (dashboard)/ # Dashboard pages (23 sections)
│ ├── api/ # API routes (51 directories)
│ └── login/ # Auth pages (.tsx)
├── domain/ # Policy engine (policyEngine, comboResolver, costRules, etc.)
├── lib/ # Core business logic (.ts)
│ ├── a2a/ # Agent-to-Agent v0.3 protocol server
│ ├── acp/ # Agent Communication Protocol registry
│ ├── compliance/ # Compliance policy engine
│ ├── db/ # SQLite database layer (110 top-level modules + 130 migrations)
│ ├── memory/ # Persistent conversational memory
│ ├── oauth/ # OAuth providers, services, and utilities
│ ├── skills/ # Extensible skill framework
│ ├── usage/ # Usage tracking and cost calculation
│ └── localDb.ts # Re-export layer only — never add logic here
├── middleware/ # Request middleware (promptInjectionGuard)
├── mitm/ # MITM proxy (cert, DNS, target routing)
├── shared/
│ ├── components/ # React components (.tsx)
│ ├── constants/ # Provider definitions (329), MCP scopes, routing strategies
│ ├── utils/ # Circuit breaker, sanitizer, auth helpers
│ └── validation/ # Zod v4 schemas
└── sse/ # SSE proxy pipeline
open-sse/ # @omniroute/open-sse workspace
├── executors/ # 89 executor implementation modules
├── handlers/ # 11 request handlers (chat, responses, embeddings, images, etc.)
├── mcp-server/ # MCP server (107 tools, 3 transports, 32 scopes)
├── services/ # 178 top-level services (combo, autoCombo, rateLimitManager, etc.)
├── translator/ # Format translators (OpenAI ↔ Claude ↔ Gemini ↔ Responses ↔ Ollama)
├── transformer/ # Responses API transformer
└── utils/ # 22 utility modules (stream, TLS, proxy, logging)
electron/ # Electron desktop app (cross-platform)
tests/
├── unit/ # Node.js test runner (122 test files)
├── integration/ # Integration tests
├── e2e/ # Playwright tests
├── security/ # Security tests
├── translator/ # Translator-specific tests
└── load/ # Load tests
docs/ # Documentation
├── ARCHITECTURE.md # System architecture
├── API_REFERENCE.md # All endpoints
├── USER_GUIDE.md # Provider setup, CLI integration
├── TROUBLESHOOTING.md # Common issues
├── MCP-SERVER.md # MCP server (107 tools)
├── A2A-SERVER.md # A2A agent protocol
├── AUTO-COMBO.md # Auto-combo engine
├── CLI-TOOLS.md # CLI tools integration
├── COVERAGE_PLAN.md # Test coverage improvement plan
├── openapi.yaml # OpenAPI specification
└── adr/ # Architecture Decision Records
نیا پرووائیڈر شامل کرنا
مرحلہ 1: پرووائیڈر کانسٹینٹس رجسٹر کریں
src/shared/constants/providers.ts میں شامل کریں — ماڈیول لوڈ ہوتے وقت Zod کے ذریعے توثیق کی جاتی ہے۔
مرحلہ 2: ایگزیکیوٹر شامل کریں (اگر حسبِ ضرورت منطق درکار ہو)
بنیادی ایگزیکیوٹر کو وسعت دیتے ہوئے open-sse/executors/your-provider.ts میں ایگزیکیوٹر بنائیں۔
مرحلہ 3: ٹرانسلیٹر شامل کریں (اگر فارمیٹ OpenAI کا نہ ہو)
open-sse/translator/ میں درخواست/جواب کے ٹرانسلیٹر بنائیں۔
مرحلہ 4: OAuth کنفیگریشن شامل کریں (اگر OAuth پر مبنی ہو)
OAuth اسناد src/lib/oauth/constants/oauth.ts میں اور سروس src/lib/oauth/services/ میں شامل کریں۔
اگر اپ اسٹریم پرووائیڈر اپنے عوامی CLI / براؤزر بنڈل میں عوامی OAuth client_id/سیکرٹ یا Firebase Web API کلید تقسیم کرتا ہے، تو اسے اسٹرنگ لٹرل کے طور پر ہرگز شامل نہ کریں۔ open-sse/utils/publicCreds.ts سے resolvePublicCred() استعمال کریں اور EMBEDDED_DEFAULTS میں ماسک شدہ بائٹ اندراج شامل کریں۔ مکمل لازمی طریقۂ کار کی دستاویز docs/security/PUBLIC_CREDS.md میں موجود ہے۔
ہینڈلرز/ایگزیکیوٹرز کے اندر، کلائنٹ تک پہنچنے والے خرابی کے پیغامات کو open-sse/utils/error.ts سے buildErrorBody() / sanitizeErrorMessage() کے ذریعے گزارنا لازمی ہے — خام err.stack یا err.message کو کبھی بھی Response باڈی میں شامل نہ کریں۔ docs/security/ERROR_SANITIZATION.md دیکھیں۔
مرحلہ 5: ماڈلز رجسٹر کریں
open-sse/config/providerRegistry.ts میں ماڈل کی تعریفیں شامل کریں۔
مرحلہ 6: ٹیسٹس شامل کریں
tests/unit/ میں یونٹ ٹیسٹس لکھیں جو کم از کم درج ذیل کا احاطہ کریں:
- پرووائیڈر کی رجسٹریشن
- درخواست/جواب کی ترجمانی
- خرابیوں سے نمٹنا
پُل ریکویسٹ چیک لسٹ
- ٹیسٹ کامیاب ہوں (
npm test) - لنٹنگ کامیاب ہو (
npm run lint) - بلڈ کامیاب ہو (
npm run build) - نئے پبلک فنکشنز اور انٹرفیسز کے لیے TypeScript ٹائپس شامل کی گئی ہوں
- کوئی ہارڈ کوڈ کردہ راز یا فال بیک ویلیوز نہ ہوں
- پبلک اپ اسٹریم اسناد
resolvePublicCred()کے ذریعے شامل کی گئی ہوں (docs/security/PUBLIC_CREDS.mdدیکھیں)، کبھی بھی لٹریلز کی صورت میں نہیں - خرابی کے جوابات
buildErrorBody()/sanitizeErrorMessage()کے ذریعے بھیجے جائیں — جوابی باڈیز میں کوئی خام اسٹیک ٹریس نہ ہو (docs/security/ERROR_SANITIZATION.mdدیکھیں) - شیل کمانڈز (
exec/spawn) رن ٹائم ویلیوز کو اسٹرنگ انٹرپولیشن کے بجائےenvکے ذریعے پاس کریں - تمام اِن پٹس کی Zod اسکیماؤں کے ذریعے توثیق کی گئی ہو
- صارف کو متاثر کرنے والی تبدیلیوں کے لیے
changelog.d/{features|fixes|maintenance}/<PR>-<slug>.mdکے تحت چینج لاگ فریگمنٹ شامل کیا گیا ہو (changelog.d/README.mdدیکھیں) —CHANGELOG.mdمیں براہِ راست ترمیم نہ کریں؛ فریگمنٹس کو ریلیز کے وقت یکجا کیا جاتا ہے اور ان میں مختلف PRs کے درمیان کبھی تصادم نہیں ہوتا - دستاویزات اپ ڈیٹ کی گئی ہوں (اگر قابلِ اطلاق ہو)
- کوئی نیا CodeQL / Secret-Scanning الرٹ نہ کھولا گیا ہو، یا ہر الرٹ کو متعلقہ
docs/security/دستاویز کا حوالہ دینے والی تکنیکی توجیہ کے ساتھ مسترد کیا گیا ہو - چائلڈ پراسیسز شروع کرنے والے روٹس (
/api/mcp/،/api/cli-tools/runtime/) کوsrc/server/authz/routeGuard.tsمیںisLocalOnlyPath()کے طور پر درجہ بند کیا گیا ہو — سخت اصول #15 دیکھیں - کمٹ پیغامات میں
Co-Authored-Byٹریلرز نہ ہوں — کمٹس صرف ریپوزٹری مالک کی Git شناخت کے تحت ظاہر ہونے چاہییں (سخت اصول #16)
Releasing
Releases are managed via the /generate-release workflow. When a new GitHub Release is created, the package is automatically published to npm via GitHub Actions.
مدد حاصل کرنا
- آرکیٹیکچر:
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/دیکھیں