# CLI Tools — OmniRoute (ខ្មែរ) 🌐 **Languages:** 🇺🇸 [English](../../../../reference/CLI-TOOLS.md) · 🇪🇹 [am](../../../am/docs/reference/CLI-TOOLS.md) · 🇸🇦 [ar](../../../ar/docs/reference/CLI-TOOLS.md) · 🇦🇿 [az](../../../az/docs/reference/CLI-TOOLS.md) · 🇧🇬 [bg](../../../bg/docs/reference/CLI-TOOLS.md) · 🇧🇩 [bn](../../../bn/docs/reference/CLI-TOOLS.md) · 🇧🇦 [bs](../../../bs/docs/reference/CLI-TOOLS.md) · 🇨🇿 [cs](../../../cs/docs/reference/CLI-TOOLS.md) · 🇩🇰 [da](../../../da/docs/reference/CLI-TOOLS.md) · 🇩🇪 [de](../../../de/docs/reference/CLI-TOOLS.md) · 🇬🇷 [el](../../../el/docs/reference/CLI-TOOLS.md) · 🇪🇸 [es](../../../es/docs/reference/CLI-TOOLS.md) · 🇪🇪 [et](../../../et/docs/reference/CLI-TOOLS.md) · 🇮🇷 [fa](../../../fa/docs/reference/CLI-TOOLS.md) · 🇫🇮 [fi](../../../fi/docs/reference/CLI-TOOLS.md) · 🇫🇷 [fr](../../../fr/docs/reference/CLI-TOOLS.md) · 🇮🇪 [ga](../../../ga/docs/reference/CLI-TOOLS.md) · 🇮🇳 [gu](../../../gu/docs/reference/CLI-TOOLS.md) · 🇳🇬 [ha](../../../ha/docs/reference/CLI-TOOLS.md) · 🇮🇱 [he](../../../he/docs/reference/CLI-TOOLS.md) · 🇮🇳 [hi](../../../hi/docs/reference/CLI-TOOLS.md) · 🇭🇷 [hr](../../../hr/docs/reference/CLI-TOOLS.md) · 🇭🇺 [hu](../../../hu/docs/reference/CLI-TOOLS.md) · 🇦🇲 [hy](../../../hy/docs/reference/CLI-TOOLS.md) · 🇮🇩 [id](../../../id/docs/reference/CLI-TOOLS.md) · 🇳🇬 [ig](../../../ig/docs/reference/CLI-TOOLS.md) · 🇮🇹 [it](../../../it/docs/reference/CLI-TOOLS.md) · 🇯🇵 [ja](../../../ja/docs/reference/CLI-TOOLS.md) · 🇬🇪 [ka](../../../ka/docs/reference/CLI-TOOLS.md) · 🇮🇳 [kn](../../../kn/docs/reference/CLI-TOOLS.md) · 🇰🇷 [ko](../../../ko/docs/reference/CLI-TOOLS.md) · 🇱🇹 [lt](../../../lt/docs/reference/CLI-TOOLS.md) · 🇱🇻 [lv](../../../lv/docs/reference/CLI-TOOLS.md) · 🇮🇳 [ml](../../../ml/docs/reference/CLI-TOOLS.md) · 🇮🇳 [mr](../../../mr/docs/reference/CLI-TOOLS.md) · 🇲🇾 [ms](../../../ms/docs/reference/CLI-TOOLS.md) · 🇲🇹 [mt](../../../mt/docs/reference/CLI-TOOLS.md) · 🇲🇲 [my](../../../my/docs/reference/CLI-TOOLS.md) · 🇳🇵 [ne](../../../ne/docs/reference/CLI-TOOLS.md) · 🇳🇱 [nl](../../../nl/docs/reference/CLI-TOOLS.md) · 🇳🇴 [no](../../../no/docs/reference/CLI-TOOLS.md) · 🇮🇳 [or](../../../or/docs/reference/CLI-TOOLS.md) · 🇮🇳 [pa](../../../pa/docs/reference/CLI-TOOLS.md) · 🇵🇭 [phi](../../../phi/docs/reference/CLI-TOOLS.md) · 🇵🇱 [pl](../../../pl/docs/reference/CLI-TOOLS.md) · 🇵🇹 [pt](../../../pt/docs/reference/CLI-TOOLS.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/reference/CLI-TOOLS.md) · 🇷🇴 [ro](../../../ro/docs/reference/CLI-TOOLS.md) · 🇷🇺 [ru](../../../ru/docs/reference/CLI-TOOLS.md) · 🇱🇰 [si](../../../si/docs/reference/CLI-TOOLS.md) · 🇸🇰 [sk](../../../sk/docs/reference/CLI-TOOLS.md) · 🇸🇮 [sl](../../../sl/docs/reference/CLI-TOOLS.md) · 🇷🇸 [sr](../../../sr/docs/reference/CLI-TOOLS.md) · 🇸🇪 [sv](../../../sv/docs/reference/CLI-TOOLS.md) · 🇰🇪 [sw](../../../sw/docs/reference/CLI-TOOLS.md) · 🇮🇳 [ta](../../../ta/docs/reference/CLI-TOOLS.md) · 🇮🇳 [te](../../../te/docs/reference/CLI-TOOLS.md) · 🇹🇭 [th](../../../th/docs/reference/CLI-TOOLS.md) · 🇹🇷 [tr](../../../tr/docs/reference/CLI-TOOLS.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/reference/CLI-TOOLS.md) · 🇵🇰 [ur](../../../ur/docs/reference/CLI-TOOLS.md) · 🇺🇿 [uz](../../../uz/docs/reference/CLI-TOOLS.md) · 🇻🇳 [vi](../../../vi/docs/reference/CLI-TOOLS.md) · 🇳🇬 [yo](../../../yo/docs/reference/CLI-TOOLS.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/reference/CLI-TOOLS.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/reference/CLI-TOOLS.md) --- អាប់ដេតចុងក្រោយ៖ 2026-08-23 OmniRoute រួមបញ្ចូលជាមួយឧបករណ៍ CLI បីប្រភេទដែលរីករាលដាលនៅទូទាំងទំព័រផ្ទាំងគ្រប់គ្រងចំនួនបី៖ | ទំព័រ | ផ្លូវ | គំនិត | រាប់ | | ----------------- | ----------------------- | ------------------------------------------------------------------------------- | ------------- | | **CLI កូដ** | `/dashboard/cli-code` | ឧបករណ៍សរសេរកូដដែលអ្នកចង្អុលទៅ OmniRoute (អ្នកផ្តល់សេវា → CLI → OmniRoute → ) | 26 | | **ភ្នាក់ងារ CLI** | `/dashboard/cli-agents` | ភ្នាក់ងារស្វយ័តដែលអ្នកចង្អុលទៅ OmniRoute (លំហូរដូចគ្នា វិសាលភាពកាន់តែទូលំទូលាយ) | 11 | | **ភ្នាក់ងារ ACP** | `/dashboard/acp-agents` | CLIs ដែល OmniRoute បង្កើតជា backend តាមរយៈ stdio/ACP (លំហូរបញ្ច្រាស) | មើលបញ្ជីឈ្មោះ | ផ្លូវចាស់ប្តូរទិសតាមរយៈ 308៖ `/dashboard/cli-tools` → `/dashboard/cli-code`, `/dashboard/agents` → `/dashboard/acp-agents`. --- ## របៀបដំណើរការ ``` កូដ CLI / ភ្នាក់ងារ CLI (លំហូរប្រើប្រាស់)៖ Claude / Codex / OpenCode / Cline / KiloCode / Continue / Hermes Agent / Goose / ... │ ▼ (ទាំងអស់ចង្អុលទៅ OmniRoute) http://YOUR_SERVER:20128/v1 │ ▼ (OmniRoute បញ្ជូនទៅ provider ដែលត្រឹមត្រូវ) Anthropic / OpenAI / Gemini / DeepSeek / Groq / Mistral / ... ភ្នាក់ងារ ACP (លំហូរបង្កើតបញ្ច្រាស)៖ សំណើពី Client → OmniRoute → បង្កើត CLI តាមរយៈ stdio/ACP → ការឆ្លើយតប ``` **អត្ថប្រយោជន៍៖** - ប្រើ API key តែមួយដើម្បីគ្រប់គ្រងឧបករណ៍ទាំងអស់ - តាមដានការចំណាយលើ CLI ទាំងអស់នៅក្នុងផ្ទាំងគ្រប់គ្រង - ប្ដូរ model ដោយមិនចាំបាច់កំណត់រចនាសម្ព័ន្ធឧបករណ៍នីមួយៗឡើងវិញ - ដំណើរការបានទាំងក្នុងម៉ាស៊ីនផ្ទាល់ និងលើ server ពីចម្ងាយ (VPS, Docker, Akamai, Cloudflare Tunnel) --- ## កំណត់រចនាសម្ព័ន្ធដោយស្វ័យប្រវត្តិជាមួយ `setup-*` អ្នកមិនចាំបាច់សរសេរការកំណត់របស់ឧបករណ៍នីមួយៗដោយដៃទេ។ OmniRoute បញ្ជូនពាក្យបញ្ជា `setup-*` ក្នុងមួយ CLI ដែលគាំទ្រដែលអាន** រស់នៅ** កាតាឡុកគំរូពី OmniRoute ដែលកំពុងដំណើរការ (ក្នុងស្រុក ឬពីចម្ងាយ) ហើយសរសេរការកំណត់ផ្ទាល់ខ្លួនរបស់ឧបករណ៍នៅលើម៉ាស៊ីនរបស់អ្នក៖ ```bash omniroute setup-codex omniroute setup-claude omniroute setup-opencode omniroute setup-cline omniroute setup-kilo omniroute setup-continue omniroute setup-cursor omniroute setup-roo omniroute setup-crush omniroute setup-goose omniroute setup-qwen omniroute setup-aider omniroute setup-5dive omniroute setup-zed omniroute setup-whycodes ``` នីមួយៗទទួលយក `--remote --api-key ` (កំណត់រចនាសម្ព័ន្ធឧបករណ៍មូលដ្ឋានប្រឆាំងនឹង OmniRoute ពីចម្ងាយ) `--dry-run` (មើលជាមុនដោយគ្មានការសរសេរ) និង `--port`។ ឧបករណ៍ដែលគ្មានការរកឃើញគំរូដោយស្វ័យប្រវត្តិ (Cline, Kilo , Roo , Goose , Aider , Qwen, 5dive , WhyCodes) យក `--model ` (និង `--yes` សម្រាប់ការរត់មិនអន្តរកម្ម) ។ `setup-5dive` គឺជារូបមន្តមួយដែលមិនសរសេរនៅក្រោម `$HOME`: វាកំណត់រចនាសម្ព័ន្ធកងនាវាភ្នាក់ងារ 5dive ដោយសរសេរទម្រង់ការផ្ទៀងផ្ទាត់សិទ្ធិជា root នៅលើម៉ាស៊ីនយន្តហោះ ដូច្នេះវាដំណើរការឡើងវិញតាមរយៈ `sudo` និងមិនមានរបៀបពីចម្ងាយរបស់វាផ្ទាល់។ ដើម្បីបើកដំណើរការ CLI ជាមួយនឹងការចាក់ env ត្រឹមត្រូវ ហើយគ្មានការសរសេរ config អ្វីទាំងអស់ សូមប្រើកម្មវិធីបើកដំណើរការ `omniroute run ` ទូទៅ (claude, codex, aider, goose, opencode, qwen, gemini, whycodes — targets andaliases មកពី `bin/cli/cli-manifest.mjs`); កេរ្តិ៍ដំណែលកម្មវិធីបើកដំណើរការឧបករណ៍មួយ `omniroute launch` (Claude Code) និង `omniroute launch-codex` (Codex) នៅតែមាន។ Gemini CLI គឺបើកដំណើរការតែប៉ុណ្ណោះ៖ វាគឺជាគោលដៅ `omniroute run` ប៉ុន្តែមិនមានរូបមន្ត `setup-*`/`configure` ទេ។ > **ឯកសារយោងពេញលេញ៖** តារាងមេ — អ្វីដែលពាក្យបញ្ជានីមួយៗសរសេរ ទង់នីមួយៗ មូលដ្ឋានទល់នឹងពីចម្ងាយ និងឧបករណ៍ណាដែលចង់បានបច្ច័យ `/v1` — រស់នៅក្នុង** [CLI សមាហរណកម្ម](../guides/CLI-INTEGRATIONS.md)** . ### ដំណើរការទាំងនេះនៅក្នុងធុងមួយ។ ពាក្យបញ្ជា `setup-*` ដែលត្រូវបានប្រតិបត្តិនៅខាងក្នុងធុង OmniRoute សរសេរចូលទៅក្នុងផ្ទះផ្ទាល់ខ្លួនរបស់កុងតឺន័រ ដែលគ្មានម៉ាស៊ីន CLI អាន ហើយដែលបាត់ជាមួយកុងតឺន័រ។ OmniRoute រកឃើញនោះ ហើយចេញ `2` ដោយមានការណែនាំជាជាងការសរសេរ។ វិធីពីរដែលគាំទ្រទៅមុខ — ដំឡើង CLI នៅលើម៉ាស៊ីន និង `omniroute connect` ទៅកុងតឺន័រ ឬចង-ម៉ោន config dirs ហើយកំណត់ `CLI_CONFIG_HOME` (ទម្រង់តែង `host` ) ។ រាល់ពាក្យបញ្ជា `setup-*` បូក `omniroute configure` និង `omniroute config set` ទទួលយក `--allow-container-write` នៅពេលកំណត់រចនាសម្ព័ន្ធ CLIs ផ្ទាល់ខ្លួនរបស់កុងតឺន័រគឺជាអ្វីដែលអ្នកចង់មានន័យពិតប្រាកដ។ `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE=true` ធ្វើដូចគ្នាសម្រាប់ម៉ាស៊ីនមេ។ សូមមើល [Docker Guide → ការកំណត់រចនាសម្ព័ន្ធម៉ាស៊ីន CLI ឧបករណ៍](../guides/DOCKER_GUIDE.md#configuring-host-cli-tools-when-omniroute-runs-in-docker) ។ ផ្ទាំងគ្រប់គ្រង** អនុវត្តចំណុចបញ្ចប់** (`POST /api/cli-tools/apply`) អនុវត្តការយាមដូចគ្នា៖ នៅក្នុងកុងតឺន័រ សរសេរដែលគោលដៅមិនត្រូវបានចងភ្ជាប់ពីចំលើយរបស់ម៉ាស៊ីន**`422`** ជាមួយ `containerEphemeralTarget: true` អត្ថបទកំហុសសុវត្ថិភាព និង — សម្រាប់ឧបករណ៍ដែលមានរូបមន្តម៉ាស៊ីន (claude, codex, opencode, cline, kilo, បន្ត) — `hostSetupCommand` (ឧទាហរណ៍ `omniroute setup-opencode`) ដើម្បីដំណើរការលើម៉ាស៊ីនជំនួសវិញ។ គ្មានអ្វីត្រូវបានសរសេរទេ។ `dryRun: true` បន្តធ្វើការក្នុងរបៀបកុងតឺន័រ ហើយត្រឡប់ផ្លូវគោលដៅ + ជាមុនដែលបានកែប្រែឡើងវិញដោយមិនប៉ះថាស។ មាតិកាមើលជាមុនគឺមិនមែនជាការកំណត់រចនាសម្ព័ន្ធដែលមានលិខិតសម្គាល់ដើម្បីចម្លងឬនាំចូល។ អនុវត្តជាមួយនឹងការបញ្ចូល tool/base URL/API key/model ដើមនៅលើម៉ាស៊ីន ឬប្រើពាក្យបញ្ជាដំឡើងផ្នែកខាងម៉ាស៊ីនដែលបានចង្អុលបង្ហាញ។ មើល [សុវត្ថិភាពការកំណត់រចនាសម្ព័ន្ធ CLI](../security/CLI-CONFIGURATION.md) សម្រាប់បឋមកថាមើលជាមុន និងសំណើកិច្ចសន្យា។ អាកប្បកិរិយានេះគឺមានចេតនា និងតំរែតំរង់ការពារដោយ `tests/unit/api/cli-tools/apply-container-guard.test.ts` - មិនដែល "ជួសជុល" 422 ដោយដកឆ្មាំចេញទេ។ --- ## ប្រភពយោងផ្លូវការ កាតាឡុករួមស្ថិតនៅក្នុង `src/shared/constants/cliTools.ts` ជា `CLI_TOOLS: Record`។ ធាតុនីមួយៗមានវាលទាំងនេះ (កំណត់នៅក្នុង `src/shared/schemas/cliCatalog.ts`)៖ | វាល | ប្រភេទ | សេចក្ដីពិពណ៌នា | | ----------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------------------- | | `category` | `"code" \| "agent"` | ទំព័រដែលឧបករណ៍បង្ហាញនៅលើ | | `vendor` | `string` | ប្រភពដើមនៃឧបករណ៍ ("Anthropic", "OSS (P. Gauthier)") | | `acpSpawnable` | `boolean` | ក៏អាចប្រើជា ACP Agent បានផងដែរ (មានបង្ហាញផ្លាកសញ្ញា) | | `baseUrlSupport` | `"full" \| "partial" \| "none"` | កម្រិតគាំទ្រ endpoint ផ្ទាល់ខ្លួន។ `"none"` = បញ្ជីការងារ MITM ដែលនៅសល់ | | `configType` | `"env" \| "custom" \| "guide" \| "custom-builder" \| "mitm"` | យន្តការកំណត់រចនាសម្ព័ន្ធ | | `id`, `name`, `color`, `description`, `docsUrl` | ស្តង់ដារ | វាលបង្ហាញស្នូល | ធាតុដែលមាន `baseUrlSupport: "none"` **មិនត្រូវបានបង្ហាញ** នៅក្នុងទំព័រ dashboard ទេ — ពួកវាត្រូវបានចុះបញ្ជីក្នុងបញ្ជីការងារ MITM ដែលនៅសល់សម្រាប់ផែនការ 11 (សូមមើល `_tasks/features-v3.8.6/refactorpages/_orchestration/_plan11-mitm-backlog.md`)។ ### កម្រិតសមត្ថភាព (បានដាក់ក្នុងកាតាឡុក × អាចរកឃើញ × អាចកំណត់រចនាសម្ព័ន្ធ × អាចដំណើរការ) មិនមែនគ្រប់ឧបករណ៍ដែលបានដាក់ក្នុងកាតាឡុកទាំងអស់សុទ្ធតែអាចរកឃើញ កំណត់រចនាសម្ព័ន្ធ ឬដំណើរការបានទេ។ កម្រិតនីមួយៗមានប្រភពប្រកាសមួយ ហើយការធ្វើតេស្តភាពខុសគ្នានឹងរក្សាឱ្យពួកវាស្របគ្នា៖ | កម្រិត | អត្ថន័យ | ប្រកាសនៅក្នុង | | ------------------------ | ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------- | | **បានដាក់ក្នុងកាតាឡុក** | បង្ហាញក្នុងកាតាឡុក dashboard (ឈ្មោះ vendor ឯកសារ ប្រភេទការកំណត់រចនាសម្ព័ន្ធ) | `src/shared/constants/cliTools.ts` (`CLI_TOOLS`) | | **អាចរកឃើញ** | ការរកឃើញ binary/ការកំណត់រចនាសម្ព័ន្ធ ការត្រួតពិនិត្យស្ថានភាព និងទីតាំងការកំណត់រចនាសម្ព័ន្ធ | `src/shared/services/cliRuntime.ts` (កាតាឡុក runtime `CLI_TOOLS`) | | **អាចកំណត់រចនាសម្ព័ន្ធ** | គាំទ្រដោយ `omniroute configure ` (មានរូបមន្តរៀបចំ) | `bin/cli/cli-manifest.mjs` (`configure: true`) | | **អាចដំណើរការ** | គាំទ្រដោយ `omniroute run ` (បានកំណត់ការបញ្ចូល env/args) | `bin/cli/cli-manifest.mjs` (`run: true`) | `bin/cli/cli-manifest.mjs` គឺជា manifest ដែលអាចប្រតិបត្តិបានផ្លូវការសម្រាប់ផ្ទៃពាក្យបញ្ជា CLI៖ `run`, `configure` និងឧបករណ៍បង្កើត shell-completion ទាំងអស់ទាញយកបញ្ជីគោលដៅ ការដោះស្រាយ alias (ឧទាហរណ៍ `kilocode`/`kilo-code`/`kilo_cli` → `kilo`) និងការភ្ជាប់ flag `--model` ពីវា។ យន្តការការពារភាពខុសគ្នា `tests/unit/cli/cli-manifest-drift.test.ts` ផ្ទៀងផ្ទាត់ថា manifest កាតាឡុក runtime កាតាឡុក UI និងផ្ទៃប្រើប្រាស់ទាំងអស់នៅតែស្របគ្នា — គោលដៅដែលបានបន្ថែមទៅផ្ទៃមួយដោយគ្មានផ្ទៃផ្សេងទៀត នឹងធ្វើឱ្យសំណុំតេស្តបរាជ័យ ជំនួសឱ្យការប្រែប្រួលដោយស្ងៀមស្ងាត់។ --- ## 1. កាតាឡុករបស់កូដ CLI (28 ឧបករណ៍) ឧបករណ៍ទាំងអស់ដែលបង្ហាញក្នុង `/dashboard/cli-code`។ អ្នកដែលមាន `baseUrlSupport: none` ត្រូវបានភ្ជាប់តាមរយៈ MITM ឬការណែនាំដោយដៃជំនួសឱ្យ URL មូលដ្ឋានផ្ទាល់ខ្លួន៖ | លេខសម្គាល់ | ឈ្មោះ | អ្នកលក់ | baseUrlSupport | configType | acpSpawnable | | ---------------- | --------------------------- | ------------------------- | -------------- | --------------------- | ------------ | | ក្លូដ | កូដ Claude | Anthropic | ពេញ | env | ពិត | | កូឌិក | OpenAI Codex CLI | OpenAI | ពេញ | ផ្ទាល់ខ្លួន | ពិត | | zcode | ZCode (ផែនការសរសេរកូដ GLM ) | Z.ai | គ្មាន | ផ្ទាល់ខ្លួន | មិនពិត | | គ្លីនីក | Cline | OSS (អតីត Claude Dev) | ពេញ | ផ្ទាល់ខ្លួន | ពិត | | គីឡូក្រាម | លេខកូដគីឡូ | Kilo-Org | ពេញ | ផ្ទាល់ខ្លួន | មិនពិត | | រ៉ូ | កូដរ៉ូ | រូ (OSS) | ពេញ | ណែនាំ | មិនពិត | | បន្ត | បន្ត | បន្ត.dev | ពេញ | ណែនាំ | មិនពិត | | អ្នកជំនួយ | អ្នកជំនួយ | OSS (P. Gauthier) | ពេញ | ណែនាំ | ពិត | | ក្លែងបន្លំ | ForgeCode | អង់ទីករ HQ | ពេញ | ផ្ទាល់ខ្លួន | ពិត | | jcode | jcode | 1jehuang (OSS) | ពេញ | ផ្ទាល់ខ្លួន | មិនពិត | | deepseek-tui | DeepSeek TUI | Hunter Bown (OSS) | ពេញ | ផ្ទាល់ខ្លួន | មិនពិត | | codewhale | CodeWhale | Hmbown (OSS) | ពេញ | ផ្ទាល់ខ្លួន | មិនពិត | | កូដបើកចំហ | OpenCode | ភាពមិនប្រក្រតី (អតីត SST) | ពេញ | ណែនាំ | ពិត | | droid | រោងចក្រ Droid | រោងចក្រ AI | ផ្នែក | ណែនាំ | មិនពិត | | អ្នកបើកយន្តហោះ | GitHub Copilot CLI | GitHub/MS | ពេញ | ផ្ទាល់ខ្លួន | មិនពិត | | ទស្សន៍ទ្រនិច-cli | Cursor CLI | គ្រប់ទិសទី | ផ្នែក | ណែនាំ | ពិត | | ក្លិន | ក្លិន | leonardcser (OSS) | ពេញ | ផ្ទាល់ខ្លួន | មិនពិត | | ភី | Pi (pi-coding-ភ្នាក់ងារ) | M. Zechner (OSS) | ពេញ | ផ្ទាល់ខ្លួន | មិនពិត | | Grok-Build | Grok សាងសង់ | xAI | ពេញ | ផ្ទាល់ខ្លួន | មិនពិត | | កំទេច | កំទេច | OSS (មន្តស្នេហ៍) | ពេញ | ផ្ទាល់ខ្លួន | មិនពិត | | ឃ្វីន | កូដ Qwen | Alibaba | ពេញ | ណែនាំ | ពិត | | openclaude | OpenClaude | Gitlawb (OSS) | ពេញ | ណែនាំ | មិនពិត | | សេដ | Zed | Zed ឧស្សាហកម្ម | ពេញ | ណែនាំ | មិនពិត | | ទស្សន៍ទ្រនិច | Cursor | គ្រប់ទិសទី | គ្មាន | ណែនាំ | មិនពិត | | អង់ទីទំនាញ | Antigravity | Google | គ្មាន | មីត | មិនពិត | | Hermes | Hermes | ការស្រាវជ្រាវ Nous | គ្មាន | ណែនាំ | មិនពិត | | គីរ៉ូ | Kiro AI | Amazon | គ្មាន | មីត | មិនពិត | | ផ្ទាល់ខ្លួន | CLI ផ្ទាល់ខ្លួន | — | ពេញ | អ្នកបង្កើតផ្ទាល់ខ្លួន | មិនពិត | ឧបករណ៍ដែលមាន `baseUrlSupport: "partial"` បង្ហាញផ្លាកសញ្ញា "⚠ Base URL parcial" នៅក្នុងកាតផ្ទាំងគ្រប់គ្រង។ --- ## 2. កាតាឡុកភ្នាក់ងារ CLI (11 ឧបករណ៍) ភ្នាក់ងារស្វយ័តដែលលេចឡើងនៅក្នុង `/dashboard/cli-agents`: | លេខសម្គាល់ | ឈ្មោះ | អ្នកលក់ | ការគាំទ្រ baseUrl | acpSpawnable | | ---------------- | ---------------- | ---------------------- | ----------------- | ------------ | | ភ្នាក់ងារ Hermes | ភ្នាក់ងារ Hermes | ការស្រាវជ្រាវ Nous | ពេញ | មិនពិត | | openclaw | OpenClaw | OSS (P. Steinberger) | ពេញ | ពិត | | goose | Goose | ប្លុក / Linux មូលនិធិ | ពេញ | ពិត | | អ្នកបកប្រែ | បើកអ្នកបកប្រែ | OSS | ពេញ | ពិត | | warp | Warp AI | Warp Inc. | ផ្នែក | ពិត | | ភ្នាក់ងារ - ជាន់ | នាវាភ្នាក់ងារ | Asheshgoplani (OSS) | ពេញ | មិនពិត | | អូម | អូខ្ញុំភី | OSS | ពេញ | ពិត | | ឡាតា | Letta CLI | ឡេតា | ពេញ | មិនពិត | | ភ្នាក់ងារបឋម | ភ្នាក់ងារសំខាន់ | បញ្ញាបឋម (OSS) | ពេញ | មិនពិត | | 5 មុជទឹក | 5 មុជទឹក | OSS (5 dive-ai) | ពេញ | មិនពិត | | ហេតុអ្វីលេខកូដ | WhyCodes | ហេតុអ្វីបានជាសាជីវកម្ម | ពេញ | មិនពិត | --- ## 3. ភ្នាក់ងារ ACP (/dashboard/acp-agents) ទំព័រនេះ (បានប្តូរឈ្មោះពី `/dashboard/agents`) បង្ហាញ CLI ដែល OmniRoute អាច **បង្កើតដំណើរការ** ជាម៉ាស៊ីនប្រតិបត្តិការផ្នែកខាងក្រោយ តាមរយៈពិធីការ stdio/ACP។ កាតាឡុកនេះត្រូវបានថែទាំដោយឡែកនៅក្នុង `src/lib/acp/registry.ts` ហើយវា **មិនមែន** ដូចគ្នានឹង `CLI_TOOLS` ទេ។ --- ## 4. បញ្ជីការងារ MITM ដែលនៅសល់ (មិនបង្ហាញក្នុងផ្ទាំងគ្រប់គ្រង) CLI ខាងក្រោមមិនគាំទ្រ URL មូលដ្ឋានផ្ទាល់ខ្លួនពីកំណើតទេ ហើយ **មិនត្រូវបានរាយបញ្ជី** នៅក្នុងទំព័រ CLI Code ឬ CLI Agents ទេ។ ពួកវាជាបេក្ខភាពសម្រាប់ការស្ទាក់ចាប់ MITM ក្នុងផែនការ 11៖ | CLI | មូលហេតុ | | ------------------- | ----------------------------------------------------------------------------- | | windsurf | BYOK ត្រូវបានកំណត់ចំពោះម៉ូដែល Claude ដែលបានជ្រើសរើស + URL/token របស់ក្រុមហ៊ុន | | amp | ប្រព័ន្ធអេកូបិទជិត (Sourcegraph) | | amazon-q / kiro-cli | ការផ្ទៀងផ្ទាត់ AWS SSO, គ្មាន URL ផ្ទាល់ខ្លួន | | cowork | Anthropic Desktop, គ្មាន endpoint ដែលអាចកំណត់រចនាសម្ព័ន្ធបាន | សូមមើល `_tasks/features-v3.8.6/refactorpages/_orchestration/_plan11-mitm-backlog.md` សម្រាប់ឯកសារយោងឆ្លងពេញលេញ។ --- ## 5. API រកឃើញជាបាច់ ការរកឃើញឧបករណ៍ទាំងអស់ត្រូវបានប្រមូលផ្តុំតាមរយៈ endpoint តែមួយ៖ **`GET /api/cli-tools/all-statuses`** - ការផ្ទៀងផ្ទាត់៖ `requireCliToolsAuth(request)` (ដូចគ្នានឹង route `/api/cli-tools/` ផ្សេងទៀត) - ត្រឡប់៖ `Record` (ប្រភេទ៖ `src/shared/types/cliBatchStatus.ts`) - យុទ្ធសាស្ត្រ៖ `Promise.all` លើឧបករណ៍ទាំងអស់ ដោយមានពេលអស់សុពលភាព 5s សម្រាប់ឧបករណ៍នីមួយៗ - ឃ្លាំងសម្ងាត់៖ LRU ក្នុងអង្គចងចាំ ដែលដាក់លិបិក្រមតាម `mtime` របស់ឯកសារកំណត់រចនាសម្ព័ន្ធ។ ឃ្លាំងសម្ងាត់ត្រូវបានធ្វើឱ្យអសុពលភាព នៅពេល `mtime` ផ្លាស់ប្តូរ។ វាត្រូវបានកំណត់ឡើងវិញនៅពេលម៉ាស៊ីនមេចាប់ផ្តើមឡើងវិញ។ ទម្រង់ការឆ្លើយតបសម្រាប់ឧបករណ៍នីមួយៗ៖ ```ts interface ToolBatchStatus { detection: { installed: boolean; runnable: boolean; version?: string; command?: string; commandPath?: string; reason?: string; }; config: { status: "configured" | "not_configured" | "not_installed" | "unknown" | "other"; endpoint?: string | null; lastConfiguredAt?: string | null; }; error?: string; // បានសម្អាតរួច គ្មានដាន stack } ``` --- ## 6. ការកំណត់ឧបករណ៍ដោះស្រាយសម្រាប់ឧបករណ៍ថ្មី។ ឧបករណ៍ថ្មីជាមួយ `configType: "custom"` មានការកំណត់ជាក់លាក់នៃផ្លូវ API ៖ | ផ្លូវ | ឧបករណ៍ | | ------------------------------------------- | ----------------------------------------------------------------------- | | `POST /api/cli-tools/forge-settings` | ForgeCode (.forge.toml) | | `POST /api/cli-tools/jcode-settings` | jcode (ទង់--base-url ) | | `POST /api/cli-tools/deepseek-tui-settings` | DeepSeek TUI (OPENAI_BASE_URL, កេរ្តិ៍ដំណែល) | | `POST /api/cli-tools/codewhale-settings` | CodeWhale (OPENAI_BASE_URL, សមកាលកម្ម + កេរ្តិ៍ដំណែល `~/.deepseek` បឋម) | | `POST /api/cli-tools/smelt-settings` | ក្លិន | | `POST /api/cli-tools/pi-settings` | ភ្នាក់ងារសរសេរកូដ Pi (`~/.pi/agent/models.json`, `providers.omniroute`) | | `POST /api/cli-tools/grok-build-settings` | Grok Build (~/.grok/config.toml, `[model.omniroute]`) | | `POST /api/cli-tools/qwen-settings` | កូដ Qwen (`~/.qwen/settings.json` + ឧទ្ទិស `.env` សោ) | ផ្លូវទាំងអស់ប្រើ `sanitizeErrorMessage()` សម្រាប់ការឆ្លើយតបកំហុស (ច្បាប់រឹង #12) ។ --- ## 7. ស្ថាបត្យកម្មទំព័រផ្ទាំងគ្រប់គ្រង ### CLI Code's (`/dashboard/cli-code`) - `src/app/(dashboard)/dashboard/cli-code/page.tsx` — សមាសភាគម៉ាស៊ីនមេ - `src/app/(dashboard)/dashboard/cli-code/CliCodePageClient.tsx` — ក្រឡាចត្រង្គម៉ាស៊ីនភ្ញៀវ - `src/app/(dashboard)/dashboard/cli-code/[id]/page.tsx` — ទំព័រព័ត៌មានលម្អិតរបស់ឧបករណ៍ - `src/app/(dashboard)/dashboard/cli-code/components/` — កាតឧបករណ៍ឯកទេសចំនួន 12 + `ToolDetailClient.tsx` ### ភ្នាក់ងារ CLI (`/dashboard/cli-agents`) - `src/app/(dashboard)/dashboard/cli-agents/page.tsx` — សមាសភាគម៉ាស៊ីនមេ - `src/app/(dashboard)/dashboard/cli-agents/CliAgentsPageClient.tsx` — ក្រឡាចត្រង្គម៉ាស៊ីនភ្ញៀវ - `src/app/(dashboard)/dashboard/cli-agents/[id]/page.tsx` — ប្រើ `ToolDetailClient` ឡើងវិញ ### ភ្នាក់ងារ ACP (`/dashboard/acp-agents`) - `src/app/(dashboard)/dashboard/acp-agents/page.tsx` — សមាសភាគម៉ាស៊ីនមេ (បានផ្លាស់ទីពី `agents/`) ### សមាសភាគ UI ដែលប្រើរួម (`src/shared/components/cli/`) | ឯកសារ | គោលបំណង | | ----------------------- | ------------------------------------------------------------------ | | `CliToolCard.tsx` | កាតស្ថានភាពឆ្លាតវៃ (ការរកឃើញ + ការកំណត់រចនាសម្ព័ន្ធ + ចំណុចបញ្ចប់) | | `CliConceptCard.tsx` | កាតពន្យល់គោលគំនិតសម្រាប់ទំព័រនីមួយៗ | | `CliComparisonCard.tsx` | ការប្រៀបធៀបបីជួរឈររវាងប្រភេទ CLI | | `BaseUrlSelect.tsx` | បញ្ជីទម្លាក់ចុះចំណុចបញ្ចប់ (មូលដ្ឋាន/Cloud/ផ្ទាល់ខ្លួន) | | `ApiKeySelect.tsx` | ឧបករណ៍ជ្រើសរើសកូនសោ API | | `ManualConfigModal.tsx` | ម៉ូឌុលបំណែកការកំណត់រចនាសម្ព័ន្ធដែលអាចចម្លងបាន | ### Hook ដែលប្រើរួម (`src/shared/hooks/cli/`) | ឯកសារ | គោលបំណង | | ------------------------- | ------------------------------------------------------------------------------ | | `useToolBatchStatuses.ts` | ទាញយក `/api/cli-tools/all-statuses` និងគ្រប់គ្រងស្ថានភាពកំពុងផ្ទុក/ផ្ទុកឡើងវិញ | --- ## 8. i18n Namespace ថ្មីៗដែលបានបន្ថែមនៅក្នុងផែនការ 14 F9៖ | Namespace | គោលបំណង | | ----------- | ---------------------------------------------------------------------- | | `cliCommon` | ខ្សែអក្សររួម (ស្លាកកាត អត្ថបទគោលគំនិត/ការប្រៀបធៀប និងស្លាកទំព័រលម្អិត) | | `cliCode` | ខ្សែអក្សរសម្រាប់ទំព័រ CLI Code | | `cliAgents` | ខ្សែអក្សរសម្រាប់ទំព័រ CLI Agents | | `acpAgents` | ខ្សែអក្សរសម្រាប់ទំព័រ ACP Agents | ការបកប្រែ PT-BR និង EN ពេញលេញត្រូវបានផ្តល់ជូន។ Locale ចំនួន 39 ផ្សេងទៀតនឹងប្រើ EN ដោយស្វ័យប្រវត្តិ តាមរយៈការបញ្ចូលចូលគ្នាកម្រិត namespace នៅក្នុង `src/i18n/request.ts`។ --- ## 9. ការចាប់ផ្តើមរហ័ស ### ជំហានទី 1 — ទទួលបាន OmniRoute API Key 1. បើក `/dashboard/api-manager` →** បង្កើត API Key** 2. ដាក់ឈ្មោះឱ្យវា (ឧទាហរណ៍ `cli-tools`) ហើយជ្រើសរើសការអនុញ្ញាតទាំងអស់។ 3. ចម្លងកូនសោ — អ្នកនឹងត្រូវការវាសម្រាប់រាល់ CLI ខាងក្រោម > សោរបស់អ្នកមើលទៅដូច៖ `sk-xxxxxxxxxxxxxxxx-xxxxxxxxx` --- ### ជំហាន CLI — ឧបករណ៍ដែលមានមូលដ្ឋានលើ npm ទាំងអស់ទាមទារ Node.js 22.22.2 + ឬ 24.x៖ ```bash # 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 # Qwen Code npm install -g @qwen-code/qwen-code # Google Gemini CLI (launchable via `omniroute run gemini` → /v1beta surface) npm install -g @google/gemini-cli # Aider pip install aider-chat # Smelt cargo install smelt # Rust-based # Pi coding agent npm install -g --ignore-scripts @earendil-works/pi-coding-agent # jcode # see https://github.com/1jehuang/jcode for install ``` --- ### ជំហានទី 3 — កំណត់រចនាសម្ព័ន្ធតាមរយៈផ្ទាំងគ្រប់គ្រង 1. ទៅ `http://localhost:20128/dashboard/cli-code` 2. ស្វែងរកឧបករណ៍របស់អ្នកនៅក្នុងក្រឡាចត្រង្គ 3. ចុចកាតដើម្បីបើកទំព័រលម្អិតឧបករណ៍ 4. ជ្រើសរើស API key របស់អ្នក និង URL មូលដ្ឋាន 5. ចុច** អនុវត្តការកំណត់** ឬចម្លងអត្ថបទកំណត់រចនាសម្ព័ន្ធដោយដៃ --- ### ជំហានទី 4 — កំណត់អថេរបរិស្ថានសកល ```bash # 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" export ANTHROPIC_AUTH_TOKEN="sk-your-omniroute-key" # Gemini CLI reads GOOGLE_GEMINI_BASE_URL at the ROOT (its SDK appends /v1beta/... itself) export GOOGLE_GEMINI_BASE_URL="http://localhost:20128" export GEMINI_API_KEY="sk-your-omniroute-key" ``` > សម្រាប់ ក** ម៉ាស៊ីនមេពីចម្ងាយ** ជំនួស `localhost:20128` ជាមួយម៉ាស៊ីនមេ IP ឬដែន ឧទាហរណ៍ `http://:20128`។ --- ### ជំហានទី 4 — កំណត់រចនាសម្ព័ន្ធឧបករណ៍នីមួយៗ #### កូដ Claude ```bash # Create ~/.claude/settings.json: mkdir -p ~/.claude && cat > ~/.claude/settings.json << EOF { "env": { "ANTHROPIC_BASE_URL": "http://localhost:20128", "ANTHROPIC_AUTH_TOKEN": "sk-your-omniroute-key" } } EOF ``` ប្រើឫសច្រកផ្លូវ Anthropic បង្រួបបង្រួមសម្រាប់កូដ Claude ។ កុំបន្ថែម `/v1` នៅទីនេះ។ **សាកល្បង៖** `claude "say hello"` --- #### OpenAI Codex Codex ទំនើប (v0.137 +) អាន `~/.codex/config.toml` តែ — `config.yaml` ចាស់ជាកម្មសិទ្ធិរបស់ npm CLI កេរ្តិ៍ដំណែល ហើយត្រូវបានមិនអើពើដោយស្ងៀមស្ងាត់។ គ្រាប់ចុច API ស្ថិតនៅក្នុងអថេរបរិស្ថាន `OMNIROUTE_API_KEY` (`env_key`) មិនដែលនៅខាងក្នុងឯកសារទេ៖ ```bash mkdir -p ~/.codex && cat > ~/.codex/config.toml << EOF model_provider = "omniroute" [model_providers.omniroute] name = "OmniRoute" base_url = "http://localhost:20128/v1" env_key = "OMNIROUTE_API_KEY" requires_openai_auth = false EOF export OMNIROUTE_API_KEY="sk-your-omniroute-key" ``` ឯកសារយោងពេញលេញ (ទម្រង់, `wire_api`, បង្អួចបរិបទ): [CODEX-CLI-CONFIGURATION.md](../guides/CODEX-CLI-CONFIGURATION.md). **សាកល្បង៖** `codex "what is 2+2?"` --- #### OpenCode ```bash mkdir -p ~/.config/opencode && cat > ~/.config/opencode/opencode.json << EOF { "\$schema": "https://opencode.ai/config.json", "provider": { "omniroute": { "npm": "@ai-sdk/openai-compatible", "name": "OmniRoute", "options": { "baseURL": "http://localhost:20128/v1", "apiKey": "sk-your-omniroute-key" }, "models": { "claude-sonnet-4-5": { "name": "claude-sonnet-4-5" }, "claude-sonnet-4-5-thinking": { "name": "claude-sonnet-4-5-thinking" }, "gemini-3-flash": { "name": "gemini-3-flash" } } } } } EOF ``` **សាកល្បង៖** `opencode` > ប្រើ `opencode run "your prompt" --model omniroute/claude-sonnet-4-5-thinking --variant high` ដើម្បីផ្ញើបំរែបំរួលនៃការគិត។ --- #### ភ្នាក់ងារសរសេរកូដ Pi ដំឡើងកញ្ចប់ភ្នាក់ងារសរសេរកូដ Pi ផ្លូវការជាមួយ `npm install -g --ignore-scripts @earendil-works/pi-coding-agent`។ Pi អានអ្នកផ្តល់សេវាផ្ទាល់ខ្លួនពី `~/.pi/agent/models.json`; កំណត់ `PI_CODING_AGENT_DIR` ដើម្បីផ្លាស់ទីថតភ្នាក់ងារទាំងមូល។ ផ្ទៃតាប្លូធ្វើតាមការបដិសេធនោះ។ Pi មិនបានរកឃើញម៉ូដែលពីចំណុចបញ្ចប់ផ្ទាល់ខ្លួនទេ ដូច្នេះ OmniRoute សរសេរគំរូដែលបានជ្រើសរើសនៅក្នុង `models[]` ដោយប្រើ `openai-completions` API របស់ Pi និងចំណុចបញ្ចប់ OmniRoute OpenAI-compatible `/v1` ។ ក្នុង**CLI ឧបករណ៍ → Pi** ជ្រើសរើសចំណុចបញ្ចប់ គន្លឹះ API និងគំរូ ពិនិត្យមើលការមើលជាមុនរបស់អ្នកផ្តល់សេវា បន្ទាប់មកអនុវត្ត។ ការមើលជាមុនគឺជាបំណែកអ្នកផ្តល់សេវា៖ បញ្ចូល `providers.omniroute` ទៅក្នុង `models.json` ដែលមានស្រាប់របស់អ្នក នៅពេលកំណត់រចនាសម្ព័ន្ធ Pi ដោយដៃ ដូច្នេះអ្នកផ្តល់សេវា និងការកំណត់ផ្សេងទៀតនៅដដែល។ ```json { "$schema": "https://pi.dev/schemas/models.schema.json", "providers": { "omniroute": { "baseUrl": "http://localhost:20128/v1", "api": "openai-completions", "apiKey": "sk-your-omniroute-key", "omnirouteManaged": true, "models": [{ "id": "auto/best-coding", "name": "auto/best-coding" }] } } } ``` Pi ផ្ទុក `models.json` ឡើងវិញ នៅពេលអ្នកបើក `/model`។ សាកល្បងផ្លូវដែលបានកំណត់រចនាសម្ព័ន្ធជាមួយលេខសម្គាល់អ្នកផ្តល់សេវា និងលេខសម្គាល់ម៉ូដែលដែលអ្នកបានជ្រើសរើស៖ ```bash pi --provider omniroute --model auto/best-coding --print "Reply with a short greeting." ``` ឯកសារយោង៖ [ម៉ូដែល Pi និងអ្នកផ្តល់សេវាផ្ទាល់ខ្លួន](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/models.md), [អថេរបរិស្ថាន Pi](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/environment-variables.md), [ការណែនាំដំឡើង Pi](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/README.md) ។ --- #### Cline (កូដ CLI ឬ VS ) **របៀប CLI ៖** ```bash mkdir -p ~/.cline/data && cat > ~/.cline/data/globalState.json << EOF { "apiProvider": "openai", "openAiBaseUrl": "http://localhost:20128/v1", "openAiApiKey": "sk-your-omniroute-key" } EOF ``` **របៀបកូដ VS ៖** ការកំណត់ផ្នែកបន្ថែម Cline → API អ្នកផ្គត់ផ្គង់៖ `OpenAI Compatible` → មូលដ្ឋាន URL: `http://localhost:20128/v1` ឬប្រើផ្ទាំងគ្រប់គ្រង OmniRoute →**CLI ឧបករណ៍ → Cline → អនុវត្តការកំណត់រចនាសម្ព័ន្ធ** . --- #### KiloCode (កូដ CLI ឬ VS ) **របៀប CLI ៖** ```bash kilocode --api-base http://localhost:20128/v1 --api-key sk-your-omniroute-key ``` **ការកំណត់កូដ VS ៖** ```json { "kilo-code.openAiBaseUrl": "http://localhost:20128/v1", "kilo-code.apiKey": "sk-your-omniroute-key" } ``` ឬប្រើផ្ទាំងគ្រប់គ្រង OmniRoute →**CLI ឧបករណ៍ → KiloCode → អនុវត្តការកំណត់រចនាសម្ព័ន្ធ** . --- #### បន្ត (ផ្នែកបន្ថែមកូដ VS ) កែសម្រួល `~/.continue/config.yaml`: ```yaml models: - name: OmniRoute provider: openai model: auto apiBase: http://localhost:20128/v1 apiKey: sk-your-omniroute-key default: true ``` ចាប់ផ្តើមកូដ VS ឡើងវិញបន្ទាប់ពីកែសម្រួល។ --- #### VS Code Insiders (`chatLanguageModels.json`) ប្រើវានៅពេលដែល VS Code Insiders ត្រូវបានកំណត់រចនាសម្ព័ន្ធសម្រាប់ម៉ូដែលចំណុចបញ្ចប់ផ្ទាល់ខ្លួន ហើយអ្នកចង់ឱ្យ OmniRoute ដំណើរការដោយគ្មានវាលបឋមកថាផ្ទាល់ខ្លួន។ **ទីតាំងដែលបានណែនាំ៖** - Linux: `~/.config/Code - Insiders/User/chatLanguageModels.json` - Windows: `%APPDATA%/Code - Insiders/User/chatLanguageModels.json` **ឧទាហរណ៍ដោយប្រើឈ្មោះក្លែងក្លាយ OmniRoute និមិត្តសញ្ញា៖** ```json [ { "vendor": "customendpoint", "id": "auto", "name": "OmniRoute Auto", "family": "gpt-4", "version": "1.0.0", "url": "http://localhost:20128/api/v1/vscode/sk-your-omniroute-key/chat/completions", "modelsUrl": "http://localhost:20128/api/v1/vscode/sk-your-omniroute-key/models", "requestFormat": "openai-chat-completions", "contextWindow": 256000, "maxOutputTokens": 32768, "auth": { "type": "none" } } ] ``` **កំណត់ចំណាំ៖** - ជំនួស `sk-your-omniroute-key` ដោយគ្រាប់ចុច API ដែលបង្កើតក្នុង OmniRoute។ - វាល `url` គួរតែចង្អុលទៅ `/api/v1/vscode/{token}/chat/completions`។ - វាល `modelsUrl` គួរតែចង្អុលទៅ `/api/v1/vscode/{token}/models`។ - ចូលចិត្តលំហូរបឋមកថា `/v1` + Bearer ធម្មតា នៅពេលដែលម៉ាស៊ីនភ្ញៀវគាំទ្របឋមកថាផ្ទាល់ខ្លួន។ - និមិត្តសញ្ញាដែលបានបង្កប់ URL គឺជាជម្រើសដែលត្រូវគ្នា ហើយអាចបង្ហាញនៅក្នុងកំណត់ហេតុកម្មវិធីនិពន្ធ ឬប្រវត្តិប្រូកស៊ី។ --- #### Kiro CLI (Amazon) ```bash # Login to your AWS/Kiro account: kiro-cli login # The CLI uses its own auth — OmniRoute is not needed as backend for Kiro CLI itself. # Use kiro-cli alongside OmniRoute for other tools. kiro-cli status ``` សម្រាប់**Kiro IDE** កម្មវិធីកុំព្យូទ័រ ប្រើចំណុចបញ្ចប់ MITM ដែលលាតត្រដាងដោយ OmniRoute ក្រោម `/dashboard/cli-tools → Kiro`។ --- ## 10. OmniRoute CLI ផ្ទៃក្នុង ឯកសារប្រតិបត្តិ `omniroute` ផ្តល់ពាក្យបញ្ជាសម្រាប់វដ្តជីវិតរបស់ម៉ាស៊ីនមេ ការដំឡើង ការធ្វើរោគវិនិច្ឆ័យ និងការគ្រប់គ្រងអ្នកផ្តល់សេវា។ ចំណុចចាប់ផ្តើម៖ `bin/omniroute.mjs`។ ```bash omniroute # ចាប់ផ្តើមម៉ាស៊ីនមេ (ច្រកលំនាំដើម 20128) omniroute setup # អ្នកជំនួយការដំឡើងបែបអន្តរកម្ម omniroute doctor # ពិនិត្យការកំណត់រចនាសម្ព័ន្ធ DB ច្រក និង runtime omniroute providers list # ការតភ្ជាប់អ្នកផ្តល់សេវាដែលបានកំណត់រចនាសម្ព័ន្ធ omniroute providers test-all # សាកល្បងរាល់ការតភ្ជាប់ដែលសកម្ម omniroute reset-password # កំណត់ពាក្យសម្ងាត់អ្នកគ្រប់គ្រងឡើងវិញ omniroute logs # ផ្សាយបន្តផ្ទាល់កំណត់ហេតុសំណើ omniroute health # ស្ថានភាពលម្អិត (breakers, cache, memory) omniroute --version # បង្ហាញកំណែ omniroute --help # បង្ហាញពាក្យបញ្ជាទាំងអស់ ``` ### ការដំឡើង និងការចាប់ផ្តើម ```bash omniroute setup # អ្នកជំនួយការដំឡើងបែបអន្តរកម្ម omniroute setup --non-interactive # របៀប CI/ស្វ័យប្រវត្តិកម្ម (អានអថេរបរិស្ថាន + flags) omniroute setup --password '' # កំណត់ពាក្យសម្ងាត់អ្នកគ្រប់គ្រងដោយផ្ទាល់ omniroute setup --add-provider \ --provider openai \ --api-key '' \ --test-provider # បន្ថែម និងសាកល្បងអ្នកផ្តល់សេវាក្នុងជំហានតែមួយ ``` អថេរបរិស្ថានដែលត្រូវបានទទួលស្គាល់សម្រាប់ការដំឡើងមិនអន្តរកម្ម៖ | អថេរ | គោលបំណង | | ------------------- | -------------------------------------------------------------------------- | | `OMNIROUTE_API_KEY` | API key របស់អ្នកផ្តល់សេវា (ភ្ជាប់ទៅ `--api-key` តាមរយៈ Commander `.env()`) | | `DATA_DIR` | កំណត់ថតទិន្នន័យ OmniRoute ជំនួសតម្លៃដើម | ធាតុបញ្ចូលមិនអន្តរកម្មផ្សេងទៀតទាំងអស់ត្រូវបានបញ្ជូនជា flags មិនមែនអថេរបរិស្ថានទេ៖ `--password`, `--provider`, `--provider-name`, `--provider-base-url`, `--default-model` (សូមមើលជម្រើស `omniroute setup` ខាងលើ)។ ### ការធ្វើរោគវិនិច្ឆ័យ ```bash omniroute doctor # ពិនិត្យការកំណត់រចនាសម្ព័ន្ធ DB ច្រក runtime អង្គចងចាំ និងភាពនៅរស់ omniroute doctor --json # JSON ដែលម៉ាស៊ីនអាចអានបាន omniroute doctor --no-liveness # រំលងការស្ទង់ពិនិត្យស្ថានភាព HTTP omniroute doctor --host 0.0.0.0 # កំណត់ host សម្រាប់ការពិនិត្យភាពនៅរស់ជំនួសតម្លៃដើម omniroute doctor --liveness-url # កំណត់ URL ពេញលេញរបស់ health endpoint ជំនួសតម្លៃដើម ``` doctor ដំណើរការការត្រួតពិនិត្យទាំងនេះ៖ `Config`, `Database`, `Storage/encryption`, `Port availability`, `Node runtime`, `Native binary` (better-sqlite3), `Memory` និង `Server liveness`។ វាបិទដោយមានកូដមិនសូន្យ ប្រសិនបើការត្រួតពិនិត្យណាមួយមានស្ថានភាព `fail`។ ### ការគ្រប់គ្រងអ្នកផ្តល់សេវា ```bash omniroute providers available # កាតាឡុកអ្នកផ្តល់សេវា OmniRoute omniroute providers available --search openai # ត្រងកាតាឡុកតាម id/name/alias/category omniroute providers available --category api-key # ត្រងតាមប្រភេទ (api-key, oauth, free, ...) omniroute providers available --json # JSON ដែលម៉ាស៊ីនអាចអានបាន omniroute providers list # ការតភ្ជាប់អ្នកផ្តល់សេវាដែលបានកំណត់រចនាសម្ព័ន្ធ omniroute providers list --json omniroute providers test # សាកល្បងការតភ្ជាប់ដែលបានកំណត់រចនាសម្ព័ន្ធមួយ omniroute providers test-all # សាកល្បងរាល់ការតភ្ជាប់ដែលសកម្ម omniroute providers validate # ការផ្ទៀងផ្ទាត់រចនាសម្ព័ន្ធតែក្នុងមូលដ្ឋាន omniroute providers add --credential-env PROVIDER_KEY omniroute providers import ./providers.json --dry-run --json omniroute providers auth # លំហូរ OAuth ដែលមានស្រាប់ omniroute providers edit --default-model omniroute providers remove --yes ``` `providers add/import/auth/edit/remove` ប្រើ API ជាចម្បង ដូច្នេះដំណើរការជាមួយ context មូលដ្ឋាន ឬពីចម្ងាយដែលកំពុងសកម្ម។ ការបញ្ចូលព័ត៌មានសម្ងាត់គួរប្រើ `--credential-stdin` ឬ `--credential-env`; `--dry-run --json` រាយការណ៍តែ វត្តមាន/ទ្រង់ទ្រាយដែលបានលាក់ព័ត៌មានសម្ងាត់ប៉ុណ្ណោះ។ `providers available` អានកាតាឡុក OmniRoute; `providers list/test/test-all/validate` រក្សាឥរិយាបថ SQLite មូលដ្ឋានរបស់ពួកវា និង មិនតម្រូវឱ្យម៉ាស៊ីនមេកំពុងដំណើរការទេ។ សម្រាប់ node ផ្ទាល់ខ្លួនដែលឆបគ្នាជាមួយ OpenAI ឬ Anthropic សូមភ្ជាប់ព័ត៌មានសម្ងាត់ទៅ node ID ដែលត្រឡប់ដោយ `omniroute nodes add` ដោយប្រើ `omniroute keys add "$NODE_ID" --stdin`។ វាតម្រូវឱ្យមានម៉ាស៊ីនមេកំពុងដំណើរការ និងការផ្ទៀងផ្ទាត់អត្តសញ្ញាណគ្រប់គ្រងសម្រាប់ context ដែលសកម្ម។ CLI ប្រើ `POST /api/providers` ដែលផ្ទៀងផ្ទាត់ node និងចម្លងការកំណត់ endpoint របស់វា ទៅក្នុងការតភ្ជាប់។ node ដែលបាត់ ការផ្តល់សិទ្ធិដែលបរាជ័យ ឬម៉ាស៊ីនមេដែលមិនអាចប្រើបាន នឹងត្រឡប់កំហុសដោយមិនបង្កើតព័ត៌មានសម្ងាត់បម្រុងក្នុងមូលដ្ឋានឡើយ។ `nodes add --base-url` កំណត់ endpoint របស់ node; វាខុសពីអាសយដ្ឋានម៉ាស៊ីនមេ នៅក្នុង `OMNIROUTE_BASE_URL`។ សម្រាប់ឯកសារ OpenAPI សូមប្រើ `omniroute openapi dump --format json --out ./openapi.json`; `--output` សកល ជ្រើសរើសទ្រង់ទ្រាយបង្ហាញរបស់ CLI មិនមែនឈ្មោះឯកសារគោលដៅទេ។ ### ការស្ដារ និងការកំណត់ឡើងវិញ ```bash omniroute reset-password # កំណត់ពាក្យសម្ងាត់អ្នកគ្រប់គ្រងឡើងវិញ (ក៏អាចប្រើ៖ omniroute-reset-password) omniroute reset-encrypted-columns # បង្ហាញការព្រមាន + dry-run សម្រាប់ការកំណត់ព័ត៌មានសម្ងាត់ដែលបានអ៊ិនគ្រីបឡើងវិញ omniroute reset-encrypted-columns --force # កំណត់ព័ត៌មានសម្ងាត់ដែលបានអ៊ិនគ្រីបក្នុង SQLite ទៅជា null ពិតប្រាកដ ``` ### ការនាំចេញព័ត៌មានសម្ងាត់ (⚠ សូមប្រុងប្រយ័ត្ន) ```bash omniroute auth export # បង្ហាញការព្រមាន + ជំហានបញ្ជាក់ — មិនចូលប្រើ DB omniroute auth export --force # នាំចេញព័ត៌មានសម្ងាត់ដែលបានឌិគ្រីបរបស់ការតភ្ជាប់ទាំងអស់ទៅ stdout ជា JSON omniroute auth export --force --id # នាំចេញតែការតភ្ជាប់ដែលត្រូវគ្នា omniroute auth export --force --format env # បញ្ចេញបន្ទាត់ OMNIROUTE__= omniroute auth export --force --out creds.json # សរសេរទៅឯកសារ (បង្កើតដោយមានសិទ្ធិ 0600) ``` `auth export` ដំណើរការ **តែក្នុងម៉ាស៊ីនមូលដ្ឋានប៉ុណ្ណោះ** (អាន SQLite ដោយផ្ទាល់ មិនមាន HTTP route) ហើយបោះពុម្ព/សរសេរតម្លៃ **អត្ថបទធម្មតា** `apiKey`/`accessToken`/`refreshToken`/`idToken` ដោយចេតនា — នេះគឺជាមុខងារ មិនមែនជា កំហុសទេ។ គ្មានអ្វីត្រូវបានអានពីមូលដ្ឋានទិន្នន័យ ហើយក៏គ្មានអ្វីត្រូវបានឌិគ្រីបដែរ បើគ្មាន `--force`។ ផ្ទាំង ព្រមានមួយតែងតែត្រូវបានបោះពុម្ពទៅកាន់ stderr មុនពេលបញ្ចេញអត្ថបទធម្មតាណាមួយ។ តម្រូវឱ្យកំណត់ `STORAGE_ENCRYPTION_KEY`។ វាលដែលមិនអាចឌិគ្រីបបាន (កូនសោហួសសុពលភាព ទិន្នន័យសម្ងាត់ខូច) នឹងត្រូវបានរាយការណ៍ជា `DecryptFailed: true` ជំនួសឱ្យការបញ្ឈប់ការនាំចេញទាំងមូល ឬការលេចធ្លាយកំហុសមូលដ្ឋាន។ ### ពាក្យបញ្ជារងផ្សេងទៀត ពាក្យបញ្ជាទាំងនេះសន្មតថាម៉ាស៊ីនបម្រើ OmniRoute កំពុងដំណើរការ លើកលែងតែមានការបញ្ជាក់ផ្សេងពីនេះ៖ ```bash omniroute status # ស្ថានភាពពេលដំណើរការដ៏ទូលំទូលាយ omniroute logs # ស្ទ្រីមកំណត់ហេតុសំណើ (--json, --search, --follow) omniroute config list # បង្ហាញឧបករណ៍ CLI ដែលបានកំណត់រចនាសម្ព័ន្ធ omniroute provider list # រាយបញ្ជីអ្នកផ្តល់សេវាដែលមាន (ឈ្មោះជំនួសរបស់ providers list) omniroute provider add # ចុះឈ្មោះ OmniRoute ជាអ្នកផ្តល់សេវានៅលើឧបករណ៍មួយ omniroute keys add | list | remove # គ្រប់គ្រង API keys omniroute models [provider] # រាយបញ្ជីម៉ូដែល (--json, --search) omniroute combo list | switch | create | delete omniroute backup # ថតចម្លង config + DB omniroute restore # ស្ដារពីការថតចម្លងពីមុន omniroute health # ព័ត៌មានសុខភាពលម្អិត (breakers, cache, memory) omniroute quota # ការប្រើប្រាស់កូតារបស់អ្នកផ្តល់សេវា omniroute cache # ស្ថានភាព cache omniroute cache clear # សម្អាត semantic + signature caches omniroute mcp status | restart # ស្ថានភាព / ចាប់ផ្ដើមម៉ាស៊ីនបម្រើ MCP ឡើងវិញ omniroute a2a status | card # ស្ថានភាពម៉ាស៊ីនបម្រើ A2A / កាតភ្នាក់ងារ omniroute tunnel list | create | stop # គ្រប់គ្រង tunnels (cloudflare/tailscale/ngrok) omniroute env show | get | set # ពិនិត្យ / កំណត់អថេរបរិស្ថាន (បណ្ដោះអាសន្ន) omniroute test # ការសាកល្បងរហ័សនៃការតភ្ជាប់អ្នកផ្តល់សេវា omniroute update # ពិនិត្យរកបច្ចុប្បន្នភាព omniroute completion # បង្កើតការបំពេញពាក្យបញ្ជា shell ``` ### ទង់ទូទៅ | ទង់ | សេចក្ដីពិពណ៌នា | | ------------------- | --------------------------------------------------------- | | `--no-open` | កុំបើកកម្មវិធីរុករកដោយស្វ័យប្រវត្តិនៅពេលចាប់ផ្ដើម | | `--port ` | កំណត់ជាន់លើ API port (លំនាំដើម 20128) | | `--mcp` | ដំណើរការជាម៉ាស៊ីនបម្រើ MCP តាមរយៈ stdio (សម្រាប់ IDEs) | | `--non-interactive` | របៀប CI (គ្មានប្រអប់សួរ; អានពី env/flags) | | `--json` | លទ្ធផល JSON ដែលម៉ាស៊ីនអាចអានបាន (doctor, providers ជាដើម) | | `--help`, `-h` | បង្ហាញជំនួយជាក់លាក់សម្រាប់ពាក្យបញ្ជា | | `--version`, `-v` | បោះពុម្ពកំណែដែលបានដំឡើង | --- ## ចំណុចបញ្ចប់ API ដែលមាន | ចំណុចបញ្ចប់ | ការពិពណ៌នា | ប្រើសម្រាប់ | | -------------------------- | -------------------------------------- | -------------------------------- | | `/v1/chat/completions` | ការជជែកស្តង់ដារ (អ្នកផ្តល់សេវាទាំងអស់) | ឧបករណ៍ទំនើបទាំងអស់ | | `/v1/responses` | Responses API (ទម្រង់ OpenAI) | Codex និងលំហូរការងារបែបភ្នាក់ងារ | | `/v1/completions` | ការបំពេញអត្ថបទបែបចាស់ | ឧបករណ៍ចាស់ៗដែលប្រើ `prompt:` | | `/v1/embeddings` | ការបង្កប់អត្ថបទ | RAG និងការស្វែងរក | | `/v1/images/generations` | ការបង្កើតរូបភាព | GPT-Image, Flux ជាដើម | | `/v1/audio/speech` | អត្ថបទទៅជាសំឡេង | ElevenLabs, OpenAI TTS | | `/v1/audio/transcriptions` | សំឡេងទៅជាអត្ថបទ | Deepgram, AssemblyAI | ឧទាហរណ៍ដែលត្រៀមរួចសម្រាប់បិទភ្ជាប់ ជាមួយ URL របស់ OmniRoute ដែលមានថូខឹន៖ ```txt ឧទាហរណ៍ថូខឹន៖ sk-a3ab3c080beaee3a-69f4a4-070d71af មូលដ្ឋាន OpenAI ស្តង់ដារ៖ http://localhost:20128/v1 ម៉ូដែល VS Code៖ http://localhost:20128/api/v1/vscode/sk-a3ab3c080beaee3a-69f4a4-070d71af/models ការជជែក VS Code៖ http://localhost:20128/api/v1/vscode/sk-a3ab3c080beaee3a-69f4a4-070d71af/chat/completions ការឆ្លើយតប VS Code៖ http://localhost:20128/api/v1/vscode/sk-a3ab3c080beaee3a-69f4a4-070d71af/responses ស្លាក Ollama៖ http://localhost:20128/api/v1/vscode/sk-a3ab3c080beaee3a-69f4a4-070d71af/api/tags ការជជែក Ollama៖ http://localhost:20128/api/v1/vscode/sk-a3ab3c080beaee3a-69f4a4-070d71af/api/chat ``` --- ## ការដោះស្រាយបញ្ហា | កំហុស | មូលហេតុ | ដំណោះស្រាយ | | ------------------------------------------------- | --------------------------------- | ---------------------------------------------------------- | | `Connection refused` | OmniRoute មិនកំពុងដំណើរការ | `omniroute serve` | | `401 Unauthorized` | API key មិនត្រឹមត្រូវ | ពិនិត្យមើលក្នុង `/dashboard/api-manager` | | `No combo configured` | មិនមានបន្សំកំណត់ផ្លូវសកម្ម | រៀបចំក្នុង `/dashboard/combos` | | CLI បង្ហាញថា "មិនបានដំឡើង" | ឯកសារប្រតិបត្តិមិនស្ថិតក្នុង PATH | ពិនិត្យ `which ` | | ផ្ទាំងគ្រប់គ្រងបង្ហាញថា "រកមិនឃើញ" បន្ទាប់ពីដំឡើង | ឃ្លាំងសម្ងាត់ហួសសម័យ | ចុច "⟳ ផ្ទុកការរកឃើញឡើងវិញ" ក្នុងផ្ទាំងគ្រប់គ្រង | | តំណចាស់ `/dashboard/cli-tools` | ចំណាំទុកមុន v3.8.6 | បញ្ជូនបន្តដោយស្វ័យប្រវត្តិទៅ `/dashboard/cli-code` (308) | | តំណចាស់ `/dashboard/agents` | ចំណាំទុកមុន v3.8.6 | បញ្ជូនបន្តដោយស្វ័យប្រវត្តិទៅ `/dashboard/acp-agents` (308) | ## គ្រប់គ្រងគោលការណ៍ inference-key ដោយប្រើ OmniRoute CLI ប្រើបរិបទគ្រប់គ្រងដែលបានផ្ទៀងផ្ទាត់អត្តសញ្ញាណ (សូមមើល [របៀបពីចម្ងាយ](../guides/REMOTE-MODE.md)) ដើម្បីត្រួតពិនិត្យ ឬធ្វើបច្ចុប្បន្នភាព inference key ដែលមានស្រាប់ តាម ID របស់វា៖ ```bash omniroute --output json keys policy show KEY_ID omniroute keys policy set KEY_ID --unrestricted omniroute --output json keys policy show KEY_ID ``` `--unrestricted` គឺជាឈ្មោះជំនួសសម្រាប់ `--model-access-mode all`។ ការធ្វើបច្ចុប្បន្នភាពនេះនឹងសម្អាត បញ្ជីអនុញ្ញាតម៉ូដែល។ វារក្សាទុកវិសាលភាព ច្បាប់ការតភ្ជាប់ ម៉ូដែលដែលបានទប់ស្កាត់ ដែនកំណត់អត្រា និងដែនកំណត់ចំណាយ ដូច្នេះការគ្រប់គ្រងផ្សេងទៀតទាំងនោះនៅតែអាចបដិសេធសំណើបាន។ ការកំណត់ `--allowed-models ""` យ៉ាងជាក់លាក់ក៏ជ្រើសរើស `all` ផងដែរ; ផ្សំវាជាមួយ `--model-access-mode restricted` ដើម្បីរក្សា key ដែលបានដាក់កម្រិតដោយគ្មានម៉ូដែលដែលបានអនុញ្ញាត។ បញ្ជីមិនទទេដែលបំបែកដោយសញ្ញាក្បៀសនឹងជ្រើសរើស `restricted` លុះត្រាតែបានបញ្ជាក់យ៉ាងច្បាស់។ ការកំណត់ `all` ដែលផ្ទុយគ្នាជាមួយបញ្ជីអនុញ្ញាតមិនទទេ នឹងត្រូវបានបដិសេធមុនពេលផ្ញើសំណើ។ `--rate-limit 30` កំណត់ចំនួនសំណើក្នុងមួយនាទី និងរក្សាទុកច្បាប់សម្រាប់ចន្លោះពេល ផ្សេងទៀត។ `--max-cost 5` បើកដំណើរការកម្រិតអតិបរមា USD ប្រចាំថ្ងៃ ដោយមិនផ្លាស់ប្តូរកម្រិតប្រចាំសប្តាហ៍; `--max-cost 0` លុបកម្រិតប្រចាំថ្ងៃ និងរក្សាទុកស្ថានភាពបិទបើកដែនកំណត់ការប្រើប្រាស់ និងកម្រិតប្រចាំសប្តាហ៍ដែលមានស្រាប់។ វាលគោលការណ៍ដែលមិនបានបញ្ជាក់នឹងនៅដដែល។ ការផ្លាស់ប្តូរអត្រា នឹងអានគោលការណ៍បច្ចុប្បន្នជាមុន; ជៀសវាងការកែសម្រួលអារេដែនកំណត់អត្រារបស់ key ដូចគ្នាក្នុងពេលតែមួយ។ ពាក្យបញ្ជាគោលការណ៍ប្រើ `GET`/`PATCH /api/keys/{id}` ដែលបានផ្ទៀងផ្ទាត់អត្តសញ្ញាណ និងគោរពតាមបរិបទសកម្ម ព្រមទាំងជម្រើសសកល `--api-key`។ លទ្ធផល JSON មានតែវាលគោលការណ៍ប៉ុណ្ណោះ ដោយមិនមាន key ដែលបានរក្សាទុក ឬទម្រង់ដែលបានបិទបាំងរបស់វា។ ព័ត៌មានសម្គាល់ដែលមានសិទ្ធិសម្រាប់តែ inference មិនអាចផ្តល់សិទ្ធិឱ្យធ្វើការផ្លាស់ប្តូរផ្នែកគ្រប់គ្រងបានទេ។ កំហុស 401/403 តម្រូវឱ្យពិនិត្យព័ត៌មានសម្គាល់គ្រប់គ្រង និងបរិបទ; វាមិនបញ្ជាក់ថាមានបញ្ហាជាមួយ CLI-token មូលដ្ឋាន ឬ salt នោះទេ។ សូមមើល [ថូខឹន CLI](../security/CLI_TOKEN.md) សម្រាប់កិច្ចសន្យាផ្ទៀងផ្ទាត់អត្តសញ្ញាណមូលដ្ឋានដាច់ដោយឡែក។