Files
OmniRoute/docs/i18n/kn/CONTRIBUTING.md
Diego Rodrigues de Sa e Souza 58f88a83e4 feat(i18n): 7 new locales — Hausa, Yoruba, Igbo, Amharic, Uzbek, Georgian, Armenian (66 locales) (#13727)
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
2026-09-15 09:50:01 -03:00

40 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 · 🇰🇷 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


ಕೊಡುಗೆ ನೀಡಲು ನೀವು ತೋರಿಸಿರುವ ಆಸಕ್ತಿಗೆ ಧನ್ಯವಾದಗಳು! ಪ್ರಾರಂಭಿಸಲು ನಿಮಗೆ ಅಗತ್ಯವಿರುವ ಎಲ್ಲವನ್ನೂ ಈ ಮಾರ್ಗದರ್ಶಿ ಒಳಗೊಂಡಿದೆ.

ಪ್ರತಿ ಬದಲಾವಣೆಗೆ ಸಂಬಂಧಿಸಿದ ಅಧಿಕೃತ ಕಾರ್ಯವಿಧಾನಕ್ಕಾಗಿ, ಕೊಡುಗೆಯ ಸುವರ್ಣ ಮಾರ್ಗದಿಂದ ಪ್ರಾರಂಭಿಸಿ. ಇದು ಪೂರೈಕೆದಾರ, ರೂಟಿಂಗ್, UI/UX, i18n, CLI, ಡೇಟಾಬೇಸ್ ಮತ್ತು ನಿರ್ಮಾಣ/ನಿಯೋಜನೆ ಬದಲಾವಣೆಗಳನ್ನು ಅವುಗಳ ಒಪ್ಪಂದಗಳು, ಕೇಂದ್ರೀಕೃತ ಪರೀಕ್ಷೆಗಳು, CI ವ್ಯಾಪ್ತಿ ಮತ್ತು ಸಮನ್ವಯ ಹಂತಗಳಿಗೆ ನಕ್ಷೆ ಮಾಡುತ್ತದೆ.


ಅಭಿವೃದ್ಧಿ ಸೆಟಪ್

ಪೂರ್ವಾಪೇಕ್ಷಿತಗಳು

  • 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 ಔಟ್ಪುಟ್ (gitignore ಮಾಡಲಾಗಿದೆ, distDir = .build/next) ಇಲ್ಲ
dist/ ವಿತರಿಸಬಹುದಾದ ಬಂಡಲ್ — assembleStandalone ಮೂಲಕ ಜೋಡಿಸಲಾಗಿದೆ (gitignore ಮಾಡಲಾಗಿದೆ) ಇಲ್ಲ

ಬಿಲ್ಡ್ ಪೈಪ್ಲೈನ್ ಒಂದೇ ಪಾಸ್ನಲ್ಲಿ ನಡೆಯುತ್ತದೆ:

npm run build
  └─ next build → .build/next/standalone  (Next.js ಔಟ್ಪುಟ್)
  └─ assembleStandalone()                 (ಸ್ವತಂತ್ರ + ಸ್ಥಿರ + ಸಾರ್ವಜನಿಕ + ಸ್ಥಳೀಯ ಅಸೆಟ್ಗಳನ್ನು ನಕಲಿಸುತ್ತದೆ)
       └─ ಔಟ್ಪುಟ್: 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/).

ಡೀಫಾಲ್ಟ್ URLಗಳು:

  • ಡ್ಯಾಶ್ಬೋರ್ಡ್: http://localhost:20128/dashboard
  • API: http://localhost:20128/v1

Git ಕಾರ್ಯಪ್ರವಾಹ

⚠️ main ಗೆ ನೇರವಾಗಿ ಎಂದಿಗೂ commit ಮಾಡಬೇಡಿ. ಯಾವಾಗಲೂ feature ಶಾಖೆಗಳನ್ನು ಬಳಸಿ.

PR ಆಧಾರ: ಸಕ್ರಿಯ release/vX.Y.Z ಶಾಖೆಯನ್ನು ಗುರಿಯಾಗಿಸಿ (main ಅಲ್ಲ). ಪ್ರತಿ-ಶಾಖೆಗೆ-release + ರವಾನಿಸುವಾಗ-tag ಮಾದರಿಗಾಗಿ docs/ops/BRANCHING_MODEL.md ನೋಡಿ.

# ಸಕ್ರಿಯ release ತುದಿಯಿಂದ ಶಾಖೆಯನ್ನು ರಚಿಸಿ (ಉದಾಹರಣೆ: 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, ಅವಲಂಬನೆಗಳು

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.


ಪರೀಕ್ಷೆಗಳನ್ನು ಚಲಾಯಿಸುವುದು

# ಎಲ್ಲಾ ಪರೀಕ್ಷೆಗಳು (unit + vitest + ecosystem + e2e)
npm run test:all

# ಒಂದೇ ಪರೀಕ್ಷಾ ಫೈಲ್ (Node.js ಸ್ಥಳೀಯ test runner — ಹೆಚ್ಚಿನ ಪರೀಕ್ಷೆಗಳು ಇದನ್ನು ಬಳಸುತ್ತವೆ)
node --import tsx/esm --test tests/unit/your-file.test.ts

# ನಿಮ್ಮ ಬದಲಾವಣೆಯಿಂದ ಪ್ರಭಾವಿತವಾದ unit ಪರೀಕ್ಷೆಗಳು ಮಾತ್ರ (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 ಫೈಲ್ (tsconfig, package.json, …) ಅಥವಾ map ಮಾಡದ
# 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: statements/lines/functions/branches ಗೆ 60%
npm run test:coverage
npm run coverage:report

# Lint + format ಪರಿಶೀಲನೆ
npm run lint
npm run check

# Gate ಮಾಡಲಾದ ನೈಜ-upstream combo smoke (VPS ಪ್ರವೇಶ + ನೈಜ provider credits ಅಗತ್ಯವಿದೆ)
# ನೈಜ providers ಅನ್ನು ಬಳಸುತ್ತದೆ — ಸ್ವಲ್ಪ ವೆಚ್ಚವಾಗುತ್ತದೆ. CI ನಲ್ಲಿ ಎಂದಿಗೂ ಚಲಿಸುವುದಿಲ್ಲ. Gate ಇಲ್ಲದಿದ್ದರೆ ಸ್ವಚ್ಛವಾಗಿ ಬಿಟ್ಟುಬಿಡುತ್ತದೆ.
# ಅಗತ್ಯವಿರುವುದು: ssh root@192.168.0.15 ಪ್ರವೇಶ (VPS ನಿಂದ read-only DB snapshot ಅನ್ನು source ಮಾಡುತ್ತದೆ).
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 ಪ್ರವೇಶ (SSH sqlite ಮೂಲಕ combos ರಚಿಸಲಾಗುತ್ತದೆ/ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ).
# ನೈಜ 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)

Coverage ಟಿಪ್ಪಣಿಗಳು:

  • npm run test:coverage ಮುಖ್ಯ unit test suite ಗಾಗಿ source coverage ಅನ್ನು ಅಳೆಯುತ್ತದೆ, tests/** ಅನ್ನು ಹೊರತುಪಡಿಸುತ್ತದೆ ಮತ್ತು open-sse/** ಅನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ
  • Pull requests ಗಳು statements/lines/functions/branches ಗಾಗಿ coverage gate ಅನ್ನು 60%+ ನಲ್ಲಿ ಉಳಿಸಬೇಕು
  • PR ಒಂದು src/, open-sse/, electron/, ಅಥವಾ bin/ ನಲ್ಲಿನ production code ಅನ್ನು ಬದಲಾಯಿಸಿದರೆ, ಅದೇ PR ನಲ್ಲಿ automated tests ಅನ್ನು ಸೇರಿಸಬೇಕು ಅಥವಾ ನವೀಕರಿಸಬೇಕು
  • npm run coverage:report ಇತ್ತೀಚಿನ coverage run ನಿಂದ ವಿವರವಾದ file-by-file ವರದಿಯನ್ನು ಮುದ್ರಿಸುತ್ತದೆ
  • 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 ಪರಿಶೀಲನೆಗಳು ಈಗಾಗಲೇ ನಿಮಗೆ ನೀಡದ ಯಾವುದೇ ಹೆಚ್ಚುವರಿ ಸಂಕೇತ ದೊರೆಯುವುದಿಲ್ಲ ಮತ್ತು ಸಣ್ಣ ಯಂತ್ರಗಳಲ್ಲಿ ಅದು host ಅನ್ನು ಪೂರ್ತಿಯಾಗಿ ಬಳಸಬಹುದು (#8084):

  • ನಿಮ್ಮ ಬದಲಾವಣೆಯನ್ನು ಒಳಗೊಳ್ಳುವ test files ಅನ್ನು ಚಲಾಯಿಸಿ: node --import tsx/esm --test tests/unit/<file>.test.ts
  • npm run lint ಚಲಾಯಿಸಿ
  • production code ಬದಲಾದಾಗಲೆಲ್ಲ ಅದೇ PR ನಲ್ಲಿ automated tests ಅನ್ನು ಸೇರಿಸಿ ಅಥವಾ ನವೀಕರಿಸಿ
  • production code ಬದಲಾದಾಗ ಬದಲಾಯಿಸಿದ ಅಥವಾ ಸೇರಿಸಿದ test files ಅನ್ನು PR ವಿವರಣೆಯಲ್ಲಿ ಸೇರಿಸಿ
  • project secrets ಅನ್ನು CI ನಲ್ಲಿ configure ಮಾಡಿದ್ದರೆ PR ನಲ್ಲಿನ SonarQube ಫಲಿತಾಂಶವನ್ನು ಪರಿಶೀಲಿಸಿ

ಪ್ರಸ್ತುತ test ಸ್ಥಿತಿ: ಇವುಗಳನ್ನು ಒಳಗೊಂಡ 122 unit test files:

  • Provider translators ಮತ್ತು format conversion
  • 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 — ಕಮಿಟ್ ಮಾಡುವ ಮೊದಲು npm run lint ಅನ್ನು ಚಲಾಯಿಸಿ
  • Prettier — ಕಮಿಟ್ ವೇಳೆ lint-staged ಮೂಲಕ ಸ್ವಯಂ-ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡಲಾಗುತ್ತದೆ (2 ಸ್ಪೇಸ್ಗಳು, ಸೆಮಿಕೋಲನ್ಗಳು, ಡಬಲ್ ಕೋಟ್ಗಳು, 100 ಅಕ್ಷರ ಅಗಲ, es5 ಟ್ರೇಲಿಂಗ್ ಕಾಮಾಗಳು)
  • TypeScript — ಎಲ್ಲಾ src/ ಕೋಡ್ .ts/.tsx ಅನ್ನು ಬಳಸುತ್ತದೆ; open-sse/ .ts/.js ಅನ್ನು ಬಳಸುತ್ತದೆ; TSDoc (@param, @returns, @throws) ಮೂಲಕ ದಾಖಲಿಸಿ
  • eval() ಬೇಡ — ESLint no-eval, no-implied-eval, no-new-func ಅನ್ನು ಜಾರಿಗೊಳಿಸುತ್ತದೆ
  • Zod ಮೌಲ್ಯಮಾಪನ — ಎಲ್ಲಾ API ಇನ್ಪುಟ್ ಮೌಲ್ಯಮಾಪನಕ್ಕಾಗಿ Zod v4 ಸ್ಕೀಮಾಗಳನ್ನು ಬಳಸಿ
  • ಹೆಸರಿಸುವಿಕೆ: ಫೈಲ್ಗಳು = camelCase/kebab-case, ಕಾಂಪೊನೆಂಟ್ಗಳು = PascalCase, ಸ್ಥಿರಾಂಕಗಳು = UPPER_SNAKE

ದೋಷ ನಿರ್ವಹಣೆ / ಖಾಲಿ catch ಬ್ಲಾಕ್ಗಳು

ವಿವರಣೆಯಿಲ್ಲದೆ catch ಅನ್ನು ಎಂದಿಗೂ ಬಿಡಬೇಡಿ. ಅದನ್ನು ಎರಡು ವರ್ಗಗಳಲ್ಲಿ ಒಂದಕ್ಕೆ ವರ್ಗೀಕರಿಸಿ (ಇದು "SSE ಸ್ಟ್ರೀಮ್ಗಳಲ್ಲಿ ದೋಷಗಳನ್ನು ಎಂದಿಗೂ ಮೌನವಾಗಿ ನಿರ್ಲಕ್ಷಿಸಬೇಡಿ" ಎಂಬ ಕಟ್ಟುನಿಟ್ಟಿನ ನಿಯಮವನ್ನು ಕಾರ್ಯರೂಪಕ್ಕೆ ತರುತ್ತದೆ):

  • ಉದ್ದೇಶಪೂರ್ವಕ (ನಮ್ಮದೇ ಆದ ಸಾಧ್ಯವಾದಷ್ಟು ಉತ್ತಮ ಕ್ಲೀನಪ್/ಟೆಲಿಮೆಟ್ರಿ) — ಇಲ್ಲಿ ವೈಫಲ್ಯವು ನಿರೀಕ್ಷಿತ ಮತ್ತು ನಿರುಪದ್ರವವಾಗಿದೆ; ಒಂದು ಸಾಲಿನ ಕಾರಣದ ಕಾಮೆಂಟ್ ಸೇರಿಸಿ, ಲಾಗಿಂಗ್ ಬೇಡ (ಪ್ರತಿ ವಿನಂತಿಯಲ್ಲೂ ಲಾಗ್ ಮಾಡುವುದರಿಂದ ಉಂಟಾಗುವ ಅನಗತ್ಯ ಗದ್ದಲವನ್ನು ಈ ಸಂಪ್ರದಾಯ ತಪ್ಪಿಸುತ್ತದೆ).

    } catch {} // ಕ್ಲೈಂಟ್ ಸಂಪರ್ಕ ಕಡಿತಗೊಂಡ ನಂತರ ಈಗಾಗಲೇ ಮುಚ್ಚಿದ ಕಂಟ್ರೋಲರ್ ಅನ್ನು ಮುಚ್ಚುವುದು ನಿರೀಕ್ಷಿತವಾಗಿದೆ
    
  • ಲಾಗ್ ಮಾಡಬೇಕು (ಬಾಹ್ಯ/ಕಾಲರ್ ಒದಗಿಸಿದ ಕೋಡ್, ಅಥವಾ ನಿರ್ಲಕ್ಷಿಸುವುದರಿಂದ ನಿಯಂತ್ರಣ ಹರಿವು ಬದಲಾಗುತ್ತದೆ) — ಸ್ಟ್ರೀಮ್ಗೆ ಅಡ್ಡಿಯಾಗದಂತೆ catch ಅನ್ನು ಉಳಿಸಿಕೊಳ್ಳಿ, ಆದರೆ ವೈಫಲ್ಯವನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಸಾಧ್ಯವಾಗುವಂತೆ ಸಂದರ್ಭಸಹಿತ console.debug/warn ಅನ್ನು ಹೊರಸೂಸಿ.

    } catch (e) {
      console.debug("[STREAM] onFailure ಕಾಲ್ಬ್ಯಾಕ್ ದೋಷ:", 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/              # ವಿನಂತಿ ಮಿಡಲ್ವೇರ್ (promptInjectionGuard)
├── mitm/                   # MITM ಪ್ರಾಕ್ಸಿ (ಪ್ರಮಾಣಪತ್ರ, DNS, ಗುರಿ ರೂಟಿಂಗ್)
├── shared/
│   ├── components/         # React ಕಾಂಪೊನೆಂಟ್ಗಳು (.tsx)
│   ├── constants/          # ಪೂರೈಕೆದಾರರ ವ್ಯಾಖ್ಯಾನಗಳು (329), MCP ಸ್ಕೋಪ್ಗಳು, 19 ರೂಟಿಂಗ್ ತಂತ್ರಗಳು
│   ├── utils/              # ಸರ್ಕ್ಯೂಟ್ ಬ್ರೇಕರ್, ಸ್ಯಾನಿಟೈಸರ್, ದೃಢೀಕರಣ ಸಹಾಯಕಗಳು
│   └── validation/         # Zod v4 ಸ್ಕೀಮಾಗಳು
└── sse/                    # SSE ಪ್ರಾಕ್ಸಿ ಪೈಪ್ಲೈನ್

open-sse/                   # @omniroute/open-sse ವರ್ಕ್ಸ್ಪೇಸ್
├── executors/              # 89 ಎಕ್ಸಿಕ್ಯೂಟರ್ ಅನುಷ್ಠಾನ ಮಾಡ್ಯೂಲ್ಗಳು
├── handlers/               # 11 ವಿನಂತಿ ಹ್ಯಾಂಡ್ಲರ್ಗಳು (ಚಾಟ್, ಪ್ರತಿಕ್ರಿಯೆಗಳು, ಎಂಬೆಡಿಂಗ್ಗಳು, ಚಿತ್ರಗಳು, ಇತ್ಯಾದಿ)
├── mcp-server/             # MCP ಸರ್ವರ್ (110 ಅನನ್ಯ ಟೂಲ್ಗಳು, 3 ಟ್ರಾನ್ಸ್ಪೋರ್ಟ್ಗಳು, 33 ಸ್ಕೋಪ್ಗಳು)
├── services/               # 178 ಉನ್ನತ-ಮಟ್ಟದ ಸೇವೆಗಳು (combo, autoCombo, rateLimitManager, ಇತ್ಯಾದಿ)
├── translator/             # ಸ್ವರೂಪ ಅನುವಾದಕಗಳು (OpenAI ↔ Claude ↔ Gemini ↔ Responses ↔ Ollama)
├── transformer/            # Responses API ಟ್ರಾನ್ಸ್ಫಾರ್ಮರ್
└── utils/                  # 22 ಉಪಯುಕ್ತತಾ ಮಾಡ್ಯೂಲ್ಗಳು (ಸ್ಟ್ರೀಮ್, TLS, ಪ್ರಾಕ್ಸಿ, ಲಾಗಿಂಗ್)

electron/                   # Electron ಡೆಸ್ಕ್ಟಾಪ್ ಆ್ಯಪ್ (ಬಹು-ಪ್ಲಾಟ್ಫಾರ್ಮ್)

tests/
├── unit/                   # Node.js ಟೆಸ್ಟ್ ರನ್ನರ್ (1,574 ಟೆಸ್ಟ್ ಫೈಲ್ಗಳು)
├── integration/            # ಇಂಟಿಗ್ರೇಶನ್ ಟೆಸ್ಟ್ಗಳು
├── e2e/                    # Playwright ಟೆಸ್ಟ್ಗಳು
├── security/               # ಭದ್ರತಾ ಟೆಸ್ಟ್ಗಳು
├── translator/             # ಅನುವಾದಕ-ನಿರ್ದಿಷ್ಟ ಟೆಸ್ಟ್ಗಳು
└── load/                   # ಲೋಡ್ ಟೆಸ್ಟ್ಗಳು

docs/
├── adr/                     # ಆರ್ಕಿಟೆಕ್ಚರ್ ನಿರ್ಧಾರ ದಾಖಲೆಗಳು
├── architecture/            # ಸಿಸ್ಟಮ್ ಆರ್ಕಿಟೆಕ್ಚರ್ ಮತ್ತು ಸ್ಥಿತಿಸ್ಥಾಪಕತ್ವ
├── comparison/              # OmniRoute ಮತ್ತು ಪರ್ಯಾಯಗಳ ಹೋಲಿಕೆ
├── compression/             # ಸಂಕೋಚನ ಮಾರ್ಗದರ್ಶಿಗಳು ಮತ್ತು ನಿಯಮಗಳು
├── dev/                     # ಅಭಿವೃದ್ಧಿ ಮಾರ್ಗದರ್ಶಿಗಳು
├── diagrams/                # ಆರ್ಕಿಟೆಕ್ಚರ್ ರೇಖಾಚಿತ್ರಗಳು
├── frameworks/              # MCP, A2A, OpenCode, Memory, Skills
├── guides/                  # ಬಳಕೆದಾರ ಮಾರ್ಗದರ್ಶಿ, Docker, ಸೆಟಪ್, ಸಮಸ್ಯೆ ನಿವಾರಣೆ
├── i18n/                    # ಅಂತರರಾಷ್ಟ್ರೀಕೃತ README ಅನುವಾದಗಳು
├── marketing/               # ಮಾರ್ಕೆಟಿಂಗ್ ಸಾಮಗ್ರಿಗಳು
├── ops/                     # ನಿಯೋಜನೆ, ಪ್ರಾಕ್ಸಿ, ಕವರೇಜ್, ಬಿಡುಗಡೆಗಳು
├── providers/               # ಪೂರೈಕೆದಾರ-ನಿರ್ದಿಷ್ಟ ದಾಖಲೆಗಳು
├── reference/               # API ಉಲ್ಲೇಖ, env vars, CLI ಟೂಲ್ಗಳು, ಉಚಿತ ಹಂತಗಳು
├── releases/                # ಬಿಡುಗಡೆ ಟಿಪ್ಪಣಿಗಳು
├── routing/                 # ಸ್ವಯಂ-ಕಾಂಬೊ ಎಂಜಿನ್, ರೀಸನಿಂಗ್ ರೀಪ್ಲೇ
├── screenshots/             # ಡ್ಯಾಶ್ಬೋರ್ಡ್ ಸ್ಕ್ರೀನ್ಶಾಟ್ಗಳು
├── security/                # ಗಾರ್ಡ್ರೇಲ್ಗಳು, ಅನುಸರಣೆ, ಸ್ಟೆಲ್ತ್, ಟೋಕನ್ಗಳು
└── specs/                   # ವಿನ್ಯಾಸ ವಿಶೇಷಣಗಳು

ಹೊಸ Provider ಸೇರಿಸುವುದು

ಹಂತ 1: Provider Constants ನೋಂದಾಯಿಸಿ

src/shared/constants/providers.ts ಗೆ ಸೇರಿಸಿ — module load ಸಮಯದಲ್ಲಿ Zod ಮೂಲಕ ಮೌಲ್ಯೀಕರಿಸಲಾಗುತ್ತದೆ.

ಹಂತ 2: Executor ಸೇರಿಸಿ (ಕಸ್ಟಮ್ ಲಾಜಿಕ್ ಅಗತ್ಯವಿದ್ದರೆ)

base executor ಅನ್ನು ವಿಸ್ತರಿಸುವ executor ಅನ್ನು open-sse/executors/your-provider.ts ನಲ್ಲಿ ರಚಿಸಿ.

ಹಂತ 3: Translator ಸೇರಿಸಿ (OpenAI ಅಲ್ಲದ ಸ್ವರೂಪವಾಗಿದ್ದರೆ)

request/response translators ಅನ್ನು open-sse/translator/ ನಲ್ಲಿ ರಚಿಸಿ.

ಹಂತ 4: OAuth Config ಸೇರಿಸಿ (OAuth ಆಧಾರಿತವಾಗಿದ್ದರೆ)

OAuth credentials ಅನ್ನು src/lib/oauth/constants/oauth.ts ನಲ್ಲಿ ಮತ್ತು service ಅನ್ನು src/lib/oauth/services/ ನಲ್ಲಿ ಸೇರಿಸಿ.

upstream provider ತನ್ನ ಸಾರ್ವಜನಿಕ CLI / browser bundle ಒಳಗೆ ಸಾರ್ವಜನಿಕ OAuth client_id/secret ಅಥವಾ Firebase Web API key ಅನ್ನು ವಿತರಿಸಿದರೆ, ಅದನ್ನು string literal ಆಗಿ ಎಂದಿಗೂ embed ಮಾಡಬೇಡಿ. open-sse/utils/publicCreds.ts ನಲ್ಲಿರುವ resolvePublicCred() ಅನ್ನು ಬಳಸಿ ಮತ್ತು EMBEDDED_DEFAULTS ಗೆ masked byte entry ಅನ್ನು ಸೇರಿಸಿ. ಸಂಪೂರ್ಣ ಕಡ್ಡಾಯ workflow ಅನ್ನು docs/security/PUBLIC_CREDS.md ನಲ್ಲಿ ದಾಖಲಿಸಲಾಗಿದೆ.

handlers/executors ಒಳಗೆ, client ಅನ್ನು ತಲುಪುವ error messages ಗಳು open-sse/utils/error.ts ನಲ್ಲಿರುವ buildErrorBody() / sanitizeErrorMessage() ಮೂಲಕ ಹಾದುಹೋಗಬೇಕು — ಕಚ್ಚಾ err.stack ಅಥವಾ err.message ಅನ್ನು Response body ಯಲ್ಲಿ ಎಂದಿಗೂ ಇರಿಸಬೇಡಿ. docs/security/ERROR_SANITIZATION.md ನೋಡಿ.

ಹಂತ 5: Models ನೋಂದಾಯಿಸಿ

model definitions ಅನ್ನು open-sse/config/providerRegistry.ts ನಲ್ಲಿ ಸೇರಿಸಿ.

ಹಂತ 6: Tests ಸೇರಿಸಿ

ಕನಿಷ್ಠ ಈ ಕೆಳಗಿನವುಗಳನ್ನು ಒಳಗೊಂಡ unit tests ಅನ್ನು tests/unit/ ನಲ್ಲಿ ಬರೆಯಿರಿ:

  • Provider ನೋಂದಣಿ
  • Request/response ಅನುವಾದ
  • Error ನಿರ್ವಹಣೆ

Pull Request ಪರಿಶೀಲನಾಪಟ್ಟಿ

  • Tests ಯಶಸ್ವಿಯಾಗುತ್ತವೆ (npm test)
  • Linting ಯಶಸ್ವಿಯಾಗುತ್ತದೆ (npm run lint)
  • Build ಯಶಸ್ವಿಯಾಗುತ್ತದೆ (npm run build)
  • ಹೊಸ public functions ಮತ್ತು interfaces ಗಾಗಿ TypeScript types ಸೇರಿಸಲಾಗಿದೆ
  • hardcoded secrets ಅಥವಾ fallback values ಇಲ್ಲ
  • Public upstream credentials ಅನ್ನು resolvePublicCred() ಮೂಲಕ embed ಮಾಡಲಾಗಿದೆ (docs/security/PUBLIC_CREDS.md ನೋಡಿ), literals ಆಗಿ ಎಂದಿಗೂ ಅಲ್ಲ
  • Error responses ಗಳು buildErrorBody() / sanitizeErrorMessage() ಮೂಲಕ ಹಾದುಹೋಗುತ್ತವೆ — response bodies ನಲ್ಲಿ ಕಚ್ಚಾ stack traces ಇಲ್ಲ (docs/security/ERROR_SANITIZATION.md ನೋಡಿ)
  • Shell commands (exec / spawn) runtime values ಅನ್ನು string interpolation ಮೂಲಕವಲ್ಲ, env ಮೂಲಕ ರವಾನಿಸುತ್ತವೆ
  • ಎಲ್ಲಾ inputs ಅನ್ನು Zod schemas ಮೂಲಕ ಮೌಲ್ಯೀಕರಿಸಲಾಗಿದೆ
  • ಬಳಕೆದಾರರಿಗೆ ಗೋಚರಿಸುವ ಬದಲಾವಣೆಗಳಿಗಾಗಿ changelog.d/{features|fixes|maintenance}/<PR>-<slug>.md ಅಡಿಯಲ್ಲಿ Changelog fragment ಸೇರಿಸಲಾಗಿದೆ (changelog.d/README.md ನೋಡಿ) — CHANGELOG.md ಅನ್ನು ನೇರವಾಗಿ ತಿದ್ದುಪಡಿ ಮಾಡಬೇಡಿ; fragments ಅನ್ನು release ಸಮಯದಲ್ಲಿ ಒಟ್ಟುಗೂಡಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಅವು PR ಗಳ ನಡುವೆ ಎಂದಿಗೂ ಸಂಘರ್ಷಿಸುವುದಿಲ್ಲ
  • Documentation ನವೀಕರಿಸಲಾಗಿದೆ (ಅನ್ವಯಿಸಿದರೆ)
  • ಯಾವುದೇ ಹೊಸ CodeQL / Secret-Scanning alerts ತೆರೆಯಲಾಗಿಲ್ಲ, ಅಥವಾ ಪ್ರತಿಯೊಂದನ್ನೂ ಸಂಬಂಧಿತ docs/security/ doc ಅನ್ನು ಉಲ್ಲೇಖಿಸುವ ತಾಂತ್ರಿಕ ಸಮರ್ಥನೆಯೊಂದಿಗೆ ವಜಾಗೊಳಿಸಲಾಗಿದೆ
  • child processes ಅನ್ನು spawn ಮಾಡುವ routes (/api/mcp/, /api/cli-tools/runtime/) ಅನ್ನು src/server/authz/routeGuard.ts ನಲ್ಲಿ isLocalOnlyPath() ಎಂದು ವರ್ಗೀಕರಿಸಲಾಗಿದೆ — ಕಠಿಣ ನಿಯಮ #15 ನೋಡಿ
  • commit messages ನಲ್ಲಿ Co-Authored-By trailers ಇಲ್ಲ — commits ಗಳು repository ಮಾಲೀಕರ Git identity ಅಡಿಯಲ್ಲಿ ಮಾತ್ರ ಕಾಣಿಸಬೇಕು (ಕಠಿಣ ನಿಯಮ #16)

ಬಿಡುಗಡೆ

ಬಿಡುಗಡೆಗಳನ್ನು /generate-release ವರ್ಕ್ಫ್ಲೋ ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ. ಹೊಸ GitHub Release ರಚಿಸಿದಾಗ, GitHub Actions ಮೂಲಕ ಪ್ಯಾಕೇಜ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ npm ಗೆ ಪ್ರಕಟವಾಗುತ್ತದೆ.

VPS ನಿಯೋಜನೆಗಳಿಗಾಗಿ, npm run build ಬದಲಿಗೆ npm run build:release ಬಳಸಿ — ಇದು ಸಂಪೂರ್ಣವಾಗಿ ಮರುನಿರ್ಮಿಸುತ್ತದೆ, ಬಂಡಲ್ ಅನ್ನು dist/ ಒಳಗೆ ಜೋಡಿಸುತ್ತದೆ ಮತ್ತು dist/BUILD_SHA ಸೆಂಟಿನಲ್ ಅನ್ನು ಬರೆಯುತ್ತದೆ. ನಂತರ dist/ ಅನ್ನು ದೂರಸ್ಥ app/ ಡೈರೆಕ್ಟರಿಗೆ rsync ಮಾಡುವ /deploy-vps-*-cc ಸ್ಕಿಲ್ಗಳನ್ನು ಬಳಸಿ.


ಸಹಾಯ ಪಡೆಯುವುದು