---
read_when:
    - Ви налагоджуєте відхилення запитів провайдера, пов’язані зі структурою транскрипту
    - Ви змінюєте санітизацію транскрипту або логіку виправлення викликів інструментів
    - Ви досліджуєте невідповідності ідентифікаторів викликів інструментів між провайдерами
summary: 'Довідка: правила очищення й відновлення транскрипта для конкретного провайдера'
title: Гігієна транскрипту
x-i18n:
    generated_at: "2026-05-11T20:57:35Z"
    model: gpt-5.5
    provider: openai
    source_hash: 197081fe829cf6463e84c5ead9b4c631a8088e771e68163a35ed39d9efbdbf6a
    source_path: reference/transcript-hygiene.md
    workflow: 16
---

OpenClaw застосовує **виправлення, специфічні для провайдера**, до транскриптів перед запуском (побудовою контексту моделі). Більшість із них — це коригування **в пам’яті**, які потрібні для виконання суворих вимог провайдерів. Окремий прохід відновлення файла сесії також може переписати збережений JSONL перед завантаженням сесії, але лише для некоректно сформованих рядків або збережених ходів, які є недійсними довговічними записами. Доставлені відповіді асистента зберігаються на диску; видалення assistant-prefill, специфічне для провайдера, відбувається лише під час побудови вихідних payload. Коли відбувається відновлення, резервна копія оригінального файла зберігається поруч із файлом сесії.

Область охоплює:

- Контекст prompt лише для runtime, який не потрапляє в видимі користувачу ходи транскрипту
- Санітизацію ідентифікаторів викликів інструментів
- Валідацію вхідних даних викликів інструментів
- Відновлення парності результатів інструментів
- Валідацію / впорядкування ходів
- Очищення підписів думок
- Очищення thinking-підписів
- Санітизацію image payload
- Очищення порожніх текстових блоків перед повторним відтворенням у провайдера
- Позначення походження користувацького вводу (для prompt, маршрутизованих між сесіями)
- Відновлення порожніх error-ходів асистента для повторного відтворення Bedrock Converse

Якщо вам потрібні подробиці про зберігання транскриптів, див.:

- [Поглиблений розбір керування сесіями](/uk/reference/session-management-compaction)

---

## Глобальне правило: runtime-контекст не є користувацьким транскриптом

Runtime/system-контекст може бути доданий до prompt моделі для ходу, але це
не вміст, створений кінцевим користувачем. OpenClaw зберігає окреме тіло
prompt, звернене до транскрипту, для відповідей Gateway, поставлених у чергу followup, ACP, CLI та вбудованих запусків Pi. Збережені видимі ходи користувача використовують це тіло транскрипту замість prompt, збагаченого runtime.

Для застарілих сесій, у яких уже збережено runtime-обгортки, поверхні історії
Gateway застосовують проєкцію відображення перед поверненням повідомлень клієнтам WebChat,
TUI, REST або SSE.

---

## Де це виконується

Уся гігієна транскриптів централізована у вбудованому runner:

- Вибір політики: `src/agents/transcript-policy.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` (вбудований runner)

---

## Глобальне правило: санітизація зображень

Image payload завжди санітизується, щоб запобігти відхиленню на боці провайдера через обмеження
розміру (зменшення масштабу/повторне стискання завеликих base64-зображень).

Це також допомагає контролювати image-driven token pressure для моделей із підтримкою vision.
Менші максимальні розміри зазвичай зменшують використання токенів; більші розміри зберігають деталізацію.

Реалізація:

- `sanitizeSessionMessagesImages` у `src/agents/pi-embedded-helpers/images.ts`
- `sanitizeContentBlocksImages` у `src/agents/tool-images.ts`
- Максимальна сторона зображення налаштовується через `agents.defaults.imageMaxDimensionPx` (типово: `1200`).
- Порожні текстові блоки видаляються, поки цей прохід обходить вміст для повторного відтворення. Ходи асистента,
  які стають порожніми, вилучаються з копії для повторного відтворення; ходи користувача та tool-result,
  які стають порожніми, отримують непорожній placeholder пропущеного вмісту.

---

## Глобальне правило: некоректно сформовані виклики інструментів

Блоки assistant tool-call, у яких немає ані `input`, ані `arguments`, вилучаються
перед побудовою контексту моделі. Це запобігає відхиленням провайдером через частково
збережені виклики інструментів (наприклад, після помилки rate limit).

Реалізація:

- `sanitizeToolCallInputs` у `src/agents/session-transcript-repair.ts`
- Застосовується в `sanitizeSessionHistory` у `src/agents/pi-embedded-runner/replay-history.ts`

---

## Глобальне правило: походження міжсесійного вводу

Коли агент надсилає prompt в іншу сесію через `sessions_send` (включно з
кроками reply/announce між агентами), OpenClaw зберігає створений хід користувача з:

- `message.provenance.kind = "inter_session"`

OpenClaw також додає на початку того самого ходу маркер `[Inter-session message ... isUser=false]`
перед текстом маршрутизованого prompt, щоб активний виклик моделі міг відрізнити
вихід чужої сесії від зовнішніх інструкцій кінцевого користувача. Цей маркер містить
джерельну сесію, канал і інструмент, коли вони доступні. Транскрипт усе ще використовує
`role: "user"` для сумісності з провайдерами, але і видимий текст, і metadata походження
позначають хід як міжсесійні дані.

Під час перебудови контексту OpenClaw застосовує той самий маркер до старіших збережених
міжсесійних ходів користувача, які мають лише metadata походження.

---

## Матриця провайдерів (поточна поведінка)

**OpenAI / OpenAI Codex**

- Лише санітизація зображень.
- Вилучати осиротілі reasoning-підписи (окремі reasoning items без наступного блоку вмісту) для транскриптів OpenAI Responses/Codex і вилучати придатний до повторного відтворення OpenAI reasoning після перемикання маршруту моделі.
- Зберігати payload придатних до повторного відтворення OpenAI Responses reasoning item, включно із зашифрованими елементами з порожнім summary, щоб ручне/WebSocket повторне відтворення зберігало потрібний стан `rs_*` у парі з output items асистента.
- Native ChatGPT Codex Responses дотримується parity дротового протоколу Codex, повторно відтворюючи попередні Responses reasoning/message/function payload без попередніх item IDs, водночас зберігаючи session `prompt_cache_key`.
- Без санітизації ідентифікаторів викликів інструментів.
- Відновлення парності результатів інструментів може переміщувати справжні зіставлені outputs і синтезувати Codex-стиль `aborted` outputs для відсутніх викликів інструментів.
- Без валідації або перевпорядкування ходів.
- Відсутні outputs інструментів родини OpenAI Responses синтезуються як `aborted`, щоб відповідати нормалізації повторного відтворення Codex.
- Без видалення підписів думок.

**OpenAI-сумісні Chat Completions**

- Історичні блоки thinking/reasoning асистента видаляються перед повторним відтворенням, щоб
  локальні та proxy-style OpenAI-сумісні сервери не отримували поля reasoning попередніх ходів,
  як-от `reasoning` або `reasoning_content`.
- Поточні продовження tool-call у межах того самого ходу зберігають reasoning-блок асистента,
  прикріплений до виклику інструмента, доки результат інструмента не буде повторно відтворено.
- Винятки, що належать провайдеру, можуть відмовитися від цього, коли їхній дротовий протокол вимагає
  повторно відтворюваної reasoning metadata.

**Google (Generative AI / Gemini CLI / Antigravity)**

- Санітизація ідентифікаторів викликів інструментів: суворо буквено-цифрові.
- Відновлення парності результатів інструментів і синтетичні результати інструментів.
- Валідація ходів (Gemini-style чергування ходів).
- Виправлення впорядкування ходів Google (додавання крихітного user bootstrap на початку, якщо історія починається з асистента).
- Antigravity Claude: нормалізувати thinking-підписи; вилучати непідписані thinking-блоки.

**Anthropic / Minimax (Anthropic-сумісний)**

- Відновлення парності результатів інструментів і синтетичні результати інструментів.
- Валідація ходів (об’єднання послідовних ходів користувача для дотримання суворого чергування).
- Кінцеві assistant prefill-ходи видаляються з вихідних payload Anthropic Messages,
  коли thinking увімкнено, включно з маршрутами Cloudflare AI Gateway.
- Thinking-блоки з відсутніми, порожніми або blank підписами повторного відтворення видаляються
  перед конвертацією провайдера. Якщо це спорожнює хід асистента, OpenClaw зберігає
  форму ходу з непорожнім omitted-reasoning текстом.
- Старіші thinking-only ходи асистента, які потрібно видалити, замінюються
  непорожнім omitted-reasoning текстом, щоб provider adapters не відкидали хід
  повторного відтворення.

**Amazon Bedrock (Converse API)**

- Порожні stream-error ходи асистента відновлюються до непорожнього fallback text block
  перед повторним відтворенням. Bedrock Converse відхиляє повідомлення асистента з `content: []`, тому
  збережені ходи асистента з `stopReason: "error"` і порожнім вмістом також
  відновлюються на диску перед завантаженням.
- Stream-error ходи асистента, що містять лише blank text blocks, вилучаються
  з in-memory копії для повторного відтворення замість повторного відтворення недійсного blank block.
- Claude thinking-блоки з відсутніми, порожніми або blank підписами повторного відтворення
  видаляються перед повторним відтворенням Converse. Якщо це спорожнює хід асистента, OpenClaw
  зберігає форму ходу з непорожнім omitted-reasoning текстом.
- Старіші thinking-only ходи асистента, які потрібно видалити, замінюються
  непорожнім omitted-reasoning текстом, щоб повторне відтворення Converse зберігало сувору форму ходу.
- Повторне відтворення фільтрує OpenClaw delivery-mirror і gateway-injected ходи асистента.
- Санітизація зображень застосовується через глобальне правило.

**Mistral (включно з detection на основі model-id)**

- Санітизація ідентифікаторів викликів інструментів: strict9 (буквено-цифрові, довжина 9).

**OpenRouter Gemini**

- Очищення підписів думок: видаляти не-base64 значення `thought_signature` (залишати base64).

**OpenRouter Anthropic**

- Кінцеві assistant prefill-ходи видаляються з payload перевірених OpenRouter
  OpenAI-сумісних Anthropic-моделей, коли reasoning увімкнено, відповідно до
  поведінки повторного відтворення прямого Anthropic і Cloudflare Anthropic.

**Усе інше**

- Лише санітизація зображень.

---

## Історична поведінка (до 2026.1.22)

До релізу 2026.1.22 OpenClaw застосовував кілька шарів гігієни транскриптів:

- **transcript-sanitize extension** запускався на кожній побудові контексту і міг:
  - Відновлювати парність tool use/result.
  - Санітизувати ідентифікатори викликів інструментів (включно з non-strict режимом, який зберігав `_`/`-`).
- Runner також виконував специфічну для провайдера санітизацію, що дублювало роботу.
- Додаткові мутації відбувалися поза політикою провайдера, включно з:
  - Видаленням тегів `<final>` з тексту асистента перед збереженням.
  - Вилученням порожніх error-ходів асистента.
  - Обрізанням вмісту асистента після викликів інструментів.

Ця складність спричиняла кроспровайдерні регресії (особливо `openai-responses`
парність `call_id|fc_id`). Очищення 2026.1.22 видалило extension, централізувало
логіку в runner і зробило OpenAI **no-touch** поза санітизацією зображень.

## Пов’язане

- [Керування сесіями](/uk/concepts/session)
- [Обрізання сесій](/uk/concepts/session-pruning)
