mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-26 09:52:11 +03:00
docs(i18n): improve Ukrainian (uk-UA) translation quality
Complete translation and terminology improvements for Ukrainian documentation: - docs/i18n/uk-UA/README.md: full Ukrainian translation - docs/i18n/uk-UA/SECURITY.md: full Ukrainian translation - docs/i18n/uk-UA/docs/A2A-SERVER.md: full Ukrainian translation - docs/i18n/uk-UA/docs/API_REFERENCE.md: full Ukrainian translation - docs/i18n/uk-UA/docs/AUTO-COMBO.md: full Ukrainian translation - docs/i18n/uk-UA/docs/USER_GUIDE.md: complete translation (966 lines) Changes: - Translated all English content to Ukrainian - Preserved all code examples, commands, and technical terms - Maintained proper Ukrainian orthography with diacritical marks
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,159 +1,159 @@
|
||||
# Security Policy (Українська)
|
||||
# Політика безпеки
|
||||
|
||||
🌐 **Languages:** 🇺🇸 [English](../../../SECURITY.md) · 🇪🇸 [es](../es/SECURITY.md) · 🇫🇷 [fr](../fr/SECURITY.md) · 🇩🇪 [de](../de/SECURITY.md) · 🇮🇹 [it](../it/SECURITY.md) · 🇷🇺 [ru](../ru/SECURITY.md) · 🇨🇳 [zh-CN](../zh-CN/SECURITY.md) · 🇯🇵 [ja](../ja/SECURITY.md) · 🇰🇷 [ko](../ko/SECURITY.md) · 🇸🇦 [ar](../ar/SECURITY.md) · 🇮🇳 [hi](../hi/SECURITY.md) · 🇮🇳 [in](../in/SECURITY.md) · 🇹🇭 [th](../th/SECURITY.md) · 🇻🇳 [vi](../vi/SECURITY.md) · 🇮🇩 [id](../id/SECURITY.md) · 🇲🇾 [ms](../ms/SECURITY.md) · 🇳🇱 [nl](../nl/SECURITY.md) · 🇵🇱 [pl](../pl/SECURITY.md) · 🇸🇪 [sv](../sv/SECURITY.md) · 🇳🇴 [no](../no/SECURITY.md) · 🇩🇰 [da](../da/SECURITY.md) · 🇫🇮 [fi](../fi/SECURITY.md) · 🇵🇹 [pt](../pt/SECURITY.md) · 🇷🇴 [ro](../ro/SECURITY.md) · 🇭🇺 [hu](../hu/SECURITY.md) · 🇧🇬 [bg](../bg/SECURITY.md) · 🇸🇰 [sk](../sk/SECURITY.md) · 🇺🇦 [uk-UA](../uk-UA/SECURITY.md) · 🇮🇱 [he](../he/SECURITY.md) · 🇵🇭 [phi](../phi/SECURITY.md) · 🇧🇷 [pt-BR](../pt-BR/SECURITY.md) · 🇨🇿 [cs](../cs/SECURITY.md) · 🇹🇷 [tr](../tr/SECURITY.md)
|
||||
|
||||
---
|
||||
|
||||
## Reporting Vulnerabilities
|
||||
## Повідомлення про вразливості
|
||||
|
||||
If you discover a security vulnerability in OmniRoute, please report it responsibly:
|
||||
Якщо ви виявили вразливість безпеки в OmniRoute, будь ласка, повідомте про це відповідально:
|
||||
|
||||
1. **DO NOT** open a public GitHub issue
|
||||
2. Use [GitHub Security Advisories](https://github.com/diegosouzapw/OmniRoute/security/advisories/new)
|
||||
3. Include: description, reproduction steps, and potential impact
|
||||
1. **НЕ** створюйте публічний GitHub issue
|
||||
2. Використовуйте [GitHub Security Advisories](https://github.com/diegosouzapw/OmniRoute/security/advisories/new)
|
||||
3. Включіть: опис, кроки відтворення та потенційний вплив
|
||||
|
||||
## Response Timeline
|
||||
## Часові рамки відповіді
|
||||
|
||||
| Stage | Target |
|
||||
| ------------------- | --------------------------- |
|
||||
| Acknowledgment | 48 hours |
|
||||
| Triage & Assessment | 5 business days |
|
||||
| Patch Release | 14 business days (critical) |
|
||||
| Етап | Цільовий термін |
|
||||
| --------------------- | ----------------------- |
|
||||
| Підтвердження | 48 годин |
|
||||
| Сортування та оцінка | 5 робочих днів |
|
||||
| Випуск патчу | 14 робочих днів (критичні) |
|
||||
|
||||
## Supported Versions
|
||||
## Підтримувані версії
|
||||
|
||||
| Version | Support Status |
|
||||
| ------- | -------------- |
|
||||
| 3.6.x | ✅ Active |
|
||||
| 3.5.x | ✅ Security |
|
||||
| < 3.5.0 | ❌ Unsupported |
|
||||
| Версія | Статус підтримки |
|
||||
| ------- | ---------------- |
|
||||
| 3.6.x | ✅ Активна |
|
||||
| 3.5.x | ✅ Безпека |
|
||||
| < 3.5.0 | ❌ Не підтримується |
|
||||
|
||||
---
|
||||
|
||||
## Security Architecture
|
||||
## Архітектура безпеки
|
||||
|
||||
OmniRoute implements a multi-layered security model:
|
||||
OmniRoute реалізує багаторівневу модель безпеки:
|
||||
|
||||
```
|
||||
Request → CORS → API Key Auth → Prompt Injection Guard → Input Sanitizer → Rate Limiter → Circuit Breaker → Provider
|
||||
Запит → CORS → API Key Auth → Prompt Injection Guard → Input Sanitizer → Rate Limiter → Circuit Breaker → Провайдер
|
||||
```
|
||||
|
||||
### 🔐 Authentication & Authorization
|
||||
### 🔐 Автентифікація та авторизація
|
||||
|
||||
| Feature | Implementation |
|
||||
| Функція | Реалізація |
|
||||
| -------------------- | ---------------------------------------------------------- |
|
||||
| **Dashboard Login** | Password-based auth with JWT tokens (HttpOnly cookies) |
|
||||
| **API Key Auth** | HMAC-signed keys with CRC validation |
|
||||
| **OAuth 2.0 + PKCE** | Secure provider auth (Claude, Codex, Gemini, Cursor, etc.) |
|
||||
| **Token Refresh** | Automatic OAuth token refresh before expiry |
|
||||
| **Secure Cookies** | `AUTH_COOKIE_SECURE=true` for HTTPS environments |
|
||||
| **MCP Scopes** | 10 granular scopes for MCP tool access control |
|
||||
| **Вхід у панель** | Автентифікація на основі пароля з JWT токенами (HttpOnly cookies) |
|
||||
| **API Key Auth** | HMAC-підписані ключі з CRC валідацією |
|
||||
| **OAuth 2.0 + PKCE** | Безпечна автентифікація провайдерів (Claude, Codex, Gemini, Cursor тощо) |
|
||||
| **Оновлення токенів** | Автоматичне оновлення OAuth токенів перед закінченням терміну дії |
|
||||
| **Безпечні cookies** | `AUTH_COOKIE_SECURE=true` для HTTPS середовищ |
|
||||
| **MCP Scopes** | 10 детальних областей для контролю доступу до інструментів MCP |
|
||||
|
||||
### 🛡️ Encryption at Rest
|
||||
### 🛡️ Шифрування в стані спокою
|
||||
|
||||
All sensitive data stored in SQLite is encrypted using **AES-256-GCM** with scrypt key derivation:
|
||||
Всі чутливі дані, що зберігаються в SQLite, шифруються за допомогою **AES-256-GCM** з похідною ключа scrypt:
|
||||
|
||||
- API keys, access tokens, refresh tokens, and ID tokens
|
||||
- Versioned format: `enc:v1:<iv>:<ciphertext>:<authTag>`
|
||||
- Passthrough mode (plaintext) when `STORAGE_ENCRYPTION_KEY` is not set
|
||||
- API ключі, токени доступу, токени оновлення та ID токени
|
||||
- Версійний формат: `enc:v1:<iv>:<ciphertext>:<authTag>`
|
||||
- Режим прямого проходження (plaintext), коли `STORAGE_ENCRYPTION_KEY` не встановлено
|
||||
|
||||
```bash
|
||||
# Generate encryption key:
|
||||
# Генерація ключа шифрування:
|
||||
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)
|
||||
```
|
||||
|
||||
### 🧠 Prompt Injection Guard
|
||||
### 🧠 Захист від Prompt Injection
|
||||
|
||||
Middleware that detects and blocks prompt injection attacks in LLM requests:
|
||||
Middleware, який виявляє та блокує атаки prompt injection у запитах до LLM:
|
||||
|
||||
| Pattern Type | Severity | Example |
|
||||
| ------------------- | -------- | ---------------------------------------------- |
|
||||
| System Override | High | "ignore all previous instructions" |
|
||||
| Role Hijack | High | "you are now DAN, you can do anything" |
|
||||
| Delimiter Injection | Medium | Encoded separators to break context boundaries |
|
||||
| DAN/Jailbreak | High | Known jailbreak prompt patterns |
|
||||
| Instruction Leak | Medium | "show me your system prompt" |
|
||||
| Тип шаблону | Серйозність | Приклад |
|
||||
| ------------------- | ----------- | ---------------------------------------------- |
|
||||
| Перевизначення системи | Висока | "ignore all previous instructions" |
|
||||
| Захоплення ролі | Висока | "you are now DAN, you can do anything" |
|
||||
| Ін'єкція роздільників | Середня | Закодовані роздільники для порушення меж контексту |
|
||||
| DAN/Jailbreak | Висока | Відомі шаблони jailbreak промптів |
|
||||
| Витік інструкцій | Середня | "show me your system prompt" |
|
||||
|
||||
Configure via dashboard (Settings → Security) or `.env`:
|
||||
Налаштування через панель (Налаштування → Безпека) або `.env`:
|
||||
|
||||
```env
|
||||
INPUT_SANITIZER_ENABLED=true
|
||||
INPUT_SANITIZER_MODE=block # warn | block | redact
|
||||
```
|
||||
|
||||
### 🔒 PII Redaction
|
||||
### 🔒 Редагування PII
|
||||
|
||||
Automatic detection and optional redaction of personally identifiable information:
|
||||
Автоматичне виявлення та опціональне редагування персональної інформації:
|
||||
|
||||
| PII Type | Pattern | Replacement |
|
||||
| Тип PII | Шаблон | Заміна |
|
||||
| ------------- | --------------------- | ------------------ |
|
||||
| Email | `user@domain.com` | `[EMAIL_REDACTED]` |
|
||||
| CPF (Brazil) | `123.456.789-00` | `[CPF_REDACTED]` |
|
||||
| CNPJ (Brazil) | `12.345.678/0001-00` | `[CNPJ_REDACTED]` |
|
||||
| Credit Card | `4111-1111-1111-1111` | `[CC_REDACTED]` |
|
||||
| Phone | `+55 11 99999-9999` | `[PHONE_REDACTED]` |
|
||||
| SSN (US) | `123-45-6789` | `[SSN_REDACTED]` |
|
||||
| CPF (Бразилія) | `123.456.789-00` | `[CPF_REDACTED]` |
|
||||
| CNPJ (Бразилія) | `12.345.678/0001-00` | `[CNPJ_REDACTED]` |
|
||||
| Кредитна картка | `4111-1111-1111-1111` | `[CC_REDACTED]` |
|
||||
| Телефон | `+55 11 99999-9999` | `[PHONE_REDACTED]` |
|
||||
| SSN (США) | `123-45-6789` | `[SSN_REDACTED]` |
|
||||
|
||||
```env
|
||||
PII_REDACTION_ENABLED=true
|
||||
```
|
||||
|
||||
### 🌐 Network Security
|
||||
### 🌐 Мережева безпека
|
||||
|
||||
| Feature | Description |
|
||||
| ------------------------ | ---------------------------------------------------------------- |
|
||||
| **CORS** | Configurable origin control (`CORS_ORIGIN` env var, default `*`) |
|
||||
| **IP Filtering** | Allowlist/blocklist IP ranges in dashboard |
|
||||
| **Rate Limiting** | Per-provider rate limits with automatic backoff |
|
||||
| **Anti-Thundering Herd** | Mutex + per-connection locking prevents cascading 502s |
|
||||
| **TLS Fingerprint** | Browser-like TLS fingerprint spoofing to reduce bot detection |
|
||||
| **CLI Fingerprint** | Per-provider header/body ordering to match native CLI signatures |
|
||||
| Функція | Опис |
|
||||
| ------------------------ | ------------------------------------------------------------ |
|
||||
| **CORS** | Налаштовуваний контроль походження (`CORS_ORIGIN` env var, за замовчуванням `*`) |
|
||||
| **Фільтрація IP** | Білий/чорний список діапазонів IP у панелі |
|
||||
| **Обмеження швидкості** | Обмеження швидкості для кожного провайдера з автоматичним відкатом |
|
||||
| **Anti-Thundering Herd** | Mutex + блокування на з'єднання запобігає каскадним 502 |
|
||||
| **TLS Fingerprint** | Підробка TLS відбитка браузера для зменшення виявлення ботів |
|
||||
| **CLI Fingerprint** | Упорядкування заголовків/тіла для кожного провайдера для відповідності нативним CLI підписам |
|
||||
|
||||
### 🔌 Resilience & Availability
|
||||
### 🔌 Стійкість та доступність
|
||||
|
||||
| Feature | Description |
|
||||
| ----------------------- | ------------------------------------------------------------------ |
|
||||
| **Circuit Breaker** | 3-state (Closed → Open → Half-Open) per provider, SQLite-persisted |
|
||||
| **Request Idempotency** | 5-second dedup window for duplicate requests |
|
||||
| **Exponential Backoff** | Automatic retry with increasing delays |
|
||||
| **Health Dashboard** | Real-time provider health monitoring |
|
||||
| Функція | Опис |
|
||||
| ----------------------- | -------------------------------------------------------------- |
|
||||
| **Circuit Breaker** | 3-стани (Closed → Open → Half-Open) для кожного провайдера, збережено в SQLite |
|
||||
| **Ідемпотентність запитів** | 5-секундне вікно дедуплікації для дублікатів запитів |
|
||||
| **Експоненційний відкат** | Автоматичний повтор зі збільшенням затримок |
|
||||
| **Панель здоров'я** | Моніторинг здоров'я провайдерів у реальному часі |
|
||||
|
||||
### 📋 Compliance
|
||||
### 📋 Відповідність
|
||||
|
||||
| Feature | Description |
|
||||
| Функція | Опис |
|
||||
| ------------------ | ----------------------------------------------------------- |
|
||||
| **Log Retention** | Automatic cleanup after `CALL_LOG_RETENTION_DAYS` |
|
||||
| **No-Log Opt-out** | Per API key `noLog` flag disables request logging |
|
||||
| **Audit Log** | Administrative actions tracked in `audit_log` table |
|
||||
| **MCP Audit** | SQLite-backed audit logging for all MCP tool calls |
|
||||
| **Zod Validation** | All API inputs validated with Zod v4 schemas at module load |
|
||||
| **Зберігання логів** | Автоматичне очищення після `CALL_LOG_RETENTION_DAYS` |
|
||||
| **Відмова від логування** | Прапорець `noLog` для API ключа вимикає логування запитів |
|
||||
| **Журнал аудиту** | Адміністративні дії відстежуються в таблиці `audit_log` |
|
||||
| **MCP Audit** | Журнал аудиту на основі SQLite для всіх викликів інструментів MCP |
|
||||
| **Zod Validation** | Всі API входи валідуються схемами Zod v4 при завантаженні модуля |
|
||||
|
||||
---
|
||||
|
||||
## Required Environment Variables
|
||||
## Обов'язкові змінні середовища
|
||||
|
||||
All secrets must be set before starting the server. The server will **fail fast** if they are missing or weak.
|
||||
Всі секрети повинні бути встановлені перед запуском сервера. Сервер **швидко завершиться з помилкою**, якщо вони відсутні або слабкі.
|
||||
|
||||
```bash
|
||||
# REQUIRED — server will not start without these:
|
||||
JWT_SECRET=$(openssl rand -base64 48) # min 32 chars
|
||||
API_KEY_SECRET=$(openssl rand -hex 32) # min 16 chars
|
||||
# ОБОВ'ЯЗКОВО — сервер не запуститься без них:
|
||||
JWT_SECRET=$(openssl rand -base64 48) # мін 32 символи
|
||||
API_KEY_SECRET=$(openssl rand -hex 32) # мін 16 символів
|
||||
|
||||
# RECOMMENDED — enables encryption at rest:
|
||||
# РЕКОМЕНДОВАНО — вмикає шифрування в стані спокою:
|
||||
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)
|
||||
```
|
||||
|
||||
The server actively rejects known-weak values like `changeme`, `secret`, or `password`.
|
||||
Сервер активно відхиляє відомі слабкі значення, такі як `changeme`, `secret` або `password`.
|
||||
|
||||
---
|
||||
|
||||
## Docker Security
|
||||
## Безпека Docker
|
||||
|
||||
- Use non-root user in production
|
||||
- Mount secrets as read-only volumes
|
||||
- Never copy `.env` files into Docker images
|
||||
- Use `.dockerignore` to exclude sensitive files
|
||||
- Set `AUTH_COOKIE_SECURE=true` when behind HTTPS
|
||||
- Використовуйте не-root користувача у продакшені
|
||||
- Монтуйте секрети як томи тільки для читання
|
||||
- Ніколи не копіюйте файли `.env` у Docker образи
|
||||
- Використовуйте `.dockerignore` для виключення чутливих файлів
|
||||
- Встановіть `AUTH_COOKIE_SECURE=true` при роботі за HTTPS
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
@@ -170,10 +170,10 @@ docker run -d \
|
||||
|
||||
---
|
||||
|
||||
## Dependencies
|
||||
## Залежності
|
||||
|
||||
- Run `npm audit` regularly
|
||||
- Keep dependencies updated
|
||||
- The project uses `husky` + `lint-staged` for pre-commit checks
|
||||
- CI pipeline runs ESLint security rules on every push
|
||||
- Provider constants validated at module load via Zod (`src/shared/validation/providerSchema.ts`)
|
||||
- Регулярно запускайте `npm audit`
|
||||
- Тримайте залежності оновленими
|
||||
- Проєкт використовує `husky` + `lint-staged` для перевірок перед комітом
|
||||
- CI pipeline запускає правила безпеки ESLint при кожному push
|
||||
- Константи провайдерів валідуються при завантаженні модуля через Zod (`src/shared/validation/providerSchema.ts`)
|
||||
|
||||
@@ -1,38 +1,38 @@
|
||||
# OmniRoute A2A Server Documentation (Українська)
|
||||
# Документація A2A сервера OmniRoute
|
||||
|
||||
🌐 **Languages:** 🇺🇸 [English](../../../../docs/A2A-SERVER.md) · 🇪🇸 [es](../../es/docs/A2A-SERVER.md) · 🇫🇷 [fr](../../fr/docs/A2A-SERVER.md) · 🇩🇪 [de](../../de/docs/A2A-SERVER.md) · 🇮🇹 [it](../../it/docs/A2A-SERVER.md) · 🇷🇺 [ru](../../ru/docs/A2A-SERVER.md) · 🇨🇳 [zh-CN](../../zh-CN/docs/A2A-SERVER.md) · 🇯🇵 [ja](../../ja/docs/A2A-SERVER.md) · 🇰🇷 [ko](../../ko/docs/A2A-SERVER.md) · 🇸🇦 [ar](../../ar/docs/A2A-SERVER.md) · 🇮🇳 [hi](../../hi/docs/A2A-SERVER.md) · 🇮🇳 [in](../../in/docs/A2A-SERVER.md) · 🇹🇭 [th](../../th/docs/A2A-SERVER.md) · 🇻🇳 [vi](../../vi/docs/A2A-SERVER.md) · 🇮🇩 [id](../../id/docs/A2A-SERVER.md) · 🇲🇾 [ms](../../ms/docs/A2A-SERVER.md) · 🇳🇱 [nl](../../nl/docs/A2A-SERVER.md) · 🇵🇱 [pl](../../pl/docs/A2A-SERVER.md) · 🇸🇪 [sv](../../sv/docs/A2A-SERVER.md) · 🇳🇴 [no](../../no/docs/A2A-SERVER.md) · 🇩🇰 [da](../../da/docs/A2A-SERVER.md) · 🇫🇮 [fi](../../fi/docs/A2A-SERVER.md) · 🇵🇹 [pt](../../pt/docs/A2A-SERVER.md) · 🇷🇴 [ro](../../ro/docs/A2A-SERVER.md) · 🇭🇺 [hu](../../hu/docs/A2A-SERVER.md) · 🇧🇬 [bg](../../bg/docs/A2A-SERVER.md) · 🇸🇰 [sk](../../sk/docs/A2A-SERVER.md) · 🇺🇦 [uk-UA](../../uk-UA/docs/A2A-SERVER.md) · 🇮🇱 [he](../../he/docs/A2A-SERVER.md) · 🇵🇭 [phi](../../phi/docs/A2A-SERVER.md) · 🇧🇷 [pt-BR](../../pt-BR/docs/A2A-SERVER.md) · 🇨🇿 [cs](../../cs/docs/A2A-SERVER.md) · 🇹🇷 [tr](../../tr/docs/A2A-SERVER.md)
|
||||
|
||||
---
|
||||
|
||||
> Agent-to-Agent Protocol v0.3 — OmniRoute as an intelligent routing agent
|
||||
> Agent-to-Agent Protocol v0.3 — OmniRoute як інтелектуальний агент маршрутизації
|
||||
|
||||
## Agent Discovery
|
||||
## Виявлення агента
|
||||
|
||||
```bash
|
||||
curl http://localhost:20128/.well-known/agent.json
|
||||
```
|
||||
|
||||
Returns the Agent Card describing OmniRoute's capabilities, skills, and authentication requirements.
|
||||
Повертає Agent Card, що описує можливості OmniRoute, навички та вимоги до автентифікації.
|
||||
|
||||
---
|
||||
|
||||
## Authentication
|
||||
## Автентифікація
|
||||
|
||||
All `/a2a` requests require an API key via the `Authorization` header:
|
||||
Всі запити до `/a2a` вимагають API ключ через заголовок `Authorization`:
|
||||
|
||||
```
|
||||
Authorization: Bearer YOUR_OMNIROUTE_API_KEY
|
||||
```
|
||||
|
||||
If no API key is configured on the server, authentication is bypassed.
|
||||
Якщо на сервері не налаштовано API ключ, автентифікація пропускається.
|
||||
|
||||
---
|
||||
|
||||
## JSON-RPC 2.0 Methods
|
||||
## Методи JSON-RPC 2.0
|
||||
|
||||
### `message/send` — Synchronous Execution
|
||||
### `message/send` — Синхронне виконання
|
||||
|
||||
Sends a message to a skill and waits for the complete response.
|
||||
Надсилає повідомлення до навички та чекає на повну відповідь.
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:20128/a2a \
|
||||
@@ -50,7 +50,7 @@ curl -X POST http://localhost:20128/a2a \
|
||||
}'
|
||||
```
|
||||
|
||||
**Response:**
|
||||
**Відповідь:**
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -71,9 +71,9 @@ curl -X POST http://localhost:20128/a2a \
|
||||
}
|
||||
```
|
||||
|
||||
### `message/stream` — SSE Streaming
|
||||
### `message/stream` — SSE потокова передача
|
||||
|
||||
Same as `message/send` but returns Server-Sent Events for real-time streaming.
|
||||
Те саме, що й `message/send`, але повертає Server-Sent Events для потокової передачі в реальному часі.
|
||||
|
||||
```bash
|
||||
curl -N -X POST http://localhost:20128/a2a \
|
||||
@@ -90,7 +90,7 @@ curl -N -X POST http://localhost:20128/a2a \
|
||||
}'
|
||||
```
|
||||
|
||||
**SSE Events:**
|
||||
**SSE події:**
|
||||
|
||||
```
|
||||
data: {"jsonrpc":"2.0","method":"message/stream","params":{"task":{"id":"...","state":"working"},"chunk":{"type":"text","content":"..."}}}
|
||||
@@ -100,7 +100,7 @@ data: {"jsonrpc":"2.0","method":"message/stream","params":{"task":{"id":"...","s
|
||||
data: {"jsonrpc":"2.0","method":"message/stream","params":{"task":{"id":"...","state":"completed"},"metadata":{...}}}
|
||||
```
|
||||
|
||||
### `tasks/get` — Query Task Status
|
||||
### `tasks/get` — Запит статусу завдання
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:20128/a2a \
|
||||
@@ -109,7 +109,7 @@ curl -X POST http://localhost:20128/a2a \
|
||||
-d '{"jsonrpc":"2.0","id":"2","method":"tasks/get","params":{"taskId":"TASK_UUID"}}'
|
||||
```
|
||||
|
||||
### `tasks/cancel` — Cancel a Task
|
||||
### `tasks/cancel` — Скасування завдання
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:20128/a2a \
|
||||
@@ -120,16 +120,16 @@ curl -X POST http://localhost:20128/a2a \
|
||||
|
||||
---
|
||||
|
||||
## Available Skills
|
||||
## Доступні навички
|
||||
|
||||
| Skill | Description |
|
||||
| Навичка | Опис |
|
||||
| :----------------- | :------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `smart-routing` | Routes prompts through OmniRoute's intelligent pipeline. Returns response with routing explanation, cost, and resilience trace. |
|
||||
| `quota-management` | Answers natural-language queries about provider quotas, suggests free combos, and provides quota rankings. |
|
||||
| `smart-routing` | Маршрутизує промпти через інтелектуальний конвеєр OmniRoute. Повертає відповідь з поясненням маршрутизації, вартістю та трасуванням стійкості. |
|
||||
| `quota-management` | Відповідає на запити природною мовою про квоти провайдерів, пропонує безкоштовні комбо та надає рейтинги квот. |
|
||||
|
||||
---
|
||||
|
||||
## Task Lifecycle
|
||||
## Життєвий цикл завдання
|
||||
|
||||
```
|
||||
submitted → working → completed
|
||||
@@ -137,25 +137,25 @@ submitted → working → completed
|
||||
→ cancelled
|
||||
```
|
||||
|
||||
- Tasks expire after 5 minutes (configurable)
|
||||
- Terminal states: `completed`, `failed`, `cancelled`
|
||||
- Event log tracks every state transition
|
||||
- Завдання закінчуються через 5 хвилин (налаштовується)
|
||||
- Термінальні стани: `completed`, `failed`, `cancelled`
|
||||
- Журнал подій відстежує кожен перехід стану
|
||||
|
||||
---
|
||||
|
||||
## Error Codes
|
||||
## Коди помилок
|
||||
|
||||
| Code | Meaning |
|
||||
| Код | Значення |
|
||||
| :----- | :----------------------------- |
|
||||
| -32700 | Parse error (invalid JSON) |
|
||||
| -32600 | Invalid request / Unauthorized |
|
||||
| -32601 | Method or skill not found |
|
||||
| -32602 | Invalid params |
|
||||
| -32603 | Internal error |
|
||||
| -32700 | Помилка парсингу (невалідний JSON) |
|
||||
| -32600 | Невалідний запит / Неавторизовано |
|
||||
| -32601 | Метод або навичка не знайдені |
|
||||
| -32602 | Невалідні параметри |
|
||||
| -32603 | Внутрішня помилка |
|
||||
|
||||
---
|
||||
|
||||
## Integration Examples
|
||||
## Приклади інтеграції
|
||||
|
||||
### Python (requests)
|
||||
|
||||
|
||||
@@ -1,24 +1,22 @@
|
||||
# API Reference (Українська)
|
||||
# Довідник API
|
||||
|
||||
🌐 **Languages:** 🇺🇸 [English](../../../../docs/API_REFERENCE.md) · 🇪🇸 [es](../../es/docs/API_REFERENCE.md) · 🇫🇷 [fr](../../fr/docs/API_REFERENCE.md) · 🇩🇪 [de](../../de/docs/API_REFERENCE.md) · 🇮🇹 [it](../../it/docs/API_REFERENCE.md) · 🇷🇺 [ru](../../ru/docs/API_REFERENCE.md) · 🇨🇳 [zh-CN](../../zh-CN/docs/API_REFERENCE.md) · 🇯🇵 [ja](../../ja/docs/API_REFERENCE.md) · 🇰🇷 [ko](../../ko/docs/API_REFERENCE.md) · 🇸🇦 [ar](../../ar/docs/API_REFERENCE.md) · 🇮🇳 [hi](../../hi/docs/API_REFERENCE.md) · 🇮🇳 [in](../../in/docs/API_REFERENCE.md) · 🇹🇭 [th](../../th/docs/API_REFERENCE.md) · 🇻🇳 [vi](../../vi/docs/API_REFERENCE.md) · 🇮🇩 [id](../../id/docs/API_REFERENCE.md) · 🇲🇾 [ms](../../ms/docs/API_REFERENCE.md) · 🇳🇱 [nl](../../nl/docs/API_REFERENCE.md) · 🇵🇱 [pl](../../pl/docs/API_REFERENCE.md) · 🇸🇪 [sv](../../sv/docs/API_REFERENCE.md) · 🇳🇴 [no](../../no/docs/API_REFERENCE.md) · 🇩🇰 [da](../../da/docs/API_REFERENCE.md) · 🇫🇮 [fi](../../fi/docs/API_REFERENCE.md) · 🇵🇹 [pt](../../pt/docs/API_REFERENCE.md) · 🇷🇴 [ro](../../ro/docs/API_REFERENCE.md) · 🇭🇺 [hu](../../hu/docs/API_REFERENCE.md) · 🇧🇬 [bg](../../bg/docs/API_REFERENCE.md) · 🇸🇰 [sk](../../sk/docs/API_REFERENCE.md) · 🇺🇦 [uk-UA](../../uk-UA/docs/API_REFERENCE.md) · 🇮🇱 [he](../../he/docs/API_REFERENCE.md) · 🇵🇭 [phi](../../phi/docs/API_REFERENCE.md) · 🇧🇷 [pt-BR](../../pt-BR/docs/API_REFERENCE.md) · 🇨🇿 [cs](../../cs/docs/API_REFERENCE.md) · 🇹🇷 [tr](../../tr/docs/API_REFERENCE.md)
|
||||
|
||||
---
|
||||
|
||||
Complete reference for all OmniRoute API endpoints.
|
||||
Повний довідник для всіх API endpoints OmniRoute.
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
## Зміст
|
||||
|
||||
- [Chat Completions](#chat-completions)
|
||||
- [Embeddings](#embeddings)
|
||||
- [Image Generation](#image-generation)
|
||||
- [List Models](#list-models)
|
||||
- [Compatibility Endpoints](#compatibility-endpoints)
|
||||
- [Semantic Cache](#semantic-cache)
|
||||
- [Dashboard & Management](#dashboard--management)
|
||||
- [Request Processing](#request-processing)
|
||||
- [Authentication](#authentication)
|
||||
- [Генерація зображень](#генерація-зображень)
|
||||
- [Список моделей](#список-моделей)
|
||||
- [Endpoints сумісності](#endpoints-сумісності)
|
||||
- [Семантичний кеш](#семантичний-кеш)
|
||||
- [Панель керування та управління](#панель-керування-та-управління)
|
||||
- [Обробка запитів](#обробка-запитів)
|
||||
- [Автентифікація](#автентифікація)
|
||||
|
||||
---
|
||||
|
||||
@@ -38,22 +36,22 @@ Content-Type: application/json
|
||||
}
|
||||
```
|
||||
|
||||
### Custom Headers
|
||||
### Користувацькі заголовки
|
||||
|
||||
| Header | Direction | Description |
|
||||
| Заголовок | Напрямок | Опис |
|
||||
| ------------------------ | --------- | ------------------------------------------------ |
|
||||
| `X-OmniRoute-No-Cache` | Request | Set to `true` to bypass cache |
|
||||
| `X-OmniRoute-Progress` | Request | Set to `true` for progress events |
|
||||
| `X-Session-Id` | Request | Sticky session key for external session affinity |
|
||||
| `x_session_id` | Request | Underscore variant also accepted (direct HTTP) |
|
||||
| `Idempotency-Key` | Request | Dedup key (5s window) |
|
||||
| `X-Request-Id` | Request | Alternative dedup key |
|
||||
| `X-OmniRoute-Cache` | Response | `HIT` or `MISS` (non-streaming) |
|
||||
| `X-OmniRoute-Idempotent` | Response | `true` if deduplicated |
|
||||
| `X-OmniRoute-Progress` | Response | `enabled` if progress tracking on |
|
||||
| `X-OmniRoute-Session-Id` | Response | Effective session ID used by OmniRoute |
|
||||
| `X-OmniRoute-No-Cache` | Запит | Встановіть `true` для обходу кешу |
|
||||
| `X-OmniRoute-Progress` | Запит | Встановіть `true` для подій прогресу |
|
||||
| `X-Session-Id` | Запит | Ключ липкої сесії для зовнішньої прив'язки сесії |
|
||||
| `x_session_id` | Запит | Варіант з підкресленням також приймається (прямий HTTP) |
|
||||
| `Idempotency-Key` | Запит | Ключ дедуплікації (вікно 5с) |
|
||||
| `X-Request-Id` | Запит | Альтернативний ключ дедуплікації |
|
||||
| `X-OmniRoute-Cache` | Відповідь | `HIT` або `MISS` (без потокової передачі) |
|
||||
| `X-OmniRoute-Idempotent` | Відповідь | `true` якщо дедупліковано |
|
||||
| `X-OmniRoute-Progress` | Відповідь | `enabled` якщо відстеження прогресу увімкнено |
|
||||
| `X-OmniRoute-Session-Id` | Відповідь | Ефективний ID сесії, використаний OmniRoute |
|
||||
|
||||
> Nginx note: if you rely on underscore headers (for example `x_session_id`), enable `underscores_in_headers on;`.
|
||||
> Примітка Nginx: якщо ви покладаєтесь на заголовки з підкресленням (наприклад `x_session_id`), увімкніть `underscores_in_headers on;`.
|
||||
|
||||
---
|
||||
|
||||
@@ -70,16 +68,16 @@ Content-Type: application/json
|
||||
}
|
||||
```
|
||||
|
||||
Available providers: Nebius, OpenAI, Mistral, Together AI, Fireworks, NVIDIA, **OpenRouter**, **GitHub Models**.
|
||||
Доступні провайдери: Nebius, OpenAI, Mistral, Together AI, Fireworks, NVIDIA, **OpenRouter**, **GitHub Models**.
|
||||
|
||||
```bash
|
||||
# List all embedding models
|
||||
# Список всіх моделей embeddings
|
||||
GET /v1/embeddings
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Image Generation
|
||||
## Генерація зображень
|
||||
|
||||
```bash
|
||||
POST /v1/images/generations
|
||||
@@ -93,42 +91,42 @@ Content-Type: application/json
|
||||
}
|
||||
```
|
||||
|
||||
Available providers: OpenAI (DALL-E, GPT Image 1), xAI (Grok Image), Together AI (FLUX), Fireworks AI, Nebius (FLUX), Hyperbolic, NanoBanana, **OpenRouter**, SD WebUI (local), ComfyUI (local).
|
||||
Доступні провайдери: OpenAI (DALL-E, GPT Image 1), xAI (Grok Image), Together AI (FLUX), Fireworks AI, Nebius (FLUX), Hyperbolic, NanoBanana, **OpenRouter**, SD WebUI (локальний), ComfyUI (локальний).
|
||||
|
||||
```bash
|
||||
# List all image models
|
||||
# Список всіх моделей зображень
|
||||
GET /v1/images/generations
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## List Models
|
||||
## Список моделей
|
||||
|
||||
```bash
|
||||
GET /v1/models
|
||||
Authorization: Bearer your-api-key
|
||||
|
||||
→ Returns all chat, embedding, and image models + combos in OpenAI format
|
||||
→ Повертає всі моделі чату, embeddings та зображень + комбо у форматі OpenAI
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Compatibility Endpoints
|
||||
## Endpoints сумісності
|
||||
|
||||
| Method | Path | Format |
|
||||
| ------ | --------------------------- | ---------------------- |
|
||||
| POST | `/v1/chat/completions` | OpenAI |
|
||||
| POST | `/v1/messages` | Anthropic |
|
||||
| POST | `/v1/responses` | OpenAI Responses |
|
||||
| POST | `/v1/embeddings` | OpenAI |
|
||||
| POST | `/v1/images/generations` | OpenAI |
|
||||
| GET | `/v1/models` | OpenAI |
|
||||
| POST | `/v1/messages/count_tokens` | Anthropic |
|
||||
| GET | `/v1beta/models` | Gemini |
|
||||
| POST | `/v1beta/models/{...path}` | Gemini generateContent |
|
||||
| POST | `/v1/api/chat` | Ollama |
|
||||
| Метод | Шлях | Формат |
|
||||
| ----- | --------------------------- | ---------------------- |
|
||||
| POST | `/v1/chat/completions` | OpenAI |
|
||||
| POST | `/v1/messages` | Anthropic |
|
||||
| POST | `/v1/responses` | OpenAI Responses |
|
||||
| POST | `/v1/embeddings` | OpenAI |
|
||||
| POST | `/v1/images/generations` | OpenAI |
|
||||
| GET | `/v1/models` | OpenAI |
|
||||
| POST | `/v1/messages/count_tokens` | Anthropic |
|
||||
| GET | `/v1beta/models` | Gemini |
|
||||
| POST | `/v1beta/models/{...path}` | Gemini generateContent |
|
||||
| POST | `/v1/api/chat` | Ollama |
|
||||
|
||||
### Dedicated Provider Routes
|
||||
### Виділені маршрути провайдерів
|
||||
|
||||
```bash
|
||||
POST /v1/providers/{provider}/chat/completions
|
||||
@@ -136,21 +134,21 @@ POST /v1/providers/{provider}/embeddings
|
||||
POST /v1/providers/{provider}/images/generations
|
||||
```
|
||||
|
||||
The provider prefix is auto-added if missing. Mismatched models return `400`.
|
||||
Префікс провайдера додається автоматично, якщо відсутній. Невідповідні моделі повертають `400`.
|
||||
|
||||
---
|
||||
|
||||
## Semantic Cache
|
||||
## Семантичний кеш
|
||||
|
||||
```bash
|
||||
# Get cache stats
|
||||
# Отримати статистику кешу
|
||||
GET /api/cache/stats
|
||||
|
||||
# Clear all caches
|
||||
# Очистити всі кеші
|
||||
DELETE /api/cache/stats
|
||||
```
|
||||
|
||||
Response example:
|
||||
Приклад відповіді:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -169,171 +167,171 @@ Response example:
|
||||
|
||||
---
|
||||
|
||||
## Dashboard & Management
|
||||
## Панель керування та управління
|
||||
|
||||
### Authentication
|
||||
### Автентифікація
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| ----------------------------- | ------- | --------------------- |
|
||||
| `/api/auth/login` | POST | Login |
|
||||
| `/api/auth/logout` | POST | Logout |
|
||||
| `/api/settings/require-login` | GET/PUT | Toggle login required |
|
||||
| Endpoint | Метод | Опис |
|
||||
| ----------------------------- | ------- | ------------------------- |
|
||||
| `/api/auth/login` | POST | Вхід |
|
||||
| `/api/auth/logout` | POST | Вихід |
|
||||
| `/api/settings/require-login` | GET/PUT | Перемикач обов'язкового входу |
|
||||
|
||||
### Provider Management
|
||||
### Управління провайдерами
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| Endpoint | Метод | Опис |
|
||||
| ---------------------------- | --------------------- | ---------------------------------------------- |
|
||||
| `/api/providers` | GET/POST | List / create providers |
|
||||
| `/api/providers/[id]` | GET/PUT/DELETE | Manage a provider |
|
||||
| `/api/providers/[id]/test` | POST | Test provider connection |
|
||||
| `/api/providers/[id]/models` | GET | List provider models |
|
||||
| `/api/providers/validate` | POST | Validate provider config |
|
||||
| `/api/provider-nodes*` | Various | Provider node management |
|
||||
| `/api/provider-models` | GET/POST/PATCH/DELETE | Custom models (add, update, hide/show, delete) |
|
||||
| `/api/providers` | GET/POST | Список / створення провайдерів |
|
||||
| `/api/providers/[id]` | GET/PUT/DELETE | Управління провайдером |
|
||||
| `/api/providers/[id]/test` | POST | Тест з'єднання провайдера |
|
||||
| `/api/providers/[id]/models` | GET | Список моделей провайдера |
|
||||
| `/api/providers/validate` | POST | Валідація конфігурації провайдера |
|
||||
| `/api/provider-nodes*` | Різні | Управління вузлами провайдера |
|
||||
| `/api/provider-models` | GET/POST/PATCH/DELETE | Користувацькі моделі (додати, оновити, приховати/показати, видалити) |
|
||||
|
||||
### OAuth Flows
|
||||
### OAuth потоки
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| -------------------------------- | ------- | ----------------------- |
|
||||
| `/api/oauth/[provider]/[action]` | Various | Provider-specific OAuth |
|
||||
| Endpoint | Метод | Опис |
|
||||
| -------------------------------- | ------ | --------------------------- |
|
||||
| `/api/oauth/[provider]/[action]` | Різні | OAuth специфічний для провайдера |
|
||||
|
||||
### Routing & Config
|
||||
### Маршрутизація та конфігурація
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| --------------------- | -------- | ----------------------------- |
|
||||
| `/api/models/alias` | GET/POST | Model aliases |
|
||||
| `/api/models/catalog` | GET | All models by provider + type |
|
||||
| `/api/combos*` | Various | Combo management |
|
||||
| `/api/keys*` | Various | API key management |
|
||||
| `/api/pricing` | GET | Model pricing |
|
||||
| Endpoint | Метод | Опис |
|
||||
| --------------------- | ------ | ----------------------------- |
|
||||
| `/api/models/alias` | GET/POST | Псевдоніми моделей |
|
||||
| `/api/models/catalog` | GET | Всі моделі за провайдером + тип |
|
||||
| `/api/combos*` | Різні | Управління комбо |
|
||||
| `/api/keys*` | Різні | Управління API ключами |
|
||||
| `/api/pricing` | GET | Ціни моделей |
|
||||
|
||||
### Usage & Analytics
|
||||
### Використання та аналітика
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| --------------------------- | ------ | -------------------- |
|
||||
| `/api/usage/history` | GET | Usage history |
|
||||
| `/api/usage/logs` | GET | Usage logs |
|
||||
| `/api/usage/request-logs` | GET | Request-level logs |
|
||||
| `/api/usage/[connectionId]` | GET | Per-connection usage |
|
||||
| Endpoint | Метод | Опис |
|
||||
| --------------------------- | ----- | ---------------------------- |
|
||||
| `/api/usage/history` | GET | Історія використання |
|
||||
| `/api/usage/logs` | GET | Логи використання |
|
||||
| `/api/usage/request-logs` | GET | Логи на рівні запитів |
|
||||
| `/api/usage/[connectionId]` | GET | Використання на з'єднання |
|
||||
|
||||
### Settings
|
||||
### Налаштування
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| ------------------------------- | ------------- | ---------------------- |
|
||||
| `/api/settings` | GET/PUT/PATCH | General settings |
|
||||
| `/api/settings/proxy` | GET/PUT | Network proxy config |
|
||||
| `/api/settings/proxy/test` | POST | Test proxy connection |
|
||||
| `/api/settings/ip-filter` | GET/PUT | IP allowlist/blocklist |
|
||||
| `/api/settings/thinking-budget` | GET/PUT | Reasoning token budget |
|
||||
| `/api/settings/system-prompt` | GET/PUT | Global system prompt |
|
||||
| Endpoint | Метод | Опис |
|
||||
| ------------------------------- | ------------- | -------------------------- |
|
||||
| `/api/settings` | GET/PUT/PATCH | Загальні налаштування |
|
||||
| `/api/settings/proxy` | GET/PUT | Конфігурація мережевого проксі |
|
||||
| `/api/settings/proxy/test` | POST | Тест з'єднання проксі |
|
||||
| `/api/settings/ip-filter` | GET/PUT | Білий/чорний список IP |
|
||||
| `/api/settings/thinking-budget` | GET/PUT | Бюджет токенів міркування |
|
||||
| `/api/settings/system-prompt` | GET/PUT | Глобальний системний промпт |
|
||||
|
||||
### Monitoring
|
||||
### Моніторинг
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| Endpoint | Метод | Опис |
|
||||
| ------------------------ | ---------- | ---------------------------------------------------------------------------------------------------- |
|
||||
| `/api/sessions` | GET | Active session tracking |
|
||||
| `/api/rate-limits` | GET | Per-account rate limits |
|
||||
| `/api/monitoring/health` | GET | Health check + provider summary (`catalogCount`, `configuredCount`, `activeCount`, `monitoredCount`) |
|
||||
| `/api/cache/stats` | GET/DELETE | Cache stats / clear |
|
||||
| `/api/sessions` | GET | Відстеження активних сесій |
|
||||
| `/api/rate-limits` | GET | Обмеження швидкості на акаунт |
|
||||
| `/api/monitoring/health` | GET | Перевірка здоров'я + зведення провайдерів (`catalogCount`, `configuredCount`, `activeCount`, `monitoredCount`) |
|
||||
| `/api/cache/stats` | GET/DELETE | Статистика кешу / очищення |
|
||||
|
||||
### Backup & Export/Import
|
||||
### Резервне копіювання та експорт/імпорт
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| --------------------------- | ------ | --------------------------------------- |
|
||||
| `/api/db-backups` | GET | List available backups |
|
||||
| `/api/db-backups` | PUT | Create a manual backup |
|
||||
| `/api/db-backups` | POST | Restore from a specific backup |
|
||||
| `/api/db-backups/export` | GET | Download database as .sqlite file |
|
||||
| `/api/db-backups/import` | POST | Upload .sqlite file to replace database |
|
||||
| `/api/db-backups/exportAll` | GET | Download full backup as .tar.gz archive |
|
||||
| Endpoint | Метод | Опис |
|
||||
| --------------------------- | ----- | --------------------------------------- |
|
||||
| `/api/db-backups` | GET | Список доступних резервних копій |
|
||||
| `/api/db-backups` | PUT | Створити ручну резервну копію |
|
||||
| `/api/db-backups` | POST | Відновити з конкретної резервної копії |
|
||||
| `/api/db-backups/export` | GET | Завантажити базу даних як .sqlite файл |
|
||||
| `/api/db-backups/import` | POST | Завантажити .sqlite файл для заміни бази даних |
|
||||
| `/api/db-backups/exportAll` | GET | Завантажити повну резервну копію як .tar.gz архів |
|
||||
|
||||
### Cloud Sync
|
||||
### Хмарна синхронізація
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| ---------------------- | ------- | --------------------- |
|
||||
| `/api/sync/cloud` | Various | Cloud sync operations |
|
||||
| `/api/sync/initialize` | POST | Initialize sync |
|
||||
| `/api/cloud/*` | Various | Cloud management |
|
||||
| Endpoint | Метод | Опис |
|
||||
| ---------------------- | ------ | ------------------------- |
|
||||
| `/api/sync/cloud` | Різні | Операції хмарної синхронізації |
|
||||
| `/api/sync/initialize` | POST | Ініціалізація синхронізації |
|
||||
| `/api/cloud/*` | Різні | Управління хмарою |
|
||||
|
||||
### Tunnels
|
||||
### Тунелі
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| -------------------------- | ------ | ----------------------------------------------------------------------- |
|
||||
| `/api/tunnels/cloudflared` | GET | Read Cloudflare Quick Tunnel install/runtime status for the dashboard |
|
||||
| `/api/tunnels/cloudflared` | POST | Enable or disable the Cloudflare Quick Tunnel (`action=enable/disable`) |
|
||||
| Endpoint | Метод | Опис |
|
||||
| -------------------------- | ----- | ----------------------------------------------------------------------- |
|
||||
| `/api/tunnels/cloudflared` | GET | Читання статусу встановлення/виконання Cloudflare Quick Tunnel для панелі |
|
||||
| `/api/tunnels/cloudflared` | POST | Увімкнути або вимкнути Cloudflare Quick Tunnel (`action=enable/disable`) |
|
||||
|
||||
### CLI Tools
|
||||
### CLI інструменти
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| ---------------------------------- | ------ | ------------------- |
|
||||
| `/api/cli-tools/claude-settings` | GET | Claude CLI status |
|
||||
| `/api/cli-tools/codex-settings` | GET | Codex CLI status |
|
||||
| `/api/cli-tools/droid-settings` | GET | Droid CLI status |
|
||||
| `/api/cli-tools/openclaw-settings` | GET | OpenClaw CLI status |
|
||||
| `/api/cli-tools/runtime/[toolId]` | GET | Generic CLI runtime |
|
||||
| Endpoint | Метод | Опис |
|
||||
| ---------------------------------- | ----- | ------------------- |
|
||||
| `/api/cli-tools/claude-settings` | GET | Статус Claude CLI |
|
||||
| `/api/cli-tools/codex-settings` | GET | Статус Codex CLI |
|
||||
| `/api/cli-tools/droid-settings` | GET | Статус Droid CLI |
|
||||
| `/api/cli-tools/openclaw-settings` | GET | Статус OpenClaw CLI |
|
||||
| `/api/cli-tools/runtime/[toolId]` | GET | Загальний CLI runtime |
|
||||
|
||||
CLI responses include: `installed`, `runnable`, `command`, `commandPath`, `runtimeMode`, `reason`.
|
||||
Відповіді CLI включають: `installed`, `runnable`, `command`, `commandPath`, `runtimeMode`, `reason`.
|
||||
|
||||
### ACP Agents
|
||||
### ACP агенти
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| Endpoint | Метод | Опис |
|
||||
| ----------------- | ------ | -------------------------------------------------------- |
|
||||
| `/api/acp/agents` | GET | List all detected agents (built-in + custom) with status |
|
||||
| `/api/acp/agents` | POST | Add custom agent or refresh detection cache |
|
||||
| `/api/acp/agents` | DELETE | Remove a custom agent by `id` query param |
|
||||
| `/api/acp/agents` | GET | Список всіх виявлених агентів (вбудовані + користувацькі) зі статусом |
|
||||
| `/api/acp/agents` | POST | Додати користувацького агента або оновити кеш виявлення |
|
||||
| `/api/acp/agents` | DELETE | Видалити користувацького агента за параметром запиту `id` |
|
||||
|
||||
GET response includes `agents[]` (id, name, binary, version, installed, protocol, isCustom) and `summary` (total, installed, notFound, builtIn, custom).
|
||||
Відповідь GET включає `agents[]` (id, name, binary, version, installed, protocol, isCustom) та `summary` (total, installed, notFound, builtIn, custom).
|
||||
|
||||
### Resilience & Rate Limits
|
||||
### Стійкість та обмеження швидкості
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| Endpoint | Метод | Опис |
|
||||
| ----------------------- | --------- | ------------------------------- |
|
||||
| `/api/resilience` | GET/PATCH | Get/update resilience profiles |
|
||||
| `/api/resilience/reset` | POST | Reset circuit breakers |
|
||||
| `/api/rate-limits` | GET | Per-account rate limit status |
|
||||
| `/api/rate-limit` | GET | Global rate limit configuration |
|
||||
| `/api/resilience` | GET/PATCH | Отримати/оновити профілі стійкості |
|
||||
| `/api/resilience/reset` | POST | Скинути circuit breakers |
|
||||
| `/api/rate-limits` | GET | Статус обмеження швидкості на акаунт |
|
||||
| `/api/rate-limit` | GET | Глобальна конфігурація обмеження швидкості |
|
||||
|
||||
### Evals
|
||||
### Оцінки
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| Endpoint | Метод | Опис |
|
||||
| ------------ | -------- | --------------------------------- |
|
||||
| `/api/evals` | GET/POST | List eval suites / run evaluation |
|
||||
| `/api/evals` | GET/POST | Список наборів оцінок / запуск оцінки |
|
||||
|
||||
### Policies
|
||||
### Політики
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| --------------- | --------------- | ----------------------- |
|
||||
| `/api/policies` | GET/POST/DELETE | Manage routing policies |
|
||||
| Endpoint | Метод | Опис |
|
||||
| --------------- | --------------- | --------------------------- |
|
||||
| `/api/policies` | GET/POST/DELETE | Управління політиками маршрутизації |
|
||||
|
||||
### Compliance
|
||||
### Відповідність
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| --------------------------- | ------ | ----------------------------- |
|
||||
| `/api/compliance/audit-log` | GET | Compliance audit log (last N) |
|
||||
| Endpoint | Метод | Опис |
|
||||
| --------------------------- | ----- | ----------------------------- |
|
||||
| `/api/compliance/audit-log` | GET | Журнал аудиту відповідності (останні N) |
|
||||
|
||||
### v1beta (Gemini-Compatible)
|
||||
### v1beta (сумісний з Gemini)
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| -------------------------- | ------ | --------------------------------- |
|
||||
| `/v1beta/models` | GET | List models in Gemini format |
|
||||
| `/v1beta/models/{...path}` | POST | Gemini `generateContent` endpoint |
|
||||
| Endpoint | Метод | Опис |
|
||||
| -------------------------- | ----- | ----------------------------- |
|
||||
| `/v1beta/models` | GET | Список моделей у форматі Gemini |
|
||||
| `/v1beta/models/{...path}` | POST | Endpoint Gemini `generateContent` |
|
||||
|
||||
These endpoints mirror Gemini's API format for clients that expect native Gemini SDK compatibility.
|
||||
Ці endpoints відображають формат API Gemini для клієнтів, які очікують нативної сумісності з Gemini SDK.
|
||||
|
||||
### Internal / System APIs
|
||||
### Внутрішні / системні API
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| ------------------------ | ------ | ---------------------------------------------------- |
|
||||
| `/api/init` | GET | Application initialization check (used on first run) |
|
||||
| `/api/tags` | GET | Ollama-compatible model tags (for Ollama clients) |
|
||||
| `/api/restart` | POST | Trigger graceful server restart |
|
||||
| `/api/shutdown` | POST | Trigger graceful server shutdown |
|
||||
| `/api/system/env/repair` | POST | Repair OAuth provider environment variables |
|
||||
| `/api/system-info` | GET | Generate system diagnostics report |
|
||||
| Endpoint | Метод | Опис |
|
||||
| ------------------------ | ----- | ------------------------------------------------ |
|
||||
| `/api/init` | GET | Перевірка ініціалізації додатка (використовується при першому запуску) |
|
||||
| `/api/tags` | GET | Теги моделей сумісні з Ollama (для клієнтів Ollama) |
|
||||
| `/api/restart` | POST | Запустити плавний перезапуск сервера |
|
||||
| `/api/shutdown` | POST | Запустити плавне вимкнення сервера |
|
||||
| `/api/system/env/repair` | POST | Відновити змінні середовища OAuth провайдера |
|
||||
| `/api/system-info` | GET | Згенерувати звіт системної діагностики |
|
||||
|
||||
> **Note:** These endpoints are used internally by the system or for Ollama client compatibility. They are not typically called by end users.
|
||||
> **Примітка:** Ці endpoints використовуються внутрішньо системою або для сумісності з клієнтами Ollama. Вони зазвичай не викликаються кінцевими користувачами.
|
||||
|
||||
### OAuth Environment Repair _(v3.6.1+)_
|
||||
### Відновлення середовища OAuth _(v3.6.1+)_
|
||||
|
||||
```bash
|
||||
POST /api/system/env/repair
|
||||
@@ -344,7 +342,7 @@ Content-Type: application/json
|
||||
}
|
||||
```
|
||||
|
||||
Repairs missing or corrupted OAuth environment variables for a specific provider. Returns:
|
||||
Відновлює відсутні або пошкоджені змінні середовища OAuth для конкретного провайдера. Повертає:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -356,7 +354,7 @@ Repairs missing or corrupted OAuth environment variables for a specific provider
|
||||
|
||||
---
|
||||
|
||||
## Audio Transcription
|
||||
## Транскрипція аудіо
|
||||
|
||||
```bash
|
||||
POST /v1/audio/transcriptions
|
||||
@@ -364,9 +362,9 @@ Authorization: Bearer your-api-key
|
||||
Content-Type: multipart/form-data
|
||||
```
|
||||
|
||||
Transcribe audio files using Deepgram or AssemblyAI.
|
||||
Транскрибуйте аудіофайли за допомогою Deepgram або AssemblyAI.
|
||||
|
||||
**Request:**
|
||||
**Запит:**
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:20128/v1/audio/transcriptions \
|
||||
@@ -375,7 +373,7 @@ curl -X POST http://localhost:20128/v1/audio/transcriptions \
|
||||
-F "model=deepgram/nova-3"
|
||||
```
|
||||
|
||||
**Response:**
|
||||
**Відповідь:**
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -386,36 +384,36 @@ curl -X POST http://localhost:20128/v1/audio/transcriptions \
|
||||
}
|
||||
```
|
||||
|
||||
**Supported providers:** `deepgram/nova-3`, `assemblyai/best`.
|
||||
**Підтримувані провайдери:** `deepgram/nova-3`, `assemblyai/best`.
|
||||
|
||||
**Supported formats:** `mp3`, `wav`, `m4a`, `flac`, `ogg`, `webm`.
|
||||
**Підтримувані формати:** `mp3`, `wav`, `m4a`, `flac`, `ogg`, `webm`.
|
||||
|
||||
---
|
||||
|
||||
## Ollama Compatibility
|
||||
## Сумісність з Ollama
|
||||
|
||||
For clients that use Ollama's API format:
|
||||
Для клієнтів, які використовують формат API Ollama:
|
||||
|
||||
```bash
|
||||
# Chat endpoint (Ollama format)
|
||||
# Endpoint чату (формат Ollama)
|
||||
POST /v1/api/chat
|
||||
|
||||
# Model listing (Ollama format)
|
||||
# Список моделей (формат Ollama)
|
||||
GET /api/tags
|
||||
```
|
||||
|
||||
Requests are automatically translated between Ollama and internal formats.
|
||||
Запити автоматично перекладаються між форматами Ollama та внутрішніми форматами.
|
||||
|
||||
---
|
||||
|
||||
## Telemetry
|
||||
## Телеметрія
|
||||
|
||||
```bash
|
||||
# Get latency telemetry summary (p50/p95/p99 per provider)
|
||||
# Отримати зведення телеметрії затримки (p50/p95/p99 на провайдера)
|
||||
GET /api/telemetry/summary
|
||||
```
|
||||
|
||||
**Response:**
|
||||
**Відповідь:**
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -428,13 +426,13 @@ GET /api/telemetry/summary
|
||||
|
||||
---
|
||||
|
||||
## Budget
|
||||
## Бюджет
|
||||
|
||||
```bash
|
||||
# Get budget status for all API keys
|
||||
# Отримати статус бюджету для всіх API ключів
|
||||
GET /api/usage/budget
|
||||
|
||||
# Set or update a budget
|
||||
# Встановити або оновити бюджет
|
||||
POST /api/usage/budget
|
||||
Content-Type: application/json
|
||||
|
||||
@@ -447,13 +445,13 @@ Content-Type: application/json
|
||||
|
||||
---
|
||||
|
||||
## Model Availability
|
||||
## Доступність моделей
|
||||
|
||||
```bash
|
||||
# Get real-time model availability across all providers
|
||||
# Отримати доступність моделей у реальному часі для всіх провайдерів
|
||||
GET /api/models/availability
|
||||
|
||||
# Check availability for a specific model
|
||||
# Перевірити доступність для конкретної моделі
|
||||
POST /api/models/availability
|
||||
Content-Type: application/json
|
||||
|
||||
@@ -464,25 +462,25 @@ Content-Type: application/json
|
||||
|
||||
---
|
||||
|
||||
## Request Processing
|
||||
## Обробка запитів
|
||||
|
||||
1. Client sends request to `/v1/*`
|
||||
2. Route handler calls `handleChat`, `handleEmbedding`, `handleAudioTranscription`, or `handleImageGeneration`
|
||||
3. Model is resolved (direct provider/model or alias/combo)
|
||||
4. Credentials selected from local DB with account availability filtering
|
||||
5. For chat: `handleChatCore` — format detection, translation, cache check, idempotency check
|
||||
6. Provider executor sends upstream request
|
||||
7. Response translated back to client format (chat) or returned as-is (embeddings/images/audio)
|
||||
8. Usage/logging recorded
|
||||
9. Fallback applies on errors according to combo rules
|
||||
1. Клієнт надсилає запит до `/v1/*`
|
||||
2. Обробник маршруту викликає `handleChat`, `handleEmbedding`, `handleAudioTranscription` або `handleImageGeneration`
|
||||
3. Модель розв'язується (прямий провайдер/модель або псевдонім/комбо)
|
||||
4. Облікові дані вибираються з локальної БД з фільтрацією доступності акаунта
|
||||
5. Для чату: `handleChatCore` — виявлення формату, переклад, перевірка кешу, перевірка ідемпотентності
|
||||
6. Виконавець провайдера надсилає запит вище за течією
|
||||
7. Відповідь перекладається назад у формат клієнта (чат) або повертається як є (embeddings/зображення/аудіо)
|
||||
8. Використання/логування записується
|
||||
9. Резервний варіант застосовується при помилках відповідно до правил комбо
|
||||
|
||||
Full architecture reference: [`ARCHITECTURE.md`](ARCHITECTURE.md)
|
||||
Повний довідник архітектури: [`ARCHITECTURE.md`](../../../../docs/ARCHITECTURE.md)
|
||||
|
||||
---
|
||||
|
||||
## Authentication
|
||||
## Автентифікація
|
||||
|
||||
- Dashboard routes (`/dashboard/*`) use `auth_token` cookie
|
||||
- Login uses saved password hash; fallback to `INITIAL_PASSWORD`
|
||||
- `requireLogin` toggleable via `/api/settings/require-login`
|
||||
- `/v1/*` routes optionally require Bearer API key when `REQUIRE_API_KEY=true`
|
||||
- Маршрути панелі (`/dashboard/*`) використовують cookie `auth_token`
|
||||
- Вхід використовує збережений хеш пароля; резервний варіант до `INITIAL_PASSWORD`
|
||||
- `requireLogin` перемикається через `/api/settings/require-login`
|
||||
- Маршрути `/v1/*` опціонально вимагають Bearer API ключ, коли `REQUIRE_API_KEY=true`
|
||||
|
||||
@@ -1,67 +1,67 @@
|
||||
# OmniRoute Auto-Combo Engine (Українська)
|
||||
# Двигун Auto-Combo OmniRoute
|
||||
|
||||
🌐 **Languages:** 🇺🇸 [English](../../../../docs/AUTO-COMBO.md) · 🇪🇸 [es](../../es/docs/AUTO-COMBO.md) · 🇫🇷 [fr](../../fr/docs/AUTO-COMBO.md) · 🇩🇪 [de](../../de/docs/AUTO-COMBO.md) · 🇮🇹 [it](../../it/docs/AUTO-COMBO.md) · 🇷🇺 [ru](../../ru/docs/AUTO-COMBO.md) · 🇨🇳 [zh-CN](../../zh-CN/docs/AUTO-COMBO.md) · 🇯🇵 [ja](../../ja/docs/AUTO-COMBO.md) · 🇰🇷 [ko](../../ko/docs/AUTO-COMBO.md) · 🇸🇦 [ar](../../ar/docs/AUTO-COMBO.md) · 🇮🇳 [hi](../../hi/docs/AUTO-COMBO.md) · 🇮🇳 [in](../../in/docs/AUTO-COMBO.md) · 🇹🇭 [th](../../th/docs/AUTO-COMBO.md) · 🇻🇳 [vi](../../vi/docs/AUTO-COMBO.md) · 🇮🇩 [id](../../id/docs/AUTO-COMBO.md) · 🇲🇾 [ms](../../ms/docs/AUTO-COMBO.md) · 🇳🇱 [nl](../../nl/docs/AUTO-COMBO.md) · 🇵🇱 [pl](../../pl/docs/AUTO-COMBO.md) · 🇸🇪 [sv](../../sv/docs/AUTO-COMBO.md) · 🇳🇴 [no](../../no/docs/AUTO-COMBO.md) · 🇩🇰 [da](../../da/docs/AUTO-COMBO.md) · 🇫🇮 [fi](../../fi/docs/AUTO-COMBO.md) · 🇵🇹 [pt](../../pt/docs/AUTO-COMBO.md) · 🇷🇴 [ro](../../ro/docs/AUTO-COMBO.md) · 🇭🇺 [hu](../../hu/docs/AUTO-COMBO.md) · 🇧🇬 [bg](../../bg/docs/AUTO-COMBO.md) · 🇸🇰 [sk](../../sk/docs/AUTO-COMBO.md) · 🇺🇦 [uk-UA](../../uk-UA/docs/AUTO-COMBO.md) · 🇮🇱 [he](../../he/docs/AUTO-COMBO.md) · 🇵🇭 [phi](../../phi/docs/AUTO-COMBO.md) · 🇧🇷 [pt-BR](../../pt-BR/docs/AUTO-COMBO.md) · 🇨🇿 [cs](../../cs/docs/AUTO-COMBO.md) · 🇹🇷 [tr](../../tr/docs/AUTO-COMBO.md)
|
||||
|
||||
---
|
||||
|
||||
> Self-managing model chains with adaptive scoring
|
||||
> Самокеровані ланцюги моделей з адаптивним оцінюванням
|
||||
|
||||
## How It Works
|
||||
## Як це працює
|
||||
|
||||
The Auto-Combo Engine dynamically selects the best provider/model for each request using a **6-factor scoring function**:
|
||||
Двигун Auto-Combo динамічно вибирає найкращого провайдера/модель для кожного запиту, використовуючи **6-факторну функцію оцінювання**:
|
||||
|
||||
| Factor | Weight | Description |
|
||||
| :--------- | :----- | :---------------------------------------------- |
|
||||
| Quota | 0.20 | Remaining capacity [0..1] |
|
||||
| Health | 0.25 | Circuit breaker: CLOSED=1.0, HALF=0.5, OPEN=0.0 |
|
||||
| CostInv | 0.20 | Inverse cost (cheaper = higher score) |
|
||||
| LatencyInv | 0.15 | Inverse p95 latency (faster = higher) |
|
||||
| TaskFit | 0.10 | Model × task type fitness score |
|
||||
| Stability | 0.10 | Low variance in latency/errors |
|
||||
| Фактор | Вага | Опис |
|
||||
| :--------- | :--- | :---------------------------------------------- |
|
||||
| Quota | 0.20 | Залишкова ємність [0..1] |
|
||||
| Health | 0.25 | Circuit breaker: CLOSED=1.0, HALF=0.5, OPEN=0.0 |
|
||||
| CostInv | 0.20 | Обернена вартість (дешевше = вищий бал) |
|
||||
| LatencyInv | 0.15 | Обернена p95 затримка (швидше = вище) |
|
||||
| TaskFit | 0.10 | Оцінка відповідності модель × тип завдання |
|
||||
| Stability | 0.10 | Низька варіація затримки/помилок |
|
||||
|
||||
## Mode Packs
|
||||
## Пакети режимів
|
||||
|
||||
| Pack | Focus | Key Weight |
|
||||
| Пакет | Фокус | Ключова вага |
|
||||
| :---------------------- | :----------- | :--------------- |
|
||||
| 🚀 **Ship Fast** | Speed | latencyInv: 0.35 |
|
||||
| 💰 **Cost Saver** | Economy | costInv: 0.40 |
|
||||
| 🎯 **Quality First** | Best model | taskFit: 0.40 |
|
||||
| 📡 **Offline Friendly** | Availability | quota: 0.40 |
|
||||
| 🚀 **Ship Fast** | Швидкість | latencyInv: 0.35 |
|
||||
| 💰 **Cost Saver** | Економія | costInv: 0.40 |
|
||||
| 🎯 **Quality First** | Краща модель | taskFit: 0.40 |
|
||||
| 📡 **Offline Friendly** | Доступність | quota: 0.40 |
|
||||
|
||||
## Self-Healing
|
||||
## Самовідновлення
|
||||
|
||||
- **Temporary exclusion**: Score < 0.2 → excluded for 5 min (progressive backoff, max 30 min)
|
||||
- **Circuit breaker awareness**: OPEN → auto-excluded; HALF_OPEN → probe requests
|
||||
- **Incident mode**: >50% OPEN → disable exploration, maximize stability
|
||||
- **Cooldown recovery**: After exclusion, first request is a "probe" with reduced timeout
|
||||
- **Тимчасове виключення**: Оцінка < 0.2 → виключено на 5 хв (прогресивний відкат, макс 30 хв)
|
||||
- **Усвідомлення circuit breaker**: OPEN → авто-виключено; HALF_OPEN → пробні запити
|
||||
- **Режим інциденту**: >50% OPEN → вимкнути дослідження, максимізувати стабільність
|
||||
- **Відновлення після охолодження**: Після виключення перший запит є "пробним" зі зменшеним таймаутом
|
||||
|
||||
## Bandit Exploration
|
||||
## Bandit дослідження
|
||||
|
||||
5% of requests (configurable) are routed to random providers for exploration. Disabled in incident mode.
|
||||
5% запитів (налаштовується) маршрутизуються до випадкових провайдерів для дослідження. Вимкнено в режимі інциденту.
|
||||
|
||||
## API
|
||||
|
||||
```bash
|
||||
# Create auto-combo
|
||||
# Створити auto-combo
|
||||
curl -X POST http://localhost:20128/api/combos/auto \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"id":"my-auto","name":"Auto Coder","candidatePool":["anthropic","google","openai"],"modePack":"ship-fast"}'
|
||||
|
||||
# List auto-combos
|
||||
# Список auto-combos
|
||||
curl http://localhost:20128/api/combos/auto
|
||||
```
|
||||
|
||||
## Task Fitness
|
||||
## Відповідність завданню
|
||||
|
||||
30+ models scored across 6 task types (`coding`, `review`, `planning`, `analysis`, `debugging`, `documentation`). Supports wildcard patterns (e.g., `*-coder` → high coding score).
|
||||
30+ моделей оцінено за 6 типами завдань (`coding`, `review`, `planning`, `analysis`, `debugging`, `documentation`). Підтримує шаблони з підстановкою (наприклад, `*-coder` → високий бал кодування).
|
||||
|
||||
## Files
|
||||
## Файли
|
||||
|
||||
| File | Purpose |
|
||||
| Файл | Призначення |
|
||||
| :------------------------------------------- | :------------------------------------ |
|
||||
| `open-sse/services/autoCombo/scoring.ts` | Scoring function & pool normalization |
|
||||
| `open-sse/services/autoCombo/taskFitness.ts` | Model × task fitness lookup |
|
||||
| `open-sse/services/autoCombo/engine.ts` | Selection logic, bandit, budget cap |
|
||||
| `open-sse/services/autoCombo/selfHealing.ts` | Exclusion, probes, incident mode |
|
||||
| `open-sse/services/autoCombo/modePacks.ts` | 4 weight profiles |
|
||||
| `open-sse/services/autoCombo/scoring.ts` | Функція оцінювання та нормалізація пулу |
|
||||
| `open-sse/services/autoCombo/taskFitness.ts` | Пошук відповідності модель × завдання |
|
||||
| `open-sse/services/autoCombo/engine.ts` | Логіка вибору, bandit, обмеження бюджету |
|
||||
| `open-sse/services/autoCombo/selfHealing.ts` | Виключення, проби, режим інциденту |
|
||||
| `open-sse/services/autoCombo/modePacks.ts` | 4 профілі ваг |
|
||||
| `src/app/api/combos/auto/route.ts` | REST API |
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user