chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-25 19:18:40 +00:00
parent 4f741721db
commit d912fe8bc0
3 changed files with 203 additions and 199 deletions

View File

@ -1,14 +1,14 @@
---
read_when:
- Реалізація режиму розмови на macOS/iOS/Android
- Зміна голосу/TTS/поведінки переривання
- Зміна поведінки голосу/TTS/переривання
summary: 'Режим розмови: безперервні голосові розмови з налаштованими TTS-провайдерами'
title: Режим розмови
x-i18n:
generated_at: "2026-04-25T07:53:39Z"
generated_at: "2026-04-25T19:17:37Z"
model: gpt-5.4
provider: openai
source_hash: 84c99149c43bfe9fa4866b20271089d88d7e3d2f5abe6d16477a26915dad7829
source_hash: 5f2130c58870000faa6c818587f4a487948f189b777426a81764e37c39204f51
source_path: nodes/talk.md
workflow: 15
---
@ -22,15 +22,15 @@ x-i18n:
## Поведінка (macOS)
- **Постійно активне накладання**, поки режим розмови увімкнено.
- Переходи між фазами **Слухання → Обробка → Озвучення**.
- Під час **короткої паузи** (вікно тиші) поточний транскрипт надсилається.
- Відповіді **записуються у WebChat** (так само, як і під час введення тексту).
- **Переривання мовленням** (типово ввімкнено): якщо користувач починає говорити, поки помічник озвучує відповідь, ми зупиняємо відтворення й фіксуємо часову позначку переривання для наступного запиту.
- **Завжди активне накладання** під час увімкненого режиму розмови.
- Переходи між фазами **Listening → Thinking → Speaking**.
- Після **короткої паузи** (вікно тиші) поточний транскрипт надсилається.
- Відповіді **записуються у WebChat** (так само, як і під час введення з клавіатури).
- **Переривання під час мовлення** (увімкнено за замовчуванням): якщо користувач починає говорити, поки асистент говорить, ми зупиняємо відтворення та позначаємо часову мітку переривання для наступного запиту.
## Голосові директиви у відповідях
Помічник може додати на початок своєї відповіді **один рядок JSON**, щоб керувати голосом:
Асистент може додати на початок своєї відповіді **один рядок JSON**, щоб керувати голосом:
```json
{ "voice": "<voice-id>", "once": true }
@ -41,14 +41,14 @@ x-i18n:
- Лише перший непорожній рядок.
- Невідомі ключі ігноруються.
- `once: true` застосовується лише до поточної відповіді.
- Без `once` голос стає новим типовим голосом для режиму розмови.
- Рядок JSON видаляється перед відтворенням через TTS.
- Без `once` голос стає новим голосом за замовчуванням для режиму розмови.
- Рядок JSON видаляється перед TTS-відтворенням.
Підтримувані ключі:
- `voice` / `voice_id` / `voiceId`
- `model` / `model_id` / `modelId`
- `speed`, `rate` (WPM), `stability`, `similarity`, `style`, `speakerBoost`
- `speed`, `rate` (слів за хвилину), `stability`, `similarity`, `style`, `speakerBoost`
- `seed`, `normalize`, `lang`, `output_format`, `latency_tier`
- `once`
@ -76,40 +76,47 @@ x-i18n:
}
```
Типові значення:
Значення за замовчуванням:
- `interruptOnSpeech`: true
- `silenceTimeoutMs`: якщо не задано, Talk використовує типове для платформи вікно паузи перед надсиланням транскрипту (`700 ms` на macOS і Android, `900 ms` на iOS)
- `silenceTimeoutMs`: якщо не задано, Talk використовує стандартне для платформи вікно паузи перед надсиланням транскрипту (`700 ms` на macOS і Android, `900 ms` на iOS)
- `provider`: вибирає активного Talk-провайдера. Використовуйте `elevenlabs`, `mlx` або `system` для локальних шляхів відтворення на macOS.
- `providers.<provider>.voiceId`: використовує `ELEVENLABS_VOICE_ID` / `SAG_VOICE_ID` як запасний варіант для ElevenLabs (або перший голос ElevenLabs, якщо доступний API-ключ).
- `providers.elevenlabs.modelId`: якщо не задано, типово використовується `eleven_v3`.
- `providers.mlx.modelId`: якщо не задано, типово використовується `mlx-community/Soprano-80M-bf16`.
- `providers.elevenlabs.apiKey`: використовує `ELEVENLABS_API_KEY` як запасний варіант (або профіль shell Gateway, якщо доступно).
- `outputFormat`: типово `pcm_44100` на macOS/iOS і `pcm_24000` на Android (встановіть `mp3_*`, щоб примусово використовувати MP3-стримінг)
- `providers.<provider>.voiceId`: використовує `ELEVENLABS_VOICE_ID` / `SAG_VOICE_ID` для ElevenLabs як резервне значення (або перший голос ElevenLabs, якщо доступний API-ключ).
- `providers.elevenlabs.modelId`: якщо не задано, за замовчуванням використовується `eleven_v3`.
- `providers.mlx.modelId`: якщо не задано, за замовчуванням використовується `mlx-community/Soprano-80M-bf16`.
- `providers.elevenlabs.apiKey`: використовує `ELEVENLABS_API_KEY` як резервне значення (або профіль shell шлюзу, якщо доступний).
- `outputFormat`: за замовчуванням `pcm_44100` на macOS/iOS і `pcm_24000` на Android (вкажіть `mp3_*`, щоб примусово використовувати MP3-потік)
## Інтерфейс macOS
- Перемикач у рядку меню: **Talk**
- Вкладка конфігурації: група **Talk Mode** (ідентифікатор голосу + перемикач переривання)
- Накладання:
- **Listening**: хмара пульсує відповідно до рівня мікрофона
- **Listening**: пульсація хмари з рівнем мікрофона
- **Thinking**: анімація занурення
- **Speaking**: кільця, що розходяться
- **Speaking**: розходження концентричних кілець
- Натисніть на хмару: зупинити озвучення
- Натисніть X: вийти з режиму розмови
## Інтерфейс Android
- Перемикач на вкладці Voice: **Talk**
- Ручні режими захоплення **Mic** і **Talk** є взаємовиключними під час виконання.
- Ручний Mic зупиняється, коли застосунок виходить із переднього плану або користувач залишає вкладку Voice.
- Talk Mode продовжує працювати, доки його не буде вимкнено або доки Android Node не від’єднається, і під час активності використовує тип foreground service мікрофона Android.
## Примітки
- Потрібні дозволи на Speech і Microphone.
- Використовує `chat.send` для ключа сесії `main`.
- Gateway виконує озвучення Talk через `talk.speak` з використанням активного Talk-провайдера. Android переходить на локальний системний TTS лише тоді, коли цей RPC недоступний.
- Локальне відтворення MLX на macOS використовує вбудований допоміжний інструмент `openclaw-mlx-tts`, якщо він доступний, або виконуваний файл у `PATH`. Установіть `OPENCLAW_MLX_TTS_BIN`, щоб указати на власний допоміжний бінарний файл під час розробки.
- Шлюз виконує відтворення Talk через `talk.speak` з використанням активного Talk-провайдера. Android переходить на локальний системний TTS лише тоді, коли цей RPC недоступний.
- Локальне відтворення MLX на macOS використовує вбудований допоміжний інструмент `openclaw-mlx-tts`, якщо він є, або виконуваний файл у `PATH`. Під час розробки встановіть `OPENCLAW_MLX_TTS_BIN`, щоб указати на власний допоміжний бінарний файл.
- `stability` для `eleven_v3` перевіряється на значення `0.0`, `0.5` або `1.0`; інші моделі приймають `0..1`.
- `latency_tier` перевіряється в діапазоні `0..4`, якщо його задано.
- Android підтримує формати виводу `pcm_16000`, `pcm_22050`, `pcm_24000` і `pcm_44100` для низьколатентного стримінгу через AudioTrack.
- `latency_tier` перевіряється в діапазоні `0..4`, якщо задано.
- Android підтримує формати виводу `pcm_16000`, `pcm_22050`, `pcm_24000` і `pcm_44100` для низьколатентного потокового відтворення через AudioTrack.
## Пов’язане
- [Голосова активація](/uk/nodes/voicewake)
- [Активація голосом](/uk/nodes/voicewake)
- [Аудіо та голосові нотатки](/uk/nodes/audio)
- [Розуміння медіа](/uk/nodes/media-understanding)

View File

@ -1,53 +1,53 @@
---
read_when:
- Прив’язка або повторне підключення Android Node
- Налагодження виявлення Gateway або автентифікації Android
- Перевірка паритету історії чату між клієнтами
summary: 'Android app (node): інструкція з підключення + поверхня команд Connect/Chat/Voice/Canvas'
title: Android app
- Сполучення або повторне підключення Android Node
- Налагодження виявлення або автентифікації Android Gateway
- Перевірка відповідності історії чату між клієнтами
summary: 'Android застосунок (Node): інструкція з підключення + поверхня команд Connect/Chat/Voice/Canvas'
title: Android застосунок
x-i18n:
generated_at: "2026-04-25T05:56:44Z"
generated_at: "2026-04-25T19:17:38Z"
model: gpt-5.4
provider: openai
source_hash: 789de91275a11e63878ba670b9f316538d6b4731c22ec491b2c802f1cd14dcec
source_hash: 5a47c07e3301ad7b98f4827c9c34c42b7ba2f92c55aabd7b49606ab688191b66
source_path: platforms/android.md
workflow: 15
---
> **Примітка:** Android app ще не випущено публічно. Вихідний код доступний у [репозиторії OpenClaw](https://github.com/openclaw/openclaw) у `apps/android`. Ви можете зібрати його самостійно за допомогою Java 17 і Android SDK (`./gradlew :app:assemblePlayDebug`). Інструкції зі збирання дивіться в [apps/android/README.md](https://github.com/openclaw/openclaw/blob/main/apps/android/README.md).
> **Примітка:** Застосунок Android ще не було публічно випущено. Вихідний код доступний у [репозиторії OpenClaw](https://github.com/openclaw/openclaw) у `apps/android`. Ви можете зібрати його самостійно за допомогою Java 17 та Android SDK (`./gradlew :app:assemblePlayDebug`). Див. [apps/android/README.md](https://github.com/openclaw/openclaw/blob/main/apps/android/README.md) для інструкцій зі збирання.
## Стан підтримки
## Знімок підтримки
- Роль: супутній app Node (Android не розміщує Gateway).
- Роль: застосунок супутнього Node (Android не розміщує Gateway).
- Gateway потрібен: так (запускайте його на macOS, Linux або Windows через WSL2).
- Встановлення: [Початок роботи](/uk/start/getting-started) + [Прив’язка](/uk/channels/pairing).
- Встановлення: [Початок роботи](/uk/start/getting-started) + [Сполучення](/uk/channels/pairing).
- Gateway: [Інструкція](/uk/gateway) + [Конфігурація](/uk/gateway/configuration).
- Протоколи: [Протокол Gateway](/uk/gateway/protocol) (Nodes + площина керування).
- Протоколи: [Протокол Gateway](/uk/gateway/protocol) (Node + контрольна площина).
## Керування системою
Керування системою (launchd/systemd) розміщується на хості Gateway. Див. [Gateway](/uk/gateway).
Керування системою (`launchd`/`systemd`) розташоване на хості Gateway. Див. [Gateway](/uk/gateway).
## Інструкція з підключення
Android Node app ⇄ (mDNS/NSD + WebSocket) ⇄ **Gateway**
Застосунок Android Node ⇄ (mDNS/NSD + WebSocket) ⇄ **Gateway**
Android підключається безпосередньо до WebSocket Gateway і використовує прив’язку пристрою (`role: node`).
Android підключається безпосередньо до WebSocket Gateway і використовує сполучення пристрою (`role: node`).
Для Tailscale або публічних хостів Android потребує захищеного endpoint:
Для Tailscale або публічних хостів Android потребує захищену кінцеву точку:
- Бажано: Tailscale Serve / Funnel з `https://<magicdns>` / `wss://<magicdns>`
- Також підтримується: будь-який інший URL Gateway `wss://` із реальним TLS endpoint
- Незашифрований `ws://` як і раніше підтримується для приватних LAN-адрес / хостів `.local`, а також `localhost`, `127.0.0.1` і мосту емулятора Android (`10.0.2.2`)
- Також підтримується: будь-який інший URL Gateway `wss://` із реальною TLS-кінцевою точкою
- Незашифрований `ws://` залишається підтримуваним для приватних LAN-адрес / хостів `.local`, а також `localhost`, `127.0.0.1` і мосту емулятора Android (`10.0.2.2`)
### Передумови
- Ви можете запустити Gateway на «головній» машині.
- Ви можете запустити Gateway на “master”-машині.
- Пристрій/емулятор Android може досягти WebSocket gateway:
- Та сама LAN з mDNS/NSD, **або**
- Та сама tailnet Tailscale з Wide-Area Bonjour / unicast DNS-SD (див. нижче), **або**
- Ручне задання хоста/порту gateway (резервний варіант)
- Мобільна прив’язка через tailnet/публічну мережу **не** використовує сирі endpoint `ws://` на IP tailnet. Замість цього використовуйте Tailscale Serve або інший URL `wss://`.
- У тій самій LAN із mDNS/NSD, **або**
- У тій самій мережі Tailscale з Wide-Area Bonjour / unicast DNS-SD (див. нижче), **або**
- Ручний хост/порт gateway (резервний варіант)
- Мобільне сполучення через tailnet/публічну мережу **не** використовує сирі кінцеві точки `ws://` tailnet IP. Натомість використовуйте Tailscale Serve або інший URL `wss://`.
- Ви можете запускати CLI (`openclaw`) на машині gateway (або через SSH).
### 1) Запустіть Gateway
@ -56,63 +56,62 @@ Android підключається безпосередньо до WebSocket Gat
openclaw gateway --port 18789 --verbose
```
Переконайтеся, що в журналах є щось на кшталт:
Підтвердьте в журналах, що бачите щось на кшталт:
- `listening on ws://0.0.0.0:18789`
Для віддаленого доступу Android через Tailscale надавайте перевагу Serve/Funnel замість прямої прив’язки tailnet:
Для віддаленого доступу Android через Tailscale віддавайте перевагу Serve/Funnel замість сирого прив’язування tailnet:
```bash
openclaw gateway --tailscale serve
```
Це надає Android захищений endpoint `wss://` / `https://`. Звичайного налаштування `gateway.bind: "tailnet"` недостатньо для першої віддаленої прив’язки Android, якщо ви також окремо не завершуєте TLS.
Це надає Android захищену кінцеву точку `wss://` / `https://`. Простого налаштування `gateway.bind: "tailnet"` недостатньо для першого віддаленого сполучення Android, якщо ви також окремо не завершуєте TLS.
### 2) Перевірте виявлення (необов’язково)
З машини gateway:
На машині gateway:
```bash
dns-sd -B _openclaw-gw._tcp local.
```
Додаткові примітки з налагодження: [Bonjour](/uk/gateway/bonjour).
Більше приміток щодо налагодження: [Bonjour](/uk/gateway/bonjour).
Якщо ви також налаштували домен wide-area discovery, порівняйте з:
Якщо ви також налаштували wide-area домен для виявлення, порівняйте з:
```bash
openclaw gateway discover --json
```
Це показує `local.` разом із налаштованим wide-area доменом за один прохід і використовує розв’язаний
endpoint сервісу замість лише підказок TXT.
Це показує `local.` разом із налаштованим wide-area доменом за один прохід і використовує розв’язану кінцеву точку сервісу замість лише TXT-підказок.
#### Виявлення через tailnet (Відень ⇄ Лондон) за допомогою unicast DNS-SD
#### Виявлення через tailnet (Vienna ⇄ London) за допомогою unicast DNS-SD
Виявлення Android через NSD/mDNS не проходить між мережами. Якщо ваш Android Node і gateway перебувають у різних мережах, але з’єднані через Tailscale, натомість використовуйте Wide-Area Bonjour / unicast DNS-SD.
Виявлення Android NSD/mDNS не працює між різними мережами. Якщо ваш Android Node і gateway перебувають у різних мережах, але з’єднані через Tailscale, використовуйте Wide-Area Bonjour / unicast DNS-SD.
Самого лише виявлення недостатньо для прив’язки Android через tailnet/публічну мережу. Виявлений маршрут усе одно потребує захищеного endpoint (`wss://` або Tailscale Serve):
Самого виявлення недостатньо для сполучення Android через tailnet/публічну мережу. Виявлений маршрут усе одно потребує захищеної кінцевої точки (`wss://` або Tailscale Serve):
1. Налаштуйте зону DNS-SD (наприклад, `openclaw.internal.`) на хості gateway і опублікуйте записи `_openclaw-gw._tcp`.
2. Налаштуйте split DNS у Tailscale для вибраного домену з указанням на цей DNS-сервер.
2. Налаштуйте Tailscale split DNS для вибраного вами домену з вказанням цього DNS-сервера.
Докладніше та приклад конфігурації CoreDNS: [Bonjour](/uk/gateway/bonjour).
### 3) Підключіться з Android
У Android app:
У застосунку Android:
- App підтримує з’єднання з gateway через **foreground service** (постійне сповіщення).
- Застосунок підтримує з’єднання з gateway через **foreground service** (постійну сповіщення).
- Відкрийте вкладку **Connect**.
- Використайте режим **Setup Code** або **Manual**.
- Якщо виявлення заблоковане, використовуйте ручне задання хоста/порту в **Advanced controls**. Для приватних хостів LAN `ws://` усе ще працює. Для Tailscale/публічних хостів увімкніть TLS і використовуйте endpoint `wss://` / Tailscale Serve.
- Використовуйте режим **Setup Code** або **Manual**.
- Якщо виявлення заблоковане, використовуйте ручний хост/порт у **Advanced controls**. Для приватних LAN-хостів `ws://` усе ще працює. Для Tailscale/публічних хостів увімкніть TLS і використовуйте кінцеву точку `wss://` / Tailscale Serve.
Після першої успішної прив’язки Android автоматично перепідключається під час запуску:
Після першого успішного сполучення Android автоматично перепідключається під час запуску:
- Manual endpoint (якщо ввімкнено), інакше
- Ручна кінцева точка (якщо ввімкнено), інакше
- Останній виявлений gateway (best-effort).
### 4) Схваліть прив’язку (CLI)
### 4) Підтвердьте сполучення (CLI)
На машині gateway:
@ -122,10 +121,10 @@ openclaw devices approve <requestId>
openclaw devices reject <requestId>
```
Докладніше про прив’язку: [Прив’язка](/uk/channels/pairing).
Докладніше про сполучення: [Сполучення](/uk/channels/pairing).
Необов’язково: якщо Android Node завжди підключається з жорстко контрольованої підмережі,
ви можете явно ввімкнути автосхвалення першої прив’язки Node за явними CIDR або точними IP:
ви можете явно ввімкнути авто-підтвердження першого сполучення Node для конкретних CIDR або точних IP:
```json5
{
@ -139,13 +138,11 @@ openclaw devices reject <requestId>
}
```
За замовчуванням це вимкнено. Це застосовується лише до нової прив’язки `role: node` без
запитаних scopes. Прив’язка operator/browser і будь-яка зміна ролі, scope, metadata або
публічного ключа, як і раніше, потребують ручного схвалення.
Це вимкнено типово. Це застосовується лише до нового сполучення `role: node` без запитаних scopes. Сполучення operator/browser і будь-які зміни ролі, scope, metadata або відкритого ключа все одно потребують ручного підтвердження.
### 5) Перевірте, що Node підключено
- Через статус Nodes:
- Через статус Node:
```bash
openclaw nodes status
@ -157,57 +154,53 @@ openclaw devices reject <requestId>
openclaw gateway call node.list --params "{}"
```
### 6) Chat + історія
### 6) Chat + history
Вкладка Chat в Android підтримує вибір сесії (типово `main`, а також інші наявні сесії):
Вкладка Chat в Android підтримує вибір сеансу (типово `main`, а також інші наявні сеанси):
- Історія: `chat.history` (нормалізована для відображення; inline-теги директив
прибираються з видимого тексту, XML payload викликів інструментів у звичайному тексті (включно з
`<tool_call>...</tool_call>`, `<function_call>...</function_call>`,
`<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>` і
обрізаними блоками викликів інструментів) та витоки ASCII/повноширинних токенів керування моделлю
прибираються, чисті рядки асистента лише з тихими токенами, такі як точні `NO_REPLY` /
`no_reply`, пропускаються, а надто великі рядки можуть бути замінені заповнювачами)
- Історія: `chat.history` (нормалізовано для відображення; вбудовані теги директив видаляються з видимого тексту, XML-навантаження викликів інструментів у звичайному тексті (включно з `<tool_call>...</tool_call>`, `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>`, а також обрізаними блоками викликів інструментів) і витіклі ASCII/повноширинні токени керування моделлю видаляються, чисті рядки помічника з тихими токенами, як-от точні `NO_REPLY` / `no_reply`, пропускаються, а надто великі рядки можуть бути замінені заповнювачами)
- Надсилання: `chat.send`
- Push-оновлення (best-effort): `chat.subscribe``event:"chat"`
### 7) Canvas + камера
### 7) Canvas + camera
#### Хост Canvas Gateway (рекомендовано для web-вмісту)
#### Хост Gateway Canvas (рекомендовано для вебвмісту)
Якщо ви хочете, щоб Node показував справжній HTML/CSS/JS, який агент може редагувати на диску, спрямуйте Node на canvas host Gateway.
Якщо ви хочете, щоб Node показував справжні HTML/CSS/JS, які агент може редагувати на диску, спрямуйте Node на хост canvas Gateway.
Примітка: Nodes завантажують canvas з HTTP-сервера Gateway (той самий порт, що й `gateway.port`, типово `18789`).
Примітка: Node завантажують canvas із HTTP-сервера Gateway (той самий порт, що й `gateway.port`, типово `18789`).
1. Створіть `~/.openclaw/workspace/canvas/index.html` на хості gateway.
2. Перейдіть до нього з Node (LAN):
2. Перейдіть до нього на Node (LAN):
```bash
openclaw nodes invoke --node "<Android Node>" --command canvas.navigate --params '{"url":"http://<gateway-hostname>.local:18789/__openclaw__/canvas/"}'
```
Tailnet (необов’язково): якщо обидва пристрої в Tailscale, використовуйте ім’я MagicDNS або IP tailnet замість `.local`, наприклад `http://<gateway-magicdns>:18789/__openclaw__/canvas/`.
Tailnet (необов’язково): якщо обидва пристрої в Tailscale, використовуйте ім’я MagicDNS або tailnet IP замість `.local`, наприклад `http://<gateway-magicdns>:18789/__openclaw__/canvas/`.
Цей сервер ін’єктує клієнт live-reload у HTML і перезавантажує сторінку при зміні файлів.
Хост A2UI розташовано за адресою `http://<gateway-host>:18789/__openclaw__/a2ui/`.
Цей сервер вбудовує клієнт live-reload в HTML і перезавантажує сторінку при зміні файлів.
Хост A2UI розташований за адресою `http://<gateway-host>:18789/__openclaw__/a2ui/`.
Команди Canvas (лише на передньому плані):
Команди Canvas (лише у foreground):
- `canvas.eval`, `canvas.snapshot`, `canvas.navigate` (використовуйте `{"url":""}` або `{"url":"/"}`, щоб повернутися до типового scaffold). `canvas.snapshot` повертає `{ format, base64 }` (типово `format="jpeg"`).
- A2UI: `canvas.a2ui.push`, `canvas.a2ui.reset` (`canvas.a2ui.pushJSONL` — застарілий alias)
- `canvas.eval`, `canvas.snapshot`, `canvas.navigate` (використовуйте `{"url":""}` або `{"url":"/"}` для повернення до типової scaffolding-сторінки). `canvas.snapshot` повертає `{ format, base64 }` (типово `format="jpeg"`).
- A2UI: `canvas.a2ui.push`, `canvas.a2ui.reset` (`canvas.a2ui.pushJSONL` — застарілий псевдонім)
Команди камери (лише на передньому плані; обмежуються дозволами):
Команди camera (лише у foreground; із контролем дозволів):
- `camera.snap` (jpg)
- `camera.clip` (mp4)
Параметри та допоміжні інструменти CLI дивіться в [Camera node](/uk/nodes/camera).
Параметри та допоміжні засоби CLI див. у [Camera node](/uk/nodes/camera).
### 8) Voice + розширена поверхня команд Android
- Voice: Android використовує єдиний сценарій увімкнення/вимкнення мікрофона на вкладці Voice із захопленням транскрипту та відтворенням `talk.speak`. Локальний системний TTS використовується лише коли `talk.speak` недоступний. Voice зупиняється, коли app виходить із переднього плану.
- Перемикачі пробудження Voice/talk-mode наразі прибрані з UX/runtime Android.
- Вкладка Voice: Android має два явні режими захоплення. **Mic** — це ручний сеанс вкладки Voice, який надсилає кожну паузу як хід чату і зупиняється, коли застосунок виходить із foreground або користувач залишає вкладку Voice. **Talk** — це безперервний Talk Mode, який продовжує слухати, доки його не вимкнено або Node не відключиться.
- Talk Mode підвищує наявний foreground service з `dataSync` до `dataSync|microphone` перед початком захоплення, а потім знижує його, коли Talk Mode зупиняється. Android 14+ вимагає оголошення `FOREGROUND_SERVICE_MICROPHONE`, runtime-дозвіл `RECORD_AUDIO` і тип служби microphone під час виконання.
- Озвучені відповіді використовують `talk.speak` через налаштованого провайдера Talk gateway. Локальний системний TTS використовується лише тоді, коли `talk.speak` недоступний.
- Голосове пробудження залишається вимкненим в UX/runtime Android.
- Додаткові сімейства команд Android (доступність залежить від пристрою та дозволів):
- `device.status`, `device.info`, `device.permissions`, `device.health`
- `notifications.list`, `notifications.actions` (див. [Пересилання сповіщень](#notification-forwarding) нижче)
@ -218,34 +211,32 @@ Tailnet (необов’язково): якщо обидва пристрої в
- `sms.search`
- `motion.activity`, `motion.pedometer`
## Точки входу Assistant
## Точки входу помічника
Android підтримує запуск OpenClaw із системного тригера Assistant (Google
Android підтримує запуск OpenClaw із системного тригера помічника (Google
Assistant). Якщо це налаштовано, утримання кнопки home або фраза "Hey Google, ask
OpenClaw..." відкриває app і передає промпт у поле введення чату.
OpenClaw..." відкриває застосунок і передає запит у поле введення чату.
Для цього використовуються метадані Android **App Actions**, оголошені в маніфесті app. Жодної
додаткової конфігурації на боці gateway не потрібно — intent Assistant повністю
обробляється Android app і пересилається як звичайне повідомлення чату.
Для цього використовуються метадані Android **App Actions**, оголошені в маніфесті застосунку. Додаткове налаштування на боці gateway не потрібне -- намір помічника повністю обробляється застосунком Android і пересилається як звичайне повідомлення чату.
<Note>
Доступність App Actions залежить від пристрою, версії Google Play Services
і від того, чи встановив користувач OpenClaw як app Assistant за замовчуванням.
і від того, чи встановив користувач OpenClaw як типовий застосунок-помічник.
</Note>
## Пересилання сповіщень
Android може пересилати сповіщення пристрою до gateway як події. Кілька елементів керування дають змогу обмежити, які сповіщення пересилаються і коли.
Android може пересилати сповіщення пристрою до gateway як події. Кілька елементів керування дають змогу обмежити, які саме сповіщення пересилаються і коли.
| Key | Type | Опис |
| -------------------------------- | -------------- | ------------------------------------------------------------------------------------------------- |
| `notifications.allowPackages` | string[] | Пересилати лише сповіщення від цих назв пакетів. Якщо задано, усі інші пакети ігноруються. |
| `notifications.denyPackages` | string[] | Ніколи не пересилати сповіщення від цих назв пакетів. Застосовується після `allowPackages`. |
| `notifications.quietHours.start` | string (HH:mm) | Початок вікна тихих годин (локальний час пристрою). Сповіщення пригнічуються в це вікно. |
| `notifications.quietHours.end` | string (HH:mm) | Кінець вікна тихих годин. |
| `notifications.rateLimit` | number | Максимум пересланих сповіщень на пакет за хвилину. Надлишкові сповіщення відкидаються. |
| Key | Type | Description |
| -------------------------------- | -------------- | ---------------------------------------------------------------------------------------------------- |
| `notifications.allowPackages` | string[] | Пересилати лише сповіщення від цих назв пакетів. Якщо задано, усі інші пакети ігноруються. |
| `notifications.denyPackages` | string[] | Ніколи не пересилати сповіщення від цих назв пакетів. Застосовується після `allowPackages`. |
| `notifications.quietHours.start` | string (HH:mm) | Початок вікна тихих годин (локальний час пристрою). Сповіщення пригнічуються протягом цього вікна. |
| `notifications.quietHours.end` | string (HH:mm) | Кінець вікна тихих годин. |
| `notifications.rateLimit` | number | Максимальна кількість пересланих сповіщень на пакет за хвилину. Надлишкові сповіщення відкидаються. |
Засіб вибору сповіщень також використовує безпечнішу поведінку для подій пересланих сповіщень, запобігаючи випадковому пересиланню чутливих системних сповіщень.
Пікер сповіщень також використовує безпечнішу поведінку для подій пересланих сповіщень, запобігаючи випадковому пересиланню чутливих системних сповіщень.
Приклад конфігурації:
@ -264,11 +255,11 @@ Android може пересилати сповіщення пристрою до
```
<Note>
Пересилання сповіщень потребує дозволу Android Notification Listener. App запитує його під час налаштування.
Для пересилання сповіщень потрібен дозвіл Android Notification Listener. Під час налаштування застосунок запропонує надати його.
</Note>
## Пов’язане
- [iOS app](/uk/platforms/ios)
- [Nodes](/uk/nodes)
- [Застосунок iOS](/uk/platforms/ios)
- [Node](/uk/nodes)
- [Усунення несправностей Android Node](/uk/nodes/troubleshooting)

View File

@ -1,95 +1,96 @@
---
read_when:
- Ви налагоджуєте відхилення запитів постачальника, пов’язані з формою транскрипту
- Ви змінюєте логіку санітизації транскриптів або виправлення викликів інструментів
- Ви досліджуєте невідповідності ідентифікаторів викликів інструментів між постачальниками
summary: 'Довідка: правила санітизації та виправлення транскриптів, специфічні для постачальника'
- Ви налагоджуєте відхилення запитів провайдера, пов’язані з формою транскрипту
- Ви змінюєте санітизацію транскрипту або логіку відновлення викликів інструментів
- Ви досліджуєте невідповідності ідентифікаторів викликів інструментів між провайдерами
summary: 'Довідка: правила санітизації та відновлення транскриптів, специфічні для провайдера'
title: Гігієна транскриптів
x-i18n:
generated_at: "2026-04-25T19:09:04Z"
generated_at: "2026-04-25T19:17:40Z"
model: gpt-5.4
provider: openai
source_hash: 784ef61cd4298d4095285b94bf45a97df700441a19d6020df12d1f5c90ba0ba1
source_hash: e380be2b011afca5fedf89579e702c6d221d42e777c23bd766c8df07ff05ed18
source_path: reference/transcript-hygiene.md
workflow: 15
---
Цей документ описує **виправлення, специфічні для постачальника**, які застосовуються до транскриптів перед запуском
(побудовою контексту моделі). Більшість із них — це коригування **в пам’яті**, що використовуються для задоволення
суворих вимог постачальника. Окремий прохід виправлення файлу сесії також може переписувати
збережений JSONL до завантаження сесії — або видаляючи некоректні рядки JSONL, або
виправляючи збережені ходи, які є синтаксично коректними, але, як відомо, відхиляються
постачальником під час відтворення. Коли виконується виправлення, поруч із файлом сесії
зберігається резервна копія оригінального файлу.
Цей документ описує **специфічні для провайдера виправлення**, що застосовуються до транскриптів перед запуском
(побудовою контексту моделі). Більшість із них — це **в пам’яті** виконувані коригування, що використовуються для дотримання
суворих вимог провайдера. Окремий прохід відновлення файла сесії також може переписувати
збережений JSONL до завантаження сесії — або шляхом відкидання некоректних рядків JSONL, або
шляхом відновлення збережених ходів, які є синтаксично коректними, але, як відомо, відхиляються
провайдером під час повторного відтворення. Коли відновлення виконується, оригінальний файл
зберігається в резервній копії поруч із файлом сесії.
Охоплюється таке:
Обсяг охоплює:
- Контекст підказки лише для часу виконання, який не потрапляє у видимі користувачу ходи транскрипту
- Санітизація ідентифікаторів викликів інструментів
- Валідація вхідних даних викликів інструментів
- Виправлення парування результатів інструментів
- Валідація / упорядкування ходів
- Контекст промпту лише для виконання, який не потрапляє до видимих користувачеві ходів транскрипту
- Санітизацію ідентифікаторів викликів інструментів
- Валідацію вхідних даних викликів інструментів
- Відновлення парування результатів інструментів
- Валідацію / упорядкування ходів
- Очищення сигнатур думок
- Санітизація корисного навантаження зображень
- Маркування походження користувацького вводу (для підказок, маршрутизованих між сесіями)
- Виправлення порожніх ходів помилок асистента для відтворення Bedrock Converse
- Очищення сигнатур мислення
- Санітизацію корисного навантаження зображень
- Позначення походження користувацького вводу (для промптів, маршрутизованих між сесіями)
- Відновлення порожніх ходів помилок асистента для повторного відтворення Bedrock Converse
Якщо вам потрібні подробиці про зберігання транскриптів, див. :
Якщо вам потрібні деталі про зберігання транскриптів, див.:
- [Поглиблений розбір керування сесіями](/uk/reference/session-management-compaction)
---
## Глобальне правило: контекст часу виконання — це не користувацький транскрипт
## Глобальне правило: контекст виконання не є користувацьким транскриптом
Контекст часу виконання / системний контекст може бути доданий до підказки моделі для ходу, але це
не вміст, створений кінцевим користувачем. OpenClaw зберігає окреме тіло підказки, орієнтоване
на транскрипт, для відповідей Gateway, follow-up-повідомлень у черзі, ACP, CLI та вбудованих
запусків Pi. Збережені видимі користувацькі ходи використовують саме це тіло
транскрипту замість підказки, збагаченої контекстом часу виконання.
Контекст виконання/системний контекст може додаватися до промпту моделі для ходу, але це
не контент, створений кінцевим користувачем. OpenClaw зберігає окреме тіло
промпту, орієнтоване на транскрипт, для відповідей Gateway, поставлених у чергу подальших дій,
ACP, CLI та вбудованих запусків Pi. Видимі збережені користувацькі ходи використовують
це тіло транскрипту замість промпту, збагаченого контекстом виконання.
Для застарілих сесій, які вже зберегли обгортки часу виконання, поверхні історії
Gateway застосовують проєкцію відображення перед поверненням повідомлень у WebChat,
TUI, REST або SSE-клієнти.
Для застарілих сесій, які вже зберегли обгортки виконання, поверхні історії Gateway
застосовують проєкцію відображення перед поверненням повідомлень до WebChat,
TUI, REST або SSE-клієнтів.
---
## Де це виконується
Уся гігієна транскриптів централізована у вбудованому ранері:
Уся гігієна транскриптів централізована у вбудованому раннері:
- Вибір політики: `src/agents/transcript-policy.ts`
- Застосування санітизації / виправлення: `sanitizeSessionHistory` у `src/agents/pi-embedded-runner/replay-history.ts`
- Застосування санітизації/відновлення: `sanitizeSessionHistory` у `src/agents/pi-embedded-runner/replay-history.ts`
Політика використовує `provider`, `modelApi` і `modelId`, щоб визначити, що застосовувати.
Окремо від гігієни транскриптів, файли сесій виправляються (за потреби) перед завантаженням:
Окремо від гігієни транскриптів, файли сесій відновлюються (за потреби) до завантаження:
- `repairSessionFileIfNeeded` у `src/agents/session-file-repair.ts`
- Викликається з `run/attempt.ts` і `compact.ts` (вбудований ранер)
- Викликається з `run/attempt.ts` і `compact.ts` (вбудований раннер)
---
## Глобальне правило: санітизація зображень
Корисне навантаження зображень завжди санітизується, щоб запобігти відхиленню на боці постачальника через
обмеження розміру (зменшення масштабу / повторне стиснення надто великих base64-зображень).
Корисне навантаження зображень завжди санітизується, щоб запобігти відхиленню з боку провайдера через
обмеження розміру (зменшення масштабу/повторне стиснення надто великих base64-зображень).
Це також допомагає контролювати тиск на токени, спричинений зображеннями, для моделей із підтримкою зору.
Менші максимальні розміри зазвичай зменшують використання токенів; більші розміри зберігають деталі.
Це також допомагає контролювати тиск на токени, спричинений зображеннями, для моделей із підтримкою бачення.
Менші максимальні розміри зазвичай зменшують використання токенів; більші розміри зберігають деталізацію.
Реалізація:
- `sanitizeSessionMessagesImages` у `src/agents/pi-embedded-helpers/images.ts`
- `sanitizeContentBlocksImages` у `src/agents/tool-images.ts`
- Максимальна сторона зображення налаштовується через `agents.defaults.imageMaxDimensionPx` (типово: `1200`).
- Максимальний бік зображення налаштовується через `agents.defaults.imageMaxDimensionPx` (типово: `1200`).
---
## Глобальне правило: некоректні виклики інструментів
Блоки викликів інструментів асистента, у яких відсутні і `input`, і `arguments`, відкидаються
до побудови контексту моделі. Це запобігає відхиленням постачальника через частково
до побудови контексту моделі. Це запобігає відхиленням з боку провайдера через частково
збережені виклики інструментів (наприклад, після помилки обмеження швидкості).
Реалізація:
@ -99,69 +100,74 @@ TUI, REST або SSE-клієнти.
---
## Глобальне правило: походження міжсесійного вводу
## Глобальне правило: походження вводу між сесіями
Коли агент надсилає підказку в іншу сесію через `sessions_send` (зокрема
на кроках agent-to-agent reply / announce), OpenClaw зберігає створений користувацький хід із:
Коли агент надсилає промпт до іншої сесії через `sessions_send` (включно з
кроками відповіді/оголошення від агента до агента), OpenClaw зберігає створений користувацький хід із:
- `message.provenance.kind = "inter_session"`
Ці метадані записуються під час додавання до транскрипту і не змінюють роль
(`role: "user"` зберігається для сумісності з постачальником). Читачі транскриптів можуть використовувати
це, щоб не трактувати маршрутизовані внутрішні підказки як інструкції, створені кінцевим користувачем.
(`role: "user"` залишається для сумісності з провайдерами). Читачі транскрипту можуть використовувати
це, щоб не трактувати маршрутизовані внутрішні промпти як інструкції, створені кінцевим користувачем.
Під час перебудови контексту OpenClaw також додає на початок таких користувацьких ходів короткий
маркер `[Inter-session message]` у пам’яті, щоб модель могла відрізняти їх від
Під час перебудови контексту OpenClaw також додає на початку короткий маркер `[Inter-session message]`
до таких користувацьких ходів у пам’яті, щоб модель могла відрізняти їх від
зовнішніх інструкцій кінцевого користувача.
---
## Матриця постачальників (поточна поведінка)
## Матриця провайдерів (поточна поведінка)
**OpenAI / OpenAI Codex**
- Лише санітизація зображень.
- Відкидаються осиротілі сигнатури міркування (окремі елементи міркування без наступного блоку вмісту) для транскриптів OpenAI Responses/Codex, а також відкидається придатне до відтворення міркування OpenAI після перемикання маршруту моделі.
- Відкидання осиротілих сигнатур міркувань (окремих елементів reasoning без наступного блока контенту) для транскриптів OpenAI Responses/Codex, а також відкидання відтворюваних міркувань OpenAI після перемикання маршруту моделі.
- Без санітизації ідентифікаторів викликів інструментів.
- Виправлення парування результатів інструментів може переміщувати реальні відповідні виводи та синтезувати виводи `aborted` у стилі Codex для відсутніх викликів інструментів.
- Відновлення парування результатів інструментів може переміщувати реальні відповідні виводи та синтезувати виводи `aborted` у стилі Codex для відсутніх викликів інструментів.
- Без валідації чи перевпорядкування ходів.
- Відсутні виводи інструментів сімейства OpenAI Responses синтезуються як `aborted`, щоб відповідати нормалізації відтворення Codex.
- Відсутні виводи інструментів сімейства OpenAI Responses синтезуються як `aborted`, щоб відповідати нормалізації повторного відтворення Codex.
- Без видалення сигнатур думок.
**Google (Generative AI / Gemini CLI / Antigravity)**
- Санітизація ідентифікаторів викликів інструментів: суворо буквено-цифрові.
- Виправлення парування результатів інструментів і синтетичні результати інструментів.
- Санітизація ідентифікаторів викликів інструментів: суворо алфавітно-цифрові.
- Відновлення парування результатів інструментів і синтетичні результати інструментів.
- Валідація ходів (чергування ходів у стилі Gemini).
- Виправлення порядку ходів Google (додає на початок крихітний bootstrap-користувацький хід, якщо історія починається з асистента).
- Antigravity Claude: нормалізація сигнатур thinking; відкидання блоків thinking без сигнатури.
- Виправлення порядку ходів Google (додавання малого початкового ходу користувача, якщо історія починається з асистента).
- Antigravity Claude: нормалізація сигнатур мислення; відкидання блоків мислення без сигнатури.
**Anthropic / Minimax (сумісні з Anthropic)**
- Виправлення парування результатів інструментів і синтетичні результати інструментів.
- Відновлення парування результатів інструментів і синтетичні результати інструментів.
- Валідація ходів (об’єднання послідовних користувацьких ходів для дотримання суворого чергування).
- Старіші ходи асистента лише з thinking, які потрібно видалити, замінюються
непорожнім текстом omitted-reasoning, щоб адаптери постачальника не відкидали
хід під час відтворення.
- Блоки thinking з відсутніми, порожніми або пробільними сигнатурами повторного відтворення видаляються
перед перетворенням для провайдера. Якщо через це хід асистента стає порожнім, OpenClaw зберігає
форму ходу за допомогою непорожнього тексту пропущеного міркування.
- Старіші ходи асистента, що містять лише thinking і мають бути видалені, замінюються
непорожнім текстом пропущеного міркування, щоб адаптери провайдера не відкинули хід
під час повторного відтворення.
**Amazon Bedrock (Converse API)**
- Порожні ходи помилок потоку асистента виправляються до непорожнього резервного текстового блоку
перед відтворенням. Bedrock Converse відхиляє повідомлення асистента з `content: []`, тому
збережені ходи асистента з `stopReason: "error"` і порожнім вмістом також
виправляються на диску перед завантаженням.
- Старіші ходи асистента лише з thinking, які потрібно видалити, замінюються
непорожнім текстом omitted-reasoning, щоб відтворення Converse зберігало сувору форму ходів.
- Відтворення фільтрує OpenClaw delivery-mirror і ходи асистента, ін’єктовані Gateway.
- Порожні ходи помилок потоку асистента відновлюються до непорожнього резервного текстового блока
перед повторним відтворенням. Bedrock Converse відхиляє повідомлення асистента з `content: []`, тому
збережені ходи асистента з `stopReason: "error"` і порожнім контентом також відновлюються на диску до завантаження.
- Блоки thinking Claude з відсутніми, порожніми або пробільними сигнатурами повторного відтворення
видаляються перед повторним відтворенням Converse. Якщо через це хід асистента стає порожнім, OpenClaw
зберігає форму ходу за допомогою непорожнього тексту пропущеного міркування.
- Старіші ходи асистента, що містять лише thinking і мають бути видалені, замінюються
непорожнім текстом пропущеного міркування, щоб повторне відтворення Converse зберігало сувору форму ходу.
- Повторне відтворення фільтрує дзеркальні ходи доставки OpenClaw та ходи асистента, вставлені Gateway.
- Санітизація зображень застосовується через глобальне правило.
**Mistral (зокрема визначення за `model-id`)**
**Mistral (включно з виявленням за `model-id`)**
- Санітизація ідентифікаторів викликів інструментів: strict9 (буквено-цифрові, довжина 9).
- Санітизація ідентифікаторів викликів інструментів: strict9 (алфавітно-цифрові, довжина 9).
**OpenRouter Gemini**
- Очищення сигнатур думок: видалення значень `thought_signature`, що не є base64 (base64 зберігаються).
- Очищення сигнатур думок: видалення значень `thought_signature`, які не є base64 (base64 зберігаються).
**Усе інше**
@ -171,20 +177,20 @@ TUI, REST або SSE-клієнти.
## Історична поведінка (до 2026.1.22)
До випуску 2026.1.22 OpenClaw застосовував кілька шарів гігієни транскриптів:
До релізу 2026.1.22 OpenClaw застосовував кілька шарів гігієни транскриптів:
- **Розширення transcript-sanitize** запускалося під час кожної побудови контексту і могло:
- Виправляти парування використання інструментів / результатів.
- Санітизувати ідентифікатори викликів інструментів (зокрема в несуворому режимі, який зберігав `_` / `-`).
- Ранер також виконував санітизацію, специфічну для постачальника, що дублювало роботу.
- Додаткові мутації відбувалися поза політикою постачальника, зокрема:
- Видалення тегів `<final>` із тексту асистента перед збереженням.
- Розширення **transcript-sanitize** виконувалося під час кожної побудови контексту і могло:
- Відновлювати парування використання/результатів інструментів.
- Санітизувати ідентифікатори викликів інструментів (включно з несуворим режимом, який зберігав `_`/`-`).
- Раннер також виконував специфічну для провайдера санітизацію, що дублювало роботу.
- Додаткові мутації відбувалися поза політикою провайдера, зокрема:
- Видалення тегів `<final>` з тексту асистента перед збереженням.
- Відкидання порожніх ходів помилок асистента.
- Обрізання вмісту асистента після викликів інструментів.
- Обрізання контенту асистента після викликів інструментів.
Ця складність спричиняла регресії між постачальниками (особливо для парування
`call_id|fc_id` в `openai-responses`). Очищення у 2026.1.22 прибрало розширення, централізувало
логіку в ранері та зробило OpenAI **без змін** за винятком санітизації зображень.
Ця складність спричиняла міжпровайдерні регресії (зокрема, для парування
`openai-responses` `call_id|fc_id`). Очищення 2026.1.22 прибрало розширення, централізувало
логіку в раннері й зробило OpenAI режимом **без змін** поза санітизацією зображень.
## Пов’язане