chore(i18n): refresh uk translations
This commit is contained in:
parent
5ef9bc7152
commit
5d397d99fc
@ -1,42 +1,42 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете використовувати моделі Google Gemini з OpenClaw
|
||||
- Вам потрібен API-ключ або потік автентифікації OAuth
|
||||
summary: Налаштування Google Gemini (API-ключ + OAuth, генерація зображень, розуміння медіа, TTS, вебпошук)
|
||||
- Вам потрібен ключ API або потік автентифікації OAuth
|
||||
summary: Налаштування Google Gemini (ключ API + OAuth, генерація зображень, розуміння медіа, TTS, вебпошук)
|
||||
title: Google (Gemini)
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T21:06:07Z"
|
||||
generated_at: "2026-04-24T08:40:13Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: b43d7171f56ecdfb49a25256783433e64f99a02760b3bc6f0e1055195f556f5d
|
||||
source_hash: 7e66c9dd637e26976659d04b9b7e2452e6881945dab6011970f9e1c5e4a9a685
|
||||
source_path: providers/google.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
Plugin Google надає доступ до моделей Gemini через Google AI Studio, а також до
|
||||
генерації зображень, розуміння медіа (image/audio/video), text-to-speech і web search через
|
||||
Плагін Google надає доступ до моделей Gemini через Google AI Studio, а також до
|
||||
генерації зображень, розуміння медіа (зображення/аудіо/відео), text-to-speech і вебпошуку через
|
||||
Gemini Grounding.
|
||||
|
||||
- Provider: `google`
|
||||
- Auth: `GEMINI_API_KEY` або `GOOGLE_API_KEY`
|
||||
- Провайдер: `google`
|
||||
- Автентифікація: `GEMINI_API_KEY` або `GOOGLE_API_KEY`
|
||||
- API: Google Gemini API
|
||||
- Альтернативний provider: `google-gemini-cli` (OAuth)
|
||||
- Альтернативний провайдер: `google-gemini-cli` (OAuth)
|
||||
|
||||
## Початок роботи
|
||||
|
||||
Виберіть бажаний спосіб автентифікації та виконайте кроки налаштування.
|
||||
Оберіть бажаний спосіб автентифікації та виконайте кроки налаштування.
|
||||
|
||||
<Tabs>
|
||||
<Tab title="API-ключ">
|
||||
<Tab title="API key">
|
||||
**Найкраще для:** стандартного доступу до Gemini API через Google AI Studio.
|
||||
|
||||
<Steps>
|
||||
<Step title="Запустіть онбординг">
|
||||
<Step title="Run onboarding">
|
||||
```bash
|
||||
openclaw onboard --auth-choice gemini-api-key
|
||||
```
|
||||
|
||||
Або передайте ключ безпосередньо:
|
||||
Або передайте ключ напряму:
|
||||
|
||||
```bash
|
||||
openclaw onboard --non-interactive \
|
||||
@ -45,7 +45,7 @@ Gemini Grounding.
|
||||
--gemini-api-key "$GEMINI_API_KEY"
|
||||
```
|
||||
</Step>
|
||||
<Step title="Установіть типову модель">
|
||||
<Step title="Set a default model">
|
||||
```json5
|
||||
{
|
||||
agents: {
|
||||
@ -56,7 +56,7 @@ Gemini Grounding.
|
||||
}
|
||||
```
|
||||
</Step>
|
||||
<Step title="Переконайтеся, що модель доступна">
|
||||
<Step title="Verify the model is available">
|
||||
```bash
|
||||
openclaw models list --provider google
|
||||
```
|
||||
@ -64,47 +64,47 @@ Gemini Grounding.
|
||||
</Steps>
|
||||
|
||||
<Tip>
|
||||
Підтримуються обидві змінні середовища: `GEMINI_API_KEY` і `GOOGLE_API_KEY`. Використовуйте ту, яка у вас уже налаштована.
|
||||
Змінні середовища `GEMINI_API_KEY` і `GOOGLE_API_KEY` обидві підтримуються. Використовуйте ту, яка у вас уже налаштована.
|
||||
</Tip>
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab title="Gemini CLI (OAuth)">
|
||||
**Найкраще для:** повторного використання наявного входу Gemini CLI через PKCE OAuth замість окремого API-ключа.
|
||||
**Найкраще для:** повторного використання наявного входу Gemini CLI через PKCE OAuth замість окремого ключа API.
|
||||
|
||||
<Warning>
|
||||
Provider `google-gemini-cli` є неофіційною інтеграцією. Деякі користувачі
|
||||
повідомляють про обмеження облікового запису при такому використанні OAuth. Використовуйте на власний ризик.
|
||||
Провайдер `google-gemini-cli` є неофіційною інтеграцією. Деякі користувачі
|
||||
повідомляють про обмеження облікового запису при використанні OAuth у такий спосіб. Використовуйте на власний ризик.
|
||||
</Warning>
|
||||
|
||||
<Steps>
|
||||
<Step title="Установіть Gemini CLI">
|
||||
<Step title="Install the Gemini CLI">
|
||||
Локальна команда `gemini` має бути доступною в `PATH`.
|
||||
|
||||
```bash
|
||||
# Homebrew
|
||||
brew install gemini-cli
|
||||
|
||||
# or npm
|
||||
# або npm
|
||||
npm install -g @google/gemini-cli
|
||||
```
|
||||
|
||||
OpenClaw підтримує як встановлення через Homebrew, так і глобальні встановлення npm, включно з
|
||||
поширеними схемами Windows/npm.
|
||||
OpenClaw підтримує як встановлення через Homebrew, так і глобальні встановлення через npm, зокрема
|
||||
поширені схеми Windows/npm.
|
||||
</Step>
|
||||
<Step title="Увійдіть через OAuth">
|
||||
<Step title="Log in via OAuth">
|
||||
```bash
|
||||
openclaw models auth login --provider google-gemini-cli --set-default
|
||||
```
|
||||
</Step>
|
||||
<Step title="Переконайтеся, що модель доступна">
|
||||
<Step title="Verify the model is available">
|
||||
```bash
|
||||
openclaw models list --provider google-gemini-cli
|
||||
```
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
- Типова модель: `google-gemini-cli/gemini-3-flash-preview`
|
||||
- Модель за замовчуванням: `google-gemini-cli/gemini-3-flash-preview`
|
||||
- Псевдонім: `gemini-cli`
|
||||
|
||||
**Змінні середовища:**
|
||||
@ -115,60 +115,61 @@ Gemini Grounding.
|
||||
(Або варіанти `GEMINI_CLI_*`.)
|
||||
|
||||
<Note>
|
||||
Якщо запити Gemini CLI OAuth не працюють після входу, задайте `GOOGLE_CLOUD_PROJECT` або
|
||||
Якщо OAuth-запити Gemini CLI не вдаються після входу, задайте `GOOGLE_CLOUD_PROJECT` або
|
||||
`GOOGLE_CLOUD_PROJECT_ID` на хості gateway і повторіть спробу.
|
||||
</Note>
|
||||
|
||||
<Note>
|
||||
Якщо вхід завершується помилкою до початку browser flow, переконайтеся, що локальну команду `gemini`
|
||||
встановлено й додано до `PATH`.
|
||||
Якщо вхід не вдається ще до запуску потоку в браузері, переконайтеся, що локальна команда `gemini`
|
||||
встановлена й доступна в `PATH`.
|
||||
</Note>
|
||||
|
||||
Provider `google-gemini-cli`, який працює лише через OAuth, є окремою
|
||||
поверхнею text inference. Генерація зображень, розуміння медіа та Gemini Grounding залишаються на
|
||||
id provider `google`.
|
||||
Провайдер `google-gemini-cli`, який працює лише через OAuth, є окремою поверхнею
|
||||
текстового інференсу. Генерація зображень, розуміння медіа та Gemini Grounding залишаються на
|
||||
ідентифікаторі провайдера `google`.
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Можливості
|
||||
|
||||
| Можливість | Підтримується |
|
||||
| ---------------------- | ------------------------------ |
|
||||
| Chat completions | Так |
|
||||
| Генерація зображень | Так |
|
||||
| Генерація музики | Так |
|
||||
| Text-to-speech | Так |
|
||||
| Розуміння зображень | Так |
|
||||
| Транскрибування аудіо | Так |
|
||||
| Розуміння відео | Так |
|
||||
| Web search (Grounding) | Так |
|
||||
| Thinking/reasoning | Так (Gemini 2.5+ / Gemini 3+) |
|
||||
| Моделі Gemma 4 | Так |
|
||||
| Можливість | Підтримка |
|
||||
| --------------------- | ------------------------------ |
|
||||
| Завершення чату | Так |
|
||||
| Генерація зображень | Так |
|
||||
| Генерація музики | Так |
|
||||
| Text-to-speech | Так |
|
||||
| Голос у реальному часі| Так (Google Live API) |
|
||||
| Розуміння зображень | Так |
|
||||
| Транскрипція аудіо | Так |
|
||||
| Розуміння відео | Так |
|
||||
| Вебпошук (Grounding) | Так |
|
||||
| Thinking/reasoning | Так (Gemini 2.5+ / Gemini 3+) |
|
||||
| Моделі Gemma 4 | Так |
|
||||
|
||||
<Tip>
|
||||
Моделі Gemini 3 використовують `thinkingLevel`, а не `thinkingBudget`. OpenClaw зіставляє
|
||||
керування міркуваннями для Gemini 3, Gemini 3.1 і псевдонімів `gemini-*-latest` з
|
||||
Моделі Gemini 3 використовують `thinkingLevel` замість `thinkingBudget`. OpenClaw зіставляє
|
||||
керування міркуванням для Gemini 3, Gemini 3.1 і псевдоніма `gemini-*-latest` з
|
||||
`thinkingLevel`, щоб типові/низьколатентні запуски не надсилали вимкнені
|
||||
значення `thinkingBudget`.
|
||||
|
||||
Моделі Gemma 4 (наприклад, `gemma-4-26b-a4b-it`) підтримують режим thinking. OpenClaw
|
||||
переписує `thinkingBudget` у підтримуваний Google `thinkingLevel` для Gemma 4.
|
||||
Установлення thinking у `off` зберігає вимкнений thinking замість зіставлення з
|
||||
Установлення thinking у `off` зберігає thinking вимкненим замість зіставлення з
|
||||
`MINIMAL`.
|
||||
</Tip>
|
||||
|
||||
## Генерація зображень
|
||||
|
||||
Вбудований provider генерації зображень `google` типово використовує
|
||||
Вбудований провайдер генерації зображень `google` за замовчуванням використовує
|
||||
`google/gemini-3.1-flash-image-preview`.
|
||||
|
||||
- Також підтримує `google/gemini-3-pro-image-preview`
|
||||
- Генерація: до 4 зображень на запит
|
||||
- Режим редагування: увімкнений, до 5 вхідних зображень
|
||||
- Режим редагування: увімкнено, до 5 вхідних зображень
|
||||
- Керування геометрією: `size`, `aspectRatio` і `resolution`
|
||||
|
||||
Щоб використовувати Google як типовий provider зображень:
|
||||
Щоб використовувати Google як провайдер зображень за замовчуванням:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -183,20 +184,20 @@ Gemini Grounding.
|
||||
```
|
||||
|
||||
<Note>
|
||||
Див. [Image Generation](/uk/tools/image-generation) щодо спільних параметрів tool, вибору provider і поведінки failover.
|
||||
Див. [Генерація зображень](/uk/tools/image-generation) для спільних параметрів інструмента, вибору провайдера та поведінки failover.
|
||||
</Note>
|
||||
|
||||
## Генерація відео
|
||||
|
||||
Вбудований Plugin `google` також реєструє генерацію відео через спільний
|
||||
tool `video_generate`.
|
||||
інструмент `video_generate`.
|
||||
|
||||
- Типова модель відео: `google/veo-3.1-fast-generate-preview`
|
||||
- Режими: text-to-video, image-to-video і потоки з одним референсним відео
|
||||
- Модель відео за замовчуванням: `google/veo-3.1-fast-generate-preview`
|
||||
- Режими: text-to-video, image-to-video і потоки з посиланням на одне відео
|
||||
- Підтримує `aspectRatio`, `resolution` і `audio`
|
||||
- Поточне обмеження тривалості: **від 4 до 8 секунд**
|
||||
|
||||
Щоб використовувати Google як типовий provider відео:
|
||||
Щоб використовувати Google як провайдер відео за замовчуванням:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -211,22 +212,22 @@ tool `video_generate`.
|
||||
```
|
||||
|
||||
<Note>
|
||||
Див. [Video Generation](/uk/tools/video-generation) щодо спільних параметрів tool, вибору provider і поведінки failover.
|
||||
Див. [Генерація відео](/uk/tools/video-generation) для спільних параметрів інструмента, вибору провайдера та поведінки failover.
|
||||
</Note>
|
||||
|
||||
## Генерація музики
|
||||
|
||||
Вбудований Plugin `google` також реєструє генерацію музики через спільний
|
||||
tool `music_generate`.
|
||||
інструмент `music_generate`.
|
||||
|
||||
- Типова модель музики: `google/lyria-3-clip-preview`
|
||||
- Модель музики за замовчуванням: `google/lyria-3-clip-preview`
|
||||
- Також підтримує `google/lyria-3-pro-preview`
|
||||
- Керування prompt: `lyrics` і `instrumental`
|
||||
- Формат виводу: типово `mp3`, а також `wav` для `google/lyria-3-pro-preview`
|
||||
- Референсні входи: до 10 зображень
|
||||
- Запуски з підтримкою сесій відокремлюються через спільний потік task/status, включно з `action: "status"`
|
||||
- Керування підказкою: `lyrics` і `instrumental`
|
||||
- Формат виводу: `mp3` за замовчуванням, а також `wav` у `google/lyria-3-pro-preview`
|
||||
- Опорні входи: до 10 зображень
|
||||
- Запуски з підтримкою сесій відокремлюються через спільний потік задач/статусу, зокрема `action: "status"`
|
||||
|
||||
Щоб використовувати Google як типовий provider музики:
|
||||
Щоб використовувати Google як провайдер музики за замовчуванням:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -241,20 +242,20 @@ tool `music_generate`.
|
||||
```
|
||||
|
||||
<Note>
|
||||
Див. [Music Generation](/uk/tools/music-generation) щодо спільних параметрів tool, вибору provider і поведінки failover.
|
||||
Див. [Генерація музики](/uk/tools/music-generation) для спільних параметрів інструмента, вибору провайдера та поведінки failover.
|
||||
</Note>
|
||||
|
||||
## Text-to-speech
|
||||
|
||||
Вбудований speech provider `google` використовує шлях Gemini API TTS з
|
||||
Вбудований мовний провайдер `google` використовує шлях Gemini API TTS з
|
||||
`gemini-3.1-flash-tts-preview`.
|
||||
|
||||
- Типовий голос: `Kore`
|
||||
- Auth: `messages.tts.providers.google.apiKey`, `models.providers.google.apiKey`, `GEMINI_API_KEY` або `GOOGLE_API_KEY`
|
||||
- Вивід: WAV для звичайних вкладень TTS, PCM для Talk/telephony
|
||||
- Нативний вивід голосових повідомлень: не підтримується на цьому шляху Gemini API, оскільки API повертає PCM, а не Opus
|
||||
- Голос за замовчуванням: `Kore`
|
||||
- Автентифікація: `messages.tts.providers.google.apiKey`, `models.providers.google.apiKey`, `GEMINI_API_KEY` або `GOOGLE_API_KEY`
|
||||
- Вивід: WAV для звичайних TTS-вкладень, PCM для Talk/телефонії
|
||||
- Нативний вивід голосових нотаток: не підтримується на цьому шляху Gemini API, оскільки API повертає PCM, а не Opus
|
||||
|
||||
Щоб використовувати Google як типовий TTS provider:
|
||||
Щоб використовувати Google як TTS-провайдер за замовчуванням:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -273,34 +274,91 @@ tool `music_generate`.
|
||||
}
|
||||
```
|
||||
|
||||
Gemini API TTS приймає виразні аудіотеги у квадратних дужках у тексті, наприклад
|
||||
`[whispers]` або `[laughs]`. Щоб теги не потрапляли у видиму відповідь чату, але
|
||||
надсилалися до TTS, помістіть їх у блок `[[tts:text]]...[[/tts:text]]`:
|
||||
Gemini API TTS приймає виразні аудіотеги в квадратних дужках у тексті, наприклад
|
||||
`[whispers]` або `[laughs]`. Щоб приховати теги з видимої відповіді чату, але
|
||||
надсилати їх до TTS, помістіть їх у блок `[[tts:text]]...[[/tts:text]]`:
|
||||
|
||||
```text
|
||||
Here is the clean reply text.
|
||||
Ось чистий текст відповіді.
|
||||
|
||||
[[tts:text]][whispers] Here is the spoken version.[[/tts:text]]
|
||||
[[tts:text]][whispers] Ось озвучена версія.[[/tts:text]]
|
||||
```
|
||||
|
||||
<Note>
|
||||
API-ключ Google Cloud Console, обмежений Gemini API, є валідним для цього
|
||||
provider. Це не окремий шлях Cloud Text-to-Speech API.
|
||||
Ключ API Google Cloud Console, обмежений Gemini API, є дійсним для цього
|
||||
провайдера. Це не окремий шлях Cloud Text-to-Speech API.
|
||||
</Note>
|
||||
|
||||
## Розширена конфігурація
|
||||
## Голос у реальному часі
|
||||
|
||||
Вбудований Plugin `google` реєструє провайдера голосу в реальному часі на базі
|
||||
Gemini Live API для серверних аудіомостів, таких як Voice Call і Google Meet.
|
||||
|
||||
| Налаштування | Шлях конфігурації | За замовчуванням |
|
||||
| --------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
|
||||
| Модель | `plugins.entries.voice-call.config.realtime.providers.google.model` | `gemini-2.5-flash-native-audio-preview-12-2025` |
|
||||
| Голос | `...google.voice` | `Kore` |
|
||||
| Temperature | `...google.temperature` | (не задано) |
|
||||
| Чутливість початку VAD| `...google.startSensitivity` | (не задано) |
|
||||
| Чутливість кінця VAD | `...google.endSensitivity` | (не задано) |
|
||||
| Тривалість тиші | `...google.silenceDurationMs` | (не задано) |
|
||||
| Ключ API | `...google.apiKey` | Використовує `models.providers.google.apiKey`, `GEMINI_API_KEY` або `GOOGLE_API_KEY` як запасний варіант |
|
||||
|
||||
Приклад конфігурації Voice Call для роботи в реальному часі:
|
||||
|
||||
```json5
|
||||
{
|
||||
plugins: {
|
||||
entries: {
|
||||
"voice-call": {
|
||||
enabled: true,
|
||||
config: {
|
||||
realtime: {
|
||||
enabled: true,
|
||||
provider: "google",
|
||||
providers: {
|
||||
google: {
|
||||
model: "gemini-2.5-flash-native-audio-preview-12-2025",
|
||||
voice: "Kore",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
<Note>
|
||||
Google Live API використовує двоспрямоване аудіо та виклик функцій через WebSocket.
|
||||
OpenClaw адаптує аудіо телефонії/Meet-мосту до потоку PCM Live API Gemini і
|
||||
зберігає виклики інструментів у межах спільного контракту голосу в реальному часі. Залишайте `temperature`
|
||||
не заданим, якщо вам не потрібні зміни семплювання; OpenClaw пропускає недодатні значення,
|
||||
оскільки Google Live може повертати транскрипти без аудіо для `temperature: 0`.
|
||||
Транскрипція Gemini API вмикається без `languageCodes`; поточний Google
|
||||
SDK відхиляє підказки кодів мов на цьому шляху API.
|
||||
</Note>
|
||||
|
||||
<Note>
|
||||
Сесії Talk у браузері в UI Control, як і раніше, потребують провайдера голосу в реальному часі з
|
||||
реалізацією сеансу браузерного WebRTC. Наразі цим шляхом є OpenAI Realtime; провайдер
|
||||
Google призначений для серверних мостів реального часу.
|
||||
</Note>
|
||||
|
||||
## Розширене налаштування
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Пряме повторне використання кешу Gemini">
|
||||
<Accordion title="Direct Gemini cache reuse">
|
||||
Для прямих запусків Gemini API (`api: "google-generative-ai"`) OpenClaw
|
||||
передає налаштований дескриптор `cachedContent` далі в запити Gemini.
|
||||
передає налаштований дескриптор `cachedContent` у запити Gemini.
|
||||
|
||||
- Налаштовуйте параметри для конкретної моделі або глобальні параметри через
|
||||
`cachedContent` або застарілий `cached_content`
|
||||
- Якщо присутні обидва, `cachedContent` має пріоритет
|
||||
- Налаштовуйте параметри для моделі або глобально за допомогою
|
||||
`cachedContent` або застарілого `cached_content`
|
||||
- Якщо присутні обидва, пріоритет має `cachedContent`
|
||||
- Приклад значення: `cachedContents/prebuilt-context`
|
||||
- Використання Gemini cache-hit нормалізується в OpenClaw `cacheRead` з
|
||||
upstream `cachedContentTokenCount`
|
||||
- Використання влучань кешу Gemini нормалізується в OpenClaw `cacheRead` з
|
||||
висхідного `cachedContentTokenCount`
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -320,20 +378,20 @@ provider. Це не окремий шлях Cloud Text-to-Speech API.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Примітки щодо JSON usage у Gemini CLI">
|
||||
Під час використання OAuth-provider `google-gemini-cli` OpenClaw нормалізує
|
||||
JSON-вивід CLI так:
|
||||
<Accordion title="Примітки щодо використання JSON у Gemini CLI">
|
||||
Під час використання OAuth-провайдера `google-gemini-cli` OpenClaw нормалізує
|
||||
JSON-вивід CLI таким чином:
|
||||
|
||||
- Текст відповіді береться з поля CLI JSON `response`.
|
||||
- Usage резервно береться з `stats`, коли CLI залишає `usage` порожнім.
|
||||
- Використання бере `stats` як запасний варіант, якщо CLI залишає `usage` порожнім.
|
||||
- `stats.cached` нормалізується в OpenClaw `cacheRead`.
|
||||
- Якщо `stats.input` відсутній, OpenClaw виводить вхідні токени з
|
||||
- Якщо `stats.input` відсутнє, OpenClaw обчислює вхідні токени з
|
||||
`stats.input_tokens - stats.cached`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Середовище та налаштування daemon">
|
||||
Якщо Gateway працює як daemon (launchd/systemd), переконайтеся, що `GEMINI_API_KEY`
|
||||
<Accordion title="Налаштування середовища та демона">
|
||||
Якщо Gateway працює як демон (launchd/systemd), переконайтеся, що `GEMINI_API_KEY`
|
||||
доступний цьому процесу (наприклад, у `~/.openclaw/.env` або через
|
||||
`env.shellEnv`).
|
||||
</Accordion>
|
||||
@ -343,15 +401,15 @@ provider. Це не окремий шлях Cloud Text-to-Speech API.
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Вибір моделі" href="/uk/concepts/model-providers" icon="layers">
|
||||
Вибір provider, refs моделей і поведінки failover.
|
||||
Вибір провайдерів, посилань на моделі та поведінки failover.
|
||||
</Card>
|
||||
<Card title="Генерація зображень" href="/uk/tools/image-generation" icon="image">
|
||||
Спільні параметри tool для зображень і вибір provider.
|
||||
Спільні параметри інструмента зображень і вибір провайдера.
|
||||
</Card>
|
||||
<Card title="Генерація відео" href="/uk/tools/video-generation" icon="video">
|
||||
Спільні параметри tool для відео і вибір provider.
|
||||
Спільні параметри інструмента відео і вибір провайдера.
|
||||
</Card>
|
||||
<Card title="Генерація музики" href="/uk/tools/music-generation" icon="music">
|
||||
Спільні параметри tool для музики і вибір provider.
|
||||
Спільні параметри інструмента музики і вибір провайдера.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
@ -1,84 +1,92 @@
|
||||
---
|
||||
read_when:
|
||||
- Додавання нової основної можливості та поверхні реєстрації Plugin
|
||||
- Визначення, чи має код належати ядру, vendor Plugin чи feature Plugin
|
||||
- Підключення нового допоміжного засобу runtime для каналів або інструментів
|
||||
- Додавання нової базової можливості та поверхні реєстрації Pluginів
|
||||
- Визначення того, чи має код належати ядру, плагіну постачальника чи функціональному плагіну
|
||||
- Підключення нового допоміжного компонента середовища виконання для каналів або інструментів
|
||||
sidebarTitle: Adding Capabilities
|
||||
summary: Посібник для контриб’юторів із додавання нової спільної можливості до системи Plugin OpenClaw
|
||||
title: Додавання можливостей (посібник для контриб’юторів)
|
||||
summary: Посібник для учасників щодо додавання нової спільної можливості до системи Plugin в OpenClaw
|
||||
title: Додавання можливостей (посібник для учасників)
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T23:07:26Z"
|
||||
generated_at: "2026-04-24T08:40:13Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: f1e3251b9150c9744d967e91f531dfce01435b13aea3a17088ccd54f2145d14f
|
||||
source_hash: 864506dd3f61aa64e7c997c9d9e05ce0ad70c80a26a734d4f83b2e80331be4ab
|
||||
source_path: tools/capability-cookbook.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
<Info>
|
||||
Це **посібник для контриб’юторів** для розробників ядра OpenClaw. Якщо ви
|
||||
створюєте зовнішній Plugin, див. [Створення Plugins](/uk/plugins/building-plugins)
|
||||
натомість.
|
||||
Це **посібник для учасників** для розробників ядра OpenClaw. Якщо ви
|
||||
створюєте зовнішній Plugin, натомість перегляньте [Building Plugins](/uk/plugins/building-plugins).
|
||||
</Info>
|
||||
|
||||
Використовуйте це, коли OpenClaw потребує нового домену, такого як image generation, video
|
||||
generation або якоїсь майбутньої функціональної області з підтримкою vendor.
|
||||
Використовуйте це, коли OpenClaw потребує нової доменної області, такої як генерація зображень, генерація відео або якась майбутня функціональна область на основі постачальника.
|
||||
|
||||
Правило:
|
||||
|
||||
- plugin = межа володіння
|
||||
- plugin = межа відповідальності
|
||||
- capability = спільний контракт ядра
|
||||
|
||||
Це означає, що не слід починати з прямого підключення vendor до каналу або
|
||||
інструмента. Починайте з визначення capability.
|
||||
Це означає, що не слід починати з прямого підключення постачальника до каналу або інструмента. Починайте з визначення можливості.
|
||||
|
||||
## Коли створювати capability
|
||||
## Коли створювати можливість
|
||||
|
||||
Створюйте нову capability, коли всі ці умови істинні:
|
||||
Створюйте нову можливість, коли всі ці умови істинні:
|
||||
|
||||
1. її потенційно може реалізувати більше ніж один vendor
|
||||
2. канали, інструменти або feature Plugin мають споживати її, не зважаючи на
|
||||
vendor
|
||||
3. ядро має володіти поведінкою fallback, policy, config або delivery
|
||||
1. її потенційно може реалізувати більше ніж один постачальник
|
||||
2. канали, інструменти або функціональні Pluginи мають споживати її, не зважаючи на постачальника
|
||||
3. ядро має володіти поведінкою резервування, політики, конфігурації або доставки
|
||||
|
||||
Якщо робота стосується лише vendor і спільного контракту ще не існує, зупиніться й спочатку визначте
|
||||
контракт.
|
||||
Якщо робота стосується лише постачальника й спільного контракту ще не існує, зупиніться й спочатку визначте контракт.
|
||||
|
||||
## Стандартна послідовність
|
||||
|
||||
1. Визначте типізований контракт ядра.
|
||||
2. Додайте реєстрацію Plugin для цього контракту.
|
||||
3. Додайте спільний допоміжний засіб runtime.
|
||||
4. Підключіть один реальний vendor Plugin як доказ.
|
||||
5. Переведіть feature/channel-споживачів на допоміжний засіб runtime.
|
||||
6. Додайте contract-тести.
|
||||
7. Задокументуйте операторський config і модель володіння.
|
||||
3. Додайте спільний допоміжний компонент середовища виконання.
|
||||
4. Підключіть один реальний Plugin постачальника як доказ.
|
||||
5. Переведіть споживачів функцій/каналів на допоміжний компонент середовища виконання.
|
||||
6. Додайте тести контракту.
|
||||
7. Задокументуйте операторську конфігурацію та модель відповідальності.
|
||||
|
||||
## Що куди належить
|
||||
|
||||
Ядро:
|
||||
|
||||
- типи request/response
|
||||
- registry провайдерів + resolution
|
||||
- поведінка fallback
|
||||
- schema config плюс поширені метадані docs `title` / `description` у вузлах вкладених об’єктів, wildcard, елементів масивів і composition
|
||||
- поверхня допоміжного засобу runtime
|
||||
- типи запиту/відповіді
|
||||
- реєстр провайдерів + визначення
|
||||
- поведінка резервування
|
||||
- схема конфігурації плюс поширені метадані документації `title` / `description` на вкладених об’єктах, wildcard, елементах масиву та вузлах композиції
|
||||
- поверхня допоміжного компонента середовища виконання
|
||||
|
||||
Vendor Plugin:
|
||||
Plugin постачальника:
|
||||
|
||||
- виклики API vendor
|
||||
- обробка auth vendor
|
||||
- vendor-специфічна нормалізація request
|
||||
- реєстрація реалізації capability
|
||||
- виклики API постачальника
|
||||
- обробка автентифікації постачальника
|
||||
- нормалізація запитів, специфічна для постачальника
|
||||
- реєстрація реалізації можливості
|
||||
|
||||
Feature/channel Plugin:
|
||||
Функціональний/канальний Plugin:
|
||||
|
||||
- викликає `api.runtime.*` або відповідний допоміжний засіб `plugin-sdk/*-runtime`
|
||||
- ніколи не викликає реалізацію vendor напряму
|
||||
- викликає `api.runtime.*` або відповідний допоміжний компонент `plugin-sdk/*-runtime`
|
||||
- ніколи не викликає реалізацію постачальника безпосередньо
|
||||
|
||||
## Межі провайдера та Harness
|
||||
|
||||
Використовуйте хуки провайдера, коли поведінка належить контракту провайдера моделі, а не загальному циклу агента. Приклади включають параметри запиту, специфічні для провайдера після вибору транспорту, пріоритет профілю автентифікації, накладання промптів і маршрутизацію подальшого резервування після перемикання моделі/профілю.
|
||||
|
||||
Використовуйте хуки agent harness, коли поведінка належить середовищу виконання, яке виконує хід. Harness можуть класифікувати успішні, але непридатні результати спроб, такі як порожні відповіді, відповіді лише з міркуванням або лише з плануванням, щоб зовнішня політика резервування моделі могла прийняти рішення про повторну спробу.
|
||||
|
||||
Зберігайте обидві межі вузькими:
|
||||
|
||||
- ядро володіє політикою повторних спроб/резервування
|
||||
- Pluginи провайдерів володіють підказками щодо запитів/автентифікації/маршрутизації, специфічними для провайдера
|
||||
- Pluginи harness володіють класифікацією спроб, специфічною для середовища виконання
|
||||
- сторонні Pluginи повертають підказки, а не напряму змінюють стан ядра
|
||||
|
||||
## Контрольний список файлів
|
||||
|
||||
Для нової capability очікуйте, що доведеться змінити такі області:
|
||||
Для нової можливості очікуйте зміни в таких ділянках:
|
||||
|
||||
- `src/<capability>/types.ts`
|
||||
- `src/<capability>/...registry/runtime.ts`
|
||||
@ -90,41 +98,40 @@ Feature/channel Plugin:
|
||||
- `src/plugins/runtime/index.ts`
|
||||
- `src/plugin-sdk/<capability>.ts`
|
||||
- `src/plugin-sdk/<capability>-runtime.ts`
|
||||
- один або кілька пакетів вбудованих Plugin
|
||||
- один або кілька пакетів вбудованих Pluginів
|
||||
- config/docs/tests
|
||||
|
||||
## Приклад: image generation
|
||||
## Приклад: генерація зображень
|
||||
|
||||
Image generation дотримується стандартної форми:
|
||||
Генерація зображень дотримується стандартної форми:
|
||||
|
||||
1. ядро визначає `ImageGenerationProvider`
|
||||
2. ядро відкриває `registerImageGenerationProvider(...)`
|
||||
3. ядро відкриває `runtime.imageGeneration.generate(...)`
|
||||
4. Plugin `openai`, `google`, `fal` і `minimax` реєструють реалізації з підтримкою vendor
|
||||
5. майбутні vendor можуть реєструвати той самий контракт без зміни каналів/інструментів
|
||||
2. ядро надає `registerImageGenerationProvider(...)`
|
||||
3. ядро надає `runtime.imageGeneration.generate(...)`
|
||||
4. Pluginи `openai`, `google`, `fal` і `minimax` реєструють реалізації на основі постачальників
|
||||
5. майбутні постачальники можуть реєструвати той самий контракт без змін у каналах/інструментах
|
||||
|
||||
Ключ config відокремлений від маршрутизації vision-analysis:
|
||||
Ключ конфігурації відокремлений від маршрутизації аналізу зображень:
|
||||
|
||||
- `agents.defaults.imageModel` = аналіз зображень
|
||||
- `agents.defaults.imageGenerationModel` = генерація зображень
|
||||
- `agents.defaults.imageModel` = аналізувати зображення
|
||||
- `agents.defaults.imageGenerationModel` = генерувати зображення
|
||||
|
||||
Тримайте їх окремо, щоб fallback і policy залишалися явними.
|
||||
Зберігайте їх окремими, щоб резервування та політика залишалися явними.
|
||||
|
||||
## Контрольний список перевірки
|
||||
## Контрольний список для перевірки
|
||||
|
||||
Перед випуском нової capability перевірте:
|
||||
Перш ніж випускати нову можливість, перевірте:
|
||||
|
||||
- жоден канал/інструмент не імпортує код vendor напряму
|
||||
- допоміжний засіб runtime є спільним шляхом
|
||||
- принаймні один contract-тест перевіряє вбудоване володіння
|
||||
- docs config називають новий ключ model/config
|
||||
- docs Plugin пояснюють межу володіння
|
||||
- жоден канал/інструмент не імпортує код постачальника напряму
|
||||
- допоміжний компонент середовища виконання є спільним шляхом
|
||||
- принаймні один тест контракту перевіряє вбудовану відповідальність
|
||||
- документація config називає нову модель/ключ конфігурації
|
||||
- документація Pluginів пояснює межу відповідальності
|
||||
|
||||
Якщо PR пропускає шар capability і жорстко вбудовує поведінку vendor у
|
||||
канал/інструмент, повертайте його назад і спочатку визначайте контракт.
|
||||
Якщо PR пропускає рівень можливості й жорстко вбудовує поведінку постачальника в канал/інструмент, поверніть його назад і спочатку визначте контракт.
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Plugin](/uk/tools/plugin)
|
||||
- [Створення Skills](/uk/tools/creating-skills)
|
||||
- [Інструменти та Plugins](/uk/tools)
|
||||
- [Creating skills](/uk/tools/creating-skills)
|
||||
- [Tools and plugins](/uk/tools)
|
||||
|
||||
@ -2,29 +2,29 @@
|
||||
read_when:
|
||||
- Встановлення або налаштування плагінів
|
||||
- Розуміння правил виявлення та завантаження плагінів
|
||||
- Робота з сумісними з Codex/Claude пакетами плагінів
|
||||
- Робота з сумісними з Codex/Claude наборами плагінів
|
||||
sidebarTitle: Install and Configure
|
||||
summary: Встановлюйте, налаштовуйте та керуйте плагінами OpenClaw
|
||||
title: Плагіни
|
||||
x-i18n:
|
||||
generated_at: "2026-04-24T05:42:16Z"
|
||||
generated_at: "2026-04-24T08:40:12Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: a93114ddb312552f4c321b6e318f3e19810cf5059dd0c68fde93da41936566b8
|
||||
source_hash: 83ab1218d6677ad518a4991ca546d55eed9648e1fa92b76b7433ecd5df569e28
|
||||
source_path: tools/plugin.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
Плагіни розширюють OpenClaw новими можливостями: канали, постачальники моделей,
|
||||
інструменти, Skills, мовлення, транскрипція в реальному часі, голос у реальному часі,
|
||||
розуміння медіа, генерація зображень, генерація відео, отримання даних з вебу, вебпошук
|
||||
та інше. Деякі плагіни є **core** (постачаються разом з OpenClaw), інші —
|
||||
**external** (опубліковані спільнотою в npm).
|
||||
Плагіни розширюють OpenClaw новими можливостями: канали, провайдери моделей,
|
||||
каркаси агентів, інструменти, Skills, мовлення, транскрипція в реальному часі, голос у реальному
|
||||
часі, розуміння медіа, генерація зображень, генерація відео, веб-завантаження, веб-пошук
|
||||
та інше. Деякі плагіни є **core** (постачаються з OpenClaw), інші
|
||||
є **external** (опубліковані спільнотою в npm).
|
||||
|
||||
## Швидкий початок
|
||||
## Швидкий старт
|
||||
|
||||
<Steps>
|
||||
<Step title="Подивіться, що завантажено">
|
||||
<Step title="Перегляньте, що завантажено">
|
||||
```bash
|
||||
openclaw plugins list
|
||||
```
|
||||
@ -35,7 +35,7 @@ x-i18n:
|
||||
# З npm
|
||||
openclaw plugins install @openclaw/voice-call
|
||||
|
||||
# З локального каталогу або архіву
|
||||
# Із локального каталогу або архіву
|
||||
openclaw plugins install ./my-plugin
|
||||
openclaw plugins install ./my-plugin.tgz
|
||||
```
|
||||
@ -61,52 +61,51 @@ x-i18n:
|
||||
```
|
||||
|
||||
Шлях встановлення використовує той самий механізм визначення, що й CLI: локальний
|
||||
шлях/архів, явний `clawhub:<pkg>` або специфікація пакета без префікса
|
||||
(спочатку ClawHub, потім резервно npm).
|
||||
шлях/архів, явний `clawhub:<pkg>` або специфікація пакета без префікса (спочатку ClawHub, потім резервно npm).
|
||||
|
||||
Якщо конфігурація недійсна, встановлення зазвичай безпечно завершується з помилкою і вказує на
|
||||
Якщо конфігурація некоректна, встановлення зазвичай завершується відмовою й вказує вам на
|
||||
`openclaw doctor --fix`. Єдиний виняток для відновлення — вузький шлях
|
||||
перевстановлення вбудованого плагіна для плагінів, які явно підтримують
|
||||
перевстановлення вбудованого плагіна для плагінів, які підтримують
|
||||
`openclaw.install.allowInvalidConfigRecovery`.
|
||||
|
||||
У пакетних інсталяціях OpenClaw не виконується завчасне встановлення всього дерева
|
||||
runtime-залежностей кожного вбудованого плагіна. Коли вбудований плагін, що належить OpenClaw, активний через
|
||||
Пакетні встановлення OpenClaw не встановлюють завчасно все дерево залежностей
|
||||
середовища виконання кожного вбудованого плагіна. Коли вбудований плагін, що належить OpenClaw, активний через
|
||||
конфігурацію плагіна, застарілу конфігурацію каналу або маніфест із увімкненням за замовчуванням,
|
||||
під час запуску відновлюються лише оголошені runtime-залежності цього плагіна перед його імпортом.
|
||||
External-плагіни та користувацькі шляхи завантаження, як і раніше, потрібно встановлювати через
|
||||
під час запуску відновлюються лише оголошені залежності середовища виконання цього плагіна перед його імпортом.
|
||||
Зовнішні плагіни та користувацькі шляхи завантаження, як і раніше, потрібно встановлювати через
|
||||
`openclaw plugins install`.
|
||||
|
||||
## Типи плагінів
|
||||
|
||||
OpenClaw розпізнає два формати плагінів:
|
||||
|
||||
| Формат | Як це працює | Приклади |
|
||||
| ---------- | ----------------------------------------------------------------- | ------------------------------------------------------ |
|
||||
| **Native** | `openclaw.plugin.json` + runtime-модуль; виконується в тому ж процесі | Офіційні плагіни, пакети npm від спільноти |
|
||||
| Формат | Як це працює | Приклади |
|
||||
| ---------- | -------------------------------------------------------------- | ------------------------------------------------------ |
|
||||
| **Native** | `openclaw.plugin.json` + модуль середовища виконання; виконується в тому самому процесі | Офіційні плагіни, пакети npm від спільноти |
|
||||
| **Bundle** | Сумісне з Codex/Claude/Cursor компонування; зіставляється з можливостями OpenClaw | `.codex-plugin/`, `.claude-plugin/`, `.cursor-plugin/` |
|
||||
|
||||
Обидва відображаються в `openclaw plugins list`. Див. [Пакети плагінів](/uk/plugins/bundles) для деталей про пакети.
|
||||
Обидва відображаються в `openclaw plugins list`. Докладніше про набори плагінів див. у [Plugin Bundles](/uk/plugins/bundles).
|
||||
|
||||
Якщо ви пишете native-плагін, почніть з [Створення плагінів](/uk/plugins/building-plugins)
|
||||
та [Огляд Plugin SDK](/uk/plugins/sdk-overview).
|
||||
Якщо ви пишете native плагін, почніть із [Building Plugins](/uk/plugins/building-plugins)
|
||||
та [Plugin SDK Overview](/uk/plugins/sdk-overview).
|
||||
|
||||
## Офіційні плагіни
|
||||
|
||||
### Доступні для встановлення (npm)
|
||||
|
||||
| Плагін | Пакет | Документація |
|
||||
| --------------- | --------------------- | ------------------------------------ |
|
||||
| Matrix | `@openclaw/matrix` | [Matrix](/uk/channels/matrix) |
|
||||
| Microsoft Teams | `@openclaw/msteams` | [Microsoft Teams](/uk/channels/msteams) |
|
||||
| Nostr | `@openclaw/nostr` | [Nostr](/uk/channels/nostr) |
|
||||
| Voice Call | `@openclaw/voice-call` | [Voice Call](/uk/plugins/voice-call) |
|
||||
| Zalo | `@openclaw/zalo` | [Zalo](/uk/channels/zalo) |
|
||||
| Zalo Personal | `@openclaw/zalouser` | [Zalo Personal](/uk/plugins/zalouser) |
|
||||
| --------------- | ---------------------- | ------------------------------------ |
|
||||
| Matrix | `@openclaw/matrix` | [Matrix](/uk/channels/matrix) |
|
||||
| Microsoft Teams | `@openclaw/msteams` | [Microsoft Teams](/uk/channels/msteams) |
|
||||
| Nostr | `@openclaw/nostr` | [Nostr](/uk/channels/nostr) |
|
||||
| Voice Call | `@openclaw/voice-call` | [Voice Call](/uk/plugins/voice-call) |
|
||||
| Zalo | `@openclaw/zalo` | [Zalo](/uk/channels/zalo) |
|
||||
| Zalo Personal | `@openclaw/zalouser` | [Zalo Personal](/uk/plugins/zalouser) |
|
||||
|
||||
### Core (постачаються разом з OpenClaw)
|
||||
### Core (постачаються з OpenClaw)
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Постачальники моделей (увімкнені за замовчуванням)">
|
||||
<Accordion title="Провайдери моделей (увімкнені за замовчуванням)">
|
||||
`anthropic`, `byteplus`, `cloudflare-ai-gateway`, `github-copilot`, `google`,
|
||||
`huggingface`, `kilocode`, `kimi-coding`, `minimax`, `mistral`, `qwen`,
|
||||
`moonshot`, `nvidia`, `openai`, `opencode`, `opencode-go`, `openrouter`,
|
||||
@ -116,20 +115,20 @@ OpenClaw розпізнає два формати плагінів:
|
||||
|
||||
<Accordion title="Плагіни пам’яті">
|
||||
- `memory-core` — вбудований пошук у пам’яті (типово через `plugins.slots.memory`)
|
||||
- `memory-lancedb` — довготривала пам’ять зі встановленням на вимогу з автоматичним пригадуванням/захопленням (встановіть `plugins.slots.memory = "memory-lancedb"`)
|
||||
- `memory-lancedb` — довготривала пам’ять із встановленням на вимогу та автоматичним пригадуванням/захопленням (установіть `plugins.slots.memory = "memory-lancedb"`)
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Постачальники мовлення (увімкнені за замовчуванням)">
|
||||
<Accordion title="Провайдери мовлення (увімкнені за замовчуванням)">
|
||||
`elevenlabs`, `microsoft`
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Інше">
|
||||
- `browser` — вбудований browser-плагін для browser-інструмента, CLI `openclaw browser`, методу Gateway `browser.request`, browser runtime та стандартного сервісу керування browser (увімкнений за замовчуванням; вимкніть його перед заміною)
|
||||
- `browser` — вбудований browser Plugin для browser tool, CLI `openclaw browser`, методу Gateway `browser.request`, browser runtime та служби керування браузером за замовчуванням (увімкнений за замовчуванням; вимкніть його перед заміною)
|
||||
- `copilot-proxy` — міст VS Code Copilot Proxy (вимкнений за замовчуванням)
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
Шукаєте сторонні плагіни? Див. [Плагіни спільноти](/uk/plugins/community).
|
||||
Шукаєте сторонні плагіни? Див. [Community Plugins](/uk/plugins/community).
|
||||
|
||||
## Конфігурація
|
||||
|
||||
@ -150,29 +149,29 @@ OpenClaw розпізнає два формати плагінів:
|
||||
| Поле | Опис |
|
||||
| ---------------- | --------------------------------------------------------- |
|
||||
| `enabled` | Головний перемикач (типово: `true`) |
|
||||
| `allow` | Список дозволених плагінів (необов’язково) |
|
||||
| `deny` | Список заборонених плагінів (необов’язково; deny має пріоритет) |
|
||||
| `allow` | Дозволений список плагінів (необов’язково) |
|
||||
| `deny` | Заборонений список плагінів (необов’язково; заборона має пріоритет) |
|
||||
| `load.paths` | Додаткові файли/каталоги плагінів |
|
||||
| `slots` | Селектори ексклюзивних слотів (наприклад, `memory`, `contextEngine`) |
|
||||
| `entries.\<id\>` | Перемикачі та конфігурація для окремого плагіна |
|
||||
|
||||
Зміни конфігурації **потребують перезапуску gateway**. Якщо Gateway працює з увімкненими
|
||||
відстеженням конфігурації та внутрішньопроцесним перезапуском (типовий шлях `openclaw gateway`),
|
||||
Зміни конфігурації **потребують перезапуску gateway**. Якщо Gateway запущено з відстеженням
|
||||
конфігурації та увімкненим перезапуском у процесі (типовий шлях `openclaw gateway`),
|
||||
цей перезапуск зазвичай виконується автоматично невдовзі після запису змін у конфігурацію.
|
||||
|
||||
<Accordion title="Стани плагінів: вимкнений, відсутній, недійсний">
|
||||
- **Вимкнений**: плагін існує, але правила ввімкнення його вимкнули. Конфігурація зберігається.
|
||||
- **Відсутній**: конфігурація посилається на ідентифікатор плагіна, який не було знайдено під час виявлення.
|
||||
- **Недійсний**: плагін існує, але його конфігурація не відповідає оголошеній схемі.
|
||||
<Accordion title="Стани плагіна: вимкнений, відсутній або некоректний">
|
||||
- **Вимкнений**: плагін існує, але правила ввімкнення вимкнули його. Конфігурація зберігається.
|
||||
- **Відсутній**: конфігурація посилається на ідентифікатор плагіна, який не знайдено під час виявлення.
|
||||
- **Некоректний**: плагін існує, але його конфігурація не відповідає оголошеній схемі.
|
||||
</Accordion>
|
||||
|
||||
## Виявлення та пріоритет
|
||||
|
||||
OpenClaw сканує плагіни в такому порядку (перше співпадіння перемагає):
|
||||
OpenClaw сканує плагіни в такому порядку (перше знайдене співпадіння перемагає):
|
||||
|
||||
<Steps>
|
||||
<Step title="Шляхи з конфігурації">
|
||||
`plugins.load.paths` — явні шляхи до файлів або каталогів.
|
||||
`plugins.load.paths` — явні шляхи до файлу або каталогу.
|
||||
</Step>
|
||||
|
||||
<Step title="Плагіни робочого простору">
|
||||
@ -184,7 +183,7 @@ OpenClaw сканує плагіни в такому порядку (перше
|
||||
</Step>
|
||||
|
||||
<Step title="Вбудовані плагіни">
|
||||
Постачаються разом з OpenClaw. Багато з них увімкнено за замовчуванням (постачальники моделей, мовлення).
|
||||
Постачаються з OpenClaw. Багато з них увімкнено за замовчуванням (провайдери моделей, мовлення).
|
||||
Інші потребують явного ввімкнення.
|
||||
</Step>
|
||||
</Steps>
|
||||
@ -194,44 +193,44 @@ OpenClaw сканує плагіни в такому порядку (перше
|
||||
- `plugins.enabled: false` вимикає всі плагіни
|
||||
- `plugins.deny` завжди має пріоритет над allow
|
||||
- `plugins.entries.\<id\>.enabled: false` вимикає цей плагін
|
||||
- Плагіни з робочого простору **вимкнені за замовчуванням** (їх треба явно ввімкнути)
|
||||
- Вбудовані плагіни дотримуються вбудованого набору, увімкненого за замовчуванням, якщо не перевизначено
|
||||
- Плагіни з робочого простору **вимкнені за замовчуванням** (їх потрібно явно ввімкнути)
|
||||
- Вбудовані плагіни дотримуються вбудованого набору, увімкненого за замовчуванням, якщо це не перевизначено
|
||||
- Ексклюзивні слоти можуть примусово ввімкнути вибраний для цього слота плагін
|
||||
- Деякі вбудовані плагіни з режимом явного підключення автоматично вмикаються, коли конфігурація вказує
|
||||
на поверхню, що належить плагіну, наприклад посилання на модель постачальника, конфігурацію каналу або runtime
|
||||
harness
|
||||
- Деякі вбудовані opt-in плагіни вмикаються автоматично, коли конфігурація називає
|
||||
поверхню, що належить плагіну, наприклад посилання на модель провайдера, конфігурацію каналу або
|
||||
runtime каркаса
|
||||
- Маршрути Codex сімейства OpenAI зберігають окремі межі плагінів:
|
||||
`openai-codex/*` належить плагіну OpenAI, тоді як вбудований плагін
|
||||
app-server Codex вибирається через `embeddedHarness.runtime: "codex"` або застарілі
|
||||
посилання на модель `codex/*`
|
||||
`openai-codex/*` належить плагіну OpenAI, тоді як вбудований
|
||||
app-server Plugin Codex вибирається через `embeddedHarness.runtime: "codex"` або застарілі
|
||||
посилання на моделі `codex/*`
|
||||
|
||||
## Слоти плагінів (ексклюзивні категорії)
|
||||
|
||||
Деякі категорії є ексклюзивними (одночасно активний лише один плагін):
|
||||
Деякі категорії є ексклюзивними (одночасно може бути активним лише один):
|
||||
|
||||
```json5
|
||||
{
|
||||
plugins: {
|
||||
slots: {
|
||||
memory: "memory-core", // або "none", щоб вимкнути
|
||||
memory: "memory-core", // або "none" для вимкнення
|
||||
contextEngine: "legacy", // або ідентифікатор плагіна
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
| Слот | Що він контролює | Типове значення |
|
||||
| --------------- | ----------------------- | ------------------- |
|
||||
| `memory` | Active Memory plugin | `memory-core` |
|
||||
| `contextEngine` | Активний механізм контексту | `legacy` (вбудований) |
|
||||
| Слот | Чим керує | Типове значення |
|
||||
| --------------- | ------------------------ | ------------------- |
|
||||
| `memory` | Active Memory Plugin | `memory-core` |
|
||||
| `contextEngine` | Активний рушій контексту | `legacy` (вбудований) |
|
||||
|
||||
## Довідка CLI
|
||||
|
||||
```bash
|
||||
openclaw plugins list # стислий перелік
|
||||
openclaw plugins list # компактний список
|
||||
openclaw plugins list --enabled # лише завантажені плагіни
|
||||
openclaw plugins list --verbose # детальні рядки для кожного плагіна
|
||||
openclaw plugins list --json # перелік у машиночитному форматі
|
||||
openclaw plugins list --verbose # докладні рядки для кожного плагіна
|
||||
openclaw plugins list --json # інвентар у машиночитному форматі
|
||||
openclaw plugins inspect <id> # докладна інформація
|
||||
openclaw plugins inspect <id> --json # машиночитний формат
|
||||
openclaw plugins inspect --all # таблиця для всього набору
|
||||
@ -242,10 +241,10 @@ openclaw plugins install <package> # встановити (спочат
|
||||
openclaw plugins install clawhub:<pkg> # встановити лише з ClawHub
|
||||
openclaw plugins install <spec> --force # перезаписати наявне встановлення
|
||||
openclaw plugins install <path> # встановити з локального шляху
|
||||
openclaw plugins install -l <path> # підключити (без копіювання) для розробки
|
||||
openclaw plugins install -l <path> # під’єднати (без копіювання) для розробки
|
||||
openclaw plugins install <plugin> --marketplace <source>
|
||||
openclaw plugins install <plugin> --marketplace https://github.com/<owner>/<repo>
|
||||
openclaw plugins install <spec> --pin # зберегти точну розв’язану npm-специфікацію
|
||||
openclaw plugins install <spec> --pin # записати точну визначену специфікацію npm
|
||||
openclaw plugins install <spec> --dangerously-force-unsafe-install
|
||||
openclaw plugins update <id-or-npm-spec> # оновити один плагін
|
||||
openclaw plugins update <id-or-npm-spec> --dangerously-force-unsafe-install
|
||||
@ -259,59 +258,60 @@ openclaw plugins enable <id>
|
||||
openclaw plugins disable <id>
|
||||
```
|
||||
|
||||
Вбудовані плагіни постачаються разом з OpenClaw. Багато з них увімкнено за замовчуванням (наприклад,
|
||||
вбудовані постачальники моделей, вбудовані постачальники мовлення та вбудований browser-плагін).
|
||||
Інші вбудовані плагіни все одно потребують `openclaw plugins enable <id>`.
|
||||
Вбудовані плагіни постачаються разом з OpenClaw. Багато з них увімкнені за замовчуванням (наприклад,
|
||||
вбудовані провайдери моделей, вбудовані провайдери мовлення та вбудований browser
|
||||
Plugin). Інші вбудовані плагіни все одно потребують `openclaw plugins enable <id>`.
|
||||
|
||||
`--force` перезаписує наявний встановлений плагін або пакет хуків на місці. Використовуйте
|
||||
`openclaw plugins update <id-or-npm-spec>` для звичайних оновлень відстежуваних npm-плагінів.
|
||||
Він не підтримується з `--link`, який повторно використовує шлях до джерела замість
|
||||
копіювання в кероване місце встановлення.
|
||||
`--force` перезаписує наявний встановлений плагін або пакет хуків на місці. Для
|
||||
звичайних оновлень відстежуваних npm плагінів використовуйте
|
||||
`openclaw plugins update <id-or-npm-spec>`. Цей параметр не підтримується з `--link`, який повторно використовує шлях до джерела
|
||||
замість копіювання в кероване цільове місце встановлення.
|
||||
|
||||
Коли `plugins.allow` уже задано, `openclaw plugins install` додає
|
||||
ідентифікатор встановленого плагіна до цього списку allow перед його ввімкненням, щоб установлені
|
||||
плагіни можна було одразу завантажити після перезапуску.
|
||||
ідентифікатор встановленого плагіна до цього списку allow перед його ввімкненням, щоб установлені плагіни
|
||||
можна було одразу завантажити після перезапуску.
|
||||
|
||||
`openclaw plugins update <id-or-npm-spec>` застосовується до відстежуваних установлень. Передача
|
||||
специфікації npm-пакета з dist-tag або точною версією зіставляє назву пакета
|
||||
назад із записом відстежуваного плагіна і зберігає нову специфікацію для майбутніх оновлень.
|
||||
Передача назви пакета без версії переводить точне закріплене встановлення назад на
|
||||
типову лінійку релізів реєстру. Якщо встановлений npm-плагін уже відповідає
|
||||
розв’язаній версії та збереженій ідентичності артефакту, OpenClaw пропускає оновлення
|
||||
`openclaw plugins update <id-or-npm-spec>` застосовується до відстежуваних встановлень. Передавання
|
||||
специфікації npm пакета з dist-tag або точною версією зіставляє назву пакета
|
||||
назад із записом відстежуваного плагіна та записує нову специфікацію для майбутніх оновлень.
|
||||
Передавання назви пакета без версії переводить точно закріплене встановлення назад на
|
||||
типову лінійку випусків реєстру. Якщо встановлений npm плагін уже відповідає
|
||||
визначеній версії та записаній ідентичності артефакту, OpenClaw пропускає оновлення
|
||||
без завантаження, перевстановлення чи перезапису конфігурації.
|
||||
|
||||
`--pin` працює лише для npm. Він не підтримується з `--marketplace`, оскільки
|
||||
встановлення з marketplace зберігають метадані джерела marketplace замість npm-специфікації.
|
||||
`--pin` стосується лише npm. Він не підтримується з `--marketplace`, оскільки
|
||||
встановлення з marketplace зберігають метадані джерела marketplace замість специфікації npm.
|
||||
|
||||
`--dangerously-force-unsafe-install` — це аварійний режим обходу для хибних
|
||||
спрацьовувань вбудованого сканера небезпечного коду. Він дозволяє продовжити встановлення
|
||||
та оновлення плагінів попри вбудовані результати `critical`, але все одно
|
||||
не обходить блокування політики плагіна `before_install` або блокування через помилки сканування.
|
||||
`--dangerously-force-unsafe-install` — це аварійне перевизначення для хибних
|
||||
спрацьовувань вбудованого сканера небезпечного коду. Воно дозволяє продовжити встановлення
|
||||
й оновлення плагінів попри вбудовані результати рівня `critical`, але все одно
|
||||
не обходить блокування політикою плагіна `before_install` або блокування через збій сканування.
|
||||
|
||||
Цей прапорець CLI застосовується лише до процесів встановлення/оновлення плагінів. Встановлення залежностей Skills через Gateway
|
||||
натомість використовують відповідний параметр запиту `dangerouslyForceUnsafeInstall`, тоді як `openclaw skills install`
|
||||
залишається окремим процесом завантаження/встановлення Skills через ClawHub.
|
||||
Цей прапорець CLI застосовується лише до потоків встановлення/оновлення плагінів. Встановлення залежностей Skills через Gateway
|
||||
натомість використовують відповідне перевизначення запиту `dangerouslyForceUnsafeInstall`, тоді як `openclaw skills install`
|
||||
залишається окремим потоком завантаження/встановлення Skills через ClawHub.
|
||||
|
||||
Сумісні пакети беруть участь у тому самому процесі list/inspect/enable/disable
|
||||
для плагінів. Поточна підтримка runtime охоплює bundle Skills, Claude command-skills,
|
||||
Сумісні набори беруть участь у тому самому процесі list/inspect/enable/disable
|
||||
для плагінів. Поточна підтримка середовища виконання включає bundle Skills, Claude command-skills,
|
||||
типові значення Claude `settings.json`, типові значення Claude `.lsp.json` і
|
||||
оголошені в маніфесті типові значення `lspServers`, Cursor command-skills і сумісні каталоги хуків Codex.
|
||||
оголошені в маніфесті типові значення `lspServers`, Cursor command-skills та сумісні каталоги
|
||||
хуків Codex.
|
||||
|
||||
`openclaw plugins inspect <id>` також повідомляє про виявлені можливості пакета, а також
|
||||
підтримувані чи непідтримувані записи серверів MCP і LSP для плагінів на основі пакетів.
|
||||
`openclaw plugins inspect <id>` також повідомляє про виявлені можливості набору, а також
|
||||
підтримувані або непідтримувані записи серверів MCP і LSP для плагінів на основі наборів.
|
||||
|
||||
Джерелами marketplace можуть бути відома назва Claude marketplace з
|
||||
Джерелами marketplace можуть бути відома назва marketplace Claude з
|
||||
`~/.claude/plugins/known_marketplaces.json`, локальний корінь marketplace або шлях до
|
||||
`marketplace.json`, скорочений запис GitHub на кшталт `owner/repo`, URL репозиторію GitHub
|
||||
або git URL. Для віддалених marketplace записи плагінів мають залишатися в межах
|
||||
клонованого репозиторію marketplace і використовувати лише відносні шляхи як джерела.
|
||||
або URL git. Для віддалених marketplace записи плагінів повинні залишатися в межах
|
||||
клонованого репозиторію marketplace і використовувати лише відносні шляхи до джерел.
|
||||
|
||||
Див. [довідку CLI `openclaw plugins`](/uk/cli/plugins) для повної інформації.
|
||||
Повні відомості див. у [довідці CLI `openclaw plugins`](/uk/cli/plugins).
|
||||
|
||||
## Огляд Plugin API
|
||||
## Огляд API плагінів
|
||||
|
||||
Native-плагіни експортують об’єкт entry, який надає `register(api)`. Старіші
|
||||
плагіни все ще можуть використовувати `activate(api)` як застарілий псевдонім, але нові плагіни мають
|
||||
Native плагіни експортують об’єкт входу, який надає `register(api)`. Старіші
|
||||
плагіни все ще можуть використовувати `activate(api)` як застарілий псевдонім, але нові плагіни повинні
|
||||
використовувати `register`.
|
||||
|
||||
```typescript
|
||||
@ -332,49 +332,49 @@ export default definePluginEntry({
|
||||
});
|
||||
```
|
||||
|
||||
OpenClaw завантажує об’єкт entry і викликає `register(api)` під час активації
|
||||
плагіна. Завантажувач усе ще використовує `activate(api)` як запасний варіант для старіших плагінів,
|
||||
але вбудовані плагіни та нові external-плагіни мають розглядати `register` як
|
||||
OpenClaw завантажує об’єкт входу та викликає `register(api)` під час
|
||||
активації плагіна. Завантажувач усе ще повертається до `activate(api)` для старіших плагінів,
|
||||
але вбудовані плагіни й нові зовнішні плагіни повинні розглядати `register` як
|
||||
публічний контракт.
|
||||
|
||||
Поширені методи реєстрації:
|
||||
|
||||
| Метод | Що він реєструє |
|
||||
| Метод | Що реєструє |
|
||||
| --------------------------------------- | -------------------------- |
|
||||
| `registerProvider` | Постачальник моделей (LLM) |
|
||||
| `registerProvider` | Провайдер моделі (LLM) |
|
||||
| `registerChannel` | Канал чату |
|
||||
| `registerTool` | Інструмент агента |
|
||||
| `registerHook` / `on(...)` | Хуки життєвого циклу |
|
||||
| `registerSpeechProvider` | Синтез мовлення / STT |
|
||||
| `registerSpeechProvider` | Text-to-speech / STT |
|
||||
| `registerRealtimeTranscriptionProvider` | Потоковий STT |
|
||||
| `registerRealtimeVoiceProvider` | Двоспрямований голос у реальному часі |
|
||||
| `registerRealtimeVoiceProvider` | Двобічний голос у реальному часі |
|
||||
| `registerMediaUnderstandingProvider` | Аналіз зображень/аудіо |
|
||||
| `registerImageGenerationProvider` | Генерація зображень |
|
||||
| `registerMusicGenerationProvider` | Генерація музики |
|
||||
| `registerVideoGenerationProvider` | Генерація відео |
|
||||
| `registerWebFetchProvider` | Постачальник отримання/скрапінгу з вебу |
|
||||
| `registerWebSearchProvider` | Вебпошук |
|
||||
| `registerHttpRoute` | HTTP-ендпоінт |
|
||||
| `registerWebFetchProvider` | Провайдер веб-завантаження / скрапінгу |
|
||||
| `registerWebSearchProvider` | Веб-пошук |
|
||||
| `registerHttpRoute` | HTTP endpoint |
|
||||
| `registerCommand` / `registerCli` | Команди CLI |
|
||||
| `registerContextEngine` | Механізм контексту |
|
||||
| `registerContextEngine` | Рушій контексту |
|
||||
| `registerService` | Фонова служба |
|
||||
|
||||
Поведінка guard-хуків для типізованих хуків життєвого циклу:
|
||||
|
||||
- `before_tool_call`: `{ block: true }` є остаточним; обробники з нижчим пріоритетом пропускаються.
|
||||
- `before_tool_call`: `{ block: false }` не має ефекту і не скасовує попереднє блокування.
|
||||
- `before_install`: `{ block: true }` є остаточним; обробники з нижчим пріоритетом пропускаються.
|
||||
- `before_install`: `{ block: false }` не має ефекту і не скасовує попереднє блокування.
|
||||
- `message_sending`: `{ cancel: true }` є остаточним; обробники з нижчим пріоритетом пропускаються.
|
||||
- `message_sending`: `{ cancel: false }` не має ефекту і не скасовує попереднє скасування.
|
||||
- `before_tool_call`: `{ block: true }` є фінальним; обробники з нижчим пріоритетом пропускаються.
|
||||
- `before_tool_call`: `{ block: false }` не виконує жодної дії та не скасовує попереднє блокування.
|
||||
- `before_install`: `{ block: true }` є фінальним; обробники з нижчим пріоритетом пропускаються.
|
||||
- `before_install`: `{ block: false }` не виконує жодної дії та не скасовує попереднє блокування.
|
||||
- `message_sending`: `{ cancel: true }` є фінальним; обробники з нижчим пріоритетом пропускаються.
|
||||
- `message_sending`: `{ cancel: false }` не виконує жодної дії та не скасовує попереднє скасування.
|
||||
|
||||
Для повної інформації про поведінку типізованих хуків див. [Огляд SDK](/uk/plugins/sdk-overview#hook-decision-semantics).
|
||||
Повну інформацію про поведінку типізованих хуків див. в [огляді SDK](/uk/plugins/sdk-overview#hook-decision-semantics).
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Створення плагінів](/uk/plugins/building-plugins) — створіть власний плагін
|
||||
- [Пакети плагінів](/uk/plugins/bundles) — сумісність пакетів Codex/Claude/Cursor
|
||||
- [Маніфест плагіна](/uk/plugins/manifest) — схема маніфесту
|
||||
- [Реєстрація інструментів](/uk/plugins/building-plugins#registering-agent-tools) — додавання агентських інструментів у плагін
|
||||
- [Внутрішня архітектура плагінів](/uk/plugins/architecture) — модель можливостей і конвеєр завантаження
|
||||
- [Плагіни спільноти](/uk/plugins/community) — сторонні каталоги
|
||||
- [Building Plugins](/uk/plugins/building-plugins) — створіть власний плагін
|
||||
- [Plugin Bundles](/uk/plugins/bundles) — сумісність наборів Codex/Claude/Cursor
|
||||
- [Plugin Manifest](/uk/plugins/manifest) — схема маніфесту
|
||||
- [Registering Tools](/uk/plugins/building-plugins#registering-agent-tools) — додавання інструментів агента до плагіна
|
||||
- [Plugin Internals](/uk/plugins/architecture) — модель можливостей і конвеєр завантаження
|
||||
- [Community Plugins](/uk/plugins/community) — сторонні списки
|
||||
|
||||
@ -1,24 +1,24 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете керувати Gateway з браузера
|
||||
- Ви хочете доступ Tailnet без SSH-тунелів
|
||||
summary: Браузерний UI керування для Gateway (чат, вузли, конфігурація)
|
||||
title: UI керування
|
||||
- Ви хочете доступ через Tailnet без SSH-тунелів
|
||||
summary: Веб-інтерфейс керування для Gateway (чат, вузли, конфігурація)
|
||||
title: Інтерфейс керування
|
||||
x-i18n:
|
||||
generated_at: "2026-04-24T04:49:08Z"
|
||||
generated_at: "2026-04-24T08:40:13Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 2ad0d0cef7d842eddf665ba50f37403df258b17d4c072d22a30d1bc3830dc467
|
||||
source_hash: c84a74e20d6c8829168025830ff4ec8f650f10f72fcaed7c8d2f5d92ab98d616
|
||||
source_path: web/control-ui.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
UI керування — це невеликий односторінковий застосунок **Vite + Lit**, який Gateway віддає:
|
||||
Інтерфейс керування — це невеликий односторінковий застосунок **Vite + Lit**, який обслуговується Gateway:
|
||||
|
||||
- за замовчуванням: `http://<host>:18789/`
|
||||
- типово: `http://<host>:18789/`
|
||||
- необов’язковий префікс: задайте `gateway.controlUi.basePath` (наприклад, `/openclaw`)
|
||||
|
||||
Він звертається **безпосередньо до WebSocket Gateway** на тому самому порту.
|
||||
Він взаємодіє **безпосередньо з WebSocket Gateway** на тому самому порту.
|
||||
|
||||
## Швидке відкриття (локально)
|
||||
|
||||
@ -32,168 +32,172 @@ UI керування — це невеликий односторінковий
|
||||
|
||||
- `connect.params.auth.token`
|
||||
- `connect.params.auth.password`
|
||||
- заголовки ідентифікації Tailscale Serve, коли `gateway.auth.allowTailscale: true`
|
||||
- заголовки ідентифікації trusted-proxy, коли `gateway.auth.mode: "trusted-proxy"`
|
||||
- заголовки ідентичності Tailscale Serve, коли `gateway.auth.allowTailscale: true`
|
||||
- заголовки ідентичності trusted-proxy, коли `gateway.auth.mode: "trusted-proxy"`
|
||||
|
||||
Панель налаштувань інформаційної панелі зберігає токен для поточної сесії вкладки браузера
|
||||
та вибрану URL-адресу gateway; паролі не зберігаються. Під час початкового налаштування зазвичай
|
||||
створюється токен gateway для автентифікації зі спільним секретом при першому підключенні, але
|
||||
автентифікація паролем також працює, коли `gateway.auth.mode` має значення `"password"`.
|
||||
Панель налаштувань дашборду зберігає токен для поточної сесії вкладки браузера
|
||||
та вибрану URL-адресу gateway; паролі не зберігаються. Під час онбордингу
|
||||
зазвичай створюється токен gateway для автентифікації зі спільним секретом при
|
||||
першому підключенні, але автентифікація паролем також працює, коли
|
||||
`gateway.auth.mode` має значення `"password"`.
|
||||
|
||||
## Сполучення пристрою (перше підключення)
|
||||
|
||||
Коли ви підключаєтеся до UI керування з нового браузера або пристрою, Gateway
|
||||
вимагає **одноразове підтвердження сполучення** — навіть якщо ви в тій самій Tailnet
|
||||
із `gateway.auth.allowTailscale: true`. Це захід безпеки для запобігання
|
||||
несанкціонованому доступу.
|
||||
Коли ви підключаєтеся до Control UI з нового браузера або пристрою, Gateway
|
||||
вимагає **одноразове підтвердження сполучення** — навіть якщо ви перебуваєте в
|
||||
тому самому Tailnet з `gateway.auth.allowTailscale: true`. Це захід безпеки для
|
||||
запобігання несанкціонованому доступу.
|
||||
|
||||
**Що ви побачите:** "disconnected (1008): pairing required"
|
||||
|
||||
**Щоб підтвердити пристрій:**
|
||||
|
||||
```bash
|
||||
# Показати список запитів, що очікують
|
||||
# Показати запити, що очікують
|
||||
openclaw devices list
|
||||
|
||||
# Підтвердити за ID запиту
|
||||
openclaw devices approve <requestId>
|
||||
```
|
||||
|
||||
Якщо браузер повторно надсилає запит на сполучення зі зміненими даними автентифікації (роль/області доступу/public
|
||||
key), попередній запит, що очікує, замінюється, і створюється новий `requestId`.
|
||||
Якщо браузер повторює спробу сполучення зі зміненими даними автентифікації (роль/області доступу/публічний
|
||||
ключ), попередній запит, що очікує, замінюється новим, і створюється новий `requestId`.
|
||||
Перед підтвердженням знову виконайте `openclaw devices list`.
|
||||
|
||||
Якщо браузер уже сполучений і ви змінюєте доступ із читання на
|
||||
доступ запису/адміністратора, це вважається підвищенням рівня підтвердження, а не
|
||||
тихим повторним підключенням. OpenClaw зберігає старе підтвердження активним, блокує ширше повторне підключення
|
||||
і просить вас явно підтвердити новий набір областей доступу.
|
||||
Якщо браузер уже сполучений і ви змінюєте його доступ із читання на
|
||||
запис/адміністрування, це вважається підвищенням підтвердження, а не тихим
|
||||
повторним підключенням. OpenClaw залишає попереднє підтвердження активним,
|
||||
блокує ширше повторне підключення й просить вас явно підтвердити новий набір
|
||||
областей доступу.
|
||||
|
||||
Після підтвердження пристрій запам’ятовується і не вимагатиме повторного підтвердження, якщо
|
||||
ви не відкличете його через `openclaw devices revoke --device <id> --role <role>`. Див.
|
||||
[Devices CLI](/uk/cli/devices) щодо ротації токенів і відкликання.
|
||||
Після підтвердження пристрій запам’ятовується і не вимагатиме повторного
|
||||
підтвердження, доки ви не відкличете його за допомогою `openclaw devices revoke --device <id> --role <role>`. Див.
|
||||
[Devices CLI](/uk/cli/devices) для ротації токенів і відкликання.
|
||||
|
||||
**Примітки:**
|
||||
|
||||
- Прямі локальні браузерні підключення через local loopback (`127.0.0.1` / `localhost`)
|
||||
підтверджуються автоматично.
|
||||
- Підключення браузера через Tailnet і LAN все одно вимагають явного підтвердження, навіть якщо
|
||||
вони виконуються з тієї самої машини.
|
||||
- Браузерні підключення через Tailnet і LAN однаково вимагають явного
|
||||
підтвердження, навіть якщо вони походять з тієї самої машини.
|
||||
- Кожен профіль браузера генерує унікальний ID пристрою, тому зміна браузера або
|
||||
очищення даних браузера вимагатиме повторного сполучення.
|
||||
|
||||
## Особиста ідентичність (локально в браузері)
|
||||
|
||||
UI керування підтримує особисту ідентичність для кожного браузера (відображуване ім’я та
|
||||
Control UI підтримує особисту ідентичність для кожного браузера (відображуване ім’я та
|
||||
аватар), яка додається до вихідних повідомлень для атрибуції в спільних сесіях. Вона
|
||||
зберігається в сховищі браузера, прив’язана до поточного профілю браузера і не
|
||||
синхронізується з іншими пристроями та не зберігається на сервері понад звичайні
|
||||
метадані авторства в стенограмі для повідомлень, які ви фактично надсилаєте. Очищення даних сайту або
|
||||
зміна браузера скидає її до порожнього значення.
|
||||
зберігається у сховищі браузера, прив’язана до поточного профілю браузера і не
|
||||
синхронізується з іншими пристроями та не зберігається на сервері поза звичайними
|
||||
метаданими авторства транскрипту для повідомлень, які ви фактично надсилаєте. Очищення
|
||||
даних сайту або зміна браузера скидає її до порожнього стану.
|
||||
|
||||
## Кінцева точка конфігурації виконання
|
||||
## Кінцева точка конфігурації runtime
|
||||
|
||||
UI керування отримує свої налаштування виконання з
|
||||
Control UI отримує свої runtime-налаштування з
|
||||
`/__openclaw/control-ui-config.json`. Доступ до цієї кінцевої точки захищений тією самою
|
||||
автентифікацією gateway, що й решта HTTP-поверхні: неавтентифіковані браузери не можуть
|
||||
отримати її, а успішне отримання вимагає або вже дійсного токена/пароля gateway,
|
||||
ідентифікації Tailscale Serve, або ідентифікації trusted-proxy.
|
||||
автентифікацією gateway, що й решта HTTP-поверхні: неавтентифіковані браузери не
|
||||
можуть її отримати, а успішне отримання вимагає або вже чинного токена/пароля
|
||||
gateway, або ідентичності Tailscale Serve, або ідентичності trusted-proxy.
|
||||
|
||||
## Підтримка мов
|
||||
|
||||
UI керування може локалізуватися під час першого завантаження на основі локалі вашого браузера.
|
||||
Щоб пізніше перевизначити її, відкрийте **Огляд -> Доступ до Gateway -> Мова**. Перемикач
|
||||
локалі знаходиться в картці доступу до Gateway, а не в розділі «Зовнішній вигляд».
|
||||
Control UI може локалізувати себе під час першого завантаження на основі локалі вашого браузера.
|
||||
Щоб перевизначити її пізніше, відкрийте **Overview -> Gateway Access -> Language**. Перемикач
|
||||
локалі розташований у картці Gateway Access, а не в розділі Appearance.
|
||||
|
||||
- Підтримувані локалі: `en`, `zh-CN`, `zh-TW`, `pt-BR`, `de`, `es`, `ja-JP`, `ko`, `fr`, `tr`, `uk`, `id`, `pl`, `th`
|
||||
- Переклади, відмінні від англійської, ледаче завантажуються в браузері.
|
||||
- Вибрана локаль зберігається в сховищі браузера й повторно використовується під час майбутніх відвідувань.
|
||||
- Неанглійські переклади ліниво завантажуються в браузері.
|
||||
- Вибрана локаль зберігається у сховищі браузера і повторно використовується під час наступних відвідувань.
|
||||
- Відсутні ключі перекладу повертаються до англійської.
|
||||
|
||||
## Що він може робити (сьогодні)
|
||||
|
||||
- Чат із моделлю через Gateway WS (`chat.history`, `chat.send`, `chat.abort`, `chat.inject`)
|
||||
- Напряму взаємодіяти з OpenAI Realtime з браузера через WebRTC. Gateway
|
||||
випускає короткоживучий клієнтський секрет Realtime через `talk.realtime.session`; браузер
|
||||
- Спілкуватися з моделлю через Gateway WS (`chat.history`, `chat.send`, `chat.abort`, `chat.inject`)
|
||||
- Підключатися до OpenAI Realtime безпосередньо з браузера через WebRTC. Gateway
|
||||
випускає короткоживучий секрет клієнта Realtime через `talk.realtime.session`; браузер
|
||||
надсилає аудіо з мікрофона безпосередньо до OpenAI і пересилає виклики інструмента
|
||||
`openclaw_agent_consult` назад через `chat.send` для більшої
|
||||
налаштованої моделі OpenClaw.
|
||||
- Потокове передавання викликів інструментів + картки виводу інструментів у реальному часі в чаті (події агента)
|
||||
- Канали: вбудовані, а також стан bundled/external plugin каналів, QR-вхід і конфігурація для кожного каналу (`channels.status`, `web.login.*`, `config.patch`)
|
||||
- Екземпляри: список присутності + оновлення (`system-presence`)
|
||||
- Сесії: список + перевизначення для кожної сесії моделі/thinking/fast/verbose/trace/reasoning (`sessions.list`, `sessions.patch`)
|
||||
- Dreams: статус Dreaming, перемикач увімкнення/вимкнення та читач Dream Diary (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`)
|
||||
`openclaw_agent_consult` назад через `chat.send` для більшої налаштованої
|
||||
моделі OpenClaw.
|
||||
- Потоково передавати виклики інструментів і картки живого виводу інструментів у Chat (події агента)
|
||||
- Канали: статус вбудованих, bundled і зовнішніх plugin-каналів, вхід через QR та конфігурація для кожного каналу (`channels.status`, `web.login.*`, `config.patch`)
|
||||
- Екземпляри: список присутності та оновлення (`system-presence`)
|
||||
- Сесії: список і перевизначення моделі/мислення/швидко/докладно/трасування/міркування для кожної сесії (`sessions.list`, `sessions.patch`)
|
||||
- Dreams: статус dreaming, перемикач увімкнення/вимкнення та читач Dream Diary (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`)
|
||||
- Завдання Cron: список/додавання/редагування/запуск/увімкнення/вимкнення + історія запусків (`cron.*`)
|
||||
- Skills: статус, увімкнення/вимкнення, встановлення, оновлення API-ключів (`skills.*`)
|
||||
- Node: список + обмеження (`node.list`)
|
||||
- Підтвердження exec: редагування списків дозволів gateway або node + політика запитів для `exec host=gateway/node` (`exec.approvals.*`)
|
||||
- Вузли: список і можливості (`node.list`)
|
||||
- Підтвердження exec: редагування allowlist для gateway або node + політика запиту для `exec host=gateway/node` (`exec.approvals.*`)
|
||||
- Конфігурація: перегляд/редагування `~/.openclaw/openclaw.json` (`config.get`, `config.set`)
|
||||
- Конфігурація: застосування + перезапуск із валідацією (`config.apply`) і пробудження останньої активної сесії
|
||||
- Записи конфігурації містять захист base-hash, щоб запобігти перезапису одночасних змін
|
||||
- Записи конфігурації (`config.set`/`config.apply`/`config.patch`) також виконують попередню перевірку активного розв’язання SecretRef для посилань у надісланому конфігураційному payload; нерозв’язані активні надіслані посилання відхиляються до запису
|
||||
- Схема конфігурації + рендеринг форми (`config.schema` / `config.schema.lookup`,
|
||||
включно з `title` / `description` поля, відповідними UI-підказками, зведеннями
|
||||
безпосередніх дочірніх елементів, метаданими документації для вузлів вкладених об’єктів/wildcard/масивів/композицій,
|
||||
- Записи конфігурації включають захист base-hash, щоб запобігти перезапису одночасних змін
|
||||
- Записи конфігурації (`config.set`/`config.apply`/`config.patch`) також попередньо перевіряють активне розв’язання SecretRef для посилань у надісланому payload конфігурації; нерозв’язані активні надіслані посилання відхиляються до запису
|
||||
- Схема конфігурації + рендеринг форм (`config.schema` / `config.schema.lookup`,
|
||||
включно з полями `title` / `description`, відповідними UI-підказками, негайними
|
||||
зведеннями дочірніх елементів, метаданими документації для вузлів nested object/wildcard/array/composition,
|
||||
а також схемами plugin і каналів, коли вони доступні); редактор Raw JSON
|
||||
доступний лише тоді, коли snapshot має безпечний round-trip необробленого вигляду
|
||||
- Якщо snapshot не можна безпечно виконати round-trip як необроблений текст, UI керування примусово вмикає режим Form і вимикає режим Raw для цього snapshot
|
||||
- У редакторі Raw JSON кнопка "Reset to saved" зберігає форму, створену в raw (форматування, коментарі, розмітку `$include`), замість повторного рендерингу сплощеного snapshot, тож зовнішні зміни переживають скидання, коли snapshot можна безпечно виконати round-trip
|
||||
- Структуровані значення об’єктів SecretRef рендеряться як лише для читання в текстових полях форми, щоб запобігти випадковому пошкодженню через перетворення об’єкта на рядок
|
||||
доступний лише тоді, коли знімок має безпечний raw round-trip
|
||||
- Якщо знімок не може безпечно пройти raw round-trip, Control UI примусово вмикає режим Form і вимикає режим Raw для цього знімка
|
||||
- У редакторі Raw JSON дія "Reset to saved" зберігає форму, створену в raw-режимі (форматування, коментарі, макет `$include`), замість повторного рендерингу сплощеного знімка, тож зовнішні зміни зберігаються після скидання, якщо знімок може безпечно пройти raw round-trip
|
||||
- Значення структурованих об’єктів SecretRef у формі відображаються лише для читання в текстових полях, щоб запобігти випадковому пошкодженню через перетворення об’єкта на рядок
|
||||
- Налагодження: знімки status/health/models + журнал подій + ручні RPC-виклики (`status`, `health`, `models.list`)
|
||||
- Журнали: live tail журналів файлів gateway із фільтрацією/експортом (`logs.tail`)
|
||||
- Оновлення: запуск оновлення пакунка/git + перезапуск (`update.run`) зі звітом про перезапуск
|
||||
- Оновлення: запуск оновлення пакета/git + перезапуск (`update.run`) зі звітом про перезапуск
|
||||
|
||||
Примітки до панелі завдань Cron:
|
||||
|
||||
- Для ізольованих завдань доставлення за замовчуванням оголошує зведення. Ви можете перемкнути на none, якщо хочете лише внутрішні запуски.
|
||||
- Для ізольованих завдань типово використовується delivery з оголошенням зведення. Ви можете перемкнути на none, якщо хочете лише внутрішні запуски.
|
||||
- Поля channel/target з’являються, коли вибрано announce.
|
||||
- Режим Webhook використовує `delivery.mode = "webhook"` із `delivery.to`, установленим на дійсну HTTP(S) URL-адресу Webhook.
|
||||
- Для завдань main-session доступні режими доставлення webhook і none.
|
||||
- Розширені елементи редагування містять видалення після запуску, очищення перевизначення агента, точні/зміщені параметри cron,
|
||||
перевизначення model/thinking агента та перемикачі доставлення best-effort.
|
||||
- Валідація форми вбудована з помилками на рівні полів; некоректні значення вимикають кнопку збереження, доки їх не буде виправлено.
|
||||
- Установіть `cron.webhookToken`, щоб надсилати окремий bearer token; якщо його не задано, webhook надсилається без заголовка auth.
|
||||
- Застарілий fallback: збережені legacy-завдання з `notify: true` все ще можуть використовувати `cron.webhook`, доки не буде виконано міграцію.
|
||||
- Режим Webhook використовує `delivery.mode = "webhook"` з `delivery.to`, встановленим на дійсну URL-адресу HTTP(S) Webhook.
|
||||
- Для завдань main-session доступні режими доставки webhook і none.
|
||||
- Розширені елементи керування редагуванням включають delete-after-run, очищення перевизначення агента, точні/ступінчасті параметри cron,
|
||||
перевизначення моделі/мислення агента та перемикачі delivery у режимі best-effort.
|
||||
- Валідація форми виконується вбудовано, з помилками на рівні полів; некоректні значення вимикають кнопку збереження, доки їх не буде виправлено.
|
||||
- Встановіть `cron.webhookToken`, щоб надсилати окремий bearer-токен; якщо його не вказано, webhook надсилається без заголовка автентифікації.
|
||||
- Застарілий запасний варіант: збережені застарілі завдання з `notify: true` усе ще можуть використовувати `cron.webhook`, доки їх не буде мігровано.
|
||||
|
||||
## Поведінка чату
|
||||
## Поведінка Chat
|
||||
|
||||
- `chat.send` є **неблокувальним**: він одразу підтверджується з `{ runId, status: "started" }`, а відповідь передається потоком через події `chat`.
|
||||
- Повторне надсилання з тим самим `idempotencyKey` повертає `{ status: "in_flight" }` під час виконання і `{ status: "ok" }` після завершення.
|
||||
- Відповіді `chat.history` обмежені за розміром для безпеки UI. Коли записи стенограми надто великі, Gateway може усікати довгі текстові поля, пропускати важкі блоки метаданих і замінювати надмірно великі повідомлення заповнювачем (`[chat.history omitted: message too large]`).
|
||||
- Зображення помічника/згенеровані зображення зберігаються як керовані медіапосилання і знову віддаються через автентифіковані медіа-URL Gateway, тож перезавантаження не залежать від того, чи залишаються необроблені payload-и зображень base64 у відповіді історії чату.
|
||||
- `chat.history` також прибирає inline-теги директив, призначені лише для відображення, із видимого тексту помічника (наприклад, `[[reply_to_*]]` і `[[audio_as_voice]]`), XML payload-и викликів інструментів у звичайному тексті (зокрема `<tool_call>...</tool_call>`, `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>` і усічені блоки викликів інструментів), а також leaked ASCII/full-width токени керування моделлю, і пропускає записи помічника, у яких увесь видимий текст — це лише точний тихий токен `NO_REPLY` / `no_reply`.
|
||||
- `chat.inject` додає примітку помічника до стенограми сесії та розсилає подію `chat` для оновлень лише UI (без запуску агента, без доставлення через канал).
|
||||
- Перемикачі моделі й thinking у заголовку чату одразу змінюють активну сесію через `sessions.patch`; це постійні перевизначення сесії, а не параметри надсилання лише на один хід.
|
||||
- Режим Talk використовує зареєстрованого постачальника голосу realtime. Налаштуйте OpenAI за допомогою
|
||||
`talk.provider: "openai"` разом із `talk.providers.openai.apiKey`, або повторно використайте
|
||||
конфігурацію realtime-постачальника Voice Call. Браузер ніколи не отримує стандартний
|
||||
API-ключ OpenAI; він отримує лише ефемерний клієнтський секрет Realtime. Підказка сесії
|
||||
Realtime збирається Gateway; `talk.realtime.session` не приймає перевизначення інструкцій, надані викликачем.
|
||||
- У composer чату елемент керування Talk — це кнопка з хвилями поруч із
|
||||
кнопкою диктування з мікрофона. Коли Talk запускається, рядок статусу composer показує
|
||||
- `chat.send` є **неблокувальним**: він негайно підтверджує запит з `{ runId, status: "started" }`, а відповідь потоково передається через події `chat`.
|
||||
- Повторне надсилання з тим самим `idempotencyKey` повертає `{ status: "in_flight" }` під час виконання та `{ status: "ok" }` після завершення.
|
||||
- Відповіді `chat.history` обмежені за розміром для безпеки UI. Якщо записи транскрипту надто великі, Gateway може обрізати довгі текстові поля, пропускати важкі блоки метаданих і замінювати надмірно великі повідомлення заглушкою (`[chat.history omitted: message too large]`).
|
||||
- Зображення assistant/generated зберігаються як керовані медіапосилання і повертаються через автентифіковані медіа-URL Gateway, тому повторне завантаження не залежить від того, чи залишаються в відповіді історії чату сирі base64-пayload зображень.
|
||||
- `chat.history` також прибирає з видимого тексту assistant вбудовані теги директив лише для відображення (наприклад, `[[reply_to_*]]` і `[[audio_as_voice]]`), XML-payload простого тексту для викликів інструментів (включно з `<tool_call>...</tool_call>`, `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>` і обрізаними блоками викликів інструментів), а також витеклі токени керування моделлю ASCII/full-width, і пропускає записи assistant, де весь видимий текст — це лише точний silent token `NO_REPLY` / `no_reply`.
|
||||
- `chat.inject` додає примітку assistant до транскрипту сесії та транслює подію `chat` для оновлень лише UI (без запуску агента, без доставки в канал).
|
||||
- Перемикачі моделі й мислення в заголовку чату негайно застосовують зміни до активної сесії через `sessions.patch`; це постійні перевизначення сесії, а не параметри надсилання лише на один хід.
|
||||
- Режим Talk використовує зареєстрований realtime voice provider, який підтримує
|
||||
браузерні WebRTC-сесії. Налаштуйте OpenAI через `talk.provider: "openai"` разом із
|
||||
`talk.providers.openai.apiKey`, або повторно використайте конфігурацію realtime provider для Voice Call. Браузер ніколи не отримує стандартний API-ключ OpenAI; він отримує
|
||||
лише ефемерний секрет клієнта Realtime. Google Live realtime voice підтримується
|
||||
для серверного Voice Call і мостів Google Meet, але поки що не для цього
|
||||
браузерного шляху WebRTC. Підказка сесії Realtime збирається Gateway;
|
||||
`talk.realtime.session` не приймає перевизначення інструкцій, надані викликачем.
|
||||
- У composer Chat елемент керування Talk — це кнопка з хвилями поруч із
|
||||
кнопкою диктування з мікрофона. Коли Talk запускається, рядок стану composer показує
|
||||
`Connecting Talk...`, потім `Talk live`, поки підключено аудіо, або
|
||||
`Asking OpenClaw...`, поки realtime-виклик інструмента консультується з налаштованою
|
||||
`Asking OpenClaw...`, поки виклик realtime-інструмента консультується з налаштованою
|
||||
більшою моделлю через `chat.send`.
|
||||
- Зупинка:
|
||||
- Натисніть **Stop** (викликає `chat.abort`)
|
||||
- Поки запуск активний, звичайні подальші повідомлення стають у чергу. Натисніть **Steer** на повідомленні в черзі, щоб вставити це подальше повідомлення в поточний хід.
|
||||
- Введіть `/stop` (або окремі фрази переривання, як-от `stop`, `stop action`, `stop run`, `stop openclaw`, `please stop`), щоб перервати поза смугою
|
||||
- `chat.abort` підтримує `{ sessionKey }` (без `runId`) для переривання всіх активних запусків для цієї сесії
|
||||
- Часткове збереження під час переривання:
|
||||
- Коли запуск переривається, частковий текст помічника все одно може відображатися в UI
|
||||
- Gateway зберігає частковий текст помічника в історію стенограми перерваного запуску, коли існує буферизований вивід
|
||||
- Збережені записи містять метадані переривання, щоб споживачі стенограми могли відрізнити часткові фрагменти переривання від звичайного завершеного виводу
|
||||
- Поки запуск активний, звичайні наступні повідомлення стають у чергу. Натисніть **Steer** на повідомленні в черзі, щоб вставити це продовження в поточний хід.
|
||||
- Введіть `/stop` (або окремі фрази переривання, як-от `stop`, `stop action`, `stop run`, `stop openclaw`, `please stop`), щоб перервати поза чергою
|
||||
- `chat.abort` підтримує `{ sessionKey }` (без `runId`) для переривання всіх активних запусків цієї сесії
|
||||
- Збереження часткового результату після переривання:
|
||||
- Коли запуск перервано, частковий текст assistant усе ще може відображатися в UI
|
||||
- Gateway зберігає частковий текст assistant у історії транскрипту, якщо існує буферизований вивід
|
||||
- Збережені записи містять метадані переривання, щоб споживачі транскрипту могли відрізнити часткові результати після переривання від звичайного завершеного виводу
|
||||
|
||||
## Hosted embeds
|
||||
|
||||
Повідомлення помічника можуть відображати вбудований розміщений вебвміст за допомогою shortcode `[embed ...]`.
|
||||
Політика sandbox iframe керується через
|
||||
Повідомлення assistant можуть відображати вбудований hosted вебвміст за допомогою shortcode `[embed ...]`.
|
||||
Політика sandbox для iframe керується параметром
|
||||
`gateway.controlUi.embedSandbox`:
|
||||
|
||||
- `strict`: вимикає виконання скриптів усередині hosted embeds
|
||||
- `scripts`: дозволяє інтерактивні embeds, зберігаючи ізоляцію origin; це
|
||||
значення за замовчуванням і зазвичай його достатньо для самодостатніх браузерних ігор/віджетів
|
||||
- `trusted`: додає `allow-same-origin` поверх `allow-scripts` для документів того самого сайту,
|
||||
яким навмисно потрібні ширші привілеї
|
||||
- `scripts`: дозволяє інтерактивні embeds, зберігаючи ізоляцію походження; це
|
||||
типове значення, і його зазвичай достатньо для самодостатніх браузерних ігор/віджетів
|
||||
- `trusted`: додає `allow-same-origin` поверх `allow-scripts` для same-site
|
||||
документів, яким навмисно потрібні розширені привілеї
|
||||
|
||||
Приклад:
|
||||
|
||||
@ -207,19 +211,19 @@ UI керування може локалізуватися під час пер
|
||||
}
|
||||
```
|
||||
|
||||
Використовуйте `trusted` лише тоді, коли вбудованому документу справді потрібна
|
||||
поведінка same-origin. Для більшості згенерованих агентом ігор та інтерактивних canvas
|
||||
`cripts` є безпечнішим вибором.
|
||||
Використовуйте `trusted` лише тоді, коли вбудованому документу справді потрібна поведінка
|
||||
same-origin. Для більшості створених агентом ігор та інтерактивних canvas `scripts` —
|
||||
безпечніший вибір.
|
||||
|
||||
Абсолютні зовнішні URL-адреси embed `http(s)` за замовчуванням залишаються заблокованими. Якщо ви
|
||||
свідомо хочете, щоб `[embed url="https://..."]` завантажував сторонні сторінки, установіть
|
||||
Абсолютні зовнішні URL для embed `http(s)` залишаються заблокованими типово. Якщо ви
|
||||
свідомо хочете, щоб `[embed url="https://..."]` завантажував сторонні сторінки, задайте
|
||||
`gateway.controlUi.allowExternalEmbedUrls: true`.
|
||||
|
||||
## Доступ Tailnet (рекомендовано)
|
||||
## Доступ через Tailnet (рекомендовано)
|
||||
|
||||
### Інтегрований Tailscale Serve (рекомендовано)
|
||||
### Інтегрований Tailscale Serve (бажано)
|
||||
|
||||
Залиште Gateway на loopback і дозвольте Tailscale Serve проксіювати його через HTTPS:
|
||||
Залиште Gateway на loopback і дозвольте Tailscale Serve проксувати його через HTTPS:
|
||||
|
||||
```bash
|
||||
openclaw gateway --tailscale serve
|
||||
@ -227,22 +231,22 @@ openclaw gateway --tailscale serve
|
||||
|
||||
Відкрийте:
|
||||
|
||||
- `https://<magicdns>/` (або ваш налаштований `gateway.controlUi.basePath`)
|
||||
- `https://<magicdns>/` (або налаштований вами `gateway.controlUi.basePath`)
|
||||
|
||||
За замовчуванням запити Serve до UI керування/WebSocket можуть автентифікуватися через заголовки ідентифікації Tailscale
|
||||
Типово запити Control UI/WebSocket Serve можуть проходити автентифікацію через заголовки ідентичності Tailscale
|
||||
(`tailscale-user-login`), коли `gateway.auth.allowTailscale` має значення `true`. OpenClaw
|
||||
перевіряє ідентичність, розв’язуючи адресу `x-forwarded-for` за допомогою
|
||||
перевіряє ідентичність, визначаючи адресу `x-forwarded-for` за допомогою
|
||||
`tailscale whois` і звіряючи її із заголовком, і приймає їх лише тоді, коли
|
||||
запит потрапляє на loopback із заголовками Tailscale `x-forwarded-*`. Установіть
|
||||
запит потрапляє на loopback із заголовками Tailscale `x-forwarded-*`. Задайте
|
||||
`gateway.auth.allowTailscale: false`, якщо хочете вимагати явні облікові дані зі спільним секретом
|
||||
навіть для трафіку Serve. Тоді використовуйте `gateway.auth.mode: "token"` або
|
||||
`"password"`.
|
||||
Для цього асинхронного шляху ідентифікації Serve невдалі спроби автентифікації для тієї самої IP-адреси клієнта
|
||||
та області автентифікації серіалізуються перед записами обмеження швидкості. Тому одночасні хибні повторні спроби
|
||||
з того самого браузера можуть показувати `retry later` у другому запиті
|
||||
Для цього асинхронного шляху ідентичності Serve невдалі спроби автентифікації для тієї самої IP-адреси клієнта
|
||||
та області автентифікації серіалізуються перед записами обмеження швидкості.
|
||||
Тому одночасні хибні повторні спроби з того самого браузера можуть показувати `retry later` у другому запиті
|
||||
замість двох звичайних невідповідностей, що змагаються паралельно.
|
||||
Автентифікація Serve без токена припускає, що хост gateway є довіреним. Якщо на цьому хості
|
||||
може виконуватися недовірений локальний код, вимагайте автентифікацію токеном/паролем.
|
||||
Автентифікація Serve без токена передбачає, що хост gateway є довіреним. Якщо на цьому хості може виконуватися
|
||||
недовірений локальний код, вимагайте автентифікацію токеном/паролем.
|
||||
|
||||
### Прив’язка до tailnet + токен
|
||||
|
||||
@ -252,29 +256,29 @@ openclaw gateway --bind tailnet --token "$(openssl rand -hex 32)"
|
||||
|
||||
Потім відкрийте:
|
||||
|
||||
- `http://<tailscale-ip>:18789/` (або ваш налаштований `gateway.controlUi.basePath`)
|
||||
- `http://<tailscale-ip>:18789/` (або налаштований вами `gateway.controlUi.basePath`)
|
||||
|
||||
Вставте відповідний спільний секрет у налаштування UI (він надсилається як
|
||||
`connect.params.auth.token` або `connect.params.auth.password`).
|
||||
|
||||
## Незахищений HTTP
|
||||
|
||||
Якщо ви відкриваєте інформаційну панель через звичайний HTTP (`http://<lan-ip>` або `http://<tailscale-ip>`),
|
||||
браузер працює в **незахищеному контексті** і блокує WebCrypto. За замовчуванням
|
||||
OpenClaw **блокує** підключення UI керування без ідентичності пристрою.
|
||||
Якщо ви відкриваєте дашборд через звичайний HTTP (`http://<lan-ip>` або `http://<tailscale-ip>`),
|
||||
браузер працює в **незахищеному контексті** й блокує WebCrypto. Типово
|
||||
OpenClaw **блокує** підключення Control UI без ідентичності пристрою.
|
||||
|
||||
Задокументовані винятки:
|
||||
|
||||
- сумісність localhost-only для незахищеного HTTP з `gateway.controlUi.allowInsecureAuth=true`
|
||||
- успішна автентифікація оператора UI керування через `gateway.auth.mode: "trusted-proxy"`
|
||||
- сумісність із незахищеним HTTP лише для localhost з `gateway.controlUi.allowInsecureAuth=true`
|
||||
- успішна автентифікація оператора в Control UI через `gateway.auth.mode: "trusted-proxy"`
|
||||
- аварійний варіант `gateway.controlUi.dangerouslyDisableDeviceAuth=true`
|
||||
|
||||
**Рекомендоване виправлення:** використовуйте HTTPS (Tailscale Serve) або відкрийте UI локально:
|
||||
**Рекомендоване виправлення:** використовуйте HTTPS (Tailscale Serve) або відкривайте UI локально:
|
||||
|
||||
- `https://<magicdns>/` (Serve)
|
||||
- `http://127.0.0.1:18789/` (на хості gateway)
|
||||
|
||||
**Поведінка перемикача незахищеної автентифікації:**
|
||||
**Поведінка перемикача insecure-auth:**
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -288,7 +292,7 @@ OpenClaw **блокує** підключення UI керування без і
|
||||
|
||||
`allowInsecureAuth` — це лише локальний перемикач сумісності:
|
||||
|
||||
- Він дозволяє сесіям UI керування на localhost продовжуватися без ідентичності пристрою в
|
||||
- Він дозволяє сесіям Control UI на localhost продовжувати роботу без ідентичності пристрою в
|
||||
незахищених HTTP-контекстах.
|
||||
- Він не обходить перевірки сполучення.
|
||||
- Він не послаблює вимоги до ідентичності пристрою для віддалених підключень (не localhost).
|
||||
@ -305,71 +309,71 @@ OpenClaw **блокує** підключення UI керування без і
|
||||
}
|
||||
```
|
||||
|
||||
`dangerouslyDisableDeviceAuth` вимикає перевірки ідентичності пристрою в UI керування і є
|
||||
серйозним зниженням безпеки. Після аварійного використання швидко скасуйте цю зміну.
|
||||
`dangerouslyDisableDeviceAuth` вимикає перевірки ідентичності пристрою для Control UI і є
|
||||
серйозним зниженням рівня безпеки. Після аварійного використання швидко поверніть усе назад.
|
||||
|
||||
Примітка щодо trusted-proxy:
|
||||
|
||||
- успішна автентифікація trusted-proxy може допускати **операторські** сесії UI керування без
|
||||
- успішна автентифікація trusted-proxy може допускати **operator**-сесії Control UI без
|
||||
ідентичності пристрою
|
||||
- це **не** поширюється на сесії UI керування з роллю node
|
||||
- це **не** поширюється на Control UI-сесії з роллю node
|
||||
- reverse proxy на loopback того самого хоста все одно не задовольняють автентифікацію trusted-proxy; див.
|
||||
[Автентифікація Trusted Proxy](/uk/gateway/trusted-proxy-auth)
|
||||
[Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth)
|
||||
|
||||
Див. [Tailscale](/uk/gateway/tailscale) для рекомендацій щодо налаштування HTTPS.
|
||||
|
||||
## Політика безпеки вмісту
|
||||
|
||||
UI керування постачається зі суворою політикою `img-src`: дозволені лише ресурси **same-origin** і URL `data:`. Віддалені URL з `http(s)` і відносні до протоколу URL зображень відхиляються браузером і не ініціюють мережевих запитів.
|
||||
Control UI постачається з жорсткою політикою `img-src`: дозволено лише ресурси **того самого походження** та URL `data:`. Віддалені URL з `http(s)` і URL з відносним до протоколу записом відхиляються браузером і не спричиняють мережевих запитів.
|
||||
|
||||
Що це означає на практиці:
|
||||
|
||||
- Аватари й зображення, що віддаються за відносними шляхами (наприклад, `/avatars/<id>`), як і раніше відображаються.
|
||||
- Вбудовані URL `data:image/...` як і раніше відображаються (це корисно для payload-ів усередині протоколу).
|
||||
- Віддалені URL аватарів, які надсилає метадані каналу, видаляються в допоміжних функціях аватарів UI керування та замінюються вбудованим логотипом/значком, тому скомпрометований або зловмисний канал не може змусити браузер оператора виконувати довільні віддалені запити зображень.
|
||||
- Аватари та зображення, що обслуговуються за відносними шляхами (наприклад, `/avatars/<id>`), як і раніше відображаються.
|
||||
- Вбудовані URL `data:image/...` як і раніше відображаються (це корисно для payload у межах протоколу).
|
||||
- Віддалені URL аватарів, які надходять із метаданих каналу, відсікаються у допоміжних функціях аватарів Control UI і замінюються вбудованим логотипом/бейджем, тож скомпрометований або зловмисний канал не може змусити браузер оператора виконувати довільні віддалені запити зображень.
|
||||
|
||||
Щоб отримати таку поведінку, нічого змінювати не потрібно — вона завжди ввімкнена й не налаштовується.
|
||||
Щоб отримати таку поведінку, вам не потрібно нічого змінювати — вона завжди ввімкнена і не налаштовується.
|
||||
|
||||
## Автентифікація маршруту аватара
|
||||
|
||||
Коли налаштовано автентифікацію gateway, кінцева точка аватарів UI керування вимагає той самий токен gateway, що й решта API:
|
||||
Коли налаштовано автентифікацію gateway, кінцева точка аватара в Control UI вимагає той самий токен gateway, що й решта API:
|
||||
|
||||
- `GET /avatar/<agentId>` повертає зображення аватара лише автентифікованим викликачам. `GET /avatar/<agentId>?meta=1` повертає метадані аватара за тим самим правилом.
|
||||
- Неавтентифіковані запити до будь-якого з маршрутів відхиляються (аналогічно до сусіднього маршруту медіа помічника). Це запобігає витоку ідентичності агента через маршрут аватара на хостах, які в іншому разі захищені.
|
||||
- Сам UI керування пересилає токен gateway як bearer-заголовок під час отримання аватарів і використовує автентифіковані blob URL, тож зображення як і раніше відображається в інформаційних панелях.
|
||||
- Неавтентифіковані запити до будь-якого з цих маршрутів відхиляються (так само, як і до спорідненого маршруту assistant-media). Це запобігає витоку ідентичності агента через маршрут аватара на хостах, які в іншому випадку захищені.
|
||||
- Сам Control UI під час отримання аватарів пересилає токен gateway як bearer-заголовок і використовує автентифіковані blob URL, тож зображення все одно відображається в дашбордах.
|
||||
|
||||
Якщо ви вимкнете автентифікацію gateway (не рекомендовано на спільних хостах), маршрут аватара також стане неавтентифікованим, відповідно до решти gateway.
|
||||
|
||||
## Збирання UI
|
||||
|
||||
Gateway віддає статичні файли з `dist/control-ui`. Зберіть їх за допомогою:
|
||||
Gateway обслуговує статичні файли з `dist/control-ui`. Зберіть їх командою:
|
||||
|
||||
```bash
|
||||
pnpm ui:build
|
||||
```
|
||||
|
||||
Необов’язкова абсолютна база (коли потрібні фіксовані URL ресурсів):
|
||||
Необов’язкова абсолютна base-адреса (коли потрібні фіксовані URL ресурсів):
|
||||
|
||||
```bash
|
||||
OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build
|
||||
```
|
||||
|
||||
Для локальної розробки (окремий dev server):
|
||||
Для локальної розробки (окремий dev-сервер):
|
||||
|
||||
```bash
|
||||
pnpm ui:dev
|
||||
```
|
||||
|
||||
Потім вкажіть для UI URL вашого Gateway WS (наприклад, `ws://127.0.0.1:18789`).
|
||||
Потім вкажіть UI URL вашого Gateway WS (наприклад, `ws://127.0.0.1:18789`).
|
||||
|
||||
## Налагодження/тестування: dev server + віддалений Gateway
|
||||
## Налагодження/тестування: dev-сервер + віддалений Gateway
|
||||
|
||||
UI керування — це статичні файли; ціль WebSocket налаштовується і може
|
||||
відрізнятися від HTTP origin. Це зручно, коли ви хочете використовувати Vite dev server
|
||||
локально, але Gateway працює в іншому місці.
|
||||
Control UI — це статичні файли; ціль WebSocket налаштовується і може
|
||||
відрізнятися від HTTP-походження. Це зручно, коли ви хочете використовувати локальний
|
||||
dev-сервер Vite, але Gateway працює деінде.
|
||||
|
||||
1. Запустіть dev server UI: `pnpm ui:dev`
|
||||
2. Відкрийте URL такого вигляду:
|
||||
1. Запустіть dev-сервер UI: `pnpm ui:dev`
|
||||
2. Відкрийте URL такого виду:
|
||||
|
||||
```text
|
||||
http://localhost:5173/?gatewayUrl=ws://<gateway-host>:18789
|
||||
@ -384,19 +388,19 @@ http://localhost:5173/?gatewayUrl=wss://<gateway-host>:18789#token=<gateway-toke
|
||||
Примітки:
|
||||
|
||||
- `gatewayUrl` зберігається в localStorage після завантаження і видаляється з URL.
|
||||
- `token` слід передавати через фрагмент URL (`#token=...`) щоразу, коли це можливо. Фрагменти не надсилаються на сервер, що запобігає витоку через журнали запитів і Referer. Застарілі параметри запиту `?token=` усе ще одноразово імпортуються для сумісності, але лише як fallback, і видаляються одразу після bootstrap.
|
||||
- `token` слід, коли можливо, передавати через фрагмент URL (`#token=...`). Фрагменти не надсилаються на сервер, що запобігає витоку через журнали запитів і Referer. Застарілі параметри запиту `?token=` усе ще одноразово імпортуються для сумісності, але лише як запасний варіант, і негайно видаляються після bootstrap.
|
||||
- `password` зберігається лише в пам’яті.
|
||||
- Коли встановлено `gatewayUrl`, UI не повертається до облікових даних із конфігурації чи середовища.
|
||||
Явно вкажіть `token` (або `password`). Відсутність явних облікових даних є помилкою.
|
||||
- Використовуйте `wss://`, коли Gateway знаходиться за TLS (Tailscale Serve, HTTPS proxy тощо).
|
||||
- `gatewayUrl` приймається лише у вікні верхнього рівня (не у вбудованому), щоб запобігти clickjacking.
|
||||
- Розгортання UI керування не на loopback мають явно задавати `gateway.controlUi.allowedOrigins`
|
||||
(повні origin). Це також стосується віддалених dev-налаштувань.
|
||||
- Не використовуйте `gateway.controlUi.allowedOrigins: ["*"]`, окрім жорстко контрольованого
|
||||
локального тестування. Це означає дозвіл для будь-якого origin браузера, а не «відповідати будь-якому хосту, який я
|
||||
- Коли встановлено `gatewayUrl`, UI не повертається до конфігурації або облікових даних із середовища.
|
||||
Надайте `token` (або `password`) явно. Відсутність явних облікових даних є помилкою.
|
||||
- Використовуйте `wss://`, коли Gateway працює за TLS (Tailscale Serve, HTTPS-проксі тощо).
|
||||
- `gatewayUrl` приймається лише у вікні верхнього рівня (не у вбудованому), щоб запобігти клікджекінгу.
|
||||
- Розгортання Control UI не на loopback повинні явно задавати `gateway.controlUi.allowedOrigins`
|
||||
(повні origin). Це включає віддалені налаштування розробки.
|
||||
- Не використовуйте `gateway.controlUi.allowedOrigins: ["*"]`, окрім ретельно контрольованого
|
||||
локального тестування. Це означає дозвіл для будь-якого origin браузера, а не «зіставити з будь-яким хостом, який я
|
||||
використовую».
|
||||
- `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` вмикає
|
||||
режим fallback origin за заголовком Host, але це небезпечний режим безпеки.
|
||||
резервний режим origin через заголовок Host, але це небезпечний режим безпеки.
|
||||
|
||||
Приклад:
|
||||
|
||||
@ -410,11 +414,11 @@ http://localhost:5173/?gatewayUrl=wss://<gateway-host>:18789#token=<gateway-toke
|
||||
}
|
||||
```
|
||||
|
||||
Докладніше про налаштування віддаленого доступу: [Віддалений доступ](/uk/gateway/remote).
|
||||
Подробиці налаштування віддаленого доступу: [Віддалений доступ](/uk/gateway/remote).
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Інформаційна панель](/uk/web/dashboard) — інформаційна панель gateway
|
||||
- [WebChat](/uk/web/webchat) — чат-інтерфейс у браузері
|
||||
- [Dashboard](/uk/web/dashboard) — дашборд gateway
|
||||
- [WebChat](/uk/web/webchat) — браузерний інтерфейс чату
|
||||
- [TUI](/uk/web/tui) — термінальний інтерфейс користувача
|
||||
- [Перевірки справності](/uk/gateway/health) — моніторинг справності gateway
|
||||
- [Health Checks](/uk/gateway/health) — моніторинг стану gateway
|
||||
|
||||
Loading…
Reference in New Issue
Block a user