diff --git a/docs/uk/concepts/session-tool.md b/docs/uk/concepts/session-tool.md index 547241689..aa8641cbd 100644 --- a/docs/uk/concepts/session-tool.md +++ b/docs/uk/concepts/session-tool.md @@ -1,40 +1,40 @@ --- read_when: - Ви хочете зрозуміти, які інструменти сесії має агент - - Ви хочете налаштувати міжсесійний доступ або запуск субагентів - - Ви хочете перевірити статус або керувати запущеними субагентами -summary: Інструменти агента для міжсесійного статусу, відновлення контексту, обміну повідомленнями та оркестрації субагентів -title: Інструменти сесії + - Ви хочете налаштувати міжсесійний доступ або створення під-агентів + - Ви хочете перевірити статус або керувати створеними підагентами +summary: Інструменти агентів для міжсеансового статусу, пригадування, обміну повідомленнями та оркестрації субагентів +title: Інструменти сеансу x-i18n: - generated_at: "2026-04-27T14:18:19Z" - model: gpt-5.4 + generated_at: "2026-04-28T19:38:58Z" + model: gpt-5.5 provider: openai - source_hash: 19c42436ed7123cee35f397d672db1c2e0963cd1299e36d6fff41a56b880149b + source_hash: 0464116d42e271da12cbe90529e06e9f51605981be85b54bb5850ee9b8fb7824 source_path: concepts/session-tool.md - workflow: 15 + workflow: 16 --- -OpenClaw надає агентам інструменти для роботи між сесіями, перевірки статусу та -оркестрації субагентів. +OpenClaw надає агентам інструменти для роботи між сеансами, перевірки статусу та +оркестрування субагентів. ## Доступні інструменти -| Інструмент | Що він робить | -| ------------------ | --------------------------------------------------------------------------- | -| `sessions_list` | Показує список сесій з необов’язковими фільтрами (тип, мітка, агент, давність, попередній перегляд) | -| `sessions_history` | Читає стенограму конкретної сесії | -| `sessions_send` | Надсилає повідомлення до іншої сесії та за потреби очікує | -| `sessions_spawn` | Запускає ізольовану сесію субагента для фонової роботи | +| Інструмент | Що він робить | +| ----------------- | ---------------------------------------------------------------------------- | +| `sessions_list` | Перелічує сеанси з необов'язковими фільтрами (тип, мітка, агент, давність, попередній перегляд) | +| `sessions_history` | Читає транскрипт певного сеансу | +| `sessions_send` | Надсилає повідомлення до іншого сеансу та, за потреби, очікує | +| `sessions_spawn` | Запускає ізольований сеанс субагента для фонової роботи | | `sessions_yield` | Завершує поточний хід і очікує подальших результатів субагента | -| `subagents` | Показує список, керує або завершує запущених субагентів для цієї сесії | -| `session_status` | Показує картку у стилі `/status` і за потреби задає перевизначення моделі для сесії | +| `subagents` | Перелічує, спрямовує або зупиняє створених субагентів для цього сеансу | +| `session_status` | Показує картку у стилі `/status` і, за потреби, встановлює перевизначення моделі для окремого сеансу | -Ці інструменти, як і раніше, підпорядковуються активному профілю інструментів і -політиці allow/deny. `tools.profile: "coding"` включає повний набір -оркестрації сесій, зокрема `sessions_spawn`, `sessions_yield` і `subagents`. -`tools.profile: "messaging"` включає інструменти міжсесійного обміну -повідомленнями (`sessions_list`, `sessions_history`, `sessions_send`, `session_status`), але -не включає запуск субагентів. Щоб зберегти профіль messaging і водночас +На ці інструменти все ще поширюються активний профіль інструментів і політика +дозволу/заборони. `tools.profile: "coding"` включає повний набір оркестрування +сеансів, зокрема `sessions_spawn`, `sessions_yield` і `subagents`. +`tools.profile: "messaging"` включає інструменти обміну повідомленнями між +сеансами (`sessions_list`, `sessions_history`, `sessions_send`, `session_status`), але +не включає створення субагентів. Щоб зберегти профіль обміну повідомленнями й усе одно дозволити нативне делегування, додайте: ```json5 @@ -46,136 +46,142 @@ OpenClaw надає агентам інструменти для роботи м } ``` -Політики групи, провайдера, пісочниці та окремого агента все ще можуть -прибрати ці інструменти після етапу профілю. Використовуйте `/tools` із -відповідної сесії, щоб перевірити фактичний список інструментів. +Політики групи, провайдера, пісочниці та окремого агента все ще можуть вилучати ці інструменти +після етапу профілю. Використайте `/tools` з відповідного сеансу, щоб перевірити +ефективний список інструментів. -## Перелік і читання сесій +## Переліки та читання сеансів -`sessions_list` повертає сесії з їхнім ключем, agentId, типом, каналом, моделлю, -кількістю токенів і часовими позначками. Можна фільтрувати за типом (`main`, `group`, `cron`, `hook`, -`node`), точною `label`, точним `agentId`, текстом пошуку або давністю -(`activeMinutes`). Якщо вам потрібне сортування у стилі поштової скриньки, інструмент також -може запитувати похідний заголовок в межах видимості, фрагмент попереднього перегляду -останнього повідомлення або обмежену кількість недавніх повідомлень у кожному рядку. -Похідні заголовки й попередні перегляди створюються лише для тих сесій, -які викликаючий агент уже може бачити згідно з налаштованою політикою -видимості інструментів сесії, тож непов’язані сесії залишаються прихованими. +`sessions_list` повертає сеанси з їхнім ключем, agentId, типом, каналом, моделлю, +кількістю токенів і часовими позначками. Фільтруйте за типом (`main`, `group`, `cron`, `hook`, +`node`), точним `label`, точним `agentId`, пошуковим текстом або давністю +(`activeMinutes`). Коли потрібне сортування у стилі поштової скриньки, він також може запитувати +похідний заголовок у межах видимості, фрагмент попереднього перегляду останнього повідомлення або обмежені +нещодавні повідомлення в кожному рядку. Похідні заголовки та попередні перегляди створюються лише для +сеансів, які викликач уже може бачити відповідно до налаштованої політики видимості +інструментів сеансу, тому непов'язані сеанси залишаються прихованими. -`sessions_history` отримує стенограму розмови для конкретної сесії. -За замовчуванням результати інструментів виключаються — передайте `includeTools: true`, щоб їх побачити. -Повернуте представлення навмисно обмежене й відфільтроване з міркувань безпеки: +`sessions_history` отримує транскрипт розмови для певного сеансу. +За замовчуванням результати інструментів виключено -- передайте `includeTools: true`, щоб побачити їх. +Повернуте подання навмисно обмежене й відфільтроване для безпеки: -- текст помічника нормалізується перед відновленням: - - теги thinking видаляються - - блоки каркаса `` / `` видаляються - - текстові XML-блоки викликів інструментів, такі як `...`, +- текст асистента нормалізується перед пригадуванням: + - теги міркувань вилучаються + - службові блоки `` / `` вилучаються + - текстові XML-блоки payload викликів інструментів, як-от `...`, `...`, `...` і - `...`, видаляються, включно з - обрізаними payload, які так і не закриваються коректно - - спрощений каркас викликів/результатів інструментів, такий як `[Tool Call: ...]`, - `[Tool Result ...]` і `[Historical context ...]`, видаляється - - витоки керівних токенів моделі, такі як `<|assistant|>`, інші ASCII - токени `<|...|>` і повноширинні варіанти `<|...|>`, видаляються - - некоректний XML викликів інструментів MiniMax, такий як `` / - ``, видаляється + `...`, вилучаються, зокрема обрізані + payload, які ніколи коректно не закриваються + - знижені службові блоки викликів/результатів інструментів, як-от `[Tool Call: ...]`, + `[Tool Result ...]` і `[Historical context ...]`, вилучаються + - витіклі токени керування моделлю, як-от `<|assistant|>`, інші ASCII + токени `<|...|>` і повноширинні варіанти `<|...|>`, вилучаються + - некоректний XML виклику інструмента MiniMax, як-от `` / + ``, вилучається - текст, схожий на облікові дані/токени, редагується перед поверненням - довгі текстові блоки обрізаються -- дуже великі історії можуть відкидати старіші рядки або замінювати - надто великий рядок на `[sessions_history omitted: message too large]` -- інструмент повідомляє підсумкові прапорці, такі як `truncated`, `droppedMessages`, +- дуже великі історії можуть відкидати старіші рядки або замінювати завеликий рядок на + `[sessions_history omitted: message too large]` +- інструмент повідомляє прапорці підсумку, як-от `truncated`, `droppedMessages`, `contentTruncated`, `contentRedacted` і `bytes` -Обидва інструменти приймають або **ключ сесії** (наприклад, `"main"`), або **ID сесії** +Обидва інструменти приймають або **ключ сеансу** (наприклад, `"main"`), або **ID сеансу** з попереднього виклику списку. -Якщо вам потрібна точна стенограма побайтно, перевіряйте файл стенограми на -диску, а не використовуйте `sessions_history` як необроблений дамп. +Якщо потрібен точний побайтовий транскрипт, перевірте файл транскрипту на +диску, а не розглядайте `sessions_history` як сирий дамп. -## Надсилання міжсесійних повідомлень +## Надсилання повідомлень між сеансами -`sessions_send` доставляє повідомлення до іншої сесії та за потреби очікує -на відповідь: +`sessions_send` доставляє повідомлення до іншого сеансу та, за потреби, очікує +відповіді: -- **Fire-and-forget:** задайте `timeoutSeconds: 0`, щоб поставити в чергу й - одразу повернутися. -- **Очікування відповіді:** задайте тайм-аут і отримайте відповідь безпосередньо. +- **Надіслати й не чекати:** встановіть `timeoutSeconds: 0`, щоб поставити в чергу й повернутися + негайно. +- **Очікувати відповіді:** встановіть час очікування й отримайте відповідь inline. -Після відповіді цільової сесії OpenClaw може запустити **цикл зворотних відповідей**, -у якому агенти чергують повідомлення (до 5 ходів). Цільовий агент може відповісти -`REPLY_SKIP`, щоб зупинити це раніше. +Повідомлення та подальші відповіді A2A позначаються як міжсеансові дані в +отримувальному prompt (`[Inter-session message ... isUser=false]`) і в походженні +транскрипту. Отримувальний агент має розглядати їх як дані, маршрутизовані інструментом, а не як +пряму інструкцію, написану кінцевим користувачем. -## Допоміжні інструменти статусу й оркестрації +Після відповіді цілі OpenClaw може запустити **цикл зворотної відповіді**, де +агенти чергують повідомлення (до 5 ходів). Цільовий агент може відповісти +`REPLY_SKIP`, щоб зупинитися раніше. -`session_status` — це полегшений еквівалент `/status` для поточної -або іншої видимої сесії. Він повідомляє про використання, час, стан моделі/середовища виконання -та пов’язаний контекст фонового завдання, якщо він є. Подібно до `/status`, він може -дозаповнювати розріджені лічильники токенів/кешу з останнього запису використання у стенограмі, а -`model=default` очищає перевизначення для сесії. Використовуйте `sessionKey="current"` для -поточної сесії викликача; видимі клієнтські мітки, такі як `openclaw-tui`, не є ключами сесії. +## Помічники статусу та оркестрування -`sessions_yield` навмисно завершує поточний хід, щоб наступним повідомленням -стала подія продовження, на яку ви чекаєте. Використовуйте це після запуску субагентів, коли -хочете, щоб результати завершення прийшли наступним повідомленням, а не через цикли опитування. +`session_status` — це легкий інструмент, еквівалентний `/status`, для поточного +або іншого видимого сеансу. Він повідомляє використання, час, стан моделі/середовища виконання та +контекст пов'язаного фонового завдання, якщо він є. Як і `/status`, він може дозаповнювати +розріджені лічильники токенів/кешу з останнього запису використання в транскрипті, а +`model=default` очищає перевизначення для окремого сеансу. Використовуйте `sessionKey="current"` для +поточного сеансу викликача; видимі клієнтські мітки, як-от `openclaw-tui`, не є +ключами сеансів. -`subagents` — це допоміжний інструмент площини керування для вже запущених субагентів +`sessions_yield` навмисно завершує поточний хід, щоб наступне повідомлення могло бути +подальшою подією, на яку ви очікуєте. Використовуйте його після створення субагентів, коли +хочете, щоб результати завершення надійшли як наступне повідомлення, замість побудови +циклів опитування. + +`subagents` — це помічник площини керування для вже створених субагентів OpenClaw. Він підтримує: - `action: "list"` для перевірки активних/нещодавніх запусків -- `action: "steer"` для надсилання додаткових вказівок запущеному дочірньому агенту -- `action: "kill"` для зупинки одного дочірнього агента або `all` +- `action: "steer"` для надсилання подальших вказівок запущеній дочірній сутності +- `action: "kill"` для зупинення однієї дочірньої сутності або `all` -## Запуск субагентів +## Створення субагентів -`sessions_spawn` за замовчуванням створює ізольовану сесію для фонового завдання. -Він завжди неблокувальний — одразу повертає `runId` і +`sessions_spawn` за замовчуванням створює ізольований сеанс для фонового завдання. +Він завжди неблокувальний -- одразу повертає `runId` і `childSessionKey`. Ключові параметри: -- `runtime: "subagent"` (типово) або `"acp"` для зовнішніх агентів harness. -- перевизначення `model` і `thinking` для дочірньої сесії. -- `thread: true`, щоб прив’язати запуск до потоку чату (Discord, Slack тощо). -- `sandbox: "require"`, щоб примусово використовувати пісочницю для дочірнього агента. -- `context: "fork"` для нативних субагентів, коли дочірньому агенту потрібна стенограма - поточного запитувача; пропустіть цей параметр або використайте `context: "isolated"` для чистої дочірньої сесії. +- `runtime: "subagent"` (за замовчуванням) або `"acp"` для зовнішніх агентів harness. +- Перевизначення `model` і `thinking` для дочірнього сеансу. +- `thread: true` для прив'язування spawn до потоку чату (Discord, Slack тощо). +- `sandbox: "require"` для примусового застосування пісочниці до дочірньої сутності. +- `context: "fork"` для нативних субагентів, коли дочірній сутності потрібен поточний + транскрипт запитувача; опустіть його або використайте `context: "isolated"` для чистої дочірньої сутності. -Листові субагенти за замовчуванням не отримують інструментів сесії. Якщо -`maxSpawnDepth >= 2`, то субагенти-оркестратори рівня глибини 1 додатково отримують +Типові кінцеві субагенти не отримують інструменти сеансу. Коли +`maxSpawnDepth >= 2`, субагенти-оркестратори глибини 1 додатково отримують `sessions_spawn`, `subagents`, `sessions_list` і `sessions_history`, щоб вони -могли керувати власними дочірніми агентами. Листові запуски все одно не отримують рекурсивних -інструментів оркестрації. +могли керувати власними дочірніми сутностями. Кінцеві запуски все одно не отримують рекурсивні +інструменти оркестрування. -Після завершення крок сповіщення публікує результат у канал запитувача. -Доставка завершення зберігає прив’язану маршрутизацію потоку/теми, коли це можливо, а якщо -джерело завершення ідентифікує лише канал, OpenClaw усе одно може повторно використати -збережений маршрут сесії запитувача (`lastChannel` / `lastTo`) для прямої +Після завершення крок оголошення публікує результат у каналі запитувача. +Доставка завершення зберігає прив'язану маршрутизацію потоку/теми, коли вона доступна, і якщо +джерело завершення ідентифікує лише канал, OpenClaw все одно може повторно використати +збережений маршрут сеансу запитувача (`lastChannel` / `lastTo`) для прямої доставки. -Для поведінки, специфічної для ACP, див. [ACP Agents](/uk/tools/acp-agents). +Для поведінки, специфічної для ACP, див. [Агенти ACP](/uk/tools/acp-agents). ## Видимість -Інструменти сесії мають обмежену область видимості, щоб обмежити те, що агент може бачити: +Інструменти сеансу обмежені за областю, щоб контролювати, що агент може бачити: -| Рівень | Область видимості | +| Рівень | Область | | ------- | ---------------------------------------- | -| `self` | Лише поточна сесія | -| `tree` | Поточна сесія + запущені субагенти | -| `agent` | Усі сесії для цього агента | -| `all` | Усі сесії (між агентами, якщо налаштовано) | +| `self` | Лише поточний сеанс | +| `tree` | Поточний сеанс + створені субагенти | +| `agent` | Усі сеанси для цього агента | +| `all` | Усі сеанси (між агентами, якщо налаштовано) | -За замовчуванням використовується `tree`. Сесії в пісочниці примусово обмежуються до `tree` -незалежно від конфігурації. +За замовчуванням використовується `tree`. Сеанси в пісочниці обмежуються до `tree` незалежно від +конфігурації. ## Додаткові матеріали -- [Session Management](/uk/concepts/session) -- маршрутизація, життєвий цикл, обслуговування -- [ACP Agents](/uk/tools/acp-agents) -- запуск зовнішніх harness-агентів -- [Multi-agent](/uk/concepts/multi-agent) -- багатoагентна архітектура -- [Gateway Configuration](/uk/gateway/configuration) -- параметри конфігурації інструментів сесії +- [Керування сеансами](/uk/concepts/session) -- маршрутизація, життєвий цикл, обслуговування +- [Агенти ACP](/uk/tools/acp-agents) -- створення зовнішніх harness +- [Мультиагентність](/uk/concepts/multi-agent) -- мультиагентна архітектура +- [Конфігурація Gateway](/uk/gateway/configuration) -- параметри конфігурації інструментів сеансу -## Пов’язані матеріали +## Пов'язане -- [Session management](/uk/concepts/session) -- [Session pruning](/uk/concepts/session-pruning) +- [Керування сеансами](/uk/concepts/session) +- [Обрізання сеансів](/uk/concepts/session-pruning) diff --git a/docs/uk/reference/transcript-hygiene.md b/docs/uk/reference/transcript-hygiene.md index 03fcf97a3..16b283d90 100644 --- a/docs/uk/reference/transcript-hygiene.md +++ b/docs/uk/reference/transcript-hygiene.md @@ -1,92 +1,93 @@ --- read_when: - - Ви налагоджуєте відхилення запитів постачальником, пов’язані з формою транскрипту - - Ви змінюєте логіку санітизації транскрипту або відновлення викликів інструментів - - Ви досліджуєте невідповідності ідентифікаторів викликів інструментів між постачальниками -summary: 'Довідник: правила санітизації та відновлення транскриптів, специфічні для постачальників' -title: Гігієна транскриптів + - Ви налагоджуєте відхилення запитів провайдером, пов’язані зі структурою транскрипту + - Ви змінюєте логіку санітизації транскрипту або виправлення викликів інструментів + - Ви досліджуєте невідповідності ідентифікаторів викликів інструментів між провайдерами +summary: 'Довідка: правила очищення та відновлення транскриптів, специфічні для провайдера' +title: Гігієна транскрипту x-i18n: - generated_at: "2026-04-27T23:14:22Z" - model: gpt-5.4 + generated_at: "2026-04-28T19:39:03Z" + model: gpt-5.5 provider: openai - source_hash: 32242fe22101e83906881fb66b89f2555cab8559f5f6f73308d94dec068c8088 + source_hash: 51459c719c6314b2980057d7e1e003e1598e8fe4a619c081aa25ce29200645a8 source_path: reference/transcript-hygiene.md - workflow: 15 + workflow: 16 --- -OpenClaw застосовує **специфічні для постачальників виправлення** до транскриптів перед запуском (під час побудови контексту моделі). Більшість із них — це коригування **в пам’яті**, які використовуються для дотримання суворих вимог постачальника. Окремий прохід відновлення файлу сеансу також може переписувати збережений JSONL перед завантаженням сеансу — або видаляючи пошкоджені рядки JSONL, або відновлюючи збережені ходи, які є синтаксично коректними, але, як відомо, відхиляються -постачальником під час повторного програвання. Коли відновлення відбувається, оригінальний файл резервно копіюється поруч -із файлом сеансу. +OpenClaw застосовує **специфічні для провайдера виправлення** до транскриптів перед запуском (під час побудови контексту моделі). Більшість із них — це коригування **в пам’яті**, які використовуються для задоволення суворих вимог провайдера. Окремий прохід ремонту файлу сеансу також може переписати збережений JSONL до завантаження сеансу: або відкинувши некоректні рядки JSONL, або виправивши збережені репліки, які синтаксично валідні, але відомо, що їх відхиляє +провайдер під час повторного відтворення. Коли відбувається ремонт, оригінальний файл резервно копіюється поруч із +файлом сеансу. -Обсяг включає: +Область охоплює: -- Контекст запиту лише для виконання, що не потрапляє в видимі користувачеві ходи транскрипту -- Санітизацію ідентифікаторів викликів інструментів -- Валідацію вхідних даних викликів інструментів -- Відновлення парування результатів інструментів -- Валідацію / упорядкування ходів -- Очищення сигнатур думок -- Очищення сигнатур thinking -- Санітизацію корисного навантаження зображень -- Тегування походження користувацького вводу (для промптів, маршрутизованих між сеансами) -- Відновлення порожніх ходів помилки асистента для повторного програвання Bedrock Converse +- Контекст prompt лише під час виконання, який не потрапляє в видимі користувачу репліки транскрипту +- Очищення ідентифікаторів викликів інструментів +- Перевірка вхідних даних викликів інструментів +- Ремонт зіставлення результатів інструментів +- Перевірка / упорядкування реплік +- Очищення підписів думок +- Очищення підписів мислення +- Очищення корисного навантаження зображень +- Позначення походження користувацького вводу (для prompt, маршрутизованих між сеансами) +- Ремонт порожніх помилкових реплік асистента для повторного відтворення Bedrock Converse -Якщо вам потрібні подробиці про зберігання транскриптів, див.: +Якщо вам потрібні деталі зберігання транскриптів, див.: -- [Поглиблений розбір керування сеансами](/uk/reference/session-management-compaction) +- [Поглиблений огляд керування сеансами](/uk/reference/session-management-compaction) --- -## Глобальне правило: контекст виконання — це не користувацький транскрипт +## Глобальне правило: контекст виконання не є користувацьким транскриптом -Контекст виконання/системний контекст може додаватися до промпту моделі для ходу, але це -не вміст, створений кінцевим користувачем. OpenClaw зберігає окреме -тіло промпту, орієнтоване на транскрипт, для відповідей Gateway, запланованих followup-повідомлень, ACP, CLI та вбудованих запусків Pi. Збережені видимі користувацькі ходи використовують це -тіло транскрипту замість промпту, збагаченого контекстом виконання. +Контекст виконання/системи може бути доданий до prompt моделі для репліки, але це +не контент, створений кінцевим користувачем. OpenClaw зберігає окреме тіло +prompt, орієнтоване на транскрипт, для відповідей Gateway, чергових подальших повідомлень, ACP, CLI та вбудованих запусків Pi. +Збережені видимі користувацькі репліки використовують це тіло транскрипту замість +збагаченого під час виконання prompt. -Для застарілих сеансів, які вже зберегли обгортки виконання, -поверхні історії Gateway застосовують проєкцію відображення перед поверненням повідомлень у WebChat, -TUI, REST або SSE-клієнтам. +Для застарілих сеансів, які вже зберегли обгортки виконання, поверхні історії Gateway +застосовують проєкцію відображення перед поверненням повідомлень клієнтам WebChat, +TUI, REST або SSE. --- ## Де це виконується -Уся гігієна транскриптів централізована у вбудованому ранері: +Уся гігієна транскриптів централізована у вбудованому runner: - Вибір політики: `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` (вбудований runner) --- -## Глобальне правило: санітизація зображень +## Глобальне правило: очищення зображень -Корисне навантаження зображень завжди санітизується, щоб запобігти відхиленню з боку постачальника через обмеження -розміру (зменшення роздільності/повторне стиснення завеликих 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`, відкидаються -перед побудовою контексту моделі. Це запобігає відхиленням з боку постачальника через частково -збережені виклики інструментів (наприклад, після помилки обмеження швидкості). +до побудови контексту моделі. Це запобігає відхиленням провайдером через частково +збережені виклики інструментів (наприклад, після збою через ліміт частоти). Реалізація: @@ -95,106 +96,110 @@ TUI, REST або SSE-клієнтам. --- -## Глобальне правило: походження вводу між сеансами +## Глобальне правило: походження міжсеансового вводу -Коли агент надсилає промпт в інший сеанс через `sessions_send` (зокрема -під час кроків відповіді/оголошення від агента до агента), OpenClaw зберігає створений користувацький хід із: +Коли агент надсилає prompt в інший сеанс через `sessions_send` (зокрема +кроки відповіді/оголошення між агентами), OpenClaw зберігає створену користувацьку репліку з: - `message.provenance.kind = "inter_session"` -Ці метадані записуються під час додавання до транскрипту й не змінюють роль -(`role: "user"` зберігається для сумісності з постачальниками). Читачі транскриптів можуть використовувати -це, щоб не трактувати маршрутизовані внутрішні промпти як інструкції, створені кінцевим користувачем. +OpenClaw також додає на початок тієї самої репліки маркер `[Inter-session message ... isUser=false]` +перед текстом маршрутизованого prompt, щоб активний виклик моделі міг відрізнити +вивід стороннього сеансу від зовнішніх інструкцій кінцевого користувача. Цей маркер містить +вихідний сеанс, канал і інструмент, коли вони доступні. Транскрипт усе ще використовує +`role: "user"` для сумісності з провайдером, але і видимий текст, і метадані +походження позначають репліку як міжсеансові дані. -Під час перебудови контексту OpenClaw також додає на початок таких користувацьких ходів у пам’яті короткий -маркер `[Inter-session message]`, щоб модель могла відрізняти їх від -зовнішніх інструкцій кінцевого користувача. +Під час перебудови контексту OpenClaw застосовує той самий маркер до старіших збережених +міжсеансових користувацьких реплік, які мають лише метадані походження. --- -## Матриця постачальників (поточна поведінка) +## Матриця провайдерів (поточна поведінка) **OpenAI / OpenAI Codex** -- Лише санітизація зображень. -- Відкидання осиротілих сигнатур reasoning (окремих елементів reasoning без наступного блоку контенту) для транскриптів OpenAI Responses/Codex, а також відкидання придатного до повторного програвання OpenAI reasoning після перемикання маршруту моделі. -- Збереження придатних до повторного програвання корисних навантажень елементів reasoning OpenAI Responses, включно із зашифрованими елементами з порожнім summary, щоб ручне/WebSocket-повторне програвання зберігало потрібний стан `rs_*`, спарений з елементами виводу асистента. -- Без санітизації ідентифікаторів викликів інструментів. -- Відновлення парування результатів інструментів може переміщувати справжні відповідні результати та синтезувати результати `aborted` у стилі Codex для відсутніх викликів інструментів. -- Без валідації чи перевпорядкування ходів. -- Відсутні результати інструментів сімейства OpenAI Responses синтезуються як `aborted`, щоб відповідати нормалізації повторного програвання Codex. -- Без видалення сигнатур думок. +- Лише очищення зображень. +- Відкидати осиротілі підписи reasoning (окремі елементи reasoning без наступного блока контенту) для транскриптів OpenAI Responses/Codex і відкидати повторно відтворюваний OpenAI reasoning після перемикання маршруту моделі. +- Зберігати повторно відтворювані payload елементів reasoning OpenAI Responses, зокрема зашифровані елементи з порожнім підсумком, щоб ручне/WebSocket повторне відтворення зберігало потрібний стан `rs_*`, поєднаний з елементами виводу асистента. +- Без очищення ідентифікаторів викликів інструментів. +- Ремонт зіставлення результатів інструментів може переміщувати реальні зіставлені виводи та синтезувати Codex-стилю виводи `aborted` для відсутніх викликів інструментів. +- Без перевірки чи переупорядкування реплік. +- Відсутні виводи інструментів сімейства OpenAI Responses синтезуються як `aborted`, щоб відповідати нормалізації повторного відтворення Codex. +- Без видалення підписів думок. -**OpenAI-compatible Gemma 4** +**OpenAI-сумісна Gemma 4** -- Історичні блоки thinking/reasoning асистента видаляються перед повторним програванням, щоб локальні - OpenAI-сумісні сервери Gemma 4 не отримували контент reasoning із попередніх ходів. -- Продовження викликів інструментів у поточному ході зберігають блок reasoning асистента - прив’язаним до виклику інструмента, доки результат інструмента не буде повторно програно. +- Історичні блоки мислення/reasoning асистента видаляються перед повторним відтворенням, щоб локальні + OpenAI-сумісні сервери Gemma 4 не отримували контент reasoning із попередніх реплік. +- Поточні продовження викликів інструментів у межах тієї самої репліки зберігають блок reasoning асистента + приєднаним до виклику інструмента, доки результат інструмента не буде повторно відтворено. **Google (Generative AI / Gemini CLI / Antigravity)** -- Санітизація ідентифікаторів викликів інструментів: суворо алфавітно-цифрові. -- Відновлення парування результатів інструментів і синтетичні результати інструментів. -- Валідація ходів (чергування ходів у стилі Gemini). -- Виправлення порядку ходів Google (додавання маленького початкового user-ходу, якщо історія починається з assistant). -- Antigravity Claude: нормалізація сигнатур thinking; відкидання блоків thinking без сигнатури. +- Очищення ідентифікаторів викликів інструментів: суворо літерно-цифрові. +- Ремонт зіставлення результатів інструментів і синтетичні результати інструментів. +- Перевірка реплік (чергування реплік у стилі Gemini). +- Виправлення порядку реплік Google (додавання на початок крихітного користувацького bootstrap, якщо історія починається з асистента). +- Antigravity Claude: нормалізувати підписи мислення; відкидати непідписані блоки мислення. -**Anthropic / Minimax (Anthropic-compatible)** +**Anthropic / Minimax (Anthropic-сумісні)** -- Відновлення парування результатів інструментів і синтетичні результати інструментів. -- Валідація ходів (об’єднання послідовних user-ходів для дотримання суворого чергування). -- Кінцеві assistant-prefill ходи видаляються з вихідних корисних навантажень Anthropic Messages, - коли увімкнено thinking, включно з маршрутами Cloudflare AI Gateway. -- Блоки thinking із відсутніми, порожніми або пробільними сигнатурами повторного програвання видаляються - перед перетворенням для постачальника. Якщо це спорожнює хід асистента, OpenClaw зберігає - форму ходу, використовуючи непорожній текст пропущеного reasoning. -- Старіші ходи асистента, що містять лише thinking і мають бути видалені, замінюються - непорожнім текстом пропущеного reasoning, щоб адаптери постачальника не відкидали хід під час повторного програвання. +- Ремонт зіставлення результатів інструментів і синтетичні результати інструментів. +- Перевірка реплік (об’єднання послідовних користувацьких реплік для задоволення суворого чергування). +- Кінцеві репліки попереднього заповнення асистента видаляються з вихідних payload Anthropic Messages, + коли мислення ввімкнено, зокрема для маршрутів Cloudflare AI Gateway. +- Блоки мислення з відсутніми, порожніми або blank підписами повторного відтворення видаляються + перед перетворенням для провайдера. Якщо це спорожнює репліку асистента, OpenClaw зберігає + форму репліки з непорожнім текстом про пропущене reasoning. +- Старіші репліки асистента лише з мисленням, які потрібно видалити, замінюються + непорожнім текстом про пропущене reasoning, щоб адаптери провайдерів не відкидали репліку + повторного відтворення. **Amazon Bedrock (Converse API)** -- Порожні assistant-ходи помилки потоку відновлюються до непорожнього резервного текстового блоку - перед повторним програванням. Bedrock Converse відхиляє повідомлення assistant із `content: []`, тому - збережені assistant-ходи з `stopReason: "error"` і порожнім вмістом також відновлюються на диску перед завантаженням. -- Блоки Claude thinking із відсутніми, порожніми або пробільними сигнатурами повторного програвання - видаляються перед повторним програванням Converse. Якщо це спорожнює хід асистента, OpenClaw - зберігає форму ходу, використовуючи непорожній текст пропущеного reasoning. -- Старіші ходи асистента, що містять лише thinking і мають бути видалені, замінюються - непорожнім текстом пропущеного reasoning, щоб повторне програвання Converse зберігало сувору форму ходу. -- Повторне програвання фільтрує ходи асистента delivery-mirror OpenClaw і gateway-injected. -- Санітизація зображень застосовується через глобальне правило. +- Порожні репліки асистента з помилкою stream ремонтуються в непорожній fallback текстовий блок + перед повторним відтворенням. Bedrock Converse відхиляє повідомлення асистента з `content: []`, тому + збережені репліки асистента з `stopReason: "error"` і порожнім контентом також + ремонтуються на диску перед завантаженням. +- Блоки мислення Claude з відсутніми, порожніми або blank підписами повторного відтворення + видаляються перед повторним відтворенням Converse. Якщо це спорожнює репліку асистента, OpenClaw + зберігає форму репліки з непорожнім текстом про пропущене reasoning. +- Старіші репліки асистента лише з мисленням, які потрібно видалити, замінюються + непорожнім текстом про пропущене reasoning, щоб повторне відтворення Converse зберігало сувору форму реплік. +- Повторне відтворення фільтрує delivery-mirror OpenClaw і вставлені gateway репліки асистента. +- Очищення зображень застосовується через глобальне правило. -**Mistral (включно з виявленням за model-id)** +**Mistral (зокрема виявлення на основі ідентифікатора моделі)** -- Санітизація ідентифікаторів викликів інструментів: strict9 (алфавітно-цифрові, довжина 9). +- Очищення ідентифікаторів викликів інструментів: strict9 (літерно-цифрові довжиною 9). **OpenRouter Gemini** -- Очищення сигнатур думок: видалення значень `thought_signature`, які не є base64 (base64 зберігається). +- Очищення підписів думок: видаляти не-base64 значення `thought_signature` (залишати base64). **Усе інше** -- Лише санітизація зображень. +- Лише очищення зображень. --- ## Історична поведінка (до 2026.1.22) -До релізу 2026.1.22 OpenClaw застосовував кілька шарів гігієни транскриптів: +До випуску 2026.1.22 OpenClaw застосовував кілька шарів гігієни транскриптів: -- **Розширення transcript-sanitize** запускалося під час кожної побудови контексту й могло: - - Відновлювати парування використання інструментів/результатів. - - Санітизувати ідентифікатори викликів інструментів (зокрема в нестрогому режимі, який зберігав `_`/`-`). -- Ранер також виконував санітизацію, специфічну для постачальника, що дублювало роботу. -- Додаткові мутації відбувалися поза політикою постачальника, зокрема: +- **transcript-sanitize extension** виконувався під час кожної побудови контексту і міг: + - Ремонтувати зіставлення використання/результатів інструментів. + - Очищати ідентифікатори викликів інструментів (зокрема несуворий режим, який зберігав `_`/`-`). +- Runner також виконував специфічне для провайдера очищення, що дублювало роботу. +- Додаткові мутації відбувалися поза політикою провайдера, зокрема: - Видалення тегів `` із тексту асистента перед збереженням. - - Відкидання порожніх ходів помилки асистента. + - Відкидання порожніх помилкових реплік асистента. - Обрізання контенту асистента після викликів інструментів. -Ця складність спричиняла регресії між постачальниками (особливо для парування -`openai-responses` `call_id|fc_id`). Очищення 2026.1.22 прибрало розширення, централізувало -логіку в ранері та зробило OpenAI **без втручання** поза санітизацією зображень. +Ця складність спричиняла регресії між провайдерами (особливо для зіставлення `openai-responses` +`call_id|fc_id`). Очищення 2026.1.22 видалило extension, централізувало +логіку в runner і зробило OpenAI **без змін** поза очищенням зображень. ## Пов’язане