Skip to content

Latest commit

 

History

History
435 lines (324 loc) · 29.3 KB

CONTRIBUTING.md

File metadata and controls

435 lines (324 loc) · 29.3 KB

Contributing to OmniRoute (አማርኛ)

🌐 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

Clone ማድረግ እና መጫን

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 ቅንብሮች

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 ይጠቀሙ።

የ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

የGit የሥራ ፍሰት

⚠️ በፍጹም በቀጥታ ወደ main commit አታድርጉ። ሁልጊዜ feature branch-ዎችን ይጠቀሙ።

የPR base: ንቁውን release/vX.Y.Z branch (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 ይክፈቱ

የBranch አሰያየም

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

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ን ይመልከቱ

የPull Request መስፈርቶች

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() አይጠቀሙ — ESLint no-eval፣ no-implied-eval፣ no-new-funcን ያስገድዳል
  • የZod ማረጋገጫ — ለሁሉም የAPI ግብዓት ማረጋገጫዎች የZod v4 ንድፎችን ይጠቀሙ
  • ስያሜ፦ ፋይሎች = camelCase/kebab-case፣ ኮምፖነንቶች = PascalCase፣ ቋሚዎች = UPPER_SNAKE

የስህተት አያያዝ / ባዶ catch ብሎኮች

አንድን 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/                   # የንድፍ ዝርዝር መግለጫዎች

አዲስ አቅራቢ ማከል

ደረጃ 1፦ የአቅራቢ ቋሚዎችን ይመዝግቡ

ወደ src/shared/constants/providers.ts ያክሉ — ሞጁሉ ሲጫን በZod የሚረጋገጥ።

ደረጃ 2፦ Executor ያክሉ (ብጁ ሎጂክ ካስፈለገ)

መሠረታዊውን executor የሚያራዝም executor በopen-sse/executors/your-provider.ts ውስጥ ይፍጠሩ።

ደረጃ 3፦ Translator ያክሉ (OpenAI ያልሆነ ቅርጸት ከሆነ)

የጥያቄ/ምላሽ translators በopen-sse/translator/ ውስጥ ይፍጠሩ።

ደረጃ 4፦ OAuth ውቅር ያክሉ (በOAuth ላይ የተመሠረተ ከሆነ)

የ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ን ይመልከቱ።

ደረጃ 5፦ Modelsን ይመዝግቡ

የmodel ትርጓሜዎችን በopen-sse/config/providerRegistry.ts ውስጥ ያክሉ።

ደረጃ 6፦ Tests ያክሉ

ቢያንስ የሚከተሉትን የሚሸፍኑ unit tests በtests/unit/ ውስጥ ይጻፉ፦

  • የአቅራቢ ምዝገባ
  • የጥያቄ/ምላሽ ትርጉም
  • የስህተት አያያዝ

የPull Request ማረጋገጫ ዝርዝር

  • 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-By trailers የሉም — 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 ክህሎቶች ይጠቀሙ።


እገዛ ማግኘት