diff --git a/docs/uk/cli/sessions.md b/docs/uk/cli/sessions.md index c8c8167d4..2934236c5 100644 --- a/docs/uk/cli/sessions.md +++ b/docs/uk/cli/sessions.md @@ -1,20 +1,20 @@ --- read_when: - - Ви хочете переглянути список збережених сеансів і побачити нещодавню активність + - Ви хочете вивести список збережених сеансів і переглянути нещодавню активність summary: Довідник CLI для `openclaw sessions` (список збережених сеансів + використання) title: Сеанси x-i18n: - generated_at: "2026-04-28T22:44:10Z" + generated_at: "2026-05-02T05:36:09Z" model: gpt-5.5 provider: openai - source_hash: 9fea2014f538b00a27fa0078391a421843052333c5bcfc8100fced515eed0004 + source_hash: 4e7e5017ba5a6194ac10d3a18ea9b711da57bc2ef1696776622cd3be2a2fbf43 source_path: cli/sessions.md workflow: 16 --- # `openclaw sessions` -Перелічує збережені сесії розмов. +Перелічує збережені сеанси розмов. ```bash openclaw sessions @@ -27,28 +27,28 @@ openclaw sessions --json Вибір області: -- типово: налаштоване стандартне сховище агента +- default: налаштоване сховище агента за замовчуванням - `--verbose`: докладне журналювання - `--agent `: одне налаштоване сховище агента -- `--all-agents`: об'єднати всі налаштовані сховища агентів +- `--all-agents`: об’єднати всі налаштовані сховища агентів - `--store `: явний шлях до сховища (не можна поєднувати з `--agent` або `--all-agents`) -Експортувати пакет траєкторії для збереженої сесії: +Експортуйте пакет траєкторії для збереженого сеансу: ```bash openclaw sessions export-trajectory --session-key "agent:main:telegram:direct:123" --workspace . openclaw sessions export-trajectory --session-key "agent:main:telegram:direct:123" --output bug-123 --json ``` -Це шлях команди, який використовується slash-командою `/export-trajectory` після того, -як власник схвалює запит на виконання. Вихідний каталог завжди визначається +Це шлях команди, який використовується slash-командою `/export-trajectory` після +того, як власник схвалить запит на виконання. Каталог виводу завжди визначається всередині `.openclaw/trajectory-exports/` у вибраному робочому просторі. -`openclaw sessions --all-agents` читає налаштовані сховища агентів. Виявлення сесій Gateway і ACP -ширше: воно також включає сховища лише на диску, знайдені під -стандартним коренем `agents/` або шаблонним коренем `session.store`. Ці -виявлені сховища мають визначатися як звичайні файли `sessions.json` всередині -кореня агента; символьні посилання та шляхи поза коренем пропускаються. +`openclaw sessions --all-agents` читає налаштовані сховища агентів. Виявлення +сеансів Gateway і ACP ширше: воно також включає сховища лише на диску, знайдені +під коренем `agents/` за замовчуванням або шаблонним коренем `session.store`. Такі +виявлені сховища мають визначатися як звичайні файли `sessions.json` усередині +кореня агента; символьні посилання та шляхи за межами кореня пропускаються. Приклади JSON: @@ -73,7 +73,7 @@ openclaw sessions export-trajectory --session-key "agent:main:telegram:direct:12 ## Обслуговування очищення -Запустити обслуговування зараз (замість очікування наступного циклу запису): +Запустіть обслуговування зараз (замість очікування наступного циклу запису): ```bash openclaw sessions cleanup --dry-run @@ -84,19 +84,19 @@ openclaw sessions cleanup --enforce --active-key "agent:main:telegram:direct:123 openclaw sessions cleanup --json ``` -`openclaw sessions cleanup` використовує налаштування `session.maintenance` з конфігурації: +`openclaw sessions cleanup` використовує параметри `session.maintenance` з конфігурації: -- Примітка щодо області: `openclaw sessions cleanup` обслуговує сховища сесій, транскрипти та супровідні файли траєкторій. Вона не обрізає журнали запусків Cron (`cron/runs/.jsonl`), якими керують `cron.runLog.maxBytes` і `cron.runLog.keepLines` у [конфігурації Cron](/uk/automation/cron-jobs#configuration) та які пояснено в [обслуговуванні Cron](/uk/automation/cron-jobs#maintenance). +- Примітка щодо області: `openclaw sessions cleanup` обслуговує сховища сеансів, транскрипти та побічні файли траєкторій. Вона не обрізає журнали запусків cron (`cron/runs/.jsonl`), якими керують `cron.runLog.maxBytes` і `cron.runLog.keepLines` у [конфігурації Cron](/uk/automation/cron-jobs#configuration) та які пояснено в [обслуговуванні Cron](/uk/automation/cron-jobs#maintenance). -- `--dry-run`: попередньо показати, скільки записів було б очищено/обмежено без запису. - - У текстовому режимі dry-run друкує таблицю дій для кожної сесії (`Action`, `Key`, `Age`, `Model`, `Flags`), щоб було видно, що буде збережено, а що видалено. +- `--dry-run`: попередньо показати, скільки записів було б обрізано/обмежено без запису. + - У текстовому режимі dry-run друкує таблицю дій для кожного сеансу (`Action`, `Key`, `Age`, `Model`, `Flags`), щоб ви могли побачити, що буде збережено, а що видалено. - `--enforce`: застосувати обслуговування, навіть коли `session.maintenance.mode` має значення `warn`. -- `--fix-missing`: видалити записи, чиї файли транскриптів відсутні, навіть якщо зазвичай вони ще не підпали б під обмеження віку/кількості. -- `--active-key `: захистити певний активний ключ від витіснення через дисковий бюджет. +- `--fix-missing`: видалити записи, чиї файли транскриптів відсутні, навіть якщо вони зазвичай ще не підлягали б вилученню за віком/кількістю. +- `--active-key `: захистити конкретний активний ключ від витіснення через дисковий бюджет. Стійкі зовнішні вказівники розмов, як-от групові сеанси та сеанси чату в межах потоку, також зберігаються під час обслуговування за віком/кількістю/дисковим бюджетом. - `--agent `: запустити очищення для одного налаштованого сховища агента. - `--all-agents`: запустити очищення для всіх налаштованих сховищ агентів. -- `--store `: виконати для певного файла `sessions.json`. -- `--json`: надрукувати зведення JSON. З `--all-agents` вивід містить одне зведення для кожного сховища. +- `--store `: запустити для певного файла `sessions.json`. +- `--json`: надрукувати підсумок JSON. З `--all-agents` вивід містить по одному підсумку для кожного сховища. `openclaw sessions cleanup --all-agents --dry-run --json`: @@ -126,11 +126,11 @@ openclaw sessions cleanup --json } ``` -Пов'язано: +Пов’язане: -- Конфігурація сесій: [довідник конфігурації](/uk/gateway/config-agents#session) +- Конфігурація сеансу: [Довідник конфігурації](/uk/gateway/config-agents#session) -## Пов'язано +## Пов’язане - [Довідник CLI](/uk/cli) -- [Керування сесіями](/uk/concepts/session) +- [Керування сеансами](/uk/concepts/session) diff --git a/docs/uk/concepts/session.md b/docs/uk/concepts/session.md index cf71af4c7..a0f9be204 100644 --- a/docs/uk/concepts/session.md +++ b/docs/uk/concepts/session.md @@ -2,39 +2,39 @@ read_when: - Ви хочете зрозуміти маршрутизацію та ізоляцію сеансів - Ви хочете налаштувати область дії DM для багатокористувацьких конфігурацій - - Ви налагоджуєте щоденні скидання сесій або скидання сесій через бездіяльність + - Ви налагоджуєте щоденне скидання сеансів або скидання після бездіяльності summary: Як OpenClaw керує сесіями розмов title: Керування сеансами x-i18n: - generated_at: "2026-05-01T12:19:28Z" + generated_at: "2026-05-02T05:36:26Z" model: gpt-5.5 provider: openai - source_hash: f1bde2ab8f1589ed477df959aecf59c282bb086bfe93159397252021a1d6393b + source_hash: b2fd0c9e880242a8d0070c24bd1f7971e4082344240e28632e2e3ca032404807 source_path: concepts/session.md workflow: 16 --- OpenClaw організовує розмови в **сесії**. Кожне повідомлення маршрутизується до -сесії залежно від того, звідки воно надійшло -- приватні повідомлення, групові чати, cron-завдання тощо. +сесії залежно від того, звідки воно надійшло -- особисті повідомлення, групові чати, завдання cron тощо. ## Як маршрутизуються повідомлення -| Джерело | Поведінка | -| ------------------ | ------------------------------------ | -| Приватні повідомлення | Спільна сесія за замовчуванням | -| Групові чати | Ізольовано для кожної групи | -| Кімнати/канали | Ізольовано для кожної кімнати | -| Cron-завдання | Нова сесія для кожного запуску | -| Webhook-и | Ізольовано для кожного hook | +| Джерело | Поведінка | +| ------------------ | --------------------------------- | +| Особисті повідомлення | Спільна сесія за замовчуванням | +| Групові чати | Ізольовано для кожної групи | +| Кімнати/канали | Ізольовано для кожної кімнати | +| Завдання Cron | Нова сесія для кожного запуску | +| Webhooks | Ізольовано для кожного hook | -## Ізоляція приватних повідомлень +## Ізоляція особистих повідомлень -За замовчуванням усі приватні повідомлення мають спільну сесію для безперервності. Це підходить для +За замовчуванням усі особисті повідомлення використовують одну сесію для безперервності. Це підходить для налаштувань з одним користувачем. -Якщо кілька людей можуть надсилати повідомлення вашому агенту, увімкніть ізоляцію приватних повідомлень. Без цього всі -користувачі мають спільний контекст розмови -- приватні повідомлення Аліси були б +Якщо кілька людей можуть писати вашому агенту, увімкніть ізоляцію особистих повідомлень. Без неї всі +користувачі спільно використовують той самий контекст розмови -- приватні повідомлення Аліси були б видимі Бобу. @@ -48,55 +48,56 @@ OpenClaw організовує розмови в **сесії**. Кожне п } ``` -Інші варіанти: +Інші параметри: -- `main` (за замовчуванням) -- усі приватні повідомлення мають одну спільну сесію. +- `main` (за замовчуванням) -- усі особисті повідомлення використовують одну сесію. - `per-peer` -- ізолювати за відправником (між каналами). - `per-channel-peer` -- ізолювати за каналом + відправником (рекомендовано). - `per-account-channel-peer` -- ізолювати за обліковим записом + каналом + відправником. -Якщо та сама людина зв'язується з вами з кількох каналів, використовуйте -`session.identityLinks`, щоб зв'язати її ідентичності, аби вони мали одну спільну сесію. +Якщо та сама людина зв’язується з вами з кількох каналів, використовуйте +`session.identityLinks`, щоб пов’язати її ідентичності, аби вони використовували одну сесію. -### Закріплення пов'язаних каналів +### Пристикування пов’язаних каналів -Команди dock дають змогу користувачу перемістити маршрут відповіді поточної сесії прямого чату до -іншого пов'язаного каналу, не починаючи нову сесію. Див. -[Закріплення каналів](/uk/concepts/channel-docking) для прикладів, конфігурації та +Команди пристикування дають користувачу змогу перенести маршрут відповіді поточної сесії прямого чату до +іншого пов’язаного каналу без запуску нової сесії. Див. +[Пристикування каналів](/uk/concepts/channel-docking) для прикладів, конфігурації та усунення несправностей. Перевірте своє налаштування за допомогою `openclaw security audit`. ## Життєвий цикл сесії -Сесії використовуються повторно, доки не спливе їхній термін: +Сесії повторно використовуються, доки не завершиться їхній строк дії: -- **Щоденне скидання** (за замовчуванням) -- нова сесія о 4:00 ранку за локальним часом на хості Gateway. - Щоденна свіжість базується на тому, коли поточний `sessionId` почався, а не +- **Щоденне скидання** (за замовчуванням) -- нова сесія о 4:00 за місцевим часом на хості + Gateway. Щоденна актуальність базується на часі запуску поточного `sessionId`, а не на пізніших записах метаданих. -- **Скидання через бездіяльність** (необов'язково) -- нова сесія після періоду бездіяльності. Задайте - `session.reset.idleMinutes`. Свіжість за бездіяльністю базується на останній реальній - взаємодії користувача/каналу, тому Heartbeat, Cron та системні події exec не +- **Скидання за бездіяльністю** (необов’язково) -- нова сесія після періоду бездіяльності. Задайте + `session.reset.idleMinutes`. Актуальність бездіяльності базується на останній реальній + взаємодії користувача/каналу, тому Heartbeat, Cron і системні події exec не підтримують сесію активною. - **Ручне скидання** -- введіть `/new` або `/reset` у чаті. `/new ` також перемикає модель. -Коли налаштовано і щоденне скидання, і скидання через бездіяльність, спрацьовує те, чий термін спливає першим. +Коли налаштовано і щоденне скидання, і скидання за бездіяльністю, спрацьовує те, строк якого завершується першим. Heartbeat, Cron, exec та інші ходи системних подій можуть записувати метадані сесії, -але ці записи не подовжують свіжість щоденного скидання або скидання через бездіяльність. Коли скидання +але ці записи не подовжують актуальність щоденного скидання чи скидання за бездіяльністю. Коли скидання переводить сесію, поставлені в чергу сповіщення системних подій для старої сесії -відкидаються, щоб застарілі фонові оновлення не додавалися на початок першого prompt у +відкидаються, щоб застарілі фонові оновлення не додавалися перед першим prompt у новій сесії. Сесії з активною CLI-сесією, що належить провайдеру, не перериваються неявним щоденним значенням за замовчуванням. Використовуйте `/reset` або явно налаштуйте `session.reset`, коли такі -сесії мають спливати за таймером. +сесії мають завершуватися за таймером. ## Де зберігається стан -Усім станом сесій володіє **gateway**. UI-клієнти запитують дані сесій у gateway. +Увесь стан сесій належить **gateway**. UI-клієнти запитують у Gateway +дані сесій. - **Сховище:** `~/.openclaw/agents//sessions/sessions.json` - **Транскрипти:** `~/.openclaw/agents//sessions/.jsonl` @@ -106,16 +107,16 @@ Heartbeat, Cron, exec та інші ходи системних подій мо - `sessionStartedAt`: коли почався поточний `sessionId`; щоденне скидання використовує це. - `lastInteractionAt`: остання взаємодія користувача/каналу, яка подовжує час життя за бездіяльністю. - `updatedAt`: остання зміна рядка сховища; корисно для списків і очищення, але не - є авторитетним джерелом для свіжості щоденного скидання або скидання через бездіяльність. + є авторитетним джерелом для актуальності щоденного скидання/скидання за бездіяльністю. -Старіші рядки без `sessionStartedAt` визначаються з заголовка сесії в транскрипті JSONL, -коли він доступний. Якщо старішому рядку також бракує `lastInteractionAt`, -свіжість за бездіяльністю повертається до часу початку цієї сесії, а не до пізніших -службових записів. +Старіші рядки без `sessionStartedAt` визначаються із заголовка сесії JSONL-транскрипта, +коли він доступний. Якщо старіший рядок також не має `lastInteractionAt`, +актуальність бездіяльності повертається до часу початку цієї сесії, а не до пізніших службових +записів. ## Обслуговування сесій -OpenClaw автоматично обмежує сховище сесій із часом. За замовчуванням він працює +OpenClaw автоматично обмежує обсяг сховища сесій із часом. За замовчуванням він працює в режимі `warn` (повідомляє, що було б очищено). Задайте `session.maintenance.mode` як `"enforce"` для автоматичного очищення: @@ -131,9 +132,13 @@ OpenClaw автоматично обмежує сховище сесій із ч } ``` -Для виробничих лімітів `maxEntries` середовище виконання Gateway під час запису використовує невеликий буфер верхньої межі та очищує сховище пакетами до налаштованого ліміту. Читання сховища сесій не очищують і не обмежують записи під час запуску Gateway. Це уникає повного очищення сховища під час кожного запуску або ізольованої cron-сесії. `openclaw sessions cleanup --enforce` застосовує ліміт негайно. +Для виробничих лімітів `maxEntries` записи під час виконання Gateway використовують невеликий буфер верхньої межі й пакетно очищаються назад до налаштованого обмеження. Читання сховища сесій не очищають і не обмежують записи під час запуску Gateway. Це дає змогу уникнути повного очищення сховища під час кожного запуску або ізольованої сесії cron. `openclaw sessions cleanup --enforce` застосовує обмеження негайно. -Попередній перегляд за допомогою `openclaw sessions cleanup --dry-run`. +Обслуговування зберігає довговічні зовнішні вказівники розмов, зокрема групові +сесії та сесії чатів у межах thread, водночас дозволяючи синтетичним записам Cron, +hook, Heartbeat, ACP і під-агентів застарівати. + +Перегляньте попередній результат за допомогою `openclaw sessions cleanup --dry-run`. ## Перегляд сесій @@ -144,16 +149,16 @@ OpenClaw автоматично обмежує сховище сесій із ч ## Додаткове читання -- [Очищення сесій](/uk/concepts/session-pruning) -- скорочення результатів інструментів +- [Очищення сесій](/uk/concepts/session-pruning) -- обрізання результатів інструментів - [Compaction](/uk/concepts/compaction) -- підсумовування довгих розмов - [Інструменти сесій](/uk/concepts/session-tool) -- інструменти агента для роботи між сесіями -- [Глибокий огляд керування сесіями](/uk/reference/session-management-compaction) -- +- [Поглиблений огляд керування сесіями](/uk/reference/session-management-compaction) -- схема сховища, транскрипти, політика надсилання, метадані походження та розширена конфігурація - [Мультиагентність](/uk/concepts/multi-agent) — маршрутизація та ізоляція сесій між агентами -- [Фонові завдання](/uk/automation/tasks) — як відокремлена робота створює записи завдань із посиланнями на сесії +- [Фонові завдання](/uk/automation/tasks) — як відокремлена робота створює записи завдань із посиланнями на сесію - [Маршрутизація каналів](/uk/channels/channel-routing) — як вхідні повідомлення маршрутизуються до сесій -## Пов'язане +## Пов’язане - [Очищення сесій](/uk/concepts/session-pruning) - [Інструменти сесій](/uk/concepts/session-tool) diff --git a/docs/uk/reference/session-management-compaction.md b/docs/uk/reference/session-management-compaction.md index 960028ef9..dedd3dfda 100644 --- a/docs/uk/reference/session-management-compaction.md +++ b/docs/uk/reference/session-management-compaction.md @@ -1,15 +1,15 @@ --- read_when: - - Потрібно діагностувати ідентифікатори сеансів, транскрипт JSONL або поля sessions.json - - Ви змінюєте поведінку автоматичного Compaction або додаєте службове обслуговування перед Compaction - - Ви хочете реалізувати очищення пам’яті або тихі системні ходи -summary: 'Глибоке занурення: сховище сеансів + транскрипти, життєвий цикл і внутрішні механізми (авто)Compaction' + - Потрібно налагодити ідентифікатори сеансів, JSONL-транскрипт або поля sessions.json + - Ви змінюєте поведінку автоматичного Compaction або додаєте підготовче обслуговування перед Compaction + - Ви хочете реалізувати скидання пам’яті або тихі системні ходи +summary: 'Поглиблений розбір: сховище сеансів і транскрипти, життєвий цикл та внутрішні механізми (авто)Compaction' title: Поглиблений огляд керування сеансами x-i18n: - generated_at: "2026-05-01T12:19:43Z" + generated_at: "2026-05-02T05:36:33Z" model: gpt-5.5 provider: openai - source_hash: efd2fb5157a98cb406c5210d813fa600259dfc559350010a9c070075ac6b28ed + source_hash: 6f5d8b072feb389d7161fb2fa0fcd0941edb79b8b0f7ddd841877158795c2895 source_path: reference/session-management-compaction.md workflow: 16 --- @@ -17,12 +17,12 @@ x-i18n: OpenClaw керує сесіями від початку до кінця в таких сферах: - **Маршрутизація сесій** (як вхідні повідомлення зіставляються з `sessionKey`) -- **Сховище сесій** (`sessions.json`) і що воно відстежує +- **Сховище сесій** (`sessions.json`) і те, що воно відстежує - **Збереження транскриптів** (`*.jsonl`) і їхня структура -- **Гігієна транскриптів** (специфічні для провайдера виправлення перед запусками) -- **Обмеження контексту** (вікно контексту порівняно з відстежуваними токенами) -- **Compaction** (ручне й автоматичне Compaction) і де підключати роботу перед Compaction -- **Тихе обслуговування** (записи пам’яті, які не мають створювати видимого для користувача виводу) +- **Гігієна транскриптів** (виправлення, специфічні для провайдера, перед запусками) +- **Обмеження контексту** (вікно контексту проти відстежуваних токенів) +- **Compaction** (ручна та автоматична Compaction) і де підключати роботу перед Compaction +- **Тихе обслуговування** (записи пам’яті, які не повинні створювати видимий для користувача вивід) Якщо спершу потрібен загальніший огляд, почніть із: @@ -30,35 +30,35 @@ OpenClaw керує сесіями від початку до кінця в та - [Compaction](/uk/concepts/compaction) - [Огляд пам’яті](/uk/concepts/memory) - [Пошук у пам’яті](/uk/concepts/memory-search) -- [Обрізання сесій](/uk/concepts/session-pruning) +- [Очищення сесій](/uk/concepts/session-pruning) - [Гігієна транскриптів](/uk/reference/transcript-hygiene) --- ## Джерело істини: Gateway -OpenClaw спроєктовано навколо одного **процесу Gateway**, який володіє станом сесій. +OpenClaw спроєктовано навколо єдиного **процесу Gateway**, який володіє станом сесій. -- UI (застосунок macOS, веб Control UI, TUI) мають запитувати в Gateway списки сесій і кількість токенів. -- У віддаленому режимі файли сесій розміщені на віддаленому хості; “перевірка локальних файлів Mac” не відображатиме те, що використовує Gateway. +- Інтерфейси користувача (застосунок macOS, вебінтерфейс керування, TUI) мають запитувати в Gateway списки сесій і кількість токенів. +- У віддаленому режимі файли сесій розташовані на віддаленому хості; «перевірка ваших локальних файлів Mac» не відображатиме те, що використовує Gateway. --- -## Два шари збереження +## Два рівні збереження -OpenClaw зберігає сесії у двох шарах: +OpenClaw зберігає сесії на двох рівнях: 1. **Сховище сесій (`sessions.json`)** - Мапа ключ/значення: `sessionKey -> SessionEntry` - - Невелике, змінюване, безпечне для редагування (або видалення записів) - - Відстежує метадані сесії (поточний id сесії, останню активність, перемикачі, лічильники токенів тощо) + - Невелике, змінне, безпечне для редагування (або видалення записів) + - Відстежує метадані сесії (поточний ідентифікатор сесії, останню активність, перемикачі, лічильники токенів тощо) 2. **Транскрипт (`.jsonl`)** - - Транскрипт лише з додаванням записів із деревоподібною структурою (записи мають `id` + `parentId`) + - Транскрипт лише для додавання зі структурою дерева (записи мають `id` + `parentId`) - Зберігає фактичну розмову + виклики інструментів + підсумки Compaction - Використовується для повторної побудови контексту моделі для майбутніх ходів - Великі налагоджувальні контрольні точки перед Compaction пропускаються, щойно активний - транскрипт перевищує обмеження розміру контрольної точки, щоб уникнути другої величезної + транскрипт перевищує обмеження розміру контрольної точки, щоб уникнути другої гігантської копії `.checkpoint.*.jsonl`. --- @@ -75,30 +75,35 @@ OpenClaw визначає ці шляхи через `src/config/sessions.ts`. --- -## Обслуговування сховища та керування диском +## Обслуговування сховища та контроль диска -Збереження сесій має автоматичні засоби обслуговування (`session.maintenance`) для `sessions.json`, артефактів транскриптів і допоміжних файлів траєкторій: +Збереження сесій має автоматичні засоби обслуговування (`session.maintenance`) для `sessions.json`, артефактів транскриптів і супровідних файлів траєкторій: - `mode`: `warn` (типово) або `enforce` - `pruneAfter`: поріг віку застарілих записів (типово `30d`) - `maxEntries`: обмеження кількості записів у `sessions.json` (типово `500`) -- `resetArchiveRetention`: строк зберігання архівів транскриптів `*.reset.` (типово: як `pruneAfter`; `false` вимикає очищення) +- `resetArchiveRetention`: термін зберігання архівів транскриптів `*.reset.` (типово: такий самий, як `pruneAfter`; `false` вимикає очищення) - `maxDiskBytes`: необов’язковий бюджет каталогу сесій - `highWaterBytes`: необов’язкова ціль після очищення (типово `80%` від `maxDiskBytes`) -Звичайні записи Gateway пакетно виконують очищення `maxEntries` для обмежень продакшн-розміру, тому сховище може ненадовго перевищувати налаштоване обмеження, перш ніж наступне очищення до верхнього порога перепише його назад до меншого розміру. Читання сховища сесій не обрізають і не обмежують записи під час запуску Gateway; для очищення використовуйте записи або `openclaw sessions cleanup --enforce`. `openclaw sessions cleanup --enforce` все одно негайно застосовує налаштоване обмеження. +Звичайні записи Gateway пакетно виконують очищення `maxEntries` для обмежень виробничого розміру, тож сховище може ненадовго перевищити налаштований ліміт, перш ніж наступне очищення високого рівня води перепише його назад до меншого розміру. Читання сховища сесій не обрізає й не обмежує записи під час запуску Gateway; для очищення використовуйте записи або `openclaw sessions cleanup --enforce`. `openclaw sessions cleanup --enforce` все одно негайно застосовує налаштоване обмеження. + +Обслуговування зберігає довговічні зовнішні вказівники розмов, як-от групові сесії +та сесії чатів у межах потоків, але синтетичні runtime-записи для cron, hooks, +heartbeat, ACP і субагентів усе ще можуть бути видалені, коли вони перевищують +налаштований вік, кількість або дисковий бюджет. OpenClaw більше не створює автоматичні ротаційні резервні копії `sessions.json.bak.*` під час записів Gateway. Застарілий ключ `session.maintenance.rotateBytes` ігнорується, а `openclaw doctor --fix` видаляє його зі старіших конфігурацій. -Порядок застосування для очищення дискового бюджету (`mode: "enforce"`): +Порядок примусового очищення дискового бюджету (`mode: "enforce"`): -1. Спершу видалити найстаріші архівовані, сирітські артефакти транскриптів або сирітські артефакти траєкторій. -2. Якщо все ще вище цілі, витіснити найстаріші записи сесій і їхні файли транскриптів/траєкторій. -3. Продовжувати, доки використання не стане на рівні `highWaterBytes` або нижче. +1. Спершу видалити найстаріші архівні, осиротілі артефакти транскриптів або осиротілі артефакти траєкторій. +2. Якщо використання все ще перевищує ціль, вилучити найстаріші записи сесій і їхні файли транскриптів/траєкторій. +3. Продовжувати, доки використання не буде на рівні або нижче `highWaterBytes`. -У `mode: "warn"` OpenClaw повідомляє про потенційні витіснення, але не змінює сховище/файли. +У `mode: "warn"` OpenClaw повідомляє про потенційні вилучення, але не змінює сховище/файли. -Запустити обслуговування на вимогу: +Запустіть обслуговування на вимогу: ```bash openclaw sessions cleanup --dry-run @@ -107,50 +112,50 @@ openclaw sessions cleanup --enforce --- -## Cron-сесії та журнали запусків +## Сесії Cron і журнали запусків -Ізольовані запуски Cron також створюють записи сесій/транскрипти й мають окремі налаштування строків зберігання: +Ізольовані запуски cron також створюють записи сесій/транскрипти та мають окремі засоби керування зберіганням: -- `cron.sessionRetention` (типово `24h`) обрізає старі сесії ізольованих запусків Cron зі сховища сесій (`false` вимикає). -- `cron.runLog.maxBytes` + `cron.runLog.keepLines` обрізають файли `~/.openclaw/cron/runs/.jsonl` (типово: `2_000_000` байтів і `2000` рядків). +- `cron.sessionRetention` (типово `24h`) видаляє старі ізольовані сесії запусків cron зі сховища сесій (`false` вимикає). +- `cron.runLog.maxBytes` + `cron.runLog.keepLines` очищають файли `~/.openclaw/cron/runs/.jsonl` (типово: `2_000_000` байтів і `2000` рядків). -Коли Cron примусово створює нову ізольовану сесію запуску, він очищає попередній +Коли cron примусово створює нову ізольовану сесію запуску, він очищає попередній запис сесії `cron:` перед записом нового рядка. Він переносить безпечні -налаштування, як-от параметри мислення/швидкого режиму/детальності, мітки та явно -вибрані користувачем перевизначення моделі/автентифікації. Він відкидає навколишній контекст розмови, як-от -маршрутизацію каналу/групи, політику надсилання чи черги, підвищення прав, походження та -прив’язку середовища виконання ACP, щоб свіжий ізольований запуск не міг успадкувати застарілу доставку або -повноваження середовища виконання від старішого запуску. +налаштування, як-от параметри мислення/швидкого режиму/докладності, мітки та явні +вибрані користувачем перевизначення моделі/автентифікації. Він відкидає фоновий +контекст розмови, як-от маршрутизацію каналу/групи, політику надсилання або черги, +підвищення привілеїв, джерело та runtime-прив’язку ACP, щоб свіжий ізольований +запуск не міг успадкувати застарілу доставку або runtime-повноваження від старішого запуску. --- ## Ключі сесій (`sessionKey`) -`sessionKey` визначає, у _якому кошику розмови_ ви перебуваєте (маршрутизація + ізоляція). +`sessionKey` визначає, у якому _кошику розмови_ ви перебуваєте (маршрутизація + ізоляція). Поширені шаблони: -- Основний/прямий чат (на агента): `agent::` (типово `main`) +- Основний/прямий чат (для кожного агента): `agent::` (типово `main`) - Група: `agent:::group:` - Кімната/канал (Discord/Slack): `agent:::channel:` або `...:room:` - Cron: `cron:` - Webhook: `hook:` (якщо не перевизначено) -Канонічні правила задокументовано в [/concepts/session](/uk/concepts/session). +Канонічні правила задокументовано на [/concepts/session](/uk/concepts/session). --- -## Id сесій (`sessionId`) +## Ідентифікатори сесій (`sessionId`) Кожен `sessionKey` вказує на поточний `sessionId` (файл транскрипту, який продовжує розмову). Практичні правила: - **Скидання** (`/new`, `/reset`) створює новий `sessionId` для цього `sessionKey`. -- **Щоденне скидання** (типово 4:00 AM за локальним часом на хості gateway) створює новий `sessionId` на наступному повідомленні після межі скидання. -- **Закінчення строку бездіяльності** (`session.reset.idleMinutes` або застаріле `session.idleMinutes`) створює новий `sessionId`, коли повідомлення надходить після вікна бездіяльності. Коли налаштовано і щоденне, і за бездіяльністю, перемагає те, що спливає першим. -- **Системні події** (heartbeat, пробудження Cron, сповіщення exec, службовий облік gateway) можуть змінювати рядок сесії, але не подовжують свіжість для щоденного/idle-скидання. Перехід скидання відкидає поставлені в чергу сповіщення системних подій для попередньої сесії до побудови свіжого промпта. -- **Захист від форку батьківського потоку** (`session.parentForkMaxTokens`, типово `100000`) пропускає форкування батьківського транскрипту, коли батьківська сесія вже завелика; новий потік починається заново. Установіть `0`, щоб вимкнути. +- **Щоденне скидання** (типово о 4:00 AM за локальним часом на хості Gateway) створює новий `sessionId` на наступному повідомленні після межі скидання. +- **Закінчення терміну через бездіяльність** (`session.reset.idleMinutes` або застарілий `session.idleMinutes`) створює новий `sessionId`, коли повідомлення надходить після вікна бездіяльності. Коли налаштовано і щоденне скидання, і бездіяльність, перемагає те, що спливає першим. +- **Системні події** (heartbeat, пробудження cron, сповіщення exec, службовий облік gateway) можуть змінювати рядок сесії, але не подовжують свіжість щоденного/бездіяльного скидання. Перехід скидання відкидає поставлені в чергу сповіщення системних подій для попередньої сесії перед побудовою свіжого prompt. +- **Захист форку батьківського потоку** (`session.parentForkMaxTokens`, типово `100000`) пропускає форкування батьківського транскрипту, коли батьківська сесія вже завелика; новий потік починається з нуля. Установіть `0`, щоб вимкнути. Деталь реалізації: рішення ухвалюється в `initSessionState()` у `src/auto-reply/reply/session.ts`. @@ -162,30 +167,30 @@ openclaw sessions cleanup --enforce Ключові поля (не вичерпно): -- `sessionId`: поточний id транскрипту (ім’я файлу виводиться з нього, якщо не встановлено `sessionFile`) -- `sessionStartedAt`: часова мітка початку для поточного `sessionId`; для щоденного скидання - свіжість використовує її. Застарілі рядки можуть виводити її із заголовка сесії JSONL. -- `lastInteractionAt`: часова мітка останньої реальної взаємодії користувача/каналу; для idle-скидання - свіжість використовує її, тому Heartbeat, Cron і exec-події не підтримують сесії +- `sessionId`: поточний ідентифікатор транскрипту (ім’я файлу виводиться з нього, якщо не задано `sessionFile`) +- `sessionStartedAt`: позначка часу початку для поточного `sessionId`; свіжість щоденного скидання + використовує її. Застарілі рядки можуть виводити її із заголовка сесії JSONL. +- `lastInteractionAt`: позначка часу останньої реальної взаємодії користувача/каналу; свіжість скидання + через бездіяльність використовує її, тож heartbeat, cron і події exec не підтримують сесії активними. Застарілі рядки без цього поля повертаються до відновленого часу початку сесії - для idle-свіжості. -- `updatedAt`: часова мітка останньої зміни рядка сховища, використовується для списків, обрізання та - службового обліку. Вона не є джерелом істини для свіжості щоденного/idle-скидання. + для свіжості бездіяльності. +- `updatedAt`: позначка часу останньої зміни рядка сховища, використовується для списків, очищення та + службового обліку. Вона не є джерелом істини для свіжості щоденного/бездіяльного скидання. - `sessionFile`: необов’язкове явне перевизначення шляху транскрипту -- `chatType`: `direct | group | room` (допомагає UI та політиці надсилання) +- `chatType`: `direct | group | room` (допомагає інтерфейсам користувача та політиці надсилання) - `provider`, `subject`, `room`, `space`, `displayName`: метадані для позначення груп/каналів - Перемикачі: - `thinkingLevel`, `verboseLevel`, `reasoningLevel`, `elevatedLevel` - `sendPolicy` (перевизначення для окремої сесії) - Вибір моделі: - `providerOverride`, `modelOverride`, `authProfileOverride` -- Лічильники токенів (best-effort / залежні від провайдера): +- Лічильники токенів (best-effort / залежать від провайдера): - `inputTokens`, `outputTokens`, `totalTokens`, `contextTokens` -- `compactionCount`: як часто автоматичне Compaction завершувалося для цього ключа сесії -- `memoryFlushAt`: часова мітка останнього скидання пам’яті перед Compaction -- `memoryFlushCompactionCount`: кількість Compaction на момент останнього скидання +- `compactionCount`: як часто автоматична Compaction завершувалася для цього ключа сесії +- `memoryFlushAt`: позначка часу останнього скидання пам’яті перед Compaction +- `memoryFlushCompactionCount`: кількість Compaction, коли востаннє виконувався flush -Сховище безпечно редагувати, але Gateway є джерелом істини: він може переписувати або повторно гідратувати записи під час роботи сесій. +Сховище безпечно редагувати, але Gateway є джерелом істини: він може переписувати або повторно гідратувати записи під час виконання сесій. --- @@ -200,27 +205,27 @@ openclaw sessions cleanup --enforce Помітні типи записів: -- `message`: повідомлення user/assistant/toolResult -- `custom_message`: вставлені розширенням повідомлення, які _входять_ у контекст моделі (можуть бути приховані від UI) -- `custom`: стан розширення, який _не входить_ у контекст моделі +- `message`: повідомлення користувача/асистента/toolResult +- `custom_message`: повідомлення, вставлені розширенням, які _входять_ до контексту моделі (можуть бути приховані від інтерфейсу користувача) +- `custom`: стан розширення, який _не входить_ до контексту моделі - `compaction`: збережений підсумок Compaction з `firstKeptEntryId` і `tokensBefore` - `branch_summary`: збережений підсумок під час навігації гілкою дерева -OpenClaw навмисно **не** “виправляє” транскрипти; Gateway використовує `SessionManager` для їх читання/запису. +OpenClaw навмисно **не** «виправляє» транскрипти; Gateway використовує `SessionManager` для їх читання/запису. --- -## Вікна контексту й відстежувані токени +## Вікна контексту проти відстежуваних токенів Важливі два різні поняття: -1. **Вікно контексту моделі**: жорстке обмеження на модель (токени, видимі моделі) -2. **Лічильники сховища сесій**: ковзні статистики, записані в `sessions.json` (використовуються для /status і дашбордів) +1. **Вікно контексту моделі**: жорстке обмеження для кожної моделі (токени, видимі моделі) +2. **Лічильники сховища сесій**: ковзна статистика, записана в `sessions.json` (використовується для /status і панелей керування) Якщо ви налаштовуєте обмеження: - Вікно контексту береться з каталогу моделей (і може бути перевизначене через конфігурацію). -- `contextTokens` у сховищі — це оцінка/звітне значення часу виконання; не сприймайте його як сувору гарантію. +- `contextTokens` у сховищі — це runtime-оцінка/звітне значення; не розглядайте його як сувору гарантію. Докладніше див. [/token-use](/uk/reference/token-use). @@ -228,78 +233,76 @@ OpenClaw навмисно **не** “виправляє” транскрипт ## Compaction: що це таке -Compaction підсумовує старішу розмову в збережений запис `compaction` у транскрипті й залишає останні повідомлення незмінними. +Compaction підсумовує старішу розмову в збережений запис `compaction` у транскрипті та залишає недавні повідомлення без змін. Після Compaction майбутні ходи бачать: - Підсумок Compaction - Повідомлення після `firstKeptEntryId` -Compaction є **персистентним** (на відміну від обрізання сесій). Див. [/concepts/session-pruning](/uk/concepts/session-pruning). +Compaction є **постійною** (на відміну від очищення сесій). Див. [/concepts/session-pruning](/uk/concepts/session-pruning). -## Межі фрагментів Compaction і парування інструментів +## Межі частин Compaction і поєднання інструментів -Коли OpenClaw розбиває довгий транскрипт на фрагменти Compaction, він зберігає -виклики інструментів assistant у парі з відповідними записами `toolResult`. +Коли OpenClaw розбиває довгий транскрипт на частини Compaction, він зберігає +виклики інструментів асистента поєднаними з відповідними записами `toolResult`. - Якщо поділ за часткою токенів потрапляє між викликом інструмента та його результатом, OpenClaw - зміщує межу до повідомлення assistant із викликом інструмента, замість того щоб розділяти + зсуває межу до повідомлення асистента з викликом інструмента, а не розділяє пару. -- Якщо кінцевий блок результатів інструментів інакше перевищив би цільовий розмір фрагмента, +- Якщо завершальний блок результатів інструментів інакше перевищив би цільовий розмір частини, OpenClaw зберігає цей очікуваний блок інструментів і залишає непідсумований хвіст - незмінним. + без змін. - Перервані/помилкові блоки викликів інструментів не утримують очікуваний поділ відкритим. --- -## Коли відбувається автоматичне Compaction (середовище виконання Pi) +## Коли відбувається автоматична Compaction (runtime Pi) -У вбудованому агенті Pi автоматичне Compaction запускається у двох випадках: +У вбудованому агенті Pi автоматична Compaction запускається у двох випадках: 1. **Відновлення після переповнення**: модель повертає помилку переповнення контексту (`request_too_large`, `context length exceeded`, `input exceeds the maximum number of tokens`, `input token count exceeds the maximum number of input tokens`, `input is too long for the model`, `ollama error: context length -exceeded` і подібні варіанти у формі провайдерів) → compact → повторити. +exceeded` і подібні варіанти, сформовані провайдерами) → compact → retry. 2. **Порогове обслуговування**: після успішного ходу, коли: `contextTokens > contextWindow - reserveTokens` Де: -- `contextWindow` — вікно контексту моделі -- `reserveTokens` — запас, зарезервований для промптів + наступного виводу моделі +- `contextWindow` — це вікно контексту моделі +- `reserveTokens` — це запас, зарезервований для prompts + наступного виводу моделі -Це семантика середовища виконання Pi (OpenClaw споживає події, але Pi вирішує, коли виконувати Compaction). +Це семантика runtime Pi (OpenClaw споживає події, але Pi вирішує, коли виконувати Compaction). -OpenClaw також може запустити попереднє локальне Compaction перед відкриттям наступного +OpenClaw також може запускати попередню локальну Compaction перед відкриттям наступного запуску, коли встановлено `agents.defaults.compaction.maxActiveTranscriptBytes` і -активний файл транскрипту досягає цього розміру. Це захист за розміром файлу для вартості локального -повторного відкриття, а не сире архівування: OpenClaw все одно виконує звичайне семантичне Compaction, -і воно потребує `truncateAfterCompaction`, щоб стиснений підсумок міг стати -новим наступним транскриптом. +активний файл транскрипта досягає цього розміру. Це захист за розміром файлу для вартості +локального повторного відкриття, а не сире архівування: OpenClaw усе ще виконує звичайну +семантичну Compaction, і для цього потрібен `truncateAfterCompaction`, щоб стиснений +підсумок міг стати новим наступним транскриптом. Для вбудованих запусків Pi `agents.defaults.compaction.midTurnPrecheck.enabled: true` -додає opt-in захист циклу інструментів. Після додавання результату інструмента й перед -наступним викликом моделі OpenClaw оцінює тиск на prompt за допомогою тієї самої -логіки передстартового бюджету, що використовується на початку ходу. Якщо контекст -більше не вміщується, захист не виконує Compaction усередині хука Pi -`transformContext`. Він піднімає структурований сигнал -mid-turn precheck, зупиняє поточне надсилання prompt і дає зовнішньому циклу -запуску використати наявний шлях відновлення: обрізати завеликі результати -інструментів, коли цього достатньо, або запустити налаштований режим Compaction і -повторити спробу. Опція вимкнена за замовчуванням і працює з обома режимами -Compaction, `default` і `safeguard`, зокрема із Compaction у режимі safeguard на -основі провайдера. -Це не залежить від `maxActiveTranscriptBytes`: захист за розміром у байтах -запускається перед відкриттям ходу, тоді як mid-turn precheck запускається пізніше -у вбудованому циклі інструментів Pi після додавання нових результатів інструментів. +додає опціональний захист циклу інструментів. Після додавання результату інструмента і перед +наступним викликом моделі OpenClaw оцінює навантаження на промпт, використовуючи ту саму +логіку попереднього бюджету, що й на початку ходу. Якщо контекст більше не вміщується, +захист не виконує Compaction всередині хука Pi `transformContext`. Він піднімає структурований +сигнал попередньої перевірки всередині ходу, зупиняє поточне надсилання промпта і дає +зовнішньому циклу запуску використати наявний шлях відновлення: обрізати завеликі результати +інструментів, коли цього достатньо, або запустити налаштований режим Compaction і повторити +спробу. Параметр вимкнений за замовчуванням і працює з режимами Compaction `default` і +`safeguard`, зокрема із Compaction з захистом, підтриманою провайдером. +Це незалежно від `maxActiveTranscriptBytes`: захист за розміром у байтах запускається +до відкриття ходу, тоді як попередня перевірка всередині ходу запускається пізніше у +вбудованому циклі інструментів Pi після додавання нових результатів інструментів. --- ## Налаштування Compaction (`reserveTokens`, `keepRecentTokens`) -Налаштування Compaction Pi містяться в налаштуваннях Pi: +Налаштування Compaction для Pi містяться в налаштуваннях Pi: ```json5 { @@ -311,32 +314,32 @@ Compaction, `default` і `safeguard`, зокрема із Compaction у режи } ``` -OpenClaw також застосовує мінімальний безпечний поріг для вбудованих запусків: +OpenClaw також примусово застосовує безпечну нижню межу для вбудованих запусків: -- Якщо `compaction.reserveTokens < reserveTokensFloor`, OpenClaw підвищує його. -- Стандартний мінімальний поріг — `20000` токенів. -- Установіть `agents.defaults.compaction.reserveTokensFloor: 0`, щоб вимкнути мінімальний поріг. +- Якщо `compaction.reserveTokens < reserveTokensFloor`, OpenClaw підвищує це значення. +- Нижня межа за замовчуванням становить `20000` токенів. +- Установіть `agents.defaults.compaction.reserveTokensFloor: 0`, щоб вимкнути нижню межу. - Якщо значення вже вище, OpenClaw залишає його без змін. -- Ручний `/compact` враховує явно заданий `agents.defaults.compaction.keepRecentTokens` - і зберігає точку відсікання нещодавнього хвоста Pi. Без явно заданого бюджету збереження - ручний Compaction залишається жорсткою контрольною точкою, а перебудований контекст починається з +- Ручний `/compact` враховує явний `agents.defaults.compaction.keepRecentTokens` + і зберігає точку відсікання нещодавнього хвоста Pi. Без явного бюджету збереження + ручна Compaction лишається жорсткою контрольною точкою, а перебудований контекст починається з нового підсумку. - Установіть `agents.defaults.compaction.midTurnPrecheck.enabled: true`, щоб запускати - необов’язкову попередню перевірку циклу інструментів після нових результатів інструментів і перед наступним - викликом моделі. Це лише тригер; генерація підсумку все одно використовує налаштований - шлях Compaction. Вона не залежить від `maxActiveTranscriptBytes`, який є - стартовим захистом активного транскрипту за розміром у байтах. -- Установіть `agents.defaults.compaction.maxActiveTranscriptBytes` у байтове значення або - рядок на кшталт `"20mb"`, щоб запускати локальний Compaction перед ходом, коли активний - транскрипт стає великим. Цей захист активний лише тоді, коли також увімкнено - `truncateAfterCompaction`. Залиште це значення незаданим або встановіть `0`, щоб + опціональну попередню перевірку циклу інструментів після нових результатів інструментів і перед наступним + викликом моделі. Це лише тригер; створення підсумку все одно використовує налаштований + шлях Compaction. Він незалежний від `maxActiveTranscriptBytes`, який є + захистом за розміром активного транскрипта в байтах на початку ходу. +- Установіть `agents.defaults.compaction.maxActiveTranscriptBytes` у значення байтів або + рядок, наприклад `"20mb"`, щоб запускати локальну Compaction перед ходом, коли активний + транскрипт стає великим. Цей захист активний лише коли також увімкнено + `truncateAfterCompaction`. Залиште параметр невстановленим або встановіть `0`, щоб вимкнути. -- Коли `agents.defaults.compaction.truncateAfterCompaction` увімкнено, - OpenClaw після Compaction ротує активний транскрипт у стиснений наступний JSONL. - Старий повний транскрипт залишається заархівованим і пов’язаним із - контрольною точкою Compaction, замість перезапису на місці. +- Коли увімкнено `agents.defaults.compaction.truncateAfterCompaction`, + OpenClaw після Compaction обертає активний транскрипт у стиснений наступний JSONL. + Старий повний транскрипт лишається в архіві та прив’язується з контрольної точки + Compaction замість перезапису на місці. -Навіщо: залишити достатній запас для багатоходового «обслуговування» (наприклад, записів пам’яті), перш ніж Compaction стане неминучим. +Навіщо: залишити достатній запас для багатоходового “housekeeping” (наприклад, записів пам’яті), перш ніж Compaction стане неминучою. Реалізація: `ensurePiCompactionReserveTokens()` у `src/agents/pi-settings.ts` (викликається з `src/agents/pi-embedded-runner.ts`). @@ -345,87 +348,87 @@ OpenClaw також застосовує мінімальний безпечни ## Підключувані провайдери Compaction -Plugins можуть зареєструвати провайдера Compaction через `registerCompactionProvider()` в API Plugin. Коли `agents.defaults.compaction.provider` встановлено на id зареєстрованого провайдера, розширення safeguard делегує підсумовування цьому провайдеру замість вбудованого конвеєра `summarizeInStages`. +Plugins можуть реєструвати провайдера Compaction через `registerCompactionProvider()` в API Plugin. Коли для `agents.defaults.compaction.provider` задано id зареєстрованого провайдера, розширення safeguard делегує підсумовування цьому провайдеру замість вбудованого конвеєра `summarizeInStages`. -- `provider`: id зареєстрованого Plugin провайдера Compaction. Не задавайте, щоб використовувати стандартне LLM-підсумовування. +- `provider`: id зареєстрованого Plugin провайдера Compaction. Залиште невстановленим для стандартного підсумовування LLM. - Установлення `provider` примусово задає `mode: "safeguard"`. - Провайдери отримують ті самі інструкції Compaction і політику збереження ідентифікаторів, що й вбудований шлях. -- Safeguard усе одно зберігає контекст суфікса нещодавніх ходів і розділених ходів після виводу провайдера. +- Safeguard усе ще зберігає контекст суфікса нещодавніх ходів і розділених ходів після виводу провайдера. - Вбудоване підсумовування safeguard повторно дистилює попередні підсумки з новими повідомленнями замість дослівного збереження повного попереднього підсумку. -- Режим Safeguard вмикає аудити якості підсумків за замовчуванням; установіть - `qualityGuard.enabled: false`, щоб пропустити поведінку повторної спроби при неправильному форматі виводу. -- Якщо провайдер зазнає невдачі або повертає порожній результат, OpenClaw автоматично повертається до вбудованого LLM-підсумовування. -- Сигнали переривання/тайм-ауту перекидаються далі (не приглушуються), щоб поважати скасування викликачем. +- Режим safeguard за замовчуванням вмикає аудити якості підсумків; установіть + `qualityGuard.enabled: false`, щоб пропустити поведінку повторної спроби у разі некоректно сформованого виводу. +- Якщо провайдер зазнає помилки або повертає порожній результат, OpenClaw автоматично повертається до вбудованого підсумовування LLM. +- Сигнали переривання/тайм-ауту перекидаються далі (не поглинаються), щоб поважати скасування викликувачем. Джерело: `src/plugins/compaction-provider.ts`, `src/agents/pi-hooks/compaction-safeguard.ts`. --- -## Видимі для користувача поверхні +## Поверхні, видимі користувачу -Ви можете спостерігати Compaction і стан сеансу через: +Ви можете спостерігати Compaction і стан сесії через: -- `/status` (у будь-якому сеансі чату) +- `/status` (у будь-якій чат-сесії) - `openclaw status` (CLI) - `openclaw sessions` / `sessions --json` - Детальний режим: `🧹 Auto-compaction complete` + кількість Compaction --- -## Тихе обслуговування (`NO_REPLY`) +## Тихе housekeeping (`NO_REPLY`) -OpenClaw підтримує «тихі» ходи для фонових завдань, де користувач не має бачити проміжний вивід. +OpenClaw підтримує “тихі” ходи для фонових завдань, де користувач не має бачити проміжний вивід. Умовність: -- Помічник починає свій вивід із точного тихого токена `NO_REPLY` / - `no_reply`, щоб позначити «не доставляти відповідь користувачу». -- OpenClaw вилучає/пригнічує це на рівні доставки. -- Пригнічення точного тихого токена не залежить від регістру, тому `NO_REPLY` і - `no_reply` обидва враховуються, коли весь payload — це лише тихий токен. -- Це лише для справді фонових ходів без доставки; це не скорочення для +- Асистент починає свій вивід із точного тихого токена `NO_REPLY` / + `no_reply`, щоб указати “не доставляти відповідь користувачу”. +- OpenClaw видаляє/пригнічує це на рівні доставки. +- Пригнічення точного тихого токена не залежить від регістру, тож `NO_REPLY` і + `no_reply` обидва враховуються, коли весь payload є лише тихим токеном. +- Це лише для справжніх фонових ходів без доставки; це не скорочення для звичайних дієвих запитів користувача. -Починаючи з `2026.1.10`, OpenClaw також пригнічує **чернетковий/typing streaming**, коли -частковий фрагмент починається з `NO_REPLY`, тож тихі операції не витікають частковим +Станом на `2026.1.10`, OpenClaw також пригнічує **потокове передавання чернетки/набору тексту**, коли +частковий фрагмент починається з `NO_REPLY`, щоб тихі операції не витікали частковим виводом посеред ходу. --- -## «Скидання пам’яті» перед Compaction (реалізовано) +## “Скидання пам’яті” перед Compaction (реалізовано) -Мета: перед автоматичним Compaction запустити тихий агентний хід, який записує довговічний -стан на диск (наприклад, `memory/YYYY-MM-DD.md` у робочій області агента), щоб Compaction не міг -стерти критично важливий контекст. +Мета: перед автоматичною Compaction запустити тихий агентний хід, який записує довговічний +стан на диск (наприклад, `memory/YYYY-MM-DD.md` у робочому просторі агента), щоб Compaction не могла +стерти критичний контекст. OpenClaw використовує підхід **скидання перед порогом**: -1. Відстежувати використання контексту сеансу. -2. Коли воно перетинає «м’який поріг» (нижче порога Compaction Pi), запустити тиху - директиву «запиши пам’ять зараз» для агента. +1. Відстежувати використання контексту сесії. +2. Коли воно перетинає “м’який поріг” (нижчий за поріг Compaction Pi), запустити тиху + директиву “запиши пам’ять зараз” для агента. 3. Використати точний тихий токен `NO_REPLY` / `no_reply`, щоб користувач не бачив нічого. Конфігурація (`agents.defaults.compaction.memoryFlush`): - `enabled` (за замовчуванням: `true`) -- `model` (необов’язкове точне перевизначення провайдера/моделі для ходу скидання, наприклад `ollama/qwen3:8b`) +- `model` (опціональне точне перевизначення провайдера/моделі для ходу скидання, наприклад `ollama/qwen3:8b`) - `softThresholdTokens` (за замовчуванням: `4000`) - `prompt` (повідомлення користувача для ходу скидання) -- `systemPrompt` (додатковий системний prompt, доданий для ходу скидання) +- `systemPrompt` (додатковий системний промпт, доданий для ходу скидання) -Примітки: +Нотатки: -- Стандартний prompt/system prompt містить підказку `NO_REPLY`, щоб пригнітити +- Стандартний prompt/system prompt містять підказку `NO_REPLY`, щоб пригнітити доставку. -- Коли `model` задано, хід скидання використовує цю модель без успадкування - ланцюга fallback активного сеансу, тож локальне-only обслуговування не виконує тихий +- Коли задано `model`, хід скидання використовує цю модель без успадкування + fallback-ланцюга активної сесії, щоб локальне housekeeping не виконувало тихий fallback до платної розмовної моделі. -- Скидання виконується один раз за цикл Compaction (відстежується в `sessions.json`). -- Скидання виконується лише для вбудованих сеансів Pi (бекенди CLI пропускають його). -- Скидання пропускається, коли робоча область сеансу доступна лише для читання (`workspaceAccess: "ro"` або `"none"`). -- Див. [Пам’ять](/uk/concepts/memory) щодо структури файлів робочої області та патернів запису. +- Скидання запускається один раз за цикл Compaction (відстежується в `sessions.json`). +- Скидання запускається лише для вбудованих сесій Pi (бекенди CLI пропускають його). +- Скидання пропускається, коли робочий простір сесії доступний лише для читання (`workspaceAccess: "ro"` або `"none"`). +- Див. [Пам’ять](/uk/concepts/memory) щодо структури файлів робочого простору і патернів запису. Pi також надає хук `session_before_compact` в API розширення, але логіка скидання OpenClaw сьогодні живе на боці Gateway. @@ -434,16 +437,16 @@ Pi також надає хук `session_before_compact` в API розширен ## Контрольний список усунення несправностей -- Неправильний ключ сеансу? Почніть із [/concepts/session](/uk/concepts/session) і підтвердьте `sessionKey` у `/status`. -- Невідповідність сховища й транскрипту? Підтвердьте хост Gateway і шлях сховища з `openclaw status`. +- Ключ сесії неправильний? Почніть із [/concepts/session](/uk/concepts/session) і підтвердьте `sessionKey` у `/status`. +- Невідповідність сховища і транскрипта? Підтвердьте хост Gateway і шлях сховища з `openclaw status`. - Спам Compaction? Перевірте: - - вікно контексту моделі (завелике мале) - - налаштування Compaction (`reserveTokens` занадто високий для вікна моделі може спричинити раніший Compaction) - - роздування результатів інструментів: увімкніть/налаштуйте обрізання сеансу -- Витік тихих ходів? Підтвердьте, що відповідь починається з `NO_REPLY` (точний токен без урахування регістру) і ви використовуєте збірку, яка містить виправлення пригнічення streaming. + - контекстне вікно моделі (замале) + - налаштування Compaction (`reserveTokens` завеликий для вікна моделі може спричиняти ранішу Compaction) + - роздування результатів інструментів: увімкніть/налаштуйте обрізання сесії +- Тихі ходи витікають? Підтвердьте, що відповідь починається з `NO_REPLY` (точний токен без урахування регістру), і що ви використовуєте збірку, яка містить виправлення пригнічення потокового передавання. ## Пов’язане -- [Керування сеансами](/uk/concepts/session) -- [Обрізання сеансу](/uk/concepts/session-pruning) +- [Керування сесіями](/uk/concepts/session) +- [Обрізання сесії](/uk/concepts/session-pruning) - [Рушій контексту](/uk/concepts/context-engine)