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
92 KiB
OmniRoute Codebase Documentation (فارسی)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇫🇮 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
نسخه: v3.8.51 آخرین بهروزرسانی: 2026-06-28 مخاطبان: مهندسانی که در توسعه OmniRoute مشارکت میکنند یا یکپارچهسازیهایی را بر بستر آن میسازند.
برای نمودارهای سطحبالای معماری و منطق پشت هر زیرسیستم، فایل ARCHITECTURE.md را مطالعه کنید. برای بررسی عمیق زیرسیستمهای مجزا (Auto Combo، سرور MCP، سرور A2A، Skills، Memory، Cloud Agents، Resilience، Compression و غیره)، فایلهای اختصاصی آنها را در این پوشه
docs/ببینید.
این فایل آنچه امروز در مخزن وجود دارد را شرح میدهد تا یک مهندس جدید بتواند در ساختار درختی پیمایش کند، لایهبندی زمان اجرا را درک کند و بداند کد را کجا اضافه کند، بدون آنکه ماژولهای جدیدی ابداع کند.
1. پشته فناوری
| موضوع | انتخاب |
|---|---|
| چارچوب وب | Next.js 16 (App Router، خروجی مستقل، بدون میانافزار سراسری) |
| زبان | TypeScript 6.0+ — هدف ES2022، module: esnext، moduleResolution: bundler، strict: false |
| زمان اجرا | Node.js >=22.22.2 <23 یا >=24.0.0 <27 (اعمالشده از طریق engines و SUPPORTED_NODE_RANGE) |
| پایگاه داده | SQLite از طریق better-sqlite3 (تکنمونه، ثبت وقایع WAL) |
| دسکتاپ | Electron 41 + electron-builder 26.10 (فضای کاری جداگانه در electron/) |
| آزمونها | اجراکننده آزمون بومی Node (واحد/یکپارچهسازی)، Vitest (MCP، autoCombo، کش)، Playwright (e2e + protocols-e2e) |
| ساخت | خروجی مستقل Next.js از طریق scripts/build/build-next-isolated.mjs |
| لینت/قالببندی | پیکربندی مسطح ESLint + Prettier (lint-staged از طریق پیشکامیت Husky) |
| سیستم ماژول | ESM در همهجا ("type": "module") |
| فضاهای کاری | فضای کاری npm — open-sse تنها زیرفضای کاری است |
نامهای مستعار مسیر (tsconfig.json):
@/*→src/*@omniroute/open-sse→open-sse/index.ts@omniroute/open-sse/*→open-sse/*
پورت پیشفرض HTTP: 20128 (API و داشبورد فرایند یکسانی را به اشتراک میگذارند). پوشه
دادهها متغیر محیطی DATA_DIR است که مقدار پیشفرض آن ~/.omniroute/ است.
2. ساختار مخزن
OmniRoute/
├── src/ برنامه Next.js (App Router، کتابخانهها، دامنه، سرور، اجزای مشترک)
├── open-sse/ فضای کاری موتور استریم (@omniroute/open-sse)
├── electron/ پوشش دسکتاپ (فرایند اصلی Electron 41 + preload)
├── bin/ نقاط ورود CLI (omniroute، reset-password)
├── tests/ آزمونهای واحد، یکپارچهسازی، e2e، protocols-e2e، مترجم، امنیت و دادههای آزمون
├── scripts/ اسکریپتهای کمکی ساخت، همگامسازی، بررسی، مهاجرت و زمان اجرا
├── docs/ مستندات عمومی (این پوشه)
├── public/ داراییهای ایستا، مانیفست PWA، سرویسورکر
├── config/ نمونههای پیکربندی زمان اجرا
├── images/ داراییهای بازاریابی/تصاویر صفحه
├── _ideia/, _references/, _mono_repo/, _tasks/ یادداشتهای موقت / برنامهریزی داخلی (توزیع نمیشوند)
├── CLAUDE.md قواعد مخزن برای Claude Code
├── AGENTS.md مرجع عمیقتر معماری برای عاملها
├── package.json v3.8.51، ریشه فضای کاری
└── tsconfig.json نامهای مستعار مسیر + گزینههای اصلی کامپایلر
3. src/ — برنامه Next.js
src/
├── app/ صفحات App Router و مسیرهای API
├── lib/ کتابخانههای اصلی (پایگاه داده، احراز هویت، OAuth، مهارتها، حافظه و غیره)
├── domain/ لایه دامنه خالص (سیاست، جایگزینی، هزینه، قفلشدن و غیره)
├── server/ ماژولهای مختص سرور (مجوزدهی، cors، احراز هویت)
├── shared/ نوعها، ثابتها، اعتبارسنجی، قراردادها و ابزارهای کمکی (ایمن برای استفاده در مرزهای مختلف)
├── mitm/ ابزارهای کمکی پروکسی مرد میانی برای یکپارچهسازی CLI
├── models/ فراداده مدلهای محلی / نامگذاری مستعار
├── sse/ کنترلکنندههای قدیمی SSE که همچنان در src/ قرار دارند (نه open-sse/)
├── store/ مخازن وضعیت سمت کلاینت
├── middleware/ ابزارهای میانافزار در سطح مسیر (نه میانافزار سراسری Next.js)
├── scripts/ اسکریپتهای دروندرختی قابل واردکردن توسط کد برنامه
├── types/ نوعهای محیطی و مشترک TS
├── i18n/ بستههای زبان
├── instrumentation.ts هوک ابزاربندی Next.js
├── instrumentation-node.ts
└── proxy.ts ابزار کمکی راهاندازی پروکسی سطح بالا
3.1 src/app/ — App Router
App Router هم رابط کاربری داشبورد و هم API عمومی/مدیریتی HTTP را ارائه میکند. هیچ میانافزار سراسریای وجود ندارد — رهگیری بهصورت مجزا برای هر مسیر انجام میشود.
بخشهای سطح بالا در src/app/:
| مسیر | هدف |
|---|---|
api/ |
همه مسیرهای API مبتنی بر HTTP (تفکیک زیر را ببینید) |
a2a/ |
نقطه پایانی A2A مبتنی بر JSON-RPC 2.0 (POST /a2a) |
.well-known/agent.json/ |
سند کشف Agent Card مربوط به A2A |
(dashboard)/ |
رابط کاربری داشبورد (گروه مسیر، بدون پیشوند URL) |
auth/, login/, forgot-password/, callback/ |
جریانهای احراز هویت |
landing/ |
صفحه بازاریابی/فرود |
docs/ |
نمایشگر تعبیهشده مستندات API |
status/, maintenance/, offline/ |
صفحات عملیاتی |
privacy/, terms/ |
صفحات حقوقی |
400/, 401/, 403/, 408/, 429/, 500/, 502/, 503/ |
صفحات خطای ایستا |
error.tsx, global-error.tsx, not-found.tsx, forbidden/, loading.tsx |
مرزهای خطا/بارگذاری فریمورک |
layout.tsx, page.tsx, globals.css, manifest.ts |
پوسته ریشه |
3.1.1 src/app/(dashboard)/dashboard/ — صفحات رابط کاربری
agents، analytics، api-manager، audit، auto-combo، batch، cache،
changelog، cli-tools، cloud-agents، combos، compression، context،
costs، endpoint، health، limits، logs، memory، onboarding،
playground، providers، search-tools، settings، skills، system،
translator، usage، webhooks، بهعلاوه page.tsx ریشه، HomePageClient.tsx،
BootstrapBanner.tsx.
3.1.2 src/app/api/ — گروههای سطح بالای API
src/app/api/
├── a2a/{status, tasks}
├── acp/
├── admin/
├── analytics/
├── assess/
├── auth/
├── batches/
├── cache/
├── cli-tools/
├── cloud/{codex-responses-ws}
├── combos/
├── compliance/
├── compression/
├── context/
├── db/, db-backups/
├── evals/
├── fallback/
├── files/
├── health/
├── init/
├── internal/{concurrency}
├── keys/
├── logs/
├── mcp/{audit, sse, status, stream, tools}
├── memory/{health, [id]/, route.ts}
├── model-combo-mappings/
├── models/
├── monitoring/
├── oauth/
├── openapi/
├── policies/
├── pricing/
├── provider-metrics/, provider-models/, provider-nodes/
├── providers/
├── rate-limit/, rate-limits/
├── resilience/
├── restart/, shutdown/
├── search/
├── sessions/
├── settings/
├── skills/{executions, [id], install, marketplace, route.ts, skillssh}
├── storage/
├── sync/, synced-available-models/
├── system/
├── tags/
├── telemetry/
├── token-health/
├── translator/
├── tunnels/
├── services/ مدیریت سرویسهای تعبیهشده (9router، cliproxy) — LOCAL_ONLY
├── upstream-proxy/
├── usage/
├── v1/ API عمومی سازگار با OpenAI
├── v1beta/ سازگاری به سبک Gemini
├── version-manager/
└── webhooks/
3.1.2a src/app/api/services/ — مدیریت سرویسهای تعبیهشده
مسیرهایی برای نصب، راهاندازی، توقف و پایش 9Router و CLIProxyAPI.
همه مسیرها در رده LOCAL_ONLY طبقهبندی میشوند (فقط loopback، قانون قطعی شماره 17)، زیرا میتوانند
npm install را فراخوانی کرده و فرایندهای فرزند ایجاد کنند.
src/app/api/services/
├── 9router/
│ ├── _lib.ts تابع کمکی getOrInitSupervisor()
│ ├── install/route.ts POST — نصب npm از طریق execFile
│ ├── start/route.ts POST — supervisor.start()
│ ├── stop/route.ts POST — supervisor.stop()
│ ├── restart/route.ts POST — supervisor.restart()
│ ├── update/route.ts POST — نصب نسخه جدیدتر با npm
│ ├── rotate-key/route.ts POST — تولید کلید API جدید + راهاندازی مجدد
│ ├── status/route.ts GET — وضعیت زنده + وضعیت DB + فراداده نسخه
│ └── auto-start/route.ts POST — تغییر وضعیت پرچم auto_start
├── cliproxy/
│ ├── _lib.ts تابع کمکی getOrInitSupervisor()
│ ├── install/route.ts POST — نصب npm
│ ├── start/route.ts POST — supervisor.start()
│ ├── stop/route.ts POST — supervisor.stop()
│ ├── restart/route.ts POST — supervisor.restart()
│ ├── update/route.ts POST — نصب نسخه جدیدتر با npm
│ ├── status/route.ts GET — وضعیت زنده + وضعیت DB + فراداده نسخه
│ └── auto-start/route.ts POST — تغییر وضعیت پرچم auto_start
└── [name]/
└── logs/route.ts GET — دنباله زنده گزارشها با SSE (مشترک میان همه سرویسها)
رابط کاربری داشبورد مربوطه:
src/app/(dashboard)/dashboard/providers/services/ — صفحهای با دو زبانه (CLIProxyAPI + 9Router).
پراکسی معکوس برای رابط کاربری تعبیهشده 9Router:
src/app/(dashboard)/dashboard/providers/services/[name]/embed/[[...path]]/route.ts
بررسی عمیق: docs/frameworks/EMBEDDED-SERVICES.md
3.1.3 src/app/api/v1/ — API عمومی سازگار با OpenAI
v1/
├── accounts/[id]/ جستوجوی حساب
├── agents/tasks/[id]/, agents/tasks/ نقاط پایانی وظایف با سبک A2A
├── api/ توابع کمکی API داخلی که زیر v1/api ارائه میشوند
├── audio/{speech, transcriptions}/ TTS + STT
├── batches/[id]/{cancel}, batches/ API دستههای OpenAI
├── chat/completions/ تکمیلهای چت (نقطه پایانی اصلی)
├── completions/ تکمیلهای متنی قدیمی
├── embeddings/ جاسازیها
├── files/[id]/, files/ API فایلها
├── _helpers/ توابع کمکی مشترک مسیر (بدون URL عمومی)
├── images/{edits, generations}/ تولید + ویرایش تصویر
├── issues/ نقاط پایانی کمکی برای اولویتبندی
├── management/{proxies}/ مسیرهای محدود به مدیریت درون v1
├── messages/{count_tokens}/ سازگاری پیامها به سبک Anthropic
├── models/ فهرست مدلها (`route.ts`، `catalog.ts`)
├── moderations/ تعدیل محتوا
├── music/ تولید موسیقی
├── providers/[provider]/ عملیات مختص هر ارائهدهنده
├── quotas/{check} بررسیهای سهمیه
├── registered-keys/ مدیریت کلیدهای ثبتشده
├── rerank/ رتبهبندی مجدد
├── responses/[...path]/ API پاسخهای OpenAI (فراگیر)
├── search/ جستوجوی وب
├── videos/ تولید ویدئو
├── ws/ پل WebSocket
└── route.ts کنترلکننده نمایه
هر فایل مسیر از الگوی یکسانی پیروی میکند:
مسیر → پیشدرخواست CORS → اعتبارسنجی بدنه با Zod → احراز هویت اختیاری
→ اعمال خطمشی کلید API → واگذاری به کنترلکننده (open-sse)
v1beta/ سطح سازگاری به سبک Gemini است (یک پوشش نازک که درخواستها را به
همان خط لوله open-sse/handlers/ ترجمه میکند).
3.2 src/lib/ — کتابخانههای اصلی
همیشه دادهها، همگامسازی، OAuth، مهارت، حافظه و موارد مشابه را از طریق این ماژولها وارد کنید. این جدول، دایرکتوریهای واقعی و فایلهای سطح بالای قابلتوجه را گروهبندی میکند.
| ماژول | هدف |
|---|---|
a2a/ |
سرور پروتکل A2A: taskManager.ts، streaming.ts، taskExecution.ts، routingLogger.ts، skills/ (۶ مهارت: تحلیل هزینه، گزارش سلامت، کشف ارائهدهنده، مدیریت سهمیه، مسیریابی هوشمند، فهرست قابلیتها) |
acp/ |
پروتکل کنترل عامل: index.ts، manager.ts، registry.ts |
api/ |
ابزارهای کمکی API داخلی: requireManagementAuth.ts، requireCliToolsAuth.ts، errorResponse.ts |
auth/ |
managementPassword.ts (بازنشانی / هشکردن گذرواژه) |
batches/ |
سرویس OpenAI Batches API (service.ts) |
catalog/ |
همگامسازی کاتالوگ OpenRouter (openrouterCatalog.ts) |
cloudAgent/ |
رجیستری عامل ابری: api.ts، baseAgent.ts، db.ts، index.ts، registry.ts، types.ts، agents/{codex, devin, jules}.ts |
combos/ |
ابزارهای کمکی تفکیک ترکیبها |
compliance/ |
ممیزی + ممیزی ارائهدهنده: index.ts، providerAudit.ts |
config/ |
کد اتصال پیکربندی زمان اجرا |
db/ |
ماژولهای دامنه SQLite (نگاه کنید به §3.2.1) |
display/ |
ابزارهای کمکی رابط کاربری/نمایش که پاسخهای API از آنها استفاده میکنند |
embeddings/ |
رجیستری سرویس تعبیهسازی |
env/ |
بارگذاری + بررسی درونی محیط |
evals/ |
زمان اجرای ارزیابی |
guardrails/ |
piiMasker.ts، promptInjection.ts، visionBridge.ts، visionBridgeHelpers.ts، registry.ts، base.ts |
jobs/ |
کارهای پسزمینه (autoUpdate.ts، …) |
memory/ |
حافظه پایدار: store.ts، cache.ts، retrieval.ts، summarization.ts، extraction.ts، injection.ts، qdrant.ts، settings.ts، verify.ts، schemas.ts، types.ts |
monitoring/ |
observability.ts |
oauth/ |
ماژولهای OAuth/واردسازی ارائهدهنده (۲۲ مورد): agy، antigravity، claude، cline، codebuddy-cn، codex، cursor، devin-desktop، ghe-copilot، github، gitlab-duo، grok-cli-oauth، grok-cli، kilocode، kimi-coding، kiro، openference، qoder، trae، xai-oauth، zed-hosted، zed، بهعلاوه services/، utils/ و constants/oauth.ts |
plugins/ |
بارگذار افزونه (index.ts) |
promptCache/ |
prefixAnalyzer.ts، index.ts |
providerModels/ |
چرخه عمر مدل مدیریتشده: modelDiscovery.ts، managedModelImport.ts، managedAvailableModels.ts، cursorAgent.ts |
providers/ |
ابزارهای کمکی ارائهدهنده: catalog.ts، validation.ts، imageValidation.ts، claudeExtraUsage.ts، codexConnectionDefaults.ts، codexFastTier.ts، webCookieAuth.ts، managedAvailableModels.ts، requestDefaults.ts |
resilience/ |
settings.ts — تنظیمات قطعکننده مدار، دوره انتظار و قفل موقت |
runtime/ |
تشخیص قابلیتها در زمان اجرا |
search/ |
executeWebSearch.ts |
services/ |
چارچوب سرویسهای تعبیهشده: ServiceSupervisor.ts (ناظر عمومی فرایند فرزند با قفل عملیات، بافر حلقوی و بررسیکننده سلامت)، bootstrap.ts (ثبت در سطح فرایند و شروع خودکار)، registry.ts (نگاشت ابزار ← ناظر)، apiKey.ts (مخزن کلید AES-256-GCM)، modelSync.ts (همگامسازی دورهای مدل)، ringBuffer.ts (بافر حلقوی گزارش ۵ مگابایتی)، healthCheck.ts (کاوش سلامت HTTP)، types.ts، embedWsProxy.ts (پراکسی WebSocket)، installers/{ninerouter,cliproxy}.ts. نگاه کنید به docs/frameworks/EMBEDDED-SERVICES.md |
agentSkills/ |
کاتالوگ + مولد مهارتهای عامل: catalog.ts (getCatalog/getSkillById/filterCatalog/computeCoverage)، generator.ts (generateAgentSkills → در skills/{id}/SKILL.md مینویسد)، openapiParser.ts (نقاط پایانی REST را از مشخصات OpenAPI استخراج میکند)، cliRegistryParser.ts (زیرفرمانهای CLI را از bin/cli-registry استخراج میکند)، schemas.ts (Zod: AgentSkillSchema، SkillCoverageSchema، ListQuerySchema، GenerateBodySchema)، types.ts (AgentSkill، SkillCoverage، SkillMarkdown، GeneratorReport). مسیرهای REST (/api/agent-skills/*)، ابزارهای MCP (omniroute_agent_skills_*) و مهارت A2A با نام list-capabilities از آن استفاده میکنند. نگاه کنید به AGENT-SKILLS.md. |
skills/ |
چارچوب مهارت: registry.ts، executor.ts، interception.ts، injection.ts، sandbox.ts، custom.ts، hybrid.ts، builtins.ts، a2a.ts، providerSettings.ts، schemas.ts، skillssh.ts، types.ts، بهعلاوه builtin/browser.ts |
spend/ |
batchWriter.ts (بافر نوشتن با تأخیر) |
sync/ |
bundle.ts، tokens.ts (همگامسازی ابری) |
system/ |
ابزارهای کمکی سطح سیستم |
translator/ |
کد اتصال سطحبالای مترجم (به open-sse/translator/ واگذار میکند) |
usage/ |
حسابداری مصرف: costCalculator.ts، tokenAccounting.ts، usageHistory.ts، aggregateHistory.ts، usageStats.ts، callLogs.ts، callLogArtifacts.ts، fetcher.ts، providerLimits.ts، migrations.ts |
versionManager/ |
بهروزرسانی خودکار + مانیفست نسخه |
ws/ |
پل WebSocket |
zed-oauth/ |
جریان OAuth ویرایشگر Zed |
فایلهای سطح بالای src/lib/:
- فایل barrel قدیمی
localDb.tsحذف شده است — مصرفکنندگان ماژولهای مشخصsrc/lib/db/*را مستقیماً import میکنند. proxyHealth.ts,proxyLogger.ts,tokenHealthCheck.ts,localHealthCheck.tsapiBridgeServer.ts,cacheLayer.ts,semanticCache.ts,settingsCache.tscloudSync.ts,initCloudSync.tscloudflaredTunnel.ts,ngrokTunnel.ts,tailscaleTunnel.tsconsoleInterceptor.ts,container.ts,gracefulShutdown.ts,idempotencyLayer.tsipUtils.ts,logEnv.ts,logPayloads.ts,logRotation.tsmodelAliasSeed.ts,modelCapabilities.ts,modelMetadataRegistry.ts,modelsDevSync.tspiiSanitizer.ts,pricingSync.tsapiKeyExposure.ts,cacheControlSettings.ts,dataPaths.ts,toolPolicy.tstranslatorEvents.ts,usageDb.ts,usageAnalytics.ts,webhookDispatcher.ts
3.2.1 src/lib/db/
پایگاه دادهٔ SQLite تکنمونه (getDbInstance() در core.ts، با ثبت وقایع WAL).
هرگز SQL خام را در routeها یا handlerها ننویسید — از این ماژولها استفاده کنید.
ماژولهای دامنه (هرکدام مالک یک یا چند جدول هستند): apiKeys.ts, backup.ts,
batches.ts, cleanup.ts, cliToolState.ts, combos.ts,
commandCodeAuth.ts, compression.ts, compressionAnalytics.ts,
compressionCacheStats.ts, compressionCombos.ts, compressionScheduler.ts,
contextHandoffs.ts, core.ts, creditBalance.ts, databaseSettings.ts,
detailedLogs.ts, domainState.ts, encryption.ts, evals.ts, files.ts,
healthCheck.ts, jsonMigration.ts, migrationRunner.ts,
modelComboMappings.ts, models.ts, oneproxy.ts, prompts.ts,
providers.ts, providerLimits.ts, proxies.ts, quotaSnapshots.ts,
readCache.ts, reasoningCache.ts, registeredKeys.ts, secrets.ts,
sessionAccountAffinity.ts, settings.ts, stateReset.ts, stats.ts,
syncTokens.ts, tierConfig.ts, upstreamProxy.ts, versionManager.ts,
webhooks.ts.
migrations/ شامل 168 فایل نسخهبندیشدهٔ .sql (ایدِمپوتنت و تراکنشی) است و
هنگام راهاندازی توسط migrationRunner.ts اجرا میشود.
جدولهای ایجادشده در مجموع migrationها (در کل 123 مورد):
a, account_key_limits, api_keys, batches, call_logs,
combo_adaptation_state, combos, command_code_auth_sessions,
compression_analytics, compression_cache_stats,
compression_combo_assignments, compression_combos, context_handoffs,
daily_usage_summary, db_meta, domain_budgets, domain_circuit_breakers,
domain_cost_history, domain_fallback_chains, domain_lockout_state,
eval_cases, eval_runs, eval_suites, files, hourly_usage_summary,
key_value, mcp_tool_audit, memories, model_combo_mappings,
provider_connections, provider_key_limits, provider_nodes,
proxy_assignments, proxy_logs, proxy_registry, quota_snapshots,
reasoning_cache, registered_keys, request_detail_logs,
routing_decisions, semantic_cache, session_account_affinity,
skill_executions, skills, sync_tokens, tier_assignments,
tier_config, upstream_proxy_config, usage_history, version_manager,
webhooks (بهعلاوهٔ جدولهای مجازی FTS5 برای جستوجوی حافظه).
3.3 src/domain/ — لایهٔ دامنه
منطق کسبوکار خالص، بدون I/O. توسط routeها و handlerها import میشود.
| فایل | هدف |
|---|---|
policyEngine.ts |
حلکنندهٔ سیاست سطح بالا |
fallbackPolicy.ts |
درخت تصمیم fallback |
costRules.ts |
قواعد محاسبهٔ هزینه |
lockoutPolicy.ts |
تصمیمهای قفلکردن مدل |
tagRouter.ts |
مسیریابی مبتنی بر برچسب |
comboResolver.ts |
حل combo از درخواست → فهرست مقصد |
connectionModelRules.ts |
فیلترهای مدل برای هر اتصال |
modelAvailability.ts |
بررسی دسترسپذیری مدل |
degradation.ts |
گذارهای حالت تنزلیافته |
providerExpiration.ts |
تشخیص حساب/کلید منقضیشده |
quotaCache.ts |
تصمیمهای cacheشدهٔ سهمیه |
responses.ts, omnirouteResponseMeta.ts |
ابزارهای کمکی ساختار پاسخ |
configAudit.ts |
ممیزی تغییرات پیکربندی |
assessment/ |
ارزیابی مدل (طبق RFC، بهطور جزئی پیادهسازی شده) |
types.ts |
typeهای مشترک دامنه |
3.4 src/server/ — فقط سمت سرور
نمیتوان آن را از کامپوننتهای کلاینت import کرد.
server/
├── auth/loginGuard.ts
├── authz/
│ ├── classify.ts routeها را به عمومی یا مدیریتی دستهبندی میکند
│ ├── assertAuth.ts ابزار کمکی assertion
│ ├── context.ts context مجوزدهی برای هر درخواست
│ ├── headers.ts
│ ├── pipeline.ts pipeline مجوزدهی
│ ├── policies/ سیاستهای عملیاتی
│ └── types.ts
└── cors/origins.ts فهرست مجاز originهای CORS
3.5 src/shared/ — ایمن برای اشتراکگذاری
به زیرشاخههای متمرکز تقسیم شده است:
constants/—providers.ts(فهرست ارائهدهندگان اعتبارسنجیشده با Zod)،models.ts،modelSpecs.ts،modelCompat.ts،pricing.ts،cliTools.ts،cliCompatProviders.ts،routingStrategies.ts،comboConfigMode.ts،headers.ts،upstreamHeaders.ts(فهرست موارد ممنوع)،mcpScopes.ts،errorCodes.ts،publicApiRoutes.ts،batch.ts،batchEndpoints.ts،bodySize.ts،colors.ts،appConfig.ts،config.ts،sidebarVisibility.ts،visionBridgeDefaults.ts.validation/—schemas.ts(حدود ۸۰ شِمای Zod)،compressionConfigSchemas.ts،providerSchema.ts،settingsSchemas.ts،helpers.ts.contracts/— قراردادهای API عمومی منتشرشده در npm.types/— انواع مشترک TS.utils/—circuitBreaker.ts،apiAuth.ts،apiKey.ts،apiKeyPolicy.ts،api.ts،classify429.ts،cliCompat.ts،clipboard.ts،cloud.ts،cn.ts،cors.ts،featureFlags.ts،fetchTimeout.ts،formatting.ts،inputSanitizer.ts،logger.ts،machine.ts،machineId.ts،maskEmail.ts،modelCatalogSearch.ts،nodeRuntimeSupport.ts،parseApiKeys.ts،providerHints.ts،providerModelAliases.ts،rateLimiter.ts،releaseNotes.ts،a11yAudit.ts، بهعلاوه هوکها/کامپوننتهای داشبورد درservices/،network/،middleware/،schemas/،hooks/،components/.
4. open-sse/ — فضای کاری موتور استریم
یک فضای کاری مستقل npm که با نام @omniroute/open-sse منتشر میشود. این فضا مسئول پردازش درخواستها، اجراگرها، مترجمها، سرویسها، تبدیلکننده و سرور MCP است.
open-sse/
├── index.ts خروجیهای عمومی
├── package.json مانیفست فضای کاری
├── tsconfig.json
├── types.d.ts
├── config/ رجیستریهای ارائهدهندگان، پروفایلهای هدر، هویت، …
├── handlers/ هندلرهای درخواست (چت، امبدینگ، صوت، تصویر، …)
├── executors/ 108 اجراگر HTTP مختص ارائهدهندگان
├── translator/ تبدیل قالب (OpenAI ↔ Claude ↔ Gemini ↔ Cursor ↔ Kiro)
├── transformer/ تبدیلکننده استریم Responses API ↔ Chat Completions
├── services/ بیش از 80 ماژول سرویس (ترکیبها، جایگزینی، سهمیهها، هویت، …)
├── utils/ ابزارهای کمکی استریم، کلاینت TLS، AWS SigV4، واکشی پروکسی، …
└── mcp-server/ سرور MCP (3 روش انتقال، 33 محدوده، 110 ابزار)
4.1 open-sse/handlers/
| هندلر | هدف |
|---|---|
chatCore.ts |
خط لوله اصلی چت (کش، محدودیت نرخ، مسیریابی ترکیبی، اعزام اجراگر) |
responsesHandler.ts |
نقطه ورود OpenAI Responses API |
embeddings.ts |
امبدینگها |
imageGeneration.ts |
تولید تصویر |
audioSpeech.ts |
تبدیل متن به گفتار |
audioTranscription.ts |
تبدیل گفتار به متن |
videoGeneration.ts |
تولید ویدئو |
musicGeneration.ts |
تولید موسیقی |
rerank.ts |
رتبهبندی مجدد |
moderations.ts |
تعدیل محتوا |
search.ts |
جستوجوی وب |
sseParser.ts |
تجزیهگر رویداد SSE |
usageExtractor.ts |
استخراج تعداد توکنها از استریمهای بالادستی |
responseSanitizer.ts |
حذف نویز مختص ارائهدهنده |
responseTranslator.ts |
لایه اتصال میان پاسخ ارائهدهنده و لایه مترجم |
4.2 open-sse/executors/
108 اجراگر ارائهدهنده که هر یک BaseExecutor (base.ts) را گسترش میدهند:
antigravity, azure-openai, blackbox-web, cliproxyapi,
chatgpt-web-codex, cloudflare-ai, codex, commandCode, cursor, default, devin-cli,
muse-spark-web, nlpcloud, opencode, perplexity-web, petals,
pollinations, qoder, vertex, devin-desktop، بهعلاوه claudeIdentity.ts
(ابزار کمکی مشترک هویت) و index.ts (رجیستری).
توجه: ارائهدهندگانی که در اینجا فهرست نشدهاند، توسط
default.tsو با استفاده از اجراگر عمومی سازگار با OpenAI سرویسدهی میشوند. کاتالوگ کامل ارائهدهندگان (355 ارائهدهنده) درsrc/shared/constants/providers.tsقرار دارد.
4.3 open-sse/translator/
ترجمه بهصورت هابومحور (OpenAI هاب است).
- 9 مترجم درخواست (
translator/request/):antigravity-to-openai,claude-to-gemini,claude-to-openai,gemini-to-openai,openai-responses,openai-to-claude,openai-to-cursor,openai-to-gemini,openai-to-kiro. - 9 مترجم پاسخ (
translator/response/):claude-to-openai,cursor-to-openai,gemini-to-claude,gemini-to-openai,kiro-to-openai,openai-responses,openai-to-antigravity,openai-to-claude. - 9 ابزار کمکی (
translator/helpers/):claudeHelper,geminiHelper,geminiToolsSanitizer,maxTokensHelper,openaiHelper,responsesApiHelper,schemaCoercion,toolCallHelper، بهعلاوه آزمونهای ابزارهای کمکی. - ابزارهای کمکی تصویر (
translator/image/sizeMapper.ts). - سطح بالا:
bootstrap.ts,formats.ts,registry.ts,index.ts.
4.4 open-sse/transformer/
responsesTransformer.ts— تبدیلکننده Responses API ↔ Chat Completions مبتنی برTransformStream(مورد استفاده توسط مسیر فراگیرresponses/).
4.5 open-sse/services/
موارد برجسته (فهرست کامل در open-sse/services/):
| موضوع | فایلها |
|---|---|
| مسیریابی ترکیبی | combo.ts (19 راهبرد)، comboConfig.ts، comboMetrics.ts، comboManifestMetrics.ts، comboAgentMiddleware.ts |
| موتور ترکیبی خودکار | autoCombo/ — engine.ts، scoring.ts، taskFitness.ts، virtualFactory.ts، modePacks.ts، autoPrefix.ts، persistence.ts، providerDiversity.ts، providerRegistryAccessor.ts، routerStrategy.ts، selfHealing.ts، index.ts |
| تابآوری | accountFallback.ts (دوره انتظار + قفلشدن)، errorClassifier.ts، emergencyFallback.ts، rateLimitManager.ts، rateLimitSemaphore.ts، accountSemaphore.ts، accountSelector.ts |
| سهمیهها | quotaMonitor.ts، quotaPreflight.ts، bailianQuotaFetcher.ts، codexQuotaFetcher.ts، deepseekQuotaFetcher.ts، openrouterQuotaFetcher.ts، openrouterFreeWindow.ts، crofUsageFetcher.ts، antigravityCredits.ts |
| ذخیرهسازی موقت | reasoningCache.ts، searchCache.ts، signatureCache.ts، requestDedup.ts |
| هوشمندی مسیریابی | intentClassifier.ts، taskAwareRouter.ts، backgroundTaskDetector.ts، volumeDetector.ts، wildcardRouter.ts، workflowFSM.ts، specificityDetector.ts، specificityRules.ts، specificityTypes.ts |
| مدیریت مدل | modelCapabilities.ts، modelDeprecation.ts، modelFamilyFallback.ts، modelStrip.ts، model.ts، provider.ts، providerRequestDefaults.ts، providerCostData.ts، payloadRules.ts |
| فشردهسازی | compression/ — سیمکشی کامل موتور فشردهسازی |
| توکن + نشست | tokenRefresh.ts، sessionManager.ts، apiKeyRotator.ts، contextManager.ts، contextHandoff.ts، systemPrompt.ts، roleNormalizer.ts، responsesInputSanitizer.ts، toolSchemaSanitizer.ts، toolLimitDetector.ts، thinkingBudget.ts |
| سطح / مانیفست | tierResolver.ts، tierConfig.ts، tierDefaults.json، tierTypes.ts، manifestAdapter.ts |
| IP / شبکه | ipFilter.ts، webSearchFallback.ts |
| دستهها | batchProcessor.ts |
| میزان استفاده | usage.ts |
4.6 open-sse/mcp-server/
- 110 ابزار منحصربهفرد در
server.tsسیمکشی شدهاند (45 ابزار استاندارد درschemas/tools.ts+ ماژولهای حافظه، مهارتها، مهارتهای GitHub، مخزن، بازیوارسازی، افزونه، Notion، Obsidian، پیکره محلی و فشردهسازی — اجتماع آنها توسطcountUniqueMcpToolsشمارش میشود). - 3 روش انتقال: stdio، HTTP Streamable، SSE.
- 33 محدوده دسترسی در زمان اجرا اعمال میشوند — فهرست پایه در
src/shared/constants/mcpScopes.tsقرار دارد و مجموعه کامل، اجتماع محدودههای اعلامشده توسط هر ماژول ابزار است. - جدول حسابرسی:
mcp_tool_audit(توسطaudit.tsپر میشود). - فایلها:
server.ts،index.ts،httpTransport.ts،audit.ts،scopeEnforcement.ts،runtimeHeartbeat.ts،descriptionCompressor.ts،schemas/{tools, a2a, audit, index}.ts،tools/{advancedTools, compressionTools, memoryTools, skillTools}.ts، بهعلاوه آزمونهای موجود در__tests__/. - برای مشاهده فهرست کامل ابزارها، به MCP-SERVER.md مراجعه کنید.
4.7 open-sse/config/
رجیستریهای ارائهدهندگان (providerRegistry.ts، providerModels.ts،
providerHeaderProfiles.ts)، رجیستریهای مدل بهازای هر قالب (audioRegistry.ts،
embeddingRegistry.ts، imageRegistry.ts، moderationRegistry.ts،
musicRegistry.ts، rerankRegistry.ts، searchRegistry.ts، videoRegistry.ts)،
ابزارهای کمکی هویت (codexIdentity.ts، codexInstructions.ts،
anthropicHeaders.ts، antigravityUpstream.ts، antigravityModelAliases.ts،
cliFingerprints.ts، toolCloaking.ts، defaultThinkingSignature.ts)،
ابزارهای کمکی اعتبارنامه (credentialLoader.ts، codexClient.ts) و آداپتورهای
ابری (azureAi.ts، bedrock.ts، datarobot.ts، glmProvider.ts،
maritalk.ts، oci.ts، petals.ts، runway.ts، sap.ts، watsonx.ts،
ollamaModels.ts، errorConfig.ts، constants.ts، registryUtils.ts).
4.8 open-sse/utils/
اجزای پایهٔ استریم و ابزارهای کمکی ارائهدهنده: stream.ts، streamHandler.ts،
streamHelpers.ts، streamPayloadCollector.ts، streamReadiness.ts،
sseHeartbeat.ts، proxyFetch.ts، proxyDispatcher.ts، tlsClient.ts،
networkProxy.ts، awsSigV4.ts، cacheControlPolicy.ts،
cursorChecksum.ts، cursorAgentProtobuf.ts، cursorVersionDetector.ts،
comfyuiClient.ts، kieTask.ts، bypassHandler.ts، aiSdkCompat.ts،
thinkTagParser.ts، urlSanitize.ts، usageTracking.ts، requestLogger.ts،
progressTracker.ts، cors.ts، error.ts، logger.ts، sleep.ts،
ollamaTransform.ts.
5. electron/ — پوشش دسکتاپ
electron/
├── main.js فرایند اصلی Electron
├── preload.js پل پیشبارگذاری (contextIsolation فعال است)
├── types.d.ts
├── package.json پیکربندی electron-builder، نسخهٔ 3.8.51
├── README.md
├── assets/ منابع ساخت (آیکونها، مجوزها، …)
├── node_modules/ node_modules اختصاصی (better-sqlite3، electron-updater)
└── dist-electron/ خروجی ساخت (commit نمیشود)
پنج اسکریپت npm در ریشهٔ فضای کاری وجود دارد: electron:dev، electron:build،
electron:build:{win,mac,linux}، electron:smoke:packaged. بهروزرسانی خودکار از طریق
electron-updater انجام میشود و به فید انتشار GitHub اشاره دارد.
6. bin/ — رابط خط فرمان
bin/
├── omniroute.mjs ورودی اصلی رابط خط فرمان (Node ESM)
├── reset-password.mjs بازنشانی گذرواژهٔ مدیریت از طریق رابط خط فرمان
├── mcp-server.mjs راهانداز سرور MCP (stdio)
├── nodeRuntimeSupport.mjs محافظ نسخهٔ Node
└── cli/
├── program.mjs سازندهٔ برنامهٔ Commander
├── runtime.mjs ابزار کمکی withRuntime (ابتدا سرور/در صورت شکست پایگاه داده)
├── output.mjs قالببندهای خروجی (json/jsonl/table/csv)
├── i18n.mjs ابزار کمکی t() با زبانها
├── api.mjs ابزار کمکی fetch برای API
├── data-dir.mjs
├── encryption.mjs
├── sqlite.mjs
└── commands/
├── registry.mjs ثبت فرمانها
├── setup.mjs
├── doctor.mjs
├── providers.mjs
└── ... (یک فایل برای هر فرمان/گروه)
دو فایل اجرایی در package.json ← bin ارائه میشوند:
omniroute←bin/omniroute.mjsomniroute-reset-password←bin/reset-password.mjs
7. tests/
| دایرکتوری | نوع |
|---|---|
tests/unit/ |
تستهای واحد با اجراکنندهٔ بومی تست Node (۱۸۲۱ فایل، بهعلاوهٔ زیردایرکتوریهای api/، auth/ و authz/) |
tests/integration/ |
تستهای بینماژولی و وضعیت پایگاه داده |
tests/e2e/ |
تستهای رابط کاربری Playwright |
tests/e2e/protocol-clients.test.ts |
تست سرتاسری پروتکلهای MCP/A2A |
tests/translator/ |
تستهای مختص مترجم |
tests/security/ |
رگرسیونهای امنیتی |
tests/load/ |
تستهای بار / فشار |
tests/golden-set/ |
خروجیهای مرجع برای رگرسیونهای مترجم |
tests/helpers/، tests/fixtures/، tests/manual/ |
پشتیبانی |
فرمانهای متداول:
| فرمان | آنچه اجرا میکند |
|---|---|
npm run test:unit |
همهٔ فایلهای tests/unit/*.test.ts با اجراکنندهٔ تست Node (همزمانی ۱۰) |
npm run test:vitest |
مجموعهتست Vitest (MCP، autoCombo، cache) |
npm run test:e2e |
مجموعهتست رابط کاربری Playwright |
npm run test:protocols:e2e |
تست سرتاسری پروتکلهای MCP و A2A |
npm run test:coverage |
آستانهٔ پوشش (≥۶۰٪ خطوط/عبارتها/توابع/شاخهها) |
node --import tsx/esm --test tests/unit/<file>.test.ts |
اجرای یک فایل |
8. scripts/
بر اساس کاربرد در 6 زیرپوشه سازماندهی شده است.
scripts/build/—build-next-isolated.mjs،prepublish.ts،prepare-electron-standalone.mjs،pack-artifact-policy.ts،validate-pack-artifact.ts،postinstall.mjs،postinstallSupport.mjs،uninstall.mjs،bootstrap-env.mjs،runtime-env.mjs،native-binary-compat.mjs.scripts/dev/—run-next.mjs،run-next-playwright.mjs،run-standalone.mjs،standalone-server-ws.mjs،responses-ws-proxy.mjs،v1-ws-bridge.mjs،smoke-electron-packaged.mjs،run-playwright-tests.mjs،run-ecosystem-tests.mjs،run-protocol-clients-tests.mjs،sync-env.mjs،healthcheck.mjs،system-info.mjs.scripts/check/—check-cycles.mjs،check-docs-sync.mjs،check-docs-counts-sync.mjs،check-env-doc-sync.mjs،check-deprecated-versions.mjs،check-route-validation.mjs،check-t11-any-budget.mjs،check-pr-test-policy.mjs،check-supported-node-runtime.ts،test-report-summary.mjs.scripts/docs/—generate-docs-index.mjs،gen-provider-reference.ts.scripts/i18n/—generate-multilang.mjs،run-visual-qa.mjs،generate-qa-checklist.mjs،apply-priority-overrides.mjs،validate_translation.py،check_translations.py،i18n_autotranslate.py،untranslatable-keys.json.scripts/ad-hoc/—cursor-tap.cjs،sync-cursor-models.mjs،migrate-env.mjs،dbsetup.js.
9. خط لوله درخواست (خلاصه)
درخواست کلاینت
→ /v1/chat/completions (route.ts)
بررسی پیشدرخواست CORS
اعتبارسنجی Zod (chatCompletionsSchema در shared/validation/schemas.ts)
احراز هویت (extractApiKey + isValidApiKey یا requireManagementAuth)
موتور سیاستگذاری (src/server/authz/pipeline.ts)
محافظها (پوشاننده PII، تزریق پرامپت، پل بینایی)
→ handleChatCore() (open-sse/handlers/chatCore.ts)
بررسی کش (کش معنایی + کش خواندن)
محدودیت نرخ (rateLimitManager، accountSemaphore)
مسیریابی ترکیبی (اگر مدل به یک ترکیب تفکیک شود)
comboResolver → حلقه برای هر مقصد → handleSingleModel()
translateRequest() (open-sse/translator/request/*)
getExecutor(providerId).execute() (open-sse/executors/*)
واکشی از بالادست → تلاش مجدد/وقفه تصاعدی از طریق accountFallback
translateResponse() (open-sse/translator/response/*)
جریان SSE یا پاسخ JSON
اگر Responses API باشد: TransformStream از طریق open-sse/transformer/responsesTransformer.ts
→ ممیزی انطباق (src/lib/compliance/)
→ پاسخ به کلاینت
وضعیت زمان اجرای تابآوری (سه سازوکار)
| سازوکار | دامنه | محل |
|---|---|---|
| قطعکننده مدار ارائهدهنده | کل ارائهدهنده | src/shared/utils/circuitBreaker.ts، ذخیرهشده در domain_circuit_breakers |
| دوره انتظار اتصال | یک حساب/کلید | markAccountUnavailable() در src/sse/services/auth.ts؛ مصرفشده توسط accountFallback.checkFallbackError() |
| قفل مدل | ارائهدهنده + اتصال + مدل | open-sse/services/accountFallback.ts، ذخیرهشده در domain_lockout_state |
به RESILIENCE_GUIDE.md و بخش اختصاصی در CLAUDE.md مراجعه کنید.
10. نحوه مشارکت
افزودن یک ارائهدهنده جدید
- آن را در
src/shared/constants/providers.tsثبت کنید (هنگام بارگذاری با Zod اعتبارسنجی میشود). - اگر منطق سفارشی لازم است، یک اجراکننده در
open-sse/executors/اضافه کنید (BaseExecutorرا گسترش دهید). - اگر از قالب OpenAI استفاده نمیکند، یک مترجم در
open-sse/translator/اضافه کنید. - اگر مبتنی بر OAuth است، پیکربندی را در
src/lib/oauth/providers/وsrc/lib/oauth/services/اضافه کنید. - مدلها را در
open-sse/config/providerRegistry.ts(یا رجیستری مختص قالب درopen-sse/config/) ثبت کنید. - تستها را در
tests/unit/بنویسید.
افزودن یک مسیر API جدید
- فایل
src/app/api/your-route/route.tsرا ایجاد کنید. - از این الگو پیروی کنید: CORS ← اعتبارسنجی بدنه با Zod ← احراز هویت ← واگذاری به کنترلکننده.
- اگر ساختار درخواست جدید است، اسکیمای Zod را در
src/shared/validation/schemas.tsاضافه کنید. - اگر فقط برای مدیریت است، مسیر را به
src/shared/constants/publicApiRoutes.ts(فهرست مسدود برای سطح عمومی API) اضافه کنید. - تستها را در
tests/unit/اضافه کنید. - فایلهای
docs/reference/API_REFERENCE.mdوdocs/openapi.yamlرا بهروزرسانی کنید.
افزودن یک ماژول DB جدید
- فایل
src/lib/db/yourModule.tsرا ایجاد وgetDbInstance()را از./core.tsوارد کنید. - توابع CRUD مربوط به دامنه خود را صادر کنید.
- اگر جدولهای جدیدی وجود دارند، یک مهاجرت در
src/lib/db/migrations/اضافه کنید که شمارهگذاری ترتیبی داشته، همتوان باشد و درون تراکنش اجرا شود. - واردکنندهها باید مستقیماً از
@/lib/db/yourModuleایمپورت کنند (بدون barrel — لایه بازصادرکردن قدیمیlocalDb.tsحذف شده است). - تستها را در
tests/unit/اضافه کنید.
افزودن یک ابزار MCP جدید
- تعریف ابزار را در
open-sse/mcp-server/tools/اضافه کنید (یاopen-sse/mcp-server/schemas/tools.tsرا گسترش دهید). - حوزه یا حوزههای مناسب را در
src/shared/constants/mcpScopes.tsاختصاص دهید. - ابزار را در
open-sse/mcp-server/server.tsثبت کنید. - تستها را در
open-sse/mcp-server/__tests__/اضافه کنید. - MCP-SERVER.md را بهروزرسانی کنید.
افزودن یک مهارت A2A جدید
به A2A-SERVER.md § افزودن یک مهارت جدید مراجعه کنید. مهارتها در
src/lib/a2a/skills/ قرار دارند و از طریق مدیر وظایف A2A ثبت میشوند.
11. قراردادها
- سبک کد: تورفتگی ۲ فاصلهای، نقلقول دوتایی، عرض ۱۰۰ نویسه، نقطهویرگول،
ویرگول انتهایی
es5— بهوسیله Prettier و از طریقlint-stagedاعمال میشود. - ایمپورتها: خارجی ← داخلی (
@/،@omniroute/open-sse) ← نسبی. - نامگذاری: فایلها بهصورت
camelCaseیاkebab-case، مؤلفهها بهصورتPascalCase، ثابتها بهصورتUPPER_SNAKE. - ESLint: قوانین
no-eval،no-implied-evalوno-new-funcدر همهجا برابرerrorهستند؛no-explicit-anyدرopen-sse/وtests/برابرwarnو در سایر بخشها برابرerrorاست. - TypeScript: مقدار
strict: falseاست (رویکرد موروثی). برای مرزهای بین ماژولها، انواع صریح را بر استنتاج نوع ترجیح دهید. - پایگاه داده: هرگز SQL خام را در مسیرها یا کنترلکنندهها ننویسید — همیشه از
ماژولهای
src/lib/db/استفاده کنید. هرگز بهصورت barrel ایمپورت نکنید — مستقیماً از ماژولهای مشخصsrc/lib/db/*استفاده کنید. - نوعدهی موجودیتهای DB (#3512): تابعی که شکل ردیف یک جدول DB را مینویسد
یا میخواند، باید یک رابط نامگذاریشده TS را بپذیرد یا برگرداند که ستونهای
آن جدول را بهصورت ۱:۱ بازتاب میدهد، نه
anyیا یک نوع بینام درونخطی در محل فراخوانی. رابط را در کنار تابع قرار دهید (برای مثالexport interface UsageEntryدرsrc/lib/usage/usageHistory.tsبالایsaveRequestUsage)، فیلدهای منفرد را هنگامی که نویسندههای مختلف ردیف را بهتدریج پر میکنند، اختیاری/تهیپذیر نگه دارید و برای فیلدی که شکل آن بین فراخوانها متفاوت است،unknownرا برanyترجیح دهید (این موضوع را روی فیلد مستند کنید؛ برای مثالUsageEntry.tokensهم داده خام با شکل ارائهدهنده و هم شکل نرمالشده را میپذیرد). وقتی تعدادanyهای یک فایل به این روش به صفر رسید، آن را به فهرست مجازcheck:any-budget:t11اضافه کنید (scripts/check/check-t11-any-budget.mjs،maxAny: 0) تا امکان پسرفت وجود نداشته باشد. این یک قرارداد برای نخستین بخش کار است — پاکسازی گستردهتر «نبودanyبینام» در باقی کدبیس بهصورت تدریجی انجام میشود. - خطاها: از try/catch همراه با انواع خطای مشخص استفاده کنید و با زمینه pino لاگ بگیرید. هرگز خطاها را در جریانهای SSE بیصدا نادیده نگیرید؛ برای پاکسازی از سیگنالهای لغو استفاده کنید.
- امنیت: هرگز از
eval()/new Function()/ ارزیابی ضمنی استفاده نکنید. همه ورودیها را با Zod اعتبارسنجی کنید. اطلاعات اعتبارسنجی را در حالت ذخیرهشده رمزگذاری کنید (AES-256-GCM). فهرست مسدودsrc/shared/constants/upstreamHeaders.tsرا با لایه پاکسازی/اعتبارسنجی همگام نگه دارید. - کامیتها: Conventional Commits —
feat(scope): subject. حوزههای مجاز:db،sse،oauth،dashboard،api،cli،docker،ci،mcp،a2a،memory،skills. - شاخهها: پیشوندهای
feat/،fix/،refactor/،docs/،test/،chore/. هرگز مستقیماً رویmainکامیت نکنید. - Husky: مرحله pre-commit دستورهای
lint-staged+check:docs-sync+check:any-budget:t11را اجرا میکند؛ مرحله pre-push نیزcheck:any-budget:t11+check:tracked-artifactsرا اجرا میکند (گیتهای سریع؛test:unitمستثنا است).
12. قوانین سختگیرانه (از CLAUDE.md)
- هرگز اطلاعات محرمانه یا اعتبارنامهها را commit نکنید.
- هرگز barrel import انجام ندهید — مستقیماً از ماژولهای مشخص
src/lib/db/*استفاده کنید. - هرگز از
eval()/new Function()/ eval ضمنی استفاده نکنید. - هرگز مستقیماً در
main، commit نکنید. - هرگز SQL خام را در routeها ننویسید — همیشه از ماژولهای
src/lib/db/استفاده کنید. - هرگز خطاها را در جریانهای SSE بدون اطلاع نادیده نگیرید.
- همیشه ورودیها را با schemaهای Zod اعتبارسنجی کنید.
- هنگام تغییر کد production، همیشه تستها را نیز اضافه کنید.
- پوشش تست باید ≥ 60% باقی بماند (statementها، lineها، functionها و branchها).
13. همچنین ببینید
- ARCHITECTURE.md — معماری سطح بالا و مسئولیتهای ماژولها.
- API_REFERENCE.md — مرجع API عمومی و مدیریتی.
- FEATURES.md — ماتریس قابلیتها و نکات برجسته نسخهها.
- RESILIENCE_GUIDE.md — بررسی عمیق circuit breaker، cooldown و lockout.
- AUTO-COMBO.md — امتیازدهی و راهبردهای Auto Combo.
- MCP-SERVER.md — فهرست کامل ابزارهای MCP و روشهای انتقال.
- A2A-SERVER.md — مهارتها و سازوکار کشف پروتکل A2A.
- COMPRESSION_GUIDE.md — فشردهسازی RTK و Caveman.
- CLI-TOOLS.md — یکپارچهسازیهای CLI.
- ELECTRON_GUIDE.md (در صورت وجود)، DOCKER_GUIDE.md، FLY_IO_DEPLOYMENT_GUIDE.md، VM_DEPLOYMENT_GUIDE.md، TERMUX_GUIDE.md، PWA_GUIDE.md — اهداف استقرار.
- TROUBLESHOOTING.md — مشکلات عملیاتی رایج.
- CONTRIBUTING.md — گردشکار مشارکتکنندگان.
- CLAUDE.md — قوانین مخزن برای Claude Code (مرجع اصلی بسیاری از قراردادهای بالا).
- AGENTS.md — مرجع معماری عمیقتر که عاملها از آن استفاده میکنند.