* chore(release): open v3.8.14 development cycle Version bump 3.8.13 -> 3.8.14 (root + electron + open-sse + openapi + lockfiles). Seed the v3.8.14 changelog with the four post-tag hotfixes that shipped to Docker/Electron in v3.8.13 but missed the immutable npm 3.8.13 (#3336 SSRF / CodeQL #323, #3334/#3335/#3339 Electron packaging). i18n CHANGELOG mirrors get the in-progress placeholder section. * feat: add per-provider custom headers support for OpenAI/Anthropic-compatible nodes (#3338) Integrated into release/v3.8.14 * fix: Kiro Builder ID token import fails with Bad credentials (#3333) Integrated into release/v3.8.14 — adds Builder ID cached-creds + OIDC refresh path for Kiro token import, with regression tests (#3333). * Improve code quality: auto-pr/docstrings-1780792063 (#3337) Integrated into release/v3.8.14 — docstring for context analytics route re-export. * fix(catalog): remove minimaxai/minimax-m3 from NVIDIA NIM tier (404 upstream) (#3329) (#3341) NVIDIA NIM does not host minimaxai/minimax-m3 — every request returns 404 page not found, while sibling minimaxai/minimax-m2.7 on the same provider works. Advertising a model that 404s is a catalog bug; remove it from the nvidia tier (it remains on the tiers that actually serve MiniMax M3). Re-add only once NVIDIA serves it. Co-authored-by: mikmaneggahommie <mikmaneggahommie@users.noreply.github.com> * fix(cli): write OpenCode config to ~/.config on all platforms incl. Windows (#3330) (#3343) resolveOpencodeConfigDir used %APPDATA% on Windows, but OpenCode reads its config from XDG ~/.config/opencode/ on every platform (on Windows: %USERPROFILE%\.config\opencode\, NOT %APPDATA%). So a Windows user who configured OpenCode via the dashboard had the file written where OpenCode never looks — it silently had no effect. Use the XDG path (XDG_CONFIG_HOME || ~/.config) unconditionally. Update the UI note + route JSDoc, and flip the three tests that encoded the old %APPDATA% behavior (t40 per-platform + card-note, cli-runtime-extended getCliConfigPaths). Co-authored-by: abdulkadirozyurt <abdulkadirozyurt@users.noreply.github.com> * fix(proxy): make auto-selection fallback opt-in (#3332) (#3344) selectWorkingProxyFallback (Step 11 of resolveProxyForConnection) listed ALL registry proxies, ignoring assignments and per-connection proxy_enabled, and returned the first working one with level:'autoSelect'. So a single proxy added to the registry silently became a global fallback for every connection's traffic. Gate it behind a new PROXY_AUTO_SELECT_ENABLED feature flag (default off): the fallback now no-ops unless the operator opts in. No registry proxy becomes a silent global default anymore. Co-authored-by: hertznsk <hertznsk@users.noreply.github.com> * fix(sse): treat MiniMax M3 as multimodal so vision isn't stripped (#3328) (#3342) MiniMax M3 via the opencode provider (oc/minimax-m3-free) appeared blind: image inputs didn't reach the model, while the same model in Cline could see them. Verified empirically that MiniMax M3 on the opencode upstream IS multimodal -- a base64 image is described correctly (it returns 403 only for remote image URLs, which it doesn't accept). Root cause: OmniRoute treated MiniMax M3 as a non-vision model in two places, so when compression was active the image was replaced with a text placeholder before dispatch: - compression's modelSupportsVision() heuristic (lite.ts) only matched gpt-4/4o/claude-3/gemini/vision -- minimax was absent -> replaceImageUrls stripped the image. - the opencode minimax-m3-free catalog entry lacked supportsVision, so the combo vision-capability gate could also exclude/mishandle it. Add 'minimax-m3' to the vision heuristic and supportsVision: true to the opencode minimax-m3-free entry. TDD: a failing-then-passing test in compression/lite.test.ts proves replaceImageUrls now keeps images for minimax-m3 ids, plus a registry assertion mirroring the #2822 qwen test. Reported-by: @mikmaneggahommie * docs(i18n): translate 25 core documentation files to Indonesian (#3348) Integrated into release/v3.8.14 — Indonesian i18n docs. * fix(review): resolve /review-reviews battery findings (LEDGER-1..11) on v3.8.14 (#3350) Integrated into release/v3.8.14 — /review-reviews battery hardening (LEDGER-1..11) for #3338 custom-headers + #3333 kiro, plus cycle-test drift fixes (#3329/#3330/#3332). * fix(provider-proxy): honor per-account proxy toggles (#3349) Integrated into release/v3.8.14 — honor per-account proxy toggles + auto-fallback opt-in via PROXY_AUTO_SELECT_ENABLED. * fix(dashboard): remove duplicate Distribute Proxies button on provider page (#3352) * fix(providers): reduce proxy label noise (#3346) Integrated into release/v3.8.14 — reduce proxy label noise + a11y (aria-label/sr-only). * fix(duckduckgo): restore bare Response contract and rebase onto release/v3.8.14 (#3323) Integrated into release/v3.8.14 — browser-backed cookie providers (duckduckgo/claude-web) with restored executor contract + unit tests. * fix(noauth): expose only usable model aliases (#3345) Integrated into release/v3.8.14 — noauth usable-alias filtering + registry alias plumbing (veo-free). * fix(dashboard): stop infinite config-load loop on Hermes Agent detail page (#3353) * fix(electron): tree-kill the server on exit/update to release the omniroute.exe lock (#3347) (#3354) * chore(release): finalize v3.8.14 changelog + clear release-gate drift - CHANGELOG: finalize the v3.8.14 section (date, full New Features/Bug Fixes/ Maintenance coverage of all 16 cycle commits, Contributors hall of 12). - docs: document OMNIROUTE_BROWSER_POOL + WEB_COOKIE_USE_BROWSER (#3323) in .env.example + ENVIRONMENT.md; regenerate the id/llm.txt strict mirror (#3348 had translated it; llm.txt mirrors must match root). - test(proxy-fetch): #3323 made tlsClient.available a computed getter — stub it via Object.defineProperty instead of assignment (5 tests were red on the base). * fix(translator): coerce Gemini functionDeclaration parameters to an OBJECT schema (#3357) (#3360) * fix(gemini): resolve truncation/suppression of false positive textual tool call markers in backticks (#3358) Integrated into release/v3.8.14 — Gemini/Antigravity textual tool-call marker normalization (no false-positive suppression + split-chunk buffering). * docs(changelog): add #3358 Gemini textual tool-call normalization to v3.8.14 * fix(dashboard): surface real analytics error instead of generic placeholder (#3356) (#3361) The Analytics page discarded the server's error body on a non-OK response and rendered a generic "An error occurred", so users (and maintainers) could not see why /api/usage/analytics 500'd after an upgrade. Now the route returns the real reason via buildErrorBody (sanitized, Hard Rule #12) and the page surfaces it via a new readFetchErrorMessage helper that handles both the OpenAI-style and legacy error shapes. Reported-by: @superti4r --------- Co-authored-by: PizzaV <103120356+pizzav-xyz@users.noreply.github.com> Co-authored-by: Someres <168349709+quanturbo@users.noreply.github.com> Co-authored-by: Dong Mengzhe <154944819+Lang-Qiu@users.noreply.github.com> Co-authored-by: mikmaneggahommie <mikmaneggahommie@users.noreply.github.com> Co-authored-by: abdulkadirozyurt <abdulkadirozyurt@users.noreply.github.com> Co-authored-by: hertznsk <hertznsk@users.noreply.github.com> Co-authored-by: Krisna Santosa <54174372+KrisnaSantosa15@users.noreply.github.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Wilson <pedbookmed@gmail.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: Ardem2025 <ardemb22@gmail.com>
14 KiB
Panduan Pengaturan Alat CLI — OmniRoute (Bahasa Indonesia)
🌐 Languages: 🇺🇸 English · 🇸🇦 ar · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇪🇸 es · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇳 gu · 🇮🇱 he · 🇮🇳 hi · 🇭🇺 hu · 🇮🇩 id · 🇮🇹 it · 🇯🇵 ja · 🇰🇷 ko · 🇮🇳 mr · 🇲🇾 ms · 🇳🇱 nl · 🇳🇴 no · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇸🇰 sk · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇻🇳 vi · 🇨🇳 zh-CN
Panduan ini menjelaskan cara menginstal dan mengonfigurasi semua alat CLI coding AI yang didukung untuk menggunakan OmniRoute sebagai backend terpadu, memberikan manajemen kunci terpusat, pelacakan biaya, pergantian model, dan pencatatan permintaan di semua alat.
Cara Kerjanya
Claude / Codex / OpenCode / Cline / KiloCode / Continue / Kiro / Cursor / Copilot
│
▼ (semua mengarah ke OmniRoute)
http://YOUR_SERVER:20128/v1
│
▼ (OmniRoute meneruskan ke penyedia yang tepat)
Anthropic / OpenAI / Gemini / DeepSeek / Groq / Mistral / ...
Manfaat:
- Satu API key untuk mengelola semua alat
- Pelacakan biaya di semua CLI melalui dashboard
- Pergantian model tanpa mengonfigurasi ulang setiap alat
- Berjalan secara lokal maupun di server jarak jauh (VPS)
Alat yang Didukung (Sumber Kebenaran Dashboard)
Kartu dashboard di /dashboard/cli-tools dibuat dari src/shared/constants/cliTools.ts.
Daftar saat ini (v3.0.0-rc.16):
| Alat | ID | Perintah | Mode Pengaturan | Metode Instalasi |
|---|---|---|---|---|
| Claude Code | claude |
claude |
env | npm |
| OpenAI Codex | codex |
codex |
custom | npm |
| Factory Droid | droid |
droid |
custom | bundled/CLI |
| OpenClaw | openclaw |
openclaw |
custom | bundled/CLI |
| Cursor | cursor |
app | guide | desktop app |
| Cline | cline |
cline |
custom | npm |
| Kilo Code | kilo |
kilocode |
custom | npm |
| Continue | continue |
extension | guide | VS Code |
| Antigravity | antigravity |
internal | mitm | OmniRoute |
| GitHub Copilot | copilot |
extension | custom | VS Code |
| OpenCode | opencode |
opencode |
guide | npm |
| Kiro AI | kiro |
app/cli | mitm | desktop/CLI |
| Qwen Code | qwen |
qwen |
custom | npm |
Sinkronisasi fingerprint CLI (Agents + Pengaturan)
/dashboard/agents dan Settings > CLI Fingerprint menggunakan src/shared/constants/cliCompatProviders.ts.
Ini menjaga ID penyedia tetap selaras dengan kartu CLI dan ID lama.
| CLI ID | ID Penyedia Fingerprint |
|---|---|
kilo |
kilocode |
copilot |
github |
claude / codex / antigravity / kiro / cursor / cline / opencode / droid / openclaw |
same ID |
ID lama yang masih diterima untuk kompatibilitas: copilot, kimi-coding, qwen.
Langkah 1 — Dapatkan API Key OmniRoute
- Buka dashboard OmniRoute → API Manager (
/dashboard/api-manager) - Klik Create API Key
- Beri nama (misalnya
cli-tools) dan pilih semua izin - Salin kunci tersebut — Anda akan membutuhkannya untuk setiap CLI di bawah
Kunci Anda terlihat seperti:
sk-xxxxxxxxxxxxxxxx-xxxxxxxxx
Langkah 2 — Instal Alat CLI
Semua alat berbasis npm memerlukan Node.js 18+:
# Claude Code (Anthropic)
npm install -g @anthropic-ai/claude-code
# OpenAI Codex
npm install -g @openai/codex
# OpenCode
npm install -g opencode-ai
# Cline
npm install -g cline
# KiloCode
npm install -g kilocode
# Kiro CLI (Amazon — requires curl + unzip)
apt-get install -y unzip # on Debian/Ubuntu
curl -fsSL https://cli.kiro.dev/install | bash
export PATH="$HOME/.local/bin:$PATH" # add to ~/.bashrc
Verifikasi:
claude --version # 2.x.x
codex --version # 0.x.x
opencode --version # x.x.x
cline --version # 2.x.x
kilocode --version # x.x.x (or: kilo --version)
kiro-cli --version # 1.x.x
Langkah 3 — Tetapkan Variabel Lingkungan Global
Tambahkan ke ~/.bashrc (atau ~/.zshrc), lalu jalankan source ~/.bashrc:
# OmniRoute Universal Endpoint
export OPENAI_BASE_URL="http://localhost:20128/v1"
export OPENAI_API_KEY="sk-your-omniroute-key"
export ANTHROPIC_BASE_URL="http://localhost:20128/v1"
export ANTHROPIC_API_KEY="sk-your-omniroute-key"
export GEMINI_BASE_URL="http://localhost:20128/v1"
export GEMINI_API_KEY="sk-your-omniroute-key"
Untuk server jarak jauh, ganti
localhost:20128dengan IP atau domain server, misalnyahttp://192.168.0.15:20128.
Langkah 4 — Konfigurasi Setiap Alat
Claude Code
# Melalui CLI:
claude config set --global api-base-url http://localhost:20128/v1
# Atau buat ~/.claude/settings.json:
mkdir -p ~/.claude && cat > ~/.claude/settings.json << EOF
{
"apiBaseUrl": "http://localhost:20128/v1",
"apiKey": "sk-your-omniroute-key"
}
EOF
Uji: claude "say hello"
OpenAI Codex
mkdir -p ~/.codex && cat > ~/.codex/config.yaml << EOF
model: auto
apiKey: sk-your-omniroute-key
apiBaseUrl: http://localhost:20128/v1
EOF
Uji: codex "what is 2+2?"
OpenCode
mkdir -p ~/.config/opencode && cat > ~/.config/opencode/config.toml << EOF
[provider.openai]
base_url = "http://localhost:20128/v1"
api_key = "sk-your-omniroute-key"
EOF
Uji: opencode
Cline (CLI atau VS Code)
Mode CLI:
mkdir -p ~/.cline/data && cat > ~/.cline/data/globalState.json << EOF
{
"apiProvider": "openai",
"openAiBaseUrl": "http://localhost:20128/v1",
"openAiApiKey": "sk-your-omniroute-key"
}
EOF
Mode VS Code:
Pengaturan ekstensi Cline → API Provider: OpenAI Compatible → Base URL: http://localhost:20128/v1
Atau gunakan dashboard OmniRoute → CLI Tools → Cline → Apply Config.
KiloCode (CLI atau VS Code)
Mode CLI:
kilocode --api-base http://localhost:20128/v1 --api-key sk-your-omniroute-key
Pengaturan VS Code:
{
"kilo-code.openAiBaseUrl": "http://localhost:20128/v1",
"kilo-code.apiKey": "sk-your-omniroute-key"
}
Atau gunakan dashboard OmniRoute → CLI Tools → KiloCode → Apply Config.
Continue (Ekstensi VS Code)
Edit ~/.continue/config.yaml:
models:
- name: OmniRoute
provider: openai
model: auto
apiBase: http://localhost:20128/v1
apiKey: sk-your-omniroute-key
default: true
Mulai ulang VS Code setelah mengedit.
Kiro CLI (Amazon)
# Login ke akun AWS/Kiro Anda:
kiro-cli login
# CLI ini menggunakan autentikasinya sendiri — OmniRoute tidak diperlukan sebagai backend untuk Kiro CLI itu sendiri.
# Gunakan kiro-cli bersama OmniRoute untuk alat lainnya.
kiro-cli status
Qwen Code (Alibaba)
Qwen Code mendukung endpoint API yang kompatibel dengan OpenAI melalui variabel lingkungan atau settings.json.
Opsi 1: Variabel lingkungan (~/.qwen/.env)
mkdir -p ~/.qwen && cat > ~/.qwen/.env << EOF
OPENAI_API_KEY="sk-your-omniroute-key"
OPENAI_BASE_URL="http://localhost:20128/v1"
OPENAI_MODEL="auto"
EOF
Opsi 2: settings.json dengan penyedia model
// ~/.qwen/settings.json
{
"env": {
"OPENAI_API_KEY": "sk-your-omniroute-key",
"OPENAI_BASE_URL": "http://localhost:20128/v1"
},
"modelProviders": {
"openai": [
{
"id": "omniroute-default",
"name": "OmniRoute (Auto)",
"envKey": "OPENAI_API_KEY",
"baseUrl": "http://localhost:20128/v1"
}
]
}
}
Opsi 3: Flag CLI langsung
OPENAI_BASE_URL="http://localhost:20128/v1" \
OPENAI_API_KEY="sk-your-omniroute-key" \
OPENAI_MODEL="auto" \
qwen
Untuk server jarak jauh, ganti
localhost:20128dengan IP atau domain server.
Uji: qwen "say hello"
Cursor (Aplikasi Desktop)
Catatan: Cursor merutekan permintaan melalui cloudnya sendiri. Untuk integrasi OmniRoute, aktifkan Cloud Endpoint di Pengaturan OmniRoute dan gunakan URL domain publik Anda.
Melalui GUI: Settings → Models → OpenAI API Key
- Base URL:
https://your-domain.com/v1 - API Key: kunci OmniRoute Anda
Konfigurasi Otomatis Dashboard
Dashboard OmniRoute mengotomatiskan konfigurasi untuk sebagian besar alat:
- Buka
http://localhost:20128/dashboard/cli-tools - Perluas kartu alat mana pun
- Pilih API key Anda dari menu tarik-turun
- Klik Apply Config (jika alat terdeteksi telah terinstal)
- Atau salin cuplikan konfigurasi yang dihasilkan secara manual
Agen Bawaan: Droid & OpenClaw
Droid dan OpenClaw adalah agen AI yang dibangun langsung ke dalam OmniRoute — tidak perlu instalasi. Keduanya berjalan sebagai rute internal dan menggunakan perutean model OmniRoute secara otomatis.
- Akses:
http://localhost:20128/dashboard/agents - Konfigurasi: combo dan penyedia yang sama seperti semua alat lainnya
- Tidak memerlukan API key atau instalasi CLI
Endpoint API yang Tersedia
| Endpoint | Deskripsi | Digunakan Untuk |
|---|---|---|
/v1/chat/completions |
Chat standar (semua penyedia) | Semua alat modern |
/v1/responses |
Responses API (format OpenAI) | Codex, alur kerja agentik |
/v1/completions |
Penyelesaian teks lama | Alat lama yang menggunakan prompt: |
/v1/embeddings |
Embedding teks | RAG, pencarian |
/v1/images/generations |
Pembuatan gambar | GPT-Image, Flux, dll. |
/v1/audio/speech |
Teks ke ucapan | ElevenLabs, OpenAI TTS |
/v1/audio/transcriptions |
Ucapan ke teks | Deepgram, AssemblyAI |
Pemecahan Masalah
| Error | Penyebab | Solusi |
|---|---|---|
Connection refused |
OmniRoute tidak berjalan | pm2 start omniroute |
401 Unauthorized |
API key salah | Periksa di /dashboard/api-manager |
No combo configured |
Tidak ada combo perutean aktif | Atur di /dashboard/combos |
invalid model |
Model tidak ada dalam katalog | Gunakan auto atau periksa /dashboard/providers |
| CLI menampilkan "not installed" | Biner tidak ada di PATH | Periksa which <command> |
kiro-cli: not found |
Tidak ada di PATH | export PATH="$HOME/.local/bin:$PATH" |
Skrip Pengaturan Cepat (Satu Perintah)
# Instal semua CLI dan konfigurasi untuk OmniRoute (ganti dengan kunci dan URL server Anda)
OMNIROUTE_URL="http://localhost:20128/v1"
OMNIROUTE_KEY="sk-your-omniroute-key"
npm install -g @anthropic-ai/claude-code @openai/codex opencode-ai cline kilocode @qwen-code/qwen-code
# Kiro CLI
apt-get install -y unzip 2>/dev/null; curl -fsSL https://cli.kiro.dev/install | bash
# Tulis konfigurasi
mkdir -p ~/.claude ~/.codex ~/.config/opencode ~/.continue
cat > ~/.claude/settings.json <<< "{\"apiBaseUrl\":\"$OMNIROUTE_URL\",\"apiKey\":\"$OMNIROUTE_KEY\"}"
cat > ~/.codex/config.yaml <<< "model: auto\napiKey: $OMNIROUTE_KEY\napiBaseUrl: $OMNIROUTE_URL"
cat >> ~/.bashrc << EOF
export OPENAI_BASE_URL="$OMNIROUTE_URL"
export OPENAI_API_KEY="$OMNIROUTE_KEY"
export ANTHROPIC_BASE_URL="$OMNIROUTE_URL"
export ANTHROPIC_API_KEY="$OMNIROUTE_KEY"
EOF
source ~/.bashrc
echo "✅ All CLIs installed and configured for OmniRoute"