From a85e6cae47f342ddb38eebf45b50490034958507 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Tue, 28 Apr 2026 03:23:31 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/automation/cron-jobs.md | 210 ++++----- docs/uk/cli/cron.md | 108 ++--- docs/uk/concepts/memory-qmd.md | 183 ++++---- docs/uk/concepts/qa-matrix.md | 139 +++--- docs/uk/plugins/sdk-migration.md | 781 ++++++++++++++++--------------- 5 files changed, 715 insertions(+), 706 deletions(-) diff --git a/docs/uk/automation/cron-jobs.md b/docs/uk/automation/cron-jobs.md index 23b2df545..510c62f85 100644 --- a/docs/uk/automation/cron-jobs.md +++ b/docs/uk/automation/cron-jobs.md @@ -7,15 +7,15 @@ sidebarTitle: Scheduled tasks summary: Заплановані завдання, Webhook-и та тригери Gmail PubSub для планувальника Gateway title: Заплановані завдання x-i18n: - generated_at: "2026-04-28T01:19:13Z" + generated_at: "2026-04-28T03:20:29Z" model: gpt-5.4 provider: openai - source_hash: c1a044f3d76acebec45e631b6b5c3bffc753543afd21f8e1a16326d1c50aa50b + source_hash: df45c96f3e803ede8c4c2d24a9c3ae489967f052d0279235c17fef4759771dbb source_path: automation/cron-jobs.md workflow: 15 --- -Cron — це вбудований планувальник Gateway. Він зберігає завдання, пробуджує агента в потрібний час і може повертати результат назад у чат-канал або до кінцевої точки Webhook. +Cron — це вбудований планувальник Gateway. Він зберігає завдання, пробуджує агента в потрібний час і може повертати результат назад у чат-канал або на кінцеву точку Webhook. ## Швидкий старт @@ -44,41 +44,41 @@ Cron — це вбудований планувальник Gateway. Він зб -## Як працює cron +## Як працює Cron -- Cron працює **всередині процесу Gateway** (а не всередині моделі). +- Cron запускається **всередині процесу Gateway** (не всередині моделі). - Визначення завдань зберігаються в `~/.openclaw/cron/jobs.json`, тому перезапуски не призводять до втрати розкладів. -- Стан виконання під час роботи зберігається поруч у `~/.openclaw/cron/jobs-state.json`. Якщо ви відстежуєте визначення cron у git, відстежуйте `jobs.json` і додавайте `jobs-state.json` до gitignore. -- Після розділення старіші версії OpenClaw можуть читати `jobs.json`, але можуть трактувати завдання як нові, оскільки поля часу виконання тепер зберігаються в `jobs-state.json`. -- Коли `jobs.json` редагується під час роботи або зупинки Gateway, OpenClaw порівнює змінені поля розкладу з метаданими очікуваного слота часу виконання та очищає застарілі значення `nextRunAtMs`. Просте переформатування або переписування лише з іншим порядком ключів зберігає очікуваний слот. +- Стан виконання під час роботи зберігається поруч у `~/.openclaw/cron/jobs-state.json`. Якщо ви відстежуєте визначення cron у git, відстежуйте `jobs.json`, а `jobs-state.json` додайте до gitignore. +- Після цього розділення старіші версії OpenClaw можуть читати `jobs.json`, але можуть сприймати завдання як нові, оскільки поля стану виконання тепер зберігаються в `jobs-state.json`. +- Коли `jobs.json` змінюється під час роботи Gateway або коли він зупинений, OpenClaw порівнює змінені поля розкладу з метаданими очікуваного слота виконання та очищає застарілі значення `nextRunAtMs`. Перезапис лише форматування або порядку ключів зберігає очікуваний слот. - Усі виконання cron створюють записи [фонових завдань](/uk/automation/tasks). -- Одноразові завдання (`--at`) автоматично видаляються після успішного виконання за замовчуванням. -- Ізольовані запуски cron в межах найкращого зусилля закривають відстежувані вкладки браузера/процеси для своєї сесії `cron:` після завершення запуску, щоб відокремлена автоматизація браузера не залишала сирітські процеси. -- Ізольовані запуски cron також захищаються від застарілих відповідей-підтверджень. Якщо перший результат — це лише проміжне оновлення статусу (`on it`, `pulling everything together` та подібні підказки), і жоден дочірній запуск субагента більше не відповідає за фінальну відповідь, OpenClaw один раз повторно формує запит для отримання фактичного результату перед доставкою. -- Ізольовані запуски cron віддають перевагу структурованим метаданим відмови виконання з вбудованого запуску, а потім використовують відомі фінальні маркери підсумку/виводу, такі як `SYSTEM_RUN_DENIED` і `INVALID_REQUEST`, щоб заблокована команда не була позначена як успішний запуск. -- Ізольовані запуски cron також трактують збої агента на рівні запуску як помилки завдання, навіть коли відповідь не була згенерована, тому збої моделі/провайдера збільшують лічильники помилок і запускають сповіщення про збій замість позначення завдання як успішного. +- Одноразові завдання (`--at`) за замовчуванням автоматично видаляються після успішного виконання. +- Ізольовані запуски cron у межах best-effort закривають відстежувані вкладки браузера/процеси для їхньої сесії `cron:` після завершення запуску, щоб відокремлена автоматизація браузера не залишала після себе осиротілі процеси. +- Ізольовані запуски cron також захищаються від застарілих відповідей-підтверджень. Якщо перший результат — це лише проміжне оновлення статусу (`on it`, `pulling everything together` та подібні підказки) і жоден дочірній запуск subagent більше не відповідає за фінальну відповідь, OpenClaw один раз повторно надсилає запит для отримання фактичного результату перед доставленням. +- Ізольовані запуски cron віддають перевагу структурованим метаданим відмови у виконанні з вбудованого запуску, а потім використовують відомі фінальні маркери підсумку/виводу, як-от `SYSTEM_RUN_DENIED` і `INVALID_REQUEST`, тож заблокована команда не позначається як успішний запуск. +- Ізольовані запуски cron також трактують збої агента на рівні запуску як помилки завдання, навіть якщо payload відповіді не було створено, тому збої моделі/провайдера збільшують лічильники помилок і запускають сповіщення про збої, замість того щоб позначати завдання як успішне. -Узгодження завдань для cron насамперед належить часу виконання, а вже потім спирається на довговічну історію: активне cron-завдання залишається активним, поки середовище виконання cron усе ще відстежує це завдання як таке, що виконується, навіть якщо старий рядок дочірньої сесії ще існує. Щойно середовище виконання перестає володіти завданням і минає 5-хвилинне пільгове вікно, перевірки обслуговування аналізують збережені журнали запусків і стан завдання для відповідного запуску `cron::`. Якщо ця довговічна історія показує фінальний результат, журнал завдань фіналізується на її основі; інакше обслуговування, що належить Gateway, може позначити завдання як `lost`. Автономний аудит CLI може відновлювати стан з довговічної історії, але він не трактує власний порожній внутрішньопроцесний набір активних завдань як доказ того, що запуск cron, яким володіє Gateway, зник. +Узгодження завдань для cron спочатку належить runtime, а вже потім спирається на стійку історію: активне cron-завдання залишається активним, поки runtime cron все ще відстежує це завдання як таке, що виконується, навіть якщо старий рядок дочірньої сесії все ще існує. Щойно runtime перестає володіти завданням і минає 5-хвилинне вікно пільгового часу, перевірки обслуговування аналізують збережені журнали запусків і стан завдання для відповідного запуску `cron::`. Якщо ця стійка історія показує термінальний результат, журнал завдань фіналізується на її основі; інакше обслуговування, яким володіє Gateway, може позначити завдання як `lost`. Офлайн-аудит CLI може відновитися зі стійкої історії, але він не трактує власний порожній набір активних завдань у процесі як доказ того, що запуск cron, яким володіє Gateway, зник. ## Типи розкладу -| Вид | Прапорець CLI | Опис | -| ------- | ------------- | --------------------------------------------------------- | -| `at` | `--at` | Одноразова часова мітка (ISO 8601 або відносна, як `20m`) | -| `every` | `--every` | Фіксований інтервал | -| `cron` | `--cron` | Cron-вираз із 5 або 6 полів з необов’язковим `--tz` | +| Тип | Прапорець CLI | Опис | +| ------- | ------------- | ------------------------------------------------------- | +| `at` | `--at` | Одноразова позначка часу (ISO 8601 або відносна, як `20m`) | +| `every` | `--every` | Фіксований інтервал | +| `cron` | `--cron` | Вираз cron із 5 або 6 полів з необов’язковим `--tz` | -Часові мітки без часової зони трактуються як UTC. Додайте `--tz America/New_York` для планування за місцевим настінним часом. +Позначки часу без часового поясу трактуються як UTC. Додайте `--tz America/New_York` для планування за локальним настінним часом. -Повторювані вирази на початок кожної години автоматично зсуваються до 5 хвилин, щоб зменшити пікове навантаження. Використовуйте `--exact`, щоб примусово задати точний час, або `--stagger 30s` для явного вікна. +Періодичні вирази на початок кожної години автоматично зміщуються до 5 хвилин, щоб зменшити піки навантаження. Використовуйте `--exact`, щоб примусово задати точний час, або `--stagger 30s` для явного вікна. -### День місяця і день тижня використовують логіку OR +### День місяця та день тижня використовують логіку OR -Cron-вирази розбираються за допомогою [croner](https://github.com/Hexagon/croner). Коли і поле дня місяця, і поле дня тижня не є шаблонами-джокерами, croner виконує збіг, коли **збігається будь-яке** з полів — а не обидва. Це стандартна поведінка Vixie cron. +Вирази cron аналізуються за допомогою [croner](https://github.com/Hexagon/croner). Коли і поле дня місяця, і поле дня тижня не є wildcard, croner виконує збіг, коли **збігається будь-яке** з цих полів — а не обидва. Це стандартна поведінка cron у стилі Vixie. ``` # Intended: "9 AM on the 15th, only if it's a Monday" @@ -86,34 +86,34 @@ Cron-вирази розбираються за допомогою [croner](http 0 9 15 * 1 ``` -Такий вираз спрацьовує приблизно 5–6 разів на місяць, а не 0–1 раз. Тут OpenClaw використовує стандартну OR-поведінку Croner. Щоб вимагати виконання обох умов, використовуйте модифікатор дня тижня `+` від Croner (`0 9 15 * +1`) або плануйте за одним полем і перевіряйте інше в prompt чи команді вашого завдання. +Це спрацьовує приблизно 5–6 разів на місяць замість 0–1 разу на місяць. Тут OpenClaw використовує стандартну OR-поведінку Croner. Щоб вимагати виконання обох умов, використовуйте модифікатор дня тижня `+` у Croner (`0 9 15 * +1`) або плануйте за одним полем, а інше перевіряйте у prompt чи команді вашого завдання. ## Стилі виконання -| Стиль | Значення `--session` | Виконується в | Найкраще підходить для | -| --------------- | -------------------- | ------------------------- | ----------------------------------- | -| Основна сесія | `main` | Наступний хід Heartbeat | Нагадувань, системних подій | -| Ізольований | `isolated` | Виділений `cron:` | Звітів, фонових рутинних завдань | -| Поточна сесія | `current` | Прив’язується при створенні | Періодичної роботи з урахуванням контексту | -| Користувацька сесія | `session:custom-id` | Іменована постійна сесія | Процесів, що спираються на історію | +| Стиль | Значення `--session` | Виконується в | Найкраще підходить для | +| --------------- | -------------------- | ------------------------ | -------------------------------- | +| Основна сесія | `main` | Наступний цикл Heartbeat | Нагадувань, системних подій | +| Ізольований | `isolated` | Виділений `cron:` | Звітів, фонових завдань | +| Поточна сесія | `current` | Прив’язується під час створення | Періодичної роботи з контекстом | +| Користувацька сесія | `session:custom-id` | Стійка іменована сесія | Робочих процесів, що спираються на історію | - - Завдання **основної сесії** ставлять у чергу системну подію та, за потреби, пробуджують Heartbeat (`--wake now` або `--wake next-heartbeat`). Ці системні події не подовжують актуальність щоденного/неактивного скидання для цільової сесії. **Ізольовані** завдання виконують окремий хід агента з новою сесією. **Користувацькі сесії** (`session:xxx`) зберігають контекст між запусками, що дає змогу реалізовувати процеси на кшталт щоденних стендапів, які спираються на попередні підсумки. + + Завдання **основної сесії** ставлять у чергу системну подію та за потреби пробуджують Heartbeat (`--wake now` або `--wake next-heartbeat`). Ці системні події не подовжують актуальність щоденного/idle скидання для цільової сесії. **Ізольовані** завдання виконують окремий цикл агента зі свіжою сесією. **Користувацькі сесії** (`session:xxx`) зберігають контекст між запусками, що дає змогу будувати сценарії на кшталт щоденних стендапів, які спираються на попередні підсумки. - - Для ізольованих завдань «нова сесія» означає новий ідентифікатор транскрипту/сесії для кожного запуску. OpenClaw може переносити безпечні вподобання, такі як налаштування thinking/fast/verbose, мітки та явні вибрані користувачем перевизначення моделі/автентифікації, але не успадковує фоновий контекст розмови зі старішого рядка cron: маршрутизацію каналу/групи, політику надсилання або черги, підвищення привілеїв, походження чи прив’язку часу виконання ACP. Використовуйте `current` або `session:`, коли періодичне завдання має навмисно розвиватися в межах того самого контексту розмови. + + Для ізольованих завдань "свіжа сесія" означає новий transcript/session id для кожного запуску. OpenClaw може переносити безпечні налаштування, як-от параметри thinking/fast/verbose, мітки та явно вибрані користувачем перевизначення model/auth, але не успадковує фоновий контекст розмови зі старого рядка cron: маршрутизацію каналу/групи, політику надсилання чи черги, підвищення привілеїв, походження або прив’язку runtime ACP. Використовуйте `current` або `session:`, коли періодичне завдання має навмисно розвиватися в межах того самого контексту розмови. - - Для ізольованих завдань завершення часу виконання тепер включає очищення браузера для цієї cron-сесії в межах найкращого зусилля. Помилки очищення ігноруються, щоб фактичний результат cron усе одно мав пріоритет. + + Для ізольованих завдань завершення runtime тепер включає best-effort очищення браузера для цієї сесії cron. Збої очищення ігноруються, щоб фактичний результат cron усе одно мав пріоритет. - Ізольовані запуски cron також звільняють будь-які вбудовані екземпляри часу виконання MCP, створені для завдання, через спільний шлях очищення часу виконання. Це відповідає тому, як завершуються клієнти MCP для основної та користувацьких сесій, тому ізольовані cron-завдання не спричиняють витоки дочірніх stdio-процесів або довготривалих MCP-з’єднань між запусками. + Ізольовані запуски cron також звільняють будь-які вбудовані екземпляри runtime MCP, створені для завдання, через спільний шлях очищення runtime. Це відповідає тому, як клієнти MCP для основної сесії та користувацької сесії завершуються, тому ізольовані cron-завдання не спричиняють витоки дочірніх stdio-процесів або довготривалих з’єднань MCP між запусками. - - Коли ізольовані запуски cron оркеструють субагентів, доставка також віддає перевагу фінальному виводу нащадка замість застарілого проміжного тексту батьківського запуску. Якщо нащадки все ще виконуються, OpenClaw пригнічує це часткове батьківське оновлення замість його оголошення. + + Коли ізольовані запуски cron оркеструють subagent-ів, доставлення також віддає перевагу фінальному виводу дочірнього елемента замість застарілого проміжного тексту батьківського. Якщо дочірні елементи все ще виконуються, OpenClaw пригнічує це часткове батьківське оновлення замість того, щоб оголошувати його. - Для цілей оголошення в Discord лише з текстом OpenClaw надсилає канонічний фінальний текст помічника один раз, замість повторного відтворення і потокового/проміжного текстового вмісту, і фінальної відповіді. Медіа та структуровані payload-и Discord, як і раніше, доставляються окремо, щоб не втратити вкладення та компоненти. + Для цілей оголошення Discord лише з текстом OpenClaw надсилає канонічний фінальний текст помічника один раз, замість того щоб повторно відтворювати і streamed/intermediate text payloads, і фінальну відповідь. Медіа та структуровані payload-и Discord, як і раніше, доставляються окремими payload-ами, щоб не втрачати вкладення та компоненти. @@ -121,7 +121,7 @@ Cron-вирази розбираються за допомогою [croner](http ### Параметри payload для ізольованих завдань - Текст prompt-а (обов’язковий для isolated). + Текст prompt (обов’язковий для isolated). Перевизначення моделі; використовує вибрану дозволену модель для завдання. @@ -130,50 +130,50 @@ Cron-вирази розбираються за допомогою [croner](http Перевизначення рівня thinking. - Пропустити інʼєкцію bootstrap-файлів робочого простору. + Пропустити ін’єкцію bootstrap-файлу робочого простору. - Обмежити набір інструментів, які може використовувати завдання, наприклад `--tools exec,read`. + Обмежити, які інструменти може використовувати завдання, наприклад `--tools exec,read`. -`--model` використовує вибрану дозволену модель як основну модель цього завдання. Це не те саме, що перевизначення `/model` у чат-сесії: налаштовані ланцюжки резервних варіантів усе одно застосовуються, коли основна модель завдання завершується невдачею. Якщо запитана модель не дозволена, cron записує попередження в журнал і повертається до вибору моделі агента/моделі за замовчуванням для цього завдання. +`--model` використовує вибрану дозволену модель як основну модель цього завдання. Це не те саме, що перевизначення `/model` для чат-сесії: налаштовані ланцюжки fallback, як і раніше, застосовуються, коли основна модель завдання зазнає збою. Якщо запитана модель не дозволена або її не вдається визначити, cron завершує запуск із явною помилкою валідації замість тихого fallback до моделі агента/моделі за замовчуванням для цього завдання. -Cron-завдання також можуть містити `fallbacks` на рівні payload. Якщо вони присутні, цей список замінює налаштований ланцюжок резервних варіантів для завдання. Використовуйте `fallbacks: []` у payload/API завдання, якщо вам потрібен строгий запуск cron, який пробує лише вибрану модель. Якщо в завдання є `--model`, але немає ні payload-, ні налаштованих fallback-ів, OpenClaw передає явне порожнє перевизначення fallback-ів, щоб основна модель агента не додавалася як прихована додаткова ціль повторної спроби. +Cron-завдання також можуть містити `fallbacks` на рівні payload. Якщо вони присутні, цей список замінює налаштований ланцюжок fallback для завдання. Використовуйте `fallbacks: []` у payload/API завдання, коли хочете суворий запуск cron, який пробує лише вибрану модель. Якщо завдання має `--model`, але не має fallback-ів ні в payload, ні в конфігурації, OpenClaw передає явне порожнє перевизначення fallback, щоб primary агента не додавався як прихована додаткова ціль повторної спроби. Пріоритет вибору моделі для ізольованих завдань такий: -1. Перевизначення моделі Gmail hook (коли запуск надійшов із Gmail і це перевизначення дозволене) -2. `model` у payload конкретного завдання +1. Перевизначення моделі з hook Gmail (коли запуск походить із Gmail і це перевизначення дозволене) +2. `model` у payload окремого завдання 3. Збережене перевизначення моделі сесії cron, вибране користувачем 4. Вибір моделі агента/за замовчуванням -Fast mode також слідує за визначеним актуальним вибором. Якщо конфігурація вибраної моделі має `params.fastMode`, ізольований cron використовує його за замовчуванням. Збережене перевизначення сесії `fastMode` усе одно має пріоритет над конфігурацією в обох напрямках. +Швидкий режим також дотримується визначеного активного вибору. Якщо конфігурація вибраної моделі має `params.fastMode`, ізольований cron за замовчуванням використовує це значення. Збережене в сесії перевизначення `fastMode` все одно має пріоритет над конфігурацією в будь-якому напрямку. -Якщо ізольований запуск натрапляє на живу передачу під час перемикання моделі, cron повторює спробу з перемкненим провайдером/моделлю та зберігає цей живий вибір для активного запуску перед повтором. Якщо перемикання також містить новий профіль автентифікації, cron теж зберігає це перевизначення профілю автентифікації для активного запуску. Кількість повторів обмежена: після початкової спроби плюс 2 повтори через перемикання cron припиняє роботу замість нескінченного циклу. +Якщо ізольований запуск натрапляє на live model-switch handoff, cron виконує повторну спробу з перемкненим провайдером/моделлю та зберігає цей live selection для активного запуску перед повторною спробою. Коли перемикання також містить новий auth profile, cron також зберігає це перевизначення auth profile для активного запуску. Повторні спроби обмежені: після початкової спроби плюс 2 повторних спроб перемикання cron перериває виконання, а не зациклюється безкінечно. -Перш ніж ізольований запуск cron увійде в runner агента, OpenClaw перевіряє досяжні локальні кінцеві точки провайдерів для налаштованих провайдерів `api: "ollama"` і `api: "openai-completions"`, у яких `baseUrl` вказує на loopback, приватну мережу або `.local`. Якщо така кінцева точка недоступна, запуск записується як `skipped` із чіткою помилкою провайдера/моделі замість початку виклику моделі. Результат перевірки кінцевої точки кешується на 5 хвилин, тому багато прострочених завдань, що використовують той самий недоступний локальний сервер Ollama, vLLM, SGLang або LM Studio, спільно використовують одну невелику перевірку замість створення шторму запитів. Запуски, пропущені через попередню перевірку провайдера, не збільшують backoff для помилок виконання; увімкніть `failureAlert.includeSkipped`, якщо хочете отримувати повторні сповіщення про пропуски. +Перш ніж ізольований запуск cron увійде в runner агента, OpenClaw перевіряє досяжні локальні кінцеві точки провайдерів для налаштованих провайдерів `api: "ollama"` і `api: "openai-completions"`, у яких `baseUrl` є loopback, приватною мережею або `.local`. Якщо ця кінцева точка недоступна, запуск записується як `skipped` із чіткою помилкою провайдера/моделі замість початку виклику моделі. Результат перевірки кінцевої точки кешується на 5 хвилин, тож багато завдань, строк виконання яких настав і які використовують той самий недоступний локальний сервер Ollama, vLLM, SGLang або LM Studio, спільно використовують одну невелику перевірку замість створення шторму запитів. Запуски, пропущені через попередню перевірку провайдера, не збільшують backoff помилок виконання; увімкніть `failureAlert.includeSkipped`, якщо хочете отримувати повторні сповіщення про пропуски. -## Доставка та вивід +## Доставлення та вивід | Режим | Що відбувається | | ---------- | ------------------------------------------------------------------- | -| `announce` | Резервно доставляє фінальний текст до цілі, якщо агент не надіслав його | +| `announce` | Резервно доставляє фінальний текст до цілі, якщо агент його не надіслав | | `webhook` | Надсилає payload завершеної події методом POST на URL | -| `none` | Без резервної доставки з боку runner | +| `none` | Без резервного доставлення з runner | -Використовуйте `--announce --channel telegram --to "-1001234567890"` для доставки в канал. Для тем форуму Telegram використовуйте `-1001234567890:topic:123`; прямі RPC/конфігураційні виклики також можуть передавати `delivery.threadId` як рядок або число. Для цілей Slack/Discord/Mattermost слід використовувати явні префікси (`channel:`, `user:`). Ідентифікатори кімнат Matrix чутливі до регістру; використовуйте точний ідентифікатор кімнати або форму `room:!room:server` із Matrix. +Використовуйте `--announce --channel telegram --to "-1001234567890"` для доставлення в канал. Для тем форуму Telegram використовуйте `-1001234567890:topic:123`; прямі виклики RPC/config також можуть передавати `delivery.threadId` як рядок або число. Для цілей Slack/Discord/Mattermost слід використовувати явні префікси (`channel:`, `user:`). Ідентифікатори кімнат Matrix чутливі до регістру; використовуйте точний room ID або форму `room:!room:server` із Matrix. -Для ізольованих завдань доставка в чат є спільною. Якщо маршрут чату доступний, агент може використовувати інструмент `message`, навіть коли завдання використовує `--no-deliver`. Якщо агент надсилає повідомлення до налаштованої/поточної цілі, OpenClaw пропускає резервне оголошення. В інших випадках `announce`, `webhook` і `none` визначають лише те, що runner робить із фінальною відповіддю після ходу агента. +Для ізольованих завдань доставлення в чат є спільним. Якщо маршрут чату доступний, агент може використовувати інструмент `message`, навіть коли завдання використовує `--no-deliver`. Якщо агент надсилає повідомлення на налаштовану/поточну ціль, OpenClaw пропускає резервне announce. Інакше `announce`, `webhook` і `none` керують лише тим, що runner робить із фінальною відповіддю після циклу агента. -Коли агент створює ізольоване нагадування з активного чату, OpenClaw зберігає збережену актуальну ціль доставки для резервного маршруту announce. Внутрішні ключі сесії можуть бути в нижньому регістрі; цілі доставки провайдерів не реконструюються з цих ключів, коли доступний контекст поточного чату. +Коли агент створює ізольоване нагадування з активного чату, OpenClaw зберігає збережену активну ціль доставлення для резервного маршруту announce. Внутрішні ключі сесії можуть бути в нижньому регістрі; цілі доставлення провайдера не відтворюються з цих ключів, коли доступний контекст поточного чату. -Сповіщення про збої використовують окремий шлях призначення: +Сповіщення про збої проходять окремим шляхом призначення: - `cron.failureDestination` задає глобальне значення за замовчуванням для сповіщень про збої. -- `job.delivery.failureDestination` перевизначає його для окремого завдання. -- Якщо не задано жодного з них і завдання вже доставляє через `announce`, сповіщення про збої тепер резервно надсилаються до цієї основної цілі announce. -- `delivery.failureDestination` підтримується лише для завдань із `sessionTarget="isolated"`, якщо основний режим доставки не є `webhook`. -- `failureAlert.includeSkipped: true` додає для завдання або глобальної політики сповіщень cron повторні сповіщення про пропущені запуски. Пропущені запуски ведуть окремий лічильник послідовних пропусків, тому не впливають на backoff помилок виконання. +- `job.delivery.failureDestination` перевизначає це для окремого завдання. +- Якщо не задано жодного з них і завдання вже доставляє через `announce`, сповіщення про збої тепер резервно надсилаються до цієї основної announce-цілі. +- `delivery.failureDestination` підтримується лише для завдань із `sessionTarget="isolated"`, якщо тільки основний режим доставлення не є `webhook`. +- `failureAlert.includeSkipped: true` додає завдання або глобальну політику сповіщень cron до повторних сповіщень про пропущені запуски. Пропущені запуски ведуть окремий лічильник послідовних пропусків, тому вони не впливають на backoff помилок виконання. ## Приклади CLI @@ -218,7 +218,7 @@ Fast mode також слідує за визначеним актуальним ## Webhook-и -Gateway може надавати кінцеві точки HTTP Webhook для зовнішніх тригерів. Увімкніть у конфігурації: +Gateway може надавати HTTP-кінцеві точки Webhook для зовнішніх тригерів. Увімкніть у конфігурації: ```json5 { @@ -237,11 +237,11 @@ Gateway може надавати кінцеві точки HTTP Webhook для - `Authorization: Bearer ` (рекомендовано) - `x-openclaw-token: ` -Токени в рядку запиту відхиляються. +Токени в query-string відхиляються. - Додає системну подію до черги для основної сесії: + Поставити системну подію в чергу для основної сесії: ```bash curl -X POST http://127.0.0.1:18789/hooks/wake \ @@ -259,7 +259,7 @@ Gateway може надавати кінцеві точки HTTP Webhook для - Запускає ізольований хід агента: + Запустити ізольований цикл агента: ```bash curl -X POST http://127.0.0.1:18789/hooks/agent \ @@ -268,31 +268,31 @@ Gateway може надавати кінцеві точки HTTP Webhook для -d '{"message":"Summarize inbox","name":"Email","model":"openai/gpt-5.4"}' ``` - Поля: `message` (обов’язкове), `name`, `agentId`, `wakeMode`, `deliver`, `channel`, `to`, `model`, `fallbacks`, `thinking`, `timeoutSeconds`. + Поля: `message` (обов’язково), `name`, `agentId`, `wakeMode`, `deliver`, `channel`, `to`, `model`, `fallbacks`, `thinking`, `timeoutSeconds`. - Користувацькі назви hook розв’язуються через `hooks.mappings` у конфігурації. Зіставлення можуть перетворювати довільні payload-и на дії `wake` або `agent` за допомогою шаблонів або перетворень коду. + Користувацькі назви hook-ів визначаються через `hooks.mappings` у конфігурації. Зіставлення можуть перетворювати довільні payload-и на дії `wake` або `agent` за допомогою шаблонів або перетворень коду. -Тримайте кінцеві точки hook за loopback, tailnet або довіреним reverse proxy. +Тримайте кінцеві точки hook-ів за loopback, tailnet або довіреним reverse proxy. - Використовуйте окремий токен hook; не використовуйте повторно токени автентифікації gateway. - Тримайте `hooks.path` на окремому підшляху; `/` відхиляється. - Установіть `hooks.allowedAgentIds`, щоб обмежити явну маршрутизацію `agentId`. - Залишайте `hooks.allowRequestSessionKey=false`, якщо вам не потрібні сесії, вибрані викликачем. -- Якщо ви вмикаєте `hooks.allowRequestSessionKey`, також установіть `hooks.allowedSessionKeyPrefixes`, щоб обмежити дозволені форми ключів сесії. -- Payload-и hook за замовчуванням обгортаються межами безпеки. +- Якщо ви вмикаєте `hooks.allowRequestSessionKey`, також задайте `hooks.allowedSessionKeyPrefixes`, щоб обмежити дозволені форми ключів сесії. +- Payload-и hook-ів за замовчуванням обгортаються межами безпеки. ## Інтеграція Gmail PubSub -Підключіть тригери вхідної скриньки Gmail до OpenClaw через Google PubSub. +Підключіть тригери вхідної пошти Gmail до OpenClaw через Google PubSub. -**Передумови:** CLI `gcloud`, `gog` (gogcli), увімкнені hooks OpenClaw, Tailscale для публічної кінцевої точки HTTPS. +**Необхідні умови:** CLI `gcloud`, `gog` (gogcli), увімкнені hooks OpenClaw, Tailscale для публічної HTTPS-кінцевої точки. ### Налаштування через майстер (рекомендовано) @@ -307,7 +307,7 @@ openclaw webhooks gmail setup --account openclaw@gmail.com Коли `hooks.enabled=true` і задано `hooks.gmail.account`, Gateway запускає `gog gmail watch serve` під час завантаження та автоматично поновлює watch. Установіть `OPENCLAW_SKIP_GMAIL_WATCHER=1`, щоб відмовитися. -### Одноразове ручне налаштування +### Ручне одноразове налаштування @@ -320,7 +320,7 @@ openclaw webhooks gmail setup --account openclaw@gmail.com ``` - + ```bash gcloud pubsub topics create gog-gmail-watch gcloud pubsub topics add-iam-policy-binding gog-gmail-watch \ @@ -384,11 +384,11 @@ openclaw cron edit --clear-agent Примітка щодо перевизначення моделі: - `openclaw cron add|edit --model ...` змінює вибрану модель завдання. -- Якщо модель дозволена, саме ця пара провайдер/модель потрапляє до ізольованого запуску агента. -- Якщо вона не дозволена, cron показує попередження і повертається до вибору моделі агента/моделі за замовчуванням для цього завдання. -- Налаштовані ланцюжки резервних варіантів усе одно застосовуються, оскільки `--model` у cron — це основна модель завдання, а не перевизначення `/model` сесії. -- `fallbacks` у payload замінює налаштовані fallback-и для цього завдання; `fallbacks: []` вимикає fallback і робить запуск строгим. -- Звичайний `--model` без явного або налаштованого списку fallback-ів не переходить до основної моделі агента як до тихої додаткової цілі повторної спроби. +- Якщо модель дозволена, саме ця комбінація провайдера/моделі потрапляє в ізольований запуск агента. +- Якщо вона не дозволена або її не вдається визначити, cron завершує запуск із явною помилкою валідації. +- Налаштовані ланцюжки fallback, як і раніше, застосовуються, тому що cron `--model` — це primary завдання, а не перевизначення `/model` для сесії. +- `fallbacks` у payload замінює налаштовані fallback-и для цього завдання; `fallbacks: []` вимикає fallback і робить запуск суворим. +- Звичайний `--model` без явного або налаштованого списку fallback не переходить до primary агента як до прихованої додаткової цілі повторної спроби. ## Конфігурація @@ -411,29 +411,29 @@ openclaw cron edit --clear-agent } ``` -`maxConcurrentRuns` обмежує як запланований dispatch cron, так і виконання ізольованих ходів агента. Ізольовані ходи агента cron внутрішньо використовують виділену чергу виконання `cron-nested`, тому збільшення цього значення дозволяє незалежним LLM-запускам cron просуватися паралельно, а не лише запускати їхні зовнішні оболонки cron. Спільна lane `nested`, що не належить cron, цим параметром не розширюється. +`maxConcurrentRuns` обмежує як заплановане диспетчеризування cron, так і виконання ізольованих циклів агента. Ізольовані цикли агента cron внутрішньо використовують окрему смугу виконання черги `cron-nested`, тому збільшення цього значення дає змогу незалежним LLM-запускам cron просуватися паралельно, а не лише запускати їхні зовнішні обгортки cron. Спільна не-cron смуга `nested` цим параметром не розширюється. -Sidecar стану часу виконання виводиться з `cron.store`: сховище `.json`, таке як `~/clawd/cron/jobs.json`, використовує `~/clawd/cron/jobs-state.json`, тоді як до шляху сховища без суфікса `.json` додається `-state.json`. +Побічний файл стану runtime виводиться з `cron.store`: сховище `.json`, таке як `~/clawd/cron/jobs.json`, використовує `~/clawd/cron/jobs-state.json`, а шлях сховища без суфікса `.json` отримує доданий суфікс `-state.json`. -Якщо ви вручну редагуєте `jobs.json`, не включайте `jobs-state.json` до системи контролю версій. OpenClaw використовує цей sidecar для очікуваних слотів, активних маркерів, метаданих останнього запуску та ідентичності розкладу, яка повідомляє планувальнику, коли завдання, відредаговане зовні, потребує нового `nextRunAtMs`. +Якщо ви редагуєте `jobs.json` вручну, не додавайте `jobs-state.json` до контролю версій. OpenClaw використовує цей побічний файл для очікуваних слотів, активних маркерів, метаданих останнього запуску та ідентичності розкладу, яка повідомляє планувальнику, коли завданню, відредагованому зовні, потрібен свіжий `nextRunAtMs`. -Вимкнути cron: `cron.enabled: false` або `OPENCLAW_SKIP_CRON=1`. +Вимкнення cron: `cron.enabled: false` або `OPENCLAW_SKIP_CRON=1`. - **Повтор одноразового завдання**: тимчасові помилки (ліміт швидкості, перевантаження, мережа, помилка сервера) повторюються до 3 разів з експоненційним backoff. Постійні помилки одразу вимикають завдання. + **Повторна спроба одноразового завдання**: тимчасові помилки (обмеження швидкості, перевантаження, мережа, помилка сервера) повторюються до 3 разів з експоненційним backoff. Постійні помилки вимикаються негайно. - **Повтор періодичного завдання**: експоненційний backoff (від 30 с до 60 хв) між повторними спробами. Після наступного успішного запуску backoff скидається. + **Повторна спроба періодичного завдання**: експоненційний backoff (від 30 с до 60 хв) між повторними спробами. Backoff скидається після наступного успішного запуску. - `cron.sessionRetention` (за замовчуванням `24h`) очищає записи сесій ізольованих запусків. `cron.runLog.maxBytes` / `cron.runLog.keepLines` автоматично очищають файли журналів запусків. + `cron.sessionRetention` (типово `24h`) обрізає записи сесій ізольованих запусків. `cron.runLog.maxBytes` / `cron.runLog.keepLines` автоматично обрізають файли журналів запуску. -## Усунення неполадок +## Усунення несправностей -### Послідовність команд +### Ланцюжок команд ```bash openclaw status @@ -449,22 +449,22 @@ openclaw doctor - Перевірте `cron.enabled` і змінну середовища `OPENCLAW_SKIP_CRON`. - - Підтвердьте, що Gateway працює безперервно. - - Для розкладів `cron` перевірте часовий пояс (`--tz`) порівняно з часовим поясом хоста. - - `reason: not-due` у виводі запуску означає, що ручний запуск було перевірено за допомогою `openclaw cron run --due`, і час виконання завдання ще не настав. + - Переконайтеся, що Gateway працює безперервно. + - Для розкладів `cron` перевірте часовий пояс (`--tz`) відносно часового поясу хоста. + - `reason: not-due` у виводі запуску означає, що ручний запуск було перевірено через `openclaw cron run --due`, і час виконання завдання ще не настав. - - - Режим доставки `none` означає, що резервне надсилання з боку runner не очікується. Агент усе ще може надсилати безпосередньо за допомогою інструмента `message`, коли маршрут чату доступний. - - Відсутня/неправильна ціль доставки (`channel`/`to`) означає, що вихідне надсилання було пропущено. - - Для Matrix скопійовані або застарілі завдання з ідентифікаторами кімнат `delivery.to` у нижньому регістрі можуть не працювати, оскільки ідентифікатори кімнат Matrix чутливі до регістру. Відредагуйте завдання, вказавши точне значення `!room:server` або `room:!room:server` з Matrix. - - Помилки автентифікації каналу (`unauthorized`, `Forbidden`) означають, що доставку було заблоковано обліковими даними. - - Якщо ізольований запуск повертає лише тихий токен (`NO_REPLY` / `no_reply`), OpenClaw пригнічує пряме вихідне надсилання, а також резервний шлях постановки підсумку в чергу, тому назад у чат нічого не публікується. - - Якщо агент має сам написати користувачу, перевірте, що завдання має придатний маршрут (`channel: "last"` із попереднім чатом або явний канал/ціль). + + - Режим доставлення `none` означає, що резервне надсилання з runner не очікується. Агент усе ще може надсилати напряму за допомогою інструмента `message`, коли доступний маршрут чату. + - Відсутня/недійсна ціль доставлення (`channel`/`to`) означає, що вихідне надсилання було пропущено. + - Для Matrix скопійовані або застарілі завдання з room ID у `delivery.to`, записаними в нижньому регістрі, можуть завершуватися помилкою, тому що room ID у Matrix чутливі до регістру. Відредагуйте завдання, вказавши точне значення `!room:server` або `room:!room:server` із Matrix. + - Помилки автентифікації каналу (`unauthorized`, `Forbidden`) означають, що доставлення було заблоковано обліковими даними. + - Якщо ізольований запуск повертає лише тихий токен (`NO_REPLY` / `no_reply`), OpenClaw пригнічує пряме вихідне доставлення, а також резервний шлях queued summary, тому назад у чат нічого не публікується. + - Якщо агент має сам надіслати повідомлення користувачу, перевірте, що завдання має придатний маршрут (`channel: "last"` із попереднім чатом або явний канал/ціль). - - - Актуальність щоденного та неактивного скидання не базується на `updatedAt`; див. [Керування сесіями](/uk/concepts/session#session-lifecycle). - - Пробудження cron, запуски heartbeat, сповіщення exec і службовий облік gateway можуть оновлювати рядок сесії для маршрутизації/статусу, але вони не подовжують `sessionStartedAt` або `lastInteractionAt`. - - Для застарілих рядків, створених до появи цих полів, OpenClaw може відновити `sessionStartedAt` із заголовка сесії в JSONL-транскрипті, якщо файл усе ще доступний. Застарілі неактивні рядки без `lastInteractionAt` використовують цей відновлений час початку як базову точку неактивності. + + - Актуальність щоденного та idle скидання не базується на `updatedAt`; див. [Керування сесіями](/uk/concepts/session#session-lifecycle). + - Пробудження cron, запуски heartbeat, сповіщення exec і службові дії gateway можуть оновлювати рядок сесії для маршрутизації/статусу, але вони не продовжують `sessionStartedAt` або `lastInteractionAt`. + - Для застарілих рядків, створених до появи цих полів, OpenClaw може відновити `sessionStartedAt` із заголовка сесії transcript JSONL, якщо файл ще доступний. Застарілі idle-рядки без `lastInteractionAt` використовують цей відновлений час запуску як базову точку idle. - Cron без `--tz` використовує часовий пояс хоста gateway. @@ -475,7 +475,7 @@ openclaw doctor ## Пов’язане -- [Автоматизація та завдання](/uk/automation) — усі механізми автоматизації в одному огляді +- [Автоматизація та завдання](/uk/automation) — усі механізми автоматизації з першого погляду - [Фонові завдання](/uk/automation/tasks) — журнал завдань для виконань cron -- [Heartbeat](/uk/gateway/heartbeat) — періодичні ходи основної сесії -- [Часовий пояс](/uk/concepts/timezone) — налаштування часового поясу +- [Heartbeat](/uk/gateway/heartbeat) — періодичні цикли основної сесії +- [Часовий пояс](/uk/concepts/timezone) — конфігурація часового поясу diff --git a/docs/uk/cli/cron.md b/docs/uk/cli/cron.md index f47c14a41..bed8bc0bd 100644 --- a/docs/uk/cli/cron.md +++ b/docs/uk/cli/cron.md @@ -2,23 +2,23 @@ read_when: - Вам потрібні заплановані завдання та пробудження - Ви налагоджуєте виконання Cron і журнали -summary: Довідка CLI для `openclaw cron` (планування та запуск фонових завдань) +summary: Довідник CLI для `openclaw cron` (планування та запуск фонових завдань) title: Cron x-i18n: - generated_at: "2026-04-28T01:19:14Z" + generated_at: "2026-04-28T03:20:28Z" model: gpt-5.4 provider: openai - source_hash: 35a9ba4c89c6022bda7e8c4dfb81d2efae7c541d73f4c4b36683fd128af0ba4d + source_hash: 15a67675caea0948e698f7c054da2662f4bcbcd8bdfe6c8c4d14b8f092076375 source_path: cli/cron.md workflow: 15 --- # `openclaw cron` -Керуйте завданнями Cron для планувальника Gateway. +Керуйте Cron-завданнями для планувальника Gateway. -Запустіть `openclaw cron --help`, щоб переглянути повну поверхню команд. Див. [Завдання Cron](/uk/automation/cron-jobs) для концептуального посібника. +Запустіть `openclaw cron --help`, щоб переглянути повну поверхню команд. Див. [Cron-завдання](/uk/automation/cron-jobs) для концептуального посібника. ## Сеанси @@ -30,33 +30,33 @@ x-i18n: - `main` прив’язується до основного сеансу агента. - `isolated` створює новий transcript та ідентифікатор сеансу для кожного запуску. - `current` прив’язується до активного сеансу на момент створення. - - `session:` фіксує явний ключ постійного сеансу. + - `session:` закріплює явний постійний ключ сеансу. - Ізольовані запуски скидають фоновий контекст розмови. Маршрутизація каналу та групи, політика надсилання/черги, підвищення привілеїв, походження та прив’язка середовища виконання ACP скидаються для нового запуску. Безпечні налаштування, а також явні вибрані користувачем перевизначення моделі чи автентифікації можуть переноситися між запусками. + Ізольовані запуски скидають фоновий контекст розмови. Маршрутизація каналу та групи, політика надсилання/черги, підвищення привілеїв, походження та прив’язка середовища виконання ACP скидаються для нового запуску. Безпечні налаштування та явні вибрані користувачем перевизначення моделі або автентифікації можуть зберігатися між запусками. ## Доставка -`openclaw cron list` і `openclaw cron show ` показують попередній перегляд визначеного маршруту доставки. Для `channel: "last"` попередній перегляд показує, чи маршрут було визначено з основного або поточного сеансу, чи він завершиться безпечною відмовою. +`openclaw cron list` і `openclaw cron show ` попередньо показують визначений маршрут доставки. Для `channel: "last"` попередній перегляд показує, чи маршрут визначено з основного або поточного сеансу, чи він завершиться безпечною відмовою. -Ізольовані завдання `cron add` за замовчуванням використовують доставку `--announce`. Використовуйте `--no-deliver`, щоб залишити вивід внутрішнім. `--deliver` лишається застарілим псевдонімом для `--announce`. +Ізольовані завдання `cron add` типово використовують доставку `--announce`. Використовуйте `--no-deliver`, щоб зберегти вивід внутрішнім. `--deliver` залишається застарілим псевдонімом для `--announce`. -### Володіння доставкою +### Власність доставки -Доставка чату для ізольованого Cron ділиться між агентом і виконавцем: +Для ізольованої доставки в чат Cron відповідальність спільно поділяють агент і виконавець: -- Агент може надсилати напряму за допомогою інструмента `message`, коли маршрут чату доступний. -- `announce` резервно доставляє лише остаточну відповідь, якщо агент не надіслав її напряму до визначеної цілі. +- Агент може надсилати безпосередньо за допомогою інструмента `message`, коли маршрут чату доступний. +- `announce` резервно доставляє лише фінальну відповідь, якщо агент не надіслав її безпосередньо до визначеної цілі. - `webhook` надсилає завершене корисне навантаження на URL. -- `none` вимикає резервну доставку виконавця. +- `none` вимикає резервну доставку виконавцем. -`--announce` — це резервна доставка виконавця для остаточної відповіді. `--no-deliver` вимикає цю резервну поведінку, але не прибирає інструмент `message` агента, коли маршрут чату доступний. +`--announce` — це резервна доставка виконавцем для фінальної відповіді. `--no-deliver` вимикає цю резервну доставку, але не прибирає інструмент `message` агента, коли маршрут чату доступний. -Нагадування, створені з активного чату, зберігають ціль доставки активного чату для резервної доставки announce. Внутрішні ключі сеансу можуть бути в нижньому регістрі; не використовуйте їх як джерело істини для чутливих до регістру ідентифікаторів провайдерів, таких як ідентифікатори кімнат Matrix. +Нагадування, створені з активного чату, зберігають ціль доставки поточного чату для резервної доставки announce. Внутрішні ключі сеансу можуть бути в нижньому регістрі; не використовуйте їх як джерело істини для чутливих до регістру ідентифікаторів постачальників, таких як ідентифікатори кімнат Matrix. ### Доставка збоїв @@ -70,34 +70,34 @@ x-i18n: Завдання основного сеансу можуть використовувати `delivery.failureDestination` лише тоді, коли основний режим доставки — `webhook`. Ізольовані завдання приймають його в усіх режимах. -Примітка: ізольовані запуски Cron трактують збої агента на рівні запуску як помилки завдання, навіть коли корисне навантаження відповіді не створюється, тому збої моделі/провайдера все одно збільшують лічильники помилок і запускають сповіщення про збої. +Примітка: ізольовані запуски Cron трактують збої агента на рівні запуску як помилки завдання, навіть коли не створено payload відповіді, тому збої моделі/постачальника все одно збільшують лічильники помилок і запускають сповіщення про збої. ## Планування ### Одноразові завдання -`--at ` планує одноразовий запуск. Дати й час без зсуву трактуються як UTC, якщо ви також не передасте `--tz `, що інтерпретує локальний час у вказаному часовому поясі. +`--at ` планує одноразовий запуск. Дата й час без зміщення трактуються як UTC, якщо ви також не передасте `--tz `, що інтерпретує локальний час у вказаному часовому поясі. -Одноразові завдання після успішного виконання за замовчуванням видаляються. Використовуйте `--keep-after-run`, щоб зберегти їх. +Одноразові завдання типово видаляються після успішного виконання. Використовуйте `--keep-after-run`, щоб зберегти їх. ### Повторювані завдання -Повторювані завдання використовують експоненційний retry backoff після послідовних помилок: 30 с, 1 хв, 5 хв, 15 хв, 60 хв. Після наступного успішного запуску розклад повертається до нормального режиму. +Повторювані завдання використовують експоненціальну затримку повторних спроб після послідовних помилок: 30 с, 1 хв, 5 хв, 15 хв, 60 хв. Після наступного успішного запуску графік повертається до нормального режиму. -Пропущені запуски відстежуються окремо від помилок виконання. Вони не впливають на retry backoff, але `openclaw cron edit --failure-alert-include-skipped` може додати повторні сповіщення про пропущені запуски до сповіщень про збої. +Пропущені запуски відстежуються окремо від помилок виконання. Вони не впливають на затримку повторних спроб, але `openclaw cron edit --failure-alert-include-skipped` може додати повторювані сповіщення про пропущені запуски до сповіщень про збої. -Для ізольованих завдань, націлених на локально налаштованого провайдера моделі, Cron виконує легку попередню перевірку провайдера перед запуском ходу агента. Провайдери `api: "ollama"` через loopback, приватну мережу та `.local` перевіряються на `/api/tags`; локальні OpenAI-сумісні провайдери, як-от vLLM, SGLang і LM Studio, перевіряються на `/models`. Якщо endpoint недоступний, запуск записується як `skipped` і повторюється за наступним розкладом; відповідні недоступні endpoint-и кешуються на 5 хвилин, щоб багато завдань не перевантажували один і той самий локальний сервер. +Для ізольованих завдань, які націлені на локально налаштованого постачальника моделі, Cron виконує легку попередню перевірку постачальника перед початком ходу агента. Постачальники `api: "ollama"` у loopback, приватній мережі та з адресами `.local` перевіряються через `/api/tags`; локальні OpenAI-сумісні постачальники, такі як vLLM, SGLang і LM Studio, перевіряються через `/models`. Якщо кінцева точка недоступна, запуск записується як `skipped` і повторюється за наступним розкладом; відповідні недоступні кінцеві точки кешуються на 5 хвилин, щоб багато завдань не перевантажували той самий локальний сервер. -Примітка: визначення завдань Cron зберігаються в `jobs.json`, а стан очікування середовища виконання — у `jobs-state.json`. Якщо `jobs.json` редагується зовні, Gateway перезавантажує змінені розклади й очищає застарілі відкладені слоти; переписування лише форматування не очищає відкладений слот. +Примітка: визначення Cron-завдань зберігаються в `jobs.json`, тоді як очікувальний стан середовища виконання — у `jobs-state.json`. Якщо `jobs.json` редагується зовнішнім чином, Gateway перезавантажує змінені розклади та очищає застарілі очікувальні слоти; переписування лише форматування не очищують очікувальний слот. ### Ручні запуски `openclaw cron run` повертається, щойно ручний запуск поставлено в чергу. Успішні відповіді містять `{ ok: true, enqueued: true, runId }`. Використовуйте `openclaw cron runs --id `, щоб відстежити підсумковий результат. -`openclaw cron run ` за замовчуванням виконує примусовий запуск. Використовуйте `--due`, щоб зберегти попередню поведінку «запускати лише коли настав час». +`openclaw cron run ` типово примусово запускає завдання. Використовуйте `--due`, щоб зберегти стару поведінку «запускати лише якщо настав час». ## Моделі @@ -105,101 +105,101 @@ x-i18n: `cron add|edit --model ` вибирає дозволену модель для завдання. -Якщо модель не дозволена, Cron показує попередження і повертається до вибору моделі агента або моделі за замовчуванням для завдання. +Якщо модель не дозволена або її не вдається визначити, Cron завершує запуск явною помилкою валідації замість того, щоб повертатися до агента завдання або типового вибору моделі. -Cron `--model` — це **основна модель завдання**, а не перевизначення `/model` для сеансу чату. Це означає, що: +Cron `--model` — це **основний параметр завдання**, а не перевизначення `/model` сеансу чату. Це означає: -- Налаштовані резервні моделі все одно застосовуються, коли вибрана модель завдання завершується помилкою. -- `fallbacks` у корисному навантаженні для окремого завдання замінює налаштований список резервних варіантів, якщо він присутній. -- Порожній список резервних варіантів для окремого завдання (`fallbacks: []` у корисному навантаженні/API завдання) робить запуск Cron строгим. -- Коли завдання має `--model`, але список резервних варіантів не налаштований, OpenClaw передає явне порожнє перевизначення резервних варіантів, щоб основна модель агента не додавалася як прихована ціль повторної спроби. +- Налаштовані резервні моделі все одно застосовуються, коли вибрана модель завдання зазнає збою. +- `fallbacks` у payload для кожного завдання замінює налаштований список резервних варіантів, якщо присутній. +- Порожній список резервних варіантів для завдання (`fallbacks: []` у payload/API завдання) робить запуск Cron строгим. +- Коли завдання має `--model`, але список резервних варіантів не налаштовано, OpenClaw передає явне порожнє перевизначення резервних варіантів, щоб основна модель агента не додавалася як прихована ціль повторної спроби. -### Пріоритет моделей ізольованого Cron +### Пріоритет моделі для ізольованого Cron Ізольований Cron визначає активну модель у такому порядку: 1. Перевизначення Gmail-hook. 2. `--model` для окремого завдання. -3. Збережене перевизначення моделі сеансу Cron (коли користувач його вибрав). -4. Вибір моделі агента або моделі за замовчуванням. +3. Збережене перевизначення моделі сеансу Cron (коли користувач вибрав його). +4. Агент або типовий вибір моделі. ### Швидкий режим -Швидкий режим ізольованого Cron дотримується визначеного вибору активної моделі. За замовчуванням застосовується конфігурація моделі `params.fastMode`, але збережене перевизначення `fastMode` сеансу все одно має вищий пріоритет над конфігурацією. +Швидкий режим ізольованого Cron дотримується визначеного поточного вибору моделі. Налаштування моделі `params.fastMode` застосовується типово, але збережене перевизначення `fastMode` сеансу все одно має вищий пріоритет за конфігурацію. -### Повторні спроби перемикання live-моделі +### Повторні спроби перемикання поточної моделі -Якщо ізольований запуск викидає `LiveSessionModelSwitchError`, Cron зберігає перемкненого провайдера й модель (а також перевизначення профілю автентифікації після перемикання, якщо воно є) для активного запуску перед повторною спробою. Зовнішній цикл повторних спроб обмежено двома повторними спробами перемикання після початкової спроби, після чого він переривається замість нескінченного циклу. +Якщо ізольований запуск викидає `LiveSessionModelSwitchError`, Cron зберігає перемкненого постачальника та модель (а також перевизначення профілю автентифікації після перемикання, якщо воно присутнє) для активного запуску перед повторною спробою. Зовнішній цикл повторних спроб обмежено двома повторними спробами перемикання після початкової спроби, після чого він переривається замість нескінченного зациклення. ## Вивід запуску та відмови -### Приглушення застарілих підтверджень +### Придушення застарілих підтверджень -Ізольовані ходи Cron приглушують відповіді, що містять лише застаріле підтвердження. Якщо перший результат — це лише проміжне оновлення стану й жоден дочірній запуск subagent не відповідає за остаточну відповідь, Cron один раз повторно надсилає запит для отримання реального результату перед доставкою. +Ізольовані ходи Cron придушують відповіді, що містять лише застаріле підтвердження. Якщо перший результат — це лише проміжне оновлення стану і жоден дочірній запуск субагента не відповідає за підсумкову відповідь, Cron один раз повторно формує запит на справжній результат перед доставкою. -### Приглушення тихого токена +### Придушення тихого токена -Якщо ізольований запуск Cron повертає лише тихий токен (`NO_REPLY` або `no_reply`), Cron приглушує як пряме зовнішнє доставлення, так і резервний шлях зведення через чергу, тому назад у чат нічого не надсилається. +Якщо ізольований запуск Cron повертає лише тихий токен (`NO_REPLY` або `no_reply`), Cron придушує як пряме вихідне надсилання, так і резервний шлях зведення в черзі, тому в чат нічого не надсилається. ### Структуровані відмови -Ізольовані запуски Cron віддають перевагу структурованим метаданим відмови виконання з вбудованого запуску, а потім повертаються до відомих маркерів відмови у фінальному виводі, таких як `SYSTEM_RUN_DENIED`, `INVALID_REQUEST` і фрази відмови, пов’язані з прив’язкою схвалення. +Ізольовані запуски Cron надають перевагу структурованим метаданим відмови виконання з вбудованого запуску, а потім переходять до відомих маркерів відмови у фінальному виводі, таких як `SYSTEM_RUN_DENIED`, `INVALID_REQUEST` і фрази відмови, пов’язані з прив’язкою до схвалення. `cron list` та історія запусків показують причину відмови замість того, щоб позначати заблоковану команду як `ok`. ## Зберігання -Зберігання та очищення налаштовуються в конфігурації: +Зберігання та очищення керуються в конфігурації: -- `cron.sessionRetention` (типово `24h`) очищає завершені сеанси ізольованих запусків. +- `cron.sessionRetention` (типово `24h`) очищає сеанси завершених ізольованих запусків. - `cron.runLog.maxBytes` і `cron.runLog.keepLines` очищають `~/.openclaw/cron/runs/.jsonl`. ## Міграція старіших завдань -Якщо у вас є завдання Cron, створені до поточного формату доставки та зберігання, запустіть `openclaw doctor --fix`. Doctor нормалізує застарілі поля Cron (`jobId`, `schedule.cron`, поля доставки верхнього рівня, включно із застарілим `threadId`, псевдоніми доставки `provider` у корисному навантаженні) і мігрує прості резервні завдання Webhook з `notify: true` до явної доставки webhook, коли налаштовано `cron.webhook`. +Якщо у вас є Cron-завдання, створені до поточного формату доставки та сховища, запустіть `openclaw doctor --fix`. Doctor нормалізує застарілі поля Cron (`jobId`, `schedule.cron`, поля доставки верхнього рівня, включно із застарілим `threadId`, псевдоніми доставки `provider` у payload) і мігрує прості резервні webhook-завдання `notify: true` до явної доставки webhook, коли налаштовано `cron.webhook`. ## Поширені редагування -Оновити параметри доставки без зміни повідомлення: +Оновіть налаштування доставки без зміни повідомлення: ```bash openclaw cron edit --announce --channel telegram --to "123456789" ``` -Вимкнути доставку для ізольованого завдання: +Вимкніть доставку для ізольованого завдання: ```bash openclaw cron edit --no-deliver ``` -Увімкнути легкий bootstrap-контекст для ізольованого завдання: +Увімкніть легкий bootstrap-контекст для ізольованого завдання: ```bash openclaw cron edit --light-context ``` -Оголосити в конкретний канал: +Оголосіть у певний канал: ```bash openclaw cron edit --announce --channel slack --to "channel:C1234567890" ``` -Створити ізольоване завдання з легким bootstrap-контекстом: +Створіть ізольоване завдання з легким bootstrap-контекстом: ```bash openclaw cron add \ - --name "Lightweight morning brief" \ + --name "Короткий ранковий огляд" \ --cron "0 7 * * *" \ --session isolated \ - --message "Summarize overnight updates." \ + --message "Підсумуй оновлення за ніч." \ --light-context \ --no-deliver ``` -`--light-context` застосовується лише до ізольованих завдань ходу агента. Для запусків Cron легкий режим зберігає bootstrap-контекст порожнім замість упровадження повного набору bootstrap-контексту робочого простору. +`--light-context` застосовується лише до ізольованих завдань ходу агента. Для запусків Cron легкий режим зберігає bootstrap-контекст порожнім замість ін’єкції повного набору bootstrap робочого простору. ## Поширені команди адміністрування @@ -213,7 +213,7 @@ openclaw cron run --due openclaw cron runs --id --limit 50 ``` -Записи `cron runs` містять діагностику доставки з ціллю Cron, що була задумана, визначеною ціллю, надсиланнями через інструмент message, використанням резервного механізму та станом доставки. +Записи `cron runs` містять діагностику доставки з наміченою ціллю Cron, визначеною ціллю, надсиланнями через інструмент message, використанням резервного механізму та станом доставки. Переналаштування агента та сеансу: @@ -235,5 +235,5 @@ openclaw cron edit --no-deliver ## Пов’язане -- [Довідка CLI](/uk/cli) +- [Довідник CLI](/uk/cli) - [Заплановані завдання](/uk/automation/cron-jobs) diff --git a/docs/uk/concepts/memory-qmd.md b/docs/uk/concepts/memory-qmd.md index 571d78f79..7b04091a3 100644 --- a/docs/uk/concepts/memory-qmd.md +++ b/docs/uk/concepts/memory-qmd.md @@ -1,40 +1,40 @@ --- read_when: - - Ви хочете налаштувати QMD як свій бекенд пам’яті - - Ви хочете розширені функції пам’яті, як-от реранжування або додаткові індексовані шляхи -summary: Локальний пошуковий сайдкар із BM25, векторами, реранжуванням і розширенням запиту + - Ви хочете налаштувати QMD як бекенд пам’яті + - Вам потрібні розширені можливості пам’яті, як-от переранжування або додаткові індексовані шляхи +summary: Локальний пошуковий сайдкар із підтримкою BM25, векторів, переранжування та розширення запитів title: Рушій пам’яті QMD x-i18n: - generated_at: "2026-04-27T14:18:18Z" + generated_at: "2026-04-28T03:20:30Z" model: gpt-5.4 provider: openai - source_hash: 1995a2b087c484595b0e0efed7a4ae3987b8fb3ac95e3c41bdf5335ba6240e73 + source_hash: 09de0490a2584d1c7eeccd4ba8613d63ea4c69e62e5eb5a0492a8baa1a6c7eea source_path: concepts/memory-qmd.md workflow: 15 --- -[QMD](https://github.com/tobi/qmd) — це локальний пошуковий сайдкар, що працює -поруч з OpenClaw. Він поєднує BM25, векторний пошук і реранжування в одному -бінарному файлі, а також може індексувати вміст поза файлами пам’яті вашого робочого простору. +[QMD](https://github.com/tobi/qmd) — це локальний пошуковий сайдкар, який працює +поруч з OpenClaw. Він поєднує BM25, векторний пошук і переранжування в одному +бінарному файлі, а також може індексувати вміст за межами файлів пам’яті вашого робочого простору. -## Що він додає понад вбудований рушій +## Що він додає порівняно з вбудованим рушієм -- **Реранжування та розширення запиту** для кращої повноти пошуку. -- **Індексація додаткових директорій** — документація проєкту, нотатки команди, будь-що на диску. -- **Індексація транскриптів сесій** — відновлення попередніх розмов. -- **Повністю локальна робота** — запускається з необов’язковим пакетом середовища виконання node-llama-cpp і +- **Переранжування та розширення запитів** для кращої повноти пошуку. +- **Індексація додаткових каталогів** — документація проєкту, командні нотатки, будь-що на диску. +- **Індексація транскриптів сеансів** — для відновлення попередніх розмов. +- **Повністю локальний** — працює з необов’язковим пакетом середовища виконання node-llama-cpp і автоматично завантажує моделі GGUF. -- **Автоматичний резервний перехід** — якщо QMD недоступний, OpenClaw безшовно повертається до - вбудованого рушія. +- **Автоматичний резервний перехід** — якщо QMD недоступний, OpenClaw безшовно переходить на + вбудований рушій. ## Початок роботи ### Передумови -- Установіть QMD: `npm install -g @tobilu/qmd` або `bun install -g @tobilu/qmd` +- Встановіть QMD: `npm install -g @tobilu/qmd` або `bun install -g @tobilu/qmd` - Збірка SQLite, яка дозволяє розширення (`brew install sqlite` на macOS). - QMD має бути в `PATH` шлюзу. -- macOS і Linux працюють одразу. Windows найкраще підтримується через WSL2. +- macOS і Linux працюють одразу. На Windows найкраща підтримка через WSL2. ### Увімкнення @@ -47,66 +47,69 @@ x-i18n: ``` OpenClaw створює ізольований домашній каталог QMD у -`~/.openclaw/agents//qmd/` і автоматично керує життєвим циклом -сайдкара — колекції, оновлення та запуск вбудовування обробляються за вас. -Він віддає перевагу поточним формам колекцій QMD і запитів MCP, але за потреби -все одно повертається до альтернативних прапорців шаблонів колекцій і старіших назв інструментів MCP. -Під час звіряння на старті також повторно створюються застарілі керовані колекції за їхніми -канонічними шаблонами, якщо старіша колекція QMD з такою самою назвою все ще присутня. +`~/.openclaw/agents//qmd/` і автоматично керує життєвим циклом сайдкара — +колекції, оновлення та запуск ембедингів обробляються за вас. +Він надає перевагу актуальним формам колекцій QMD і запитів MCP, але за потреби +все одно використовує резервні прапорці альтернативних шаблонів колекцій і +старі назви інструментів MCP. +Під час узгодження на старті також повторно створюються застарілі керовані колекції +з поверненням до їхніх канонічних шаблонів, якщо стара колекція QMD з такою самою назвою +ще присутня. ## Як працює сайдкар - OpenClaw створює колекції з файлів пам’яті вашого робочого простору та всіх налаштованих `memory.qmd.paths`, потім запускає `qmd update` під час старту і періодично (типово кожні 5 хвилин). Семантичні режими також запускають `qmd embed`. -- Типова колекція робочого простору відстежує `MEMORY.md` і дерево - `memory/`. `memory.md` у нижньому регістрі не індексується як кореневий файл пам’яті. -- Оновлення під час старту виконується у фоновому режимі, щоб не блокувати запуск чату. -- Для пошуку використовується налаштований `searchMode` (типово: `search`; також підтримуються - `vsearch` і `query`). `search` використовує лише BM25, тому OpenClaw пропускає перевірки готовності - семантичних векторів і супровід вбудовувань у цьому режимі. Якщо режим не спрацьовує, OpenClaw - повторює спробу з `qmd query`. -- З випусками QMD, які оголошують підтримку фільтрів кількох колекцій, OpenClaw групує - колекції з однаковим джерелом в один виклик пошуку QMD. Старіші випуски QMD - зберігають сумісний резервний варіант по одній колекції. -- Якщо QMD повністю не спрацьовує, OpenClaw повертається до вбудованого рушія SQLite. +- Типова колекція робочого простору відстежує `MEMORY.md` і дерево `memory/`. + `memory.md` у нижньому регістрі не індексується як кореневий файл пам’яті. +- Оновлення під час старту виконується у фоновому режимі, тому запуск чату не блокується. +- Пошук використовує налаштований `searchMode` (типово: `search`; також підтримуються + `vsearch` і `query`). `search` використовує лише BM25, тому OpenClaw пропускає перевірки + готовності семантичних векторів і обслуговування ембедингів у цьому режимі. Якщо режим не спрацьовує, + OpenClaw повторює спробу з `qmd query`. +- У випусках QMD, які оголошують підтримку фільтрів для кількох колекцій, OpenClaw групує + колекції з однаковим джерелом в один виклик пошуку QMD. У старіших випусках QMD + зберігається сумісний резервний варіант із пошуком по одній колекції. +- Якщо QMD повністю не спрацьовує, OpenClaw переходить на вбудований рушій SQLite. + Повторні спроби в межах одного ходу чату після збою відкриття ненадовго сповільнюються, + щоб відсутній бінарний файл або зламана залежність сайдкара не спричинили шторм повторних спроб; + `openclaw memory status` і одноразові перевірки через CLI усе одно напряму повторно перевіряють QMD. Перший пошук може бути повільним — QMD автоматично завантажує моделі GGUF (~2 ГБ) для -реранжування та розширення запиту під час першого запуску `qmd query`. +переранжування і розширення запитів під час першого запуску `qmd query`. ## Продуктивність пошуку та сумісність -OpenClaw підтримує сумісність шляху пошуку QMD як з поточними, так і зі старішими -установками QMD. +OpenClaw зберігає сумісність шляху пошуку QMD як з актуальними, так і зі старішими +встановленнями QMD. Під час запуску OpenClaw один раз для кожного менеджера перевіряє текст довідки встановленого QMD. Якщо -бінарний файл оголошує підтримку кількох фільтрів колекцій, OpenClaw шукає в усіх +бінарний файл оголошує підтримку кількох фільтрів колекцій, OpenClaw виконує пошук в усіх колекціях з однаковим джерелом однією командою: ```bash qmd search "router notes" --json -n 10 -c memory-root-main -c memory-dir-main ``` -Це дає змогу уникнути запуску окремого підпроцесу QMD для кожної колекції -довготривалої пам’яті. -Колекції транскриптів сесій залишаються у власній групі джерел, тож змішані пошуки +Це дозволяє уникнути запуску окремого підпроцесу QMD для кожної колекції довготривалої пам’яті. +Колекції транскриптів сеансів залишаються у власній групі джерел, тому змішані пошуки `memory` + `sessions` усе одно дають вхідні дані для диверсифікатора результатів з обох джерел. -Старіші збірки QMD приймають лише один фільтр колекції. Коли OpenClaw виявляє одну -з таких збірок, він зберігає шлях сумісності й шукає в кожній колекції -окремо перед злиттям і дедуплікацією результатів. +Старіші збірки QMD приймають лише один фільтр колекції. Коли OpenClaw виявляє одну з +таких збірок, він зберігає шлях сумісності та виконує пошук по кожній колекції окремо +перед об’єднанням і дедуплікацією результатів. -Щоб вручну перевірити встановлений контракт, виконайте: +Щоб вручну перевірити контракт установленої версії, виконайте: ```bash qmd --help | grep -i collection ``` -Поточна довідка QMD говорить, що фільтри колекцій можуть націлюватися на одну або -кілька колекцій. +У поточній довідці QMD зазначено, що фільтри колекцій можуть націлюватися на одну або кілька колекцій. Старіша довідка зазвичай описує одну колекцію. ## Перевизначення моделей @@ -120,12 +123,12 @@ export QMD_RERANK_MODEL="/absolute/path/to/reranker.gguf" export QMD_GENERATE_MODEL="/absolute/path/to/generator.gguf" ``` -Після зміни моделі вбудовування повторно запустіть вбудовування, щоб індекс відповідав +Після зміни моделі ембедингів повторно запустіть побудову ембедингів, щоб індекс відповідав новому векторному простору. ## Індексація додаткових шляхів -Спрямуйте QMD на додаткові директорії, щоб зробити їх доступними для пошуку: +Спрямуйте QMD на додаткові каталоги, щоб зробити їх доступними для пошуку: ```json5 { @@ -139,12 +142,12 @@ export QMD_GENERATE_MODEL="/absolute/path/to/generator.gguf" ``` Фрагменти з додаткових шляхів з’являються як `qmd//` у -результатах пошуку. `memory_get` розуміє цей префікс і читає з правильного +результатах пошуку. `memory_get` розуміє цей префікс і читає дані з правильного кореня колекції. -## Індексація транскриптів сесій +## Індексація транскриптів сеансів -Увімкніть індексацію сесій, щоб відновлювати попередні розмови: +Увімкніть індексацію сеансів, щоб відновлювати попередні розмови: ```json5 { @@ -157,13 +160,13 @@ export QMD_GENERATE_MODEL="/absolute/path/to/generator.gguf" } ``` -Транскрипти експортуються як санітизовані репліки User/Assistant в окрему колекцію QMD +Транскрипти експортуються як очищені ходи User/Assistant в окрему колекцію QMD у `~/.openclaw/agents//qmd/sessions/`. ## Область пошуку -Типово результати пошуку QMD показуються в прямих і канальних сесіях -(не в групах). Налаштуйте `memory.qmd.scope`, щоб змінити це: +Типово результати пошуку QMD відображаються в прямих сеансах і сеансах каналів +(але не в групах). Щоб змінити це, налаштуйте `memory.qmd.scope`: ```json5 { @@ -178,36 +181,36 @@ export QMD_GENERATE_MODEL="/absolute/path/to/generator.gguf" } ``` -Коли область дії забороняє пошук, OpenClaw записує попередження з похідними значеннями каналу та -типу чату, щоб порожні результати було легше налагоджувати. +Коли область видимості забороняє пошук, OpenClaw записує попередження з похідними значеннями каналу та +типу чату, щоб порожні результати було легше діагностувати. -## Посилання на джерела +## Цитати Коли `memory.citations` має значення `auto` або `on`, фрагменти пошуку містять -нижній колонтитул `Source: `. Установіть `memory.citations = "off"`, щоб прибрати цей нижній колонтитул, -але при цьому все одно передавати шлях агенту внутрішньо. +нижній колонтитул `Source: `. Установіть `memory.citations = "off"`, щоб прибрати +цей нижній колонтитул і водночас продовжити внутрішню передачу шляху агенту. ## Коли використовувати -Оберіть QMD, якщо вам потрібно: +Обирайте QMD, коли вам потрібно: -- Реранжування для вищої якості результатів. -- Шукати в документації проєкту або нотатках поза робочим простором. -- Відновлювати попередні розмови в сесіях. +- Переранжування для вищої якості результатів. +- Шукати документацію проєкту або нотатки поза межами робочого простору. +- Відновлювати попередні розмови із сеансів. - Повністю локальний пошук без API-ключів. -Для простіших налаштувань [вбудований рушій](/uk/concepts/memory-builtin) добре працює +Для простіших налаштувань добре підходить [вбудований рушій](/uk/concepts/memory-builtin) без додаткових залежностей. -## Усунення проблем +## Усунення несправностей **QMD не знайдено?** Переконайтеся, що бінарний файл є в `PATH` шлюзу. Якщо OpenClaw -працює як сервіс, створіть символічне посилання: +працює як сервіс, створіть символьне посилання: `sudo ln -s ~/.bun/bin/qmd /usr/local/bin/qmd`. -Якщо `qmd --version` працює у вашій оболонці, але OpenClaw все одно повідомляє +Якщо `qmd --version` працює у вашій оболонці, але OpenClaw усе ще повідомляє про `spawn qmd ENOENT`, імовірно, процес шлюзу має інший `PATH`, ніж ваша -інтерактивна оболонка. Явно закріпіть бінарний файл: +інтерактивна оболонка. Явно зафіксуйте шлях до бінарного файла: ```json5 { @@ -223,44 +226,44 @@ export QMD_GENERATE_MODEL="/absolute/path/to/generator.gguf" Використайте `command -v qmd` у середовищі, де встановлено QMD, а потім повторно перевірте через `openclaw memory status --deep`. -**Перший пошук дуже повільний?** QMD завантажує моделі GGUF при першому використанні. Попередньо прогрійте -через `qmd query "test"` з тими самими директоріями XDG, які використовує OpenClaw. +**Перший пошук дуже повільний?** QMD завантажує моделі GGUF під час першого використання. Попередньо прогрійте +його за допомогою `qmd query "test"` з тими самими каталогами XDG, які використовує OpenClaw. **Під час пошуку запускається багато підпроцесів QMD?** За можливості оновіть QMD. OpenClaw використовує -один процес для пошуку в кількох колекціях з однаковим джерелом лише тоді, коли встановлений -QMD оголошує підтримку кількох фільтрів `-c`; інакше він зберігає старіший -резервний варіант по одній колекції для коректності. +один процес для пошуків по кількох колекціях з однаковим джерелом лише тоді, коли встановлений +QMD оголошує підтримку кількох фільтрів `-c`; інакше він зберігає старий резервний +варіант по одній колекції для коректності. -**QMD лише з BM25 все одно намагається зібрати llama.cpp?** Установіть +**QMD лише з BM25 усе ще намагається зібрати llama.cpp?** Установіть `memory.qmd.searchMode = "search"`. OpenClaw трактує цей режим як суто лексичний, -не запускає перевірки статусу векторів QMD або супровід вбудовувань і залишає +не запускає перевірки стану векторів QMD чи обслуговування ембедингів і залишає перевірки семантичної готовності для конфігурацій `vsearch` або `query`. **Пошук завершується за тайм-аутом?** Збільште `memory.qmd.limits.timeoutMs` (типово: 4000 мс). Для повільнішого обладнання встановіть `120000`. -**Порожні результати в групових чатах?** Перевірте `memory.qmd.scope` — типово дозволено -лише прямі та канальні сесії. +**Порожні результати в групових чатах?** Перевірте `memory.qmd.scope` — типове значення дозволяє +лише прямі сеанси й сеанси каналів. **Пошук у кореневій пам’яті раптом став надто широким?** Перезапустіть шлюз або дочекайтеся -наступного звіряння під час старту. OpenClaw повторно створює застарілі керовані колекції -за канонічними шаблонами `MEMORY.md` і `memory/`, коли виявляє конфлікт -з однаковою назвою. +наступного узгодження під час запуску. OpenClaw повторно створює застарілі керовані колекції, +повертаючи їх до канонічних шаблонів `MEMORY.md` і `memory/`, коли виявляє конфлікт +однойменних колекцій. -**Тимчасові репозиторії, видимі з робочого простору, спричиняють `ENAMETOOLONG` або зламану індексацію?** -Обхід QMD зараз дотримується поведінки базового сканера QMD, а не -правил символьних посилань вбудованого рушія OpenClaw. Тримайте тимчасові checkout-и -монорепозиторіїв у прихованих директоріях на кшталт `.tmp/` або поза індексованими коренями QMD, доки QMD не надасть -безпечний до циклів обхід або явні засоби керування виключеннями. +**Тимчасові репозиторії, видимі в робочому просторі, спричиняють `ENAMETOOLONG` або ламане індексування?** +Обхід QMD наразі наслідує поведінку базового сканера QMD, а не правила символьних посилань +вбудованого рушія OpenClaw. Тримайте тимчасові checkout-и монорепозиторіїв у +прихованих каталогах, як-от `.tmp/`, або поза індексованими коренями QMD, доки QMD не надасть +безпечний щодо циклів обхід або явні засоби виключення. ## Конфігурація -Щоб переглянути повну поверхню конфігурації (`memory.qmd.*`), режими пошуку, інтервали оновлення, -правила області дії та всі інші параметри, дивіться -[довідник із конфігурації пам’яті](/uk/reference/memory-config). +Повний опис поверхні конфігурації (`memory.qmd.*`), режимів пошуку, інтервалів оновлення, +правил області видимості та всіх інших параметрів дивіться в +[довіднику з конфігурації пам’яті](/uk/reference/memory-config). ## Пов’язане - [Огляд пам’яті](/uk/concepts/memory) - [Вбудований рушій пам’яті](/uk/concepts/memory-builtin) -- [Пам’ять Honcho](/uk/concepts/memory-honcho) +- [Рушій пам’яті Honcho](/uk/concepts/memory-honcho) diff --git a/docs/uk/concepts/qa-matrix.md b/docs/uk/concepts/qa-matrix.md index 1aa939876..42f225386 100644 --- a/docs/uk/concepts/qa-matrix.md +++ b/docs/uk/concepts/qa-matrix.md @@ -3,22 +3,22 @@ read_when: - Локальний запуск `pnpm openclaw qa matrix` - Додавання або вибір сценаріїв Matrix QA - Тріаж збоїв Matrix QA, тайм-аутів або завислого очищення -summary: 'Довідник для супровідників щодо live QA-лейну Matrix на базі Docker: CLI, профілі, змінні середовища, сценарії та вихідні артефакти.' +summary: 'Довідник для супровідників щодо live QA-лейну Matrix на основі Docker: CLI, профілі, змінні середовища, сценарії та артефакти виводу.' title: Matrix QA x-i18n: - generated_at: "2026-04-27T20:27:55Z" + generated_at: "2026-04-28T03:20:32Z" model: gpt-5.4 provider: openai - source_hash: 55fcacd1348b681ef9e550d3f4cdf7c5ed3a2cb8d0df6d93b8ac025ec3280329 + source_hash: 440c24f2f1b19331f6800bb3224075f718c2429688bb023e96c59f3d3e4c4932 source_path: concepts/qa-matrix.md workflow: 15 --- -QA-лейн Matrix запускає вбудований Plugin `@openclaw/matrix` проти тимчасового homeserver Tuwunel у Docker із тимчасовими обліковими записами driver, SUT і observer, а також із попередньо створеними кімнатами. Це live-покриття Matrix із реальним транспортом. +Лейн Matrix QA запускає вбудований Plugin `@openclaw/matrix` проти тимчасового homeserver Tuwunel у Docker, з тимчасовими обліковими записами driver, SUT і observer, а також попередньо створеними кімнатами. Це live-покриття реального транспортного рівня для Matrix. -Це інструментарій лише для супровідників. Паковані релізи OpenClaw навмисно не містять `qa-lab`, тому `openclaw qa` доступний лише з checkout вихідного коду. Checkout вихідного коду завантажують вбудований runner напряму — окремий крок встановлення Plugin не потрібен. +Це інструментарій лише для супровідників. Паковані релізи OpenClaw навмисно не містять `qa-lab`, тому `openclaw qa` доступний лише з checkout вихідного коду. Checkout вихідного коду завантажують вбудований раннер напряму — окремий крок встановлення Plugin не потрібен. -Для ширшого контексту QA-фреймворку див. [Огляд QA](/uk/concepts/qa-e2e-automation). +Для ширшого контексту QA-фреймворку див. [огляд QA](/uk/concepts/qa-e2e-automation). ## Швидкий старт @@ -26,16 +26,16 @@ QA-лейн Matrix запускає вбудований Plugin `@openclaw/matri pnpm openclaw qa matrix --profile fast --fail-fast ``` -Звичайний `pnpm openclaw qa matrix` запускає `--profile all` і не зупиняється на першій помилці. Використовуйте `--profile fast --fail-fast` як релізний gate; розподіляйте каталог через `--profile transport|media|e2ee-smoke|e2ee-deep|e2ee-cli`, коли запускаєте весь набір паралельно. +Звичайний `pnpm openclaw qa matrix` запускає `--profile all` і не зупиняється після першої помилки. Використовуйте `--profile fast --fail-fast` як релізний gate; розбивайте каталог за допомогою `--profile transport|media|e2ee-smoke|e2ee-deep|e2ee-cli`, коли запускаєте повний набір паралельно. ## Що робить лейн -1. Розгортає тимчасовий homeserver Tuwunel у Docker (типовий образ `ghcr.io/matrix-construct/tuwunel:v1.5.1`, назва сервера `matrix-qa.test`, порт `28008`). -2. Реєструє трьох тимчасових користувачів — `driver` (надсилає вхідний трафік), `sut` (обліковий запис OpenClaw Matrix, що тестується), `observer` (захоплення стороннього трафіку). -3. Створює кімнати, потрібні для вибраних сценаріїв (main, threading, media, restart, secondary, allowlist, E2EE, verification DM тощо). -4. Запускає дочірній Gateway OpenClaw із реальним Plugin Matrix, обмеженим обліковим записом SUT; `qa-channel` у дочірньому процесі не завантажується. +1. Розгортає тимчасовий homeserver Tuwunel у Docker (типовий образ `ghcr.io/matrix-construct/tuwunel:v1.5.1`, ім’я сервера `matrix-qa.test`, порт `28008`). +2. Реєструє трьох тимчасових користувачів — `driver` (надсилає вхідний трафік), `sut` (обліковий запис Matrix OpenClaw, що тестується), `observer` (захоплення стороннього трафіку). +3. Створює кімнати, потрібні для вибраних сценаріїв (основна, для тредів, медіа, перезапуску, додаткова, allowlist, E2EE, verification DM тощо). +4. Запускає дочірній Gateway OpenClaw із реальним Plugin Matrix, обмеженим обліковим записом SUT; `qa-channel` у дочірній процес не завантажується. 5. Послідовно виконує сценарії, спостерігаючи за подіями через Matrix-клієнти driver/observer. -6. Зупиняє homeserver, записує артефакти звіту й підсумку, а потім завершує роботу. +6. Зупиняє homeserver, записує артефакти звіту та підсумку, потім завершує роботу. ## CLI @@ -45,41 +45,41 @@ pnpm openclaw qa matrix [options] ### Поширені прапорці -| Прапорець | Типове значення | Опис | -| -------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | -| `--profile ` | `all` | Профіль сценаріїв. Див. [Профілі](#profiles). | -| `--fail-fast` | вимкнено | Зупинитися після першої невдалої перевірки або сценарію. | -| `--scenario ` | — | Запустити лише цей сценарій. Можна вказувати кілька разів. Див. [Сценарії](#scenarios). | -| `--output-dir ` | `/.artifacts/qa-e2e/matrix-` | Куди записуються звіти, підсумок, спостережені події та вихідний журнал. Відносні шляхи обчислюються від `--repo-root`. | -| `--repo-root ` | `process.cwd()` | Корінь репозиторію під час виклику з нейтрального робочого каталогу. | -| `--sut-account ` | `sut` | Ідентифікатор облікового запису Matrix у конфігурації QA Gateway. | +| Прапорець | Типове значення | Опис | +| -------------------- | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| `--profile ` | `all` | Профіль сценаріїв. Див. [Профілі](#profiles). | +| `--fail-fast` | вимкнено | Зупинитися після першої невдалої перевірки або сценарію. | +| `--scenario ` | — | Запустити лише цей сценарій. Можна вказувати кілька разів. Див. [Сценарії](#scenarios). | +| `--output-dir ` | `/.artifacts/qa-e2e/matrix-` | Куди записуються звіти, підсумок, спостережені події та журнал виводу. Відносні шляхи обчислюються відносно `--repo-root`. | +| `--repo-root ` | `process.cwd()` | Корінь репозиторію при запуску з нейтрального робочого каталогу. | +| `--sut-account ` | `sut` | Ідентифікатор облікового запису Matrix у конфігурації QA Gateway. | ### Прапорці провайдера Лейн використовує реальний транспорт Matrix, але провайдер моделі можна налаштувати: -| Прапорець | Типове значення | Опис | -| ----------------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | -| `--provider-mode ` | `live-frontier` | `mock-openai` для детермінованого mock-dispatch або `live-frontier` для live frontier-провайдерів. Історичний псевдонім `live-openai` також працює. | -| `--model ` | типове для провайдера | Основне посилання `provider/model`. | -| `--alt-model ` | типове для провайдера | Альтернативне посилання `provider/model`, коли сценарії перемикаються посеред запуску. | -| `--fast` | вимкнено | Увімкнути швидкий режим провайдера там, де він підтримується. | +| Прапорець | Типове значення | Опис | +| ----------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `--provider-mode ` | `live-frontier` | `mock-openai` для детермінованого mock-диспетчування або `live-frontier` для live frontier-провайдерів. Історичний псевдонім `live-openai` також працює. | +| `--model ` | типове значення провайдера | Основне посилання `provider/model`. | +| `--alt-model ` | типове значення провайдера | Альтернативне посилання `provider/model` для сценаріїв, де перемикання відбувається під час виконання. | +| `--fast` | вимкнено | Увімкнути швидкий режим провайдера там, де він підтримується. | Matrix QA не приймає `--credential-source` або `--credential-role`. Лейн локально створює тимчасових користувачів; спільного пулу облікових даних для оренди немає. ## Профілі -Вибраний профіль визначає, які сценарії запускатимуться. +Вибраний профіль визначає, які сценарії будуть запущені. -| Профіль | Використання | -| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `all` (типово) | Повний каталог. Повільно, але вичерпно. | -| `fast` | Підмножина для релізного gate, яка перевіряє контракт live-транспорту: canary, gating згадок, блокування allowlist, форма відповіді, відновлення після restart, продовження треду, ізоляція треду, спостереження за реакціями. | -| `transport` | Сценарії транспортного рівня для threading, DM, room, autojoin, mention/allowlist. | -| `media` | Покриття вкладень image, audio, video, PDF, EPUB. | -| `e2ee-smoke` | Мінімальне покриття E2EE — базова зашифрована відповідь, продовження треду, успішний bootstrap. | -| `e2ee-deep` | Вичерпні сценарії E2EE для втрати стану, резервних копій, ключів і відновлення. | -| `e2ee-cli` | CLI-сценарії `openclaw matrix encryption setup` і `verify *`, що запускаються через QA harness. | +| Профіль | Коли використовувати | +| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `all` (типовий) | Повний каталог. Повільно, але вичерпно. | +| `fast` | Підмножина для релізного gate, яка перевіряє live-контракт транспортного рівня: canary, фільтрацію згадок, блокування allowlist, форму відповіді, відновлення після перезапуску, продовження треду, ізоляцію треду, спостереження реакцій і доставку метаданих approval exec. | +| `transport` | Сценарії транспортного рівня для тредів, DM, кімнат, autojoin, згадок/allowlist, approval та реакцій. | +| `media` | Покриття вкладень image, audio, video, PDF, EPUB. | +| `e2ee-smoke` | Мінімальне покриття E2EE — базова зашифрована відповідь, продовження треду, успішний bootstrap. | +| `e2ee-deep` | Вичерпні сценарії E2EE для втрати стану, резервних копій, ключів і відновлення. | +| `e2ee-cli` | CLI-сценарії `openclaw matrix encryption setup` і `verify *`, керовані через QA harness. | Точне зіставлення міститься у `extensions/qa-matrix/src/runners/contract/scenario-catalog.ts`. @@ -88,57 +88,58 @@ Matrix QA не приймає `--credential-source` або `--credential-role`. Повний список ідентифікаторів сценаріїв — це union `MatrixQaScenarioId` у `extensions/qa-matrix/src/runners/contract/scenario-catalog.ts:15`. Категорії включають: - threading — `matrix-thread-*`, `matrix-subagent-thread-spawn` -- верхній рівень / DM / room — `matrix-top-level-reply-shape`, `matrix-room-*`, `matrix-dm-*` +- top-level / DM / room — `matrix-top-level-reply-shape`, `matrix-room-*`, `matrix-dm-*` - streaming і перебіг інструментів — `matrix-room-partial-streaming-preview`, `matrix-room-quiet-streaming-preview`, `matrix-room-tool-progress-*`, `matrix-room-block-streaming` - media — `matrix-media-type-coverage`, `matrix-room-image-understanding-attachment`, `matrix-attachment-only-ignored`, `matrix-unsupported-media-safe` -- маршрутизація — `matrix-room-autojoin-invite`, `matrix-secondary-room-*` -- реакції — `matrix-reaction-*` +- routing — `matrix-room-autojoin-invite`, `matrix-secondary-room-*` +- reactions — `matrix-reaction-*` +- approvals — `matrix-approval-*` (метадані exec/Plugin, chunked fallback, deny reactions, threads і маршрутизація `target: "both"`) - restart і replay — `matrix-restart-*`, `matrix-stale-sync-replay-dedupe`, `matrix-room-membership-loss`, `matrix-homeserver-restart-resume`, `matrix-initial-catchup-then-incremental` -- gating згадок і allowlist — `matrix-mention-*`, `matrix-allowlist-*`, `matrix-multi-actor-ordering`, `matrix-inbound-edit-*`, `matrix-mxid-prefixed-command-block`, `matrix-observer-allowlist-override` -- E2EE — `matrix-e2ee-*` (базова відповідь, продовження треду, bootstrap, життєвий цикл recovery key, варіанти втрати стану, поведінка резервного копіювання сервера, гігієна пристроїв, верифікація SAS / QR / DM, restart, редагування артефактів) -- E2EE CLI — `matrix-e2ee-cli-*` (налаштування шифрування, ідемпотентне налаштування, збій bootstrap, життєвий цикл recovery key, кілька облікових записів, round-trip відповіді Gateway, self-verification) +- фільтрація згадок і allowlists — `matrix-mention-*`, `matrix-allowlist-*`, `matrix-multi-actor-ordering`, `matrix-inbound-edit-*`, `matrix-mxid-prefixed-command-block`, `matrix-observer-allowlist-override` +- E2EE — `matrix-e2ee-*` (базова відповідь, продовження треду, bootstrap, життєвий цикл recovery key, варіанти втрати стану, поведінка резервної копії сервера, hygiene пристроїв, перевірка SAS / QR / DM, перезапуск, редагування артефактів) +- E2EE CLI — `matrix-e2ee-cli-*` (налаштування шифрування, ідемпотентне налаштування, помилка bootstrap, життєвий цикл recovery key, кілька облікових записів, повний цикл gateway-reply, self-verification) -Передайте `--scenario ` (можна вказувати кілька разів), щоб запустити вибраний набір; поєднуйте з `--profile all`, щоб ігнорувати gating профілю. +Передайте `--scenario ` (можна повторювати), щоб запустити вручну вибраний набір; поєднуйте з `--profile all`, щоб ігнорувати фільтрацію за профілем. ## Змінні середовища -| Змінна | Типове значення | Дія | -| -------------------------------------- | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `OPENCLAW_QA_MATRIX_TIMEOUT_MS` | `1800000` (30 хв) | Жорстка верхня межа для всього запуску. | -| `OPENCLAW_QA_MATRIX_NO_REPLY_WINDOW_MS` | `8000` | Вікно тиші для негативних перевірок на відсутність відповіді. Обмежується значенням `≤` тайм-ауту запуску. | -| `OPENCLAW_QA_MATRIX_CLEANUP_TIMEOUT_MS` | `90000` | Межа для teardown Docker. Повідомлення про збої включають recovery-команду `docker compose ... down --remove-orphans`. | -| `OPENCLAW_QA_MATRIX_TUWUNEL_IMAGE` | `ghcr.io/matrix-construct/tuwunel:v1.5.1` | Перевизначає образ homeserver під час перевірки з іншою версією Tuwunel. | -| `OPENCLAW_QA_MATRIX_PROGRESS` | увімкнено | `0` вимикає рядки поступу `[matrix-qa] ...` у stderr. `1` примусово вмикає їх. | -| `OPENCLAW_QA_MATRIX_CAPTURE_CONTENT` | redacted | `1` зберігає тіло повідомлення і `formatted_body` у `matrix-qa-observed-events.json`. Типово дані редагуються, щоб артефакти CI були безпечними. | -| `OPENCLAW_QA_MATRIX_DISABLE_FORCE_EXIT` | вимкнено | `1` пропускає детермінований `process.exit` після запису артефактів. Типова поведінка примусово завершує процес, оскільки native crypto handle із matrix-js-sdk можуть утримувати event loop активним після завершення запису артефактів. | -| `OPENCLAW_RUN_NODE_OUTPUT_LOG` | не задано | Якщо цю змінну задає зовнішній launcher (наприклад, `scripts/run-node.mjs`), Matrix QA повторно використовує цей шлях журналу замість запуску власного tee. | +| Змінна | Типове значення | Ефект | +| -------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `OPENCLAW_QA_MATRIX_TIMEOUT_MS` | `1800000` (30 хв) | Жорстка верхня межа для всього запуску. | +| `OPENCLAW_QA_MATRIX_NO_REPLY_WINDOW_MS` | `8000` | Вікно тиші для негативних перевірок відсутності відповіді. Обмежується значенням `≤` тайм-ауту запуску. | +| `OPENCLAW_QA_MATRIX_CLEANUP_TIMEOUT_MS` | `90000` | Межа часу для teardown Docker. Серед видимих збоїв — команда відновлення `docker compose ... down --remove-orphans`. | +| `OPENCLAW_QA_MATRIX_TUWUNEL_IMAGE` | `ghcr.io/matrix-construct/tuwunel:v1.5.1` | Перевизначає образ homeserver під час перевірки з іншою версією Tuwunel. | +| `OPENCLAW_QA_MATRIX_PROGRESS` | увімкнено | `0` вимикає рядки поступу `[matrix-qa] ...` у stderr. `1` примусово вмикає їх. | +| `OPENCLAW_QA_MATRIX_CAPTURE_CONTENT` | відредаговано | `1` зберігає тіло повідомлення та `formatted_body` у `matrix-qa-observed-events.json`. Типова поведінка — редагування, щоб артефакти CI залишалися безпечними. | +| `OPENCLAW_QA_MATRIX_DISABLE_FORCE_EXIT` | вимкнено | `1` пропускає детермінований `process.exit` після запису артефактів. Типова поведінка примусово завершує процес, оскільки native crypto-дескриптори `matrix-js-sdk` можуть утримувати event loop активним після завершення запису артефактів. | +| `OPENCLAW_RUN_NODE_OUTPUT_LOG` | не задано | Якщо ця змінна встановлена зовнішнім запускальником (наприклад, `scripts/run-node.mjs`), Matrix QA повторно використовує цей шлях до журналу замість запуску власного `tee`. | -## Вихідні артефакти +## Артефакти виводу Записуються до `--output-dir`: -- `matrix-qa-report.md` — Markdown-звіт протоколу (що пройшло, не пройшло, було пропущено і чому). -- `matrix-qa-summary.json` — структурований підсумок, придатний для розбору в CI та для dashboard. -- `matrix-qa-observed-events.json` — спостережені події Matrix від клієнтів driver і observer. Тіла повідомлень редагуються, якщо не задано `OPENCLAW_QA_MATRIX_CAPTURE_CONTENT=1`. -- `matrix-qa-output.log` — об’єднаний stdout/stderr із запуску. Якщо задано `OPENCLAW_RUN_NODE_OUTPUT_LOG`, натомість повторно використовується журнал зовнішнього launcher. +- `matrix-qa-report.md` — Markdown-звіт протоколу (що пройшло, що впало, що було пропущено і чому). +- `matrix-qa-summary.json` — структурований підсумок, придатний для парсингу в CI та дашбордів. +- `matrix-qa-observed-events.json` — спостережені події Matrix від клієнтів driver і observer. Тіла повідомлень редагуються, якщо не встановлено `OPENCLAW_QA_MATRIX_CAPTURE_CONTENT=1`; метадані approval подаються як зведення з вибраними безпечними полями та скороченим попереднім переглядом команди. +- `matrix-qa-output.log` — об’єднаний stdout/stderr із запуску. Якщо встановлено `OPENCLAW_RUN_NODE_OUTPUT_LOG`, замість цього повторно використовується журнал зовнішнього запускальника. Типовий каталог виводу — `/.artifacts/qa-e2e/matrix-`, тому послідовні запуски не перезаписують один одного. -## Поради для тріажу +## Поради щодо тріажу -- **Запуск зависає наприкінці:** native crypto handle із `matrix-js-sdk` можуть жити довше за harness. Типова поведінка примусово виконує чистий `process.exit` після запису артефактів; якщо ви встановили `OPENCLAW_QA_MATRIX_DISABLE_FORCE_EXIT=1`, очікуйте, що процес може зависнути. -- **Помилка очищення:** знайдіть надруковану recovery-команду (виклик `docker compose ... down --remove-orphans`) і запустіть її вручну, щоб звільнити порт homeserver. -- **Нестабільні вікна негативних перевірок у CI:** зменште `OPENCLAW_QA_MATRIX_NO_REPLY_WINDOW_MS` (типово 8 с), коли CI працює швидко; збільшуйте його на повільних спільних runner. -- **Потрібні неретаговані тіла повідомлень для bug report:** перезапустіть із `OPENCLAW_QA_MATRIX_CAPTURE_CONTENT=1` і додайте `matrix-qa-observed-events.json`. Вважайте отриманий артефакт чутливим. -- **Інша версія Tuwunel:** вкажіть у `OPENCLAW_QA_MATRIX_TUWUNEL_IMAGE` версію, яка тестується. У лейні зафіксовано лише типовий pinned-образ. +- **Запуск зависає ближче до завершення:** native crypto-дескриптори `matrix-js-sdk` можуть жити довше за harness. Типова поведінка примусово виконує чистий `process.exit` після запису артефактів; якщо ви встановили `OPENCLAW_QA_MATRIX_DISABLE_FORCE_EXIT=1`, очікуйте, що процес буде зависати. +- **Помилка очищення:** знайдіть надруковану команду відновлення (виклик `docker compose ... down --remove-orphans`) і виконайте її вручну, щоб звільнити порт homeserver. +- **Нестабільні вікна негативних перевірок у CI:** зменште `OPENCLAW_QA_MATRIX_NO_REPLY_WINDOW_MS` (типово 8 с), якщо CI швидкий; збільште його на повільних спільних runners. +- **Потрібні неретаговані тіла повідомлень для звіту про помилку:** перезапустіть із `OPENCLAW_QA_MATRIX_CAPTURE_CONTENT=1` і додайте `matrix-qa-observed-events.json`. Вважайте отриманий артефакт чутливим. +- **Інша версія Tuwunel:** вкажіть у `OPENCLAW_QA_MATRIX_TUWUNEL_IMAGE` версію, яку тестуєте. У репозиторії зафіксовано лише типове закріплене значення образу. -## Контракт live-транспорту +## Live-контракт транспортного рівня -Matrix — один із трьох live-транспортних лейнів (Matrix, Telegram, Discord), які використовують спільний контрольний список контракту, визначений у [Огляд QA → Покриття live-транспорту](/uk/concepts/qa-e2e-automation#live-transport-coverage). `qa-channel` залишається широким синтетичним набором і навмисно не входить до цієї матриці. +Matrix — один із трьох live-лейнів транспортного рівня (Matrix, Telegram, Discord), які використовують спільний контрольний список контракту, визначений у [Огляд QA → Live-покриття транспортного рівня](/uk/concepts/qa-e2e-automation#live-transport-coverage). `qa-channel` залишається широким синтетичним набором і навмисно не входить до цієї матриці. ## Пов’язане -- [Огляд QA](/uk/concepts/qa-e2e-automation) — загальний стек QA і контракт live-транспорту -- [QA Channel](/uk/channels/qa-channel) — адаптер синтетичного каналу для сценаріїв на базі репозиторію -- [Тестування](/uk/help/testing) — запуск тестів і додавання покриття QA +- [Огляд QA](/uk/concepts/qa-e2e-automation) — загальний стек QA і live-контракт транспортного рівня +- [QA Channel](/uk/channels/qa-channel) — синтетичний адаптер каналу для сценаріїв на основі репозиторію +- [Тестування](/uk/help/testing) — запуск тестів і додавання QA-покриття - [Matrix](/uk/channels/matrix) — Plugin каналу, що тестується diff --git a/docs/uk/plugins/sdk-migration.md b/docs/uk/plugins/sdk-migration.md index c8cabf1b1..e6a7dbbb7 100644 --- a/docs/uk/plugins/sdk-migration.md +++ b/docs/uk/plugins/sdk-migration.md @@ -9,83 +9,86 @@ sidebarTitle: Migrate to SDK summary: Перейдіть із застарілого шару зворотної сумісності на сучасний Plugin SDK title: Міграція Plugin SDK x-i18n: - generated_at: "2026-04-28T03:09:59Z" + generated_at: "2026-04-28T03:20:34Z" model: gpt-5.4 provider: openai - source_hash: 330ae4446c56e1a596e6c1b8e198a98bb03b616104efd1b25b4285c2700166c3 + source_hash: f98e3e5d999f8f18069f39f5d8a2f65b97003301d10e59ab5cfcf744ac0720c4 source_path: plugins/sdk-migration.md workflow: 15 --- -OpenClaw перейшов від широкого шару зворотної сумісності до сучасної архітектури Plugin із цілеспрямованими, документованими імпортами. Якщо ваш Plugin було створено до появи нової архітектури, цей посібник допоможе вам виконати міграцію. +OpenClaw перейшов від широкого шару зворотної сумісності до сучасної архітектури Plugin із цільовими, задокументованими імпортами. Якщо ваш Plugin було створено до появи нової архітектури, цей посібник допоможе вам виконати міграцію. ## Що змінюється -Стара система Plugin надавала дві широко відкриті поверхні, які дозволяли Plugin імпортувати все, що їм було потрібно, з єдиної точки входу: +Стара система Plugin надавала дві надто широкі поверхні, які дозволяли Plugins імпортувати все, що їм потрібно, з однієї точки входу: -- **`openclaw/plugin-sdk/compat`** — єдиний імпорт, який повторно експортував десятки допоміжних засобів. Його було запроваджено, щоб старіші Plugin на основі хуків продовжували працювати, поки розроблялася нова архітектура Plugin. -- **`openclaw/plugin-sdk/infra-runtime`** — широкий barrel допоміжних засобів runtime, який змішував системні події, стан Heartbeat, черги доставки, допоміжні засоби fetch/proxy, файлові допоміжні засоби, типи схвалення та не пов’язані між собою утиліти. -- **`openclaw/plugin-sdk/config-runtime`** — широкий barrel сумісності конфігурації, який під час вікна міграції все ще містить застарілі допоміжні засоби прямого load/write. -- **`openclaw/extension-api`** — міст, який надавав Plugin прямий доступ до допоміжних засобів на боці хоста, як-от вбудований runner агента. -- **`api.registerEmbeddedExtensionFactory(...)`** — вилучений хук комплектного розширення лише для Pi, який міг спостерігати за подіями embedded-runner, такими як `tool_result`. +- **`openclaw/plugin-sdk/compat`** — єдиний імпорт, який повторно експортував десятки допоміжних засобів. Його було запроваджено, щоб старіші Plugins на основі hook продовжували працювати під час розробки нової архітектури Plugin. +- **`openclaw/plugin-sdk/infra-runtime`** — широкий barrel допоміжних засобів часу виконання, який змішував системні події, стан Heartbeat, черги доставки, допоміжні засоби fetch/proxy, файлові допоміжні засоби, типи approval та несуміжні утиліти. +- **`openclaw/plugin-sdk/config-runtime`** — широкий barrel сумісності конфігурації, який досі містить застарілі прямі допоміжні засоби load/write під час вікна міграції. +- **`openclaw/extension-api`** — міст, який надавав Plugins прямий доступ до допоміжних засобів на боці хоста, таких як вбудований засіб запуску агентів. +- **`api.registerEmbeddedExtensionFactory(...)`** — вилучений hook пакетного extension лише для Pi, який міг спостерігати за подіями вбудованого runner, такими як `tool_result`. -Широкі поверхні імпорту тепер **застарілі**. Вони все ще працюють під час виконання, але нові Plugin не повинні їх використовувати, а наявні Plugin мають перейти до міграції до того, як їх буде вилучено в наступному мажорному випуску. API реєстрації фабрики вбудованого розширення лише для Pi вилучено; натомість використовуйте middleware результатів інструментів. +Ці широкі поверхні імпорту тепер **застарілі**. Вони все ще працюють під час виконання, але нові Plugins не повинні їх використовувати, а наявні Plugins слід мігрувати до того, як у наступному мажорному випуску їх буде вилучено. API реєстрації фабрики вбудованих extension лише для Pi було вилучено; натомість використовуйте middleware результатів інструментів. -OpenClaw не вилучає і не переосмислює документовану поведінку Plugin в тій самій зміні, яка запроваджує заміну. Зміни контракту, що ламають сумісність, спочатку мають пройти через адаптер сумісності, діагностику, документацію та вікно застарівання. Це стосується імпортів SDK, полів маніфесту, API налаштування, хуків і поведінки реєстрації runtime. +OpenClaw не вилучає і не переосмислює задокументовану поведінку Plugin у тій самій зміні, яка вводить заміну. Зміни контракту, що порушують сумісність, спочатку мають пройти через адаптер сумісності, діагностику, документацію та вікно deprecation. Це стосується імпортів SDK, полів маніфесту, API налаштування, hooks і поведінки реєстрації під час виконання. Шар зворотної сумісності буде вилучено в одному з майбутніх мажорних випусків. - Plugin, які все ще імпортують із цих поверхонь, перестануть працювати, коли це станеться. - Реєстрації фабрики вбудованого розширення лише для Pi уже більше не завантажуються. + Plugins, які досі імпортують із цих поверхонь, перестануть працювати, коли це станеться. + Реєстрації фабрик вбудованих extension лише для Pi уже більше не завантажуються. ## Чому це змінилося Старий підхід спричиняв проблеми: -- **Повільний запуск** — імпорт одного допоміжного засобу завантажував десятки не пов’язаних модулів +- **Повільний запуск** — імпорт одного допоміжного засобу завантажував десятки несуміжних модулів - **Циклічні залежності** — широкі повторні експорти спрощували створення циклів імпорту -- **Неочевидна поверхня API** — не було способу зрозуміти, які експорти є стабільними, а які — внутрішніми +- **Неясна поверхня API** — не було способу визначити, які експорти є стабільними, а які внутрішніми -Сучасний Plugin SDK виправляє це: кожен шлях імпорту (`openclaw/plugin-sdk/\`) є невеликим самодостатнім модулем із чітким призначенням і документованим контрактом. +Сучасний Plugin SDK це виправляє: кожен шлях імпорту (`openclaw/plugin-sdk/\`) є невеликим самодостатнім модулем із чітким призначенням і задокументованим контрактом. -Застарілі seams зручності provider для комплектних каналів також зникли. -Допоміжні seams із брендуванням каналу були приватними скороченнями mono-repo, а не стабільними контрактами Plugin. Натомість використовуйте вузькі узагальнені subpath SDK. Усередині робочого простору комплектного Plugin зберігайте допоміжні засоби, що належать provider, у власному `api.ts` або `runtime-api.ts` цього Plugin. +Застарілі зручні seams провайдера для вбудованих каналів також прибрано. +Фірмові helper-seams каналів були приватними скороченнями mono-repo, а не стабільними контрактами Plugin. Натомість використовуйте вузькі універсальні subpath SDK. Усередині робочого простору вбудованого Plugin зберігайте допоміжні засоби, що належать провайдеру, у власному `api.ts` або `runtime-api.ts` цього Plugin. -Поточні приклади комплектних provider: +Поточні приклади вбудованих провайдерів: - Anthropic зберігає допоміжні засоби потоку, специфічні для Claude, у власному seam `api.ts` / `contract-api.ts` -- OpenAI зберігає builder-и provider, допоміжні засоби моделей за замовчуванням і builder-и realtime provider у власному `api.ts` -- OpenRouter зберігає builder provider і допоміжні засоби onboarding/config у власному `api.ts` +- OpenAI зберігає конструктори провайдера, допоміжні засоби моделі за замовчуванням і конструктори realtime-провайдера у власному `api.ts` +- OpenRouter зберігає конструктор провайдера та допоміжні засоби onboarding/config у власному `api.ts` ## Політика сумісності -Для зовнішніх Plugin робота із сумісністю виконується в такому порядку: +Для зовнішніх Plugins робота із сумісністю виконується в такому порядку: 1. додати новий контракт -2. зберегти стару поведінку, підключену через адаптер сумісності -3. вивести діагностику або попередження, яке вказує старий шлях і заміну -4. покрити обидва шляхи в тестах -5. задокументувати застарівання і шлях міграції +2. зберегти стару поведінку, підключивши її через адаптер сумісності +3. вивести діагностику або попередження з назвою старого шляху та заміни +4. покрити обидва шляхи тестами +5. задокументувати deprecation і шлях міграції 6. вилучати лише після оголошеного вікна міграції, зазвичай у мажорному випуску -Якщо поле маніфесту все ще приймається, автори Plugin можуть і далі використовувати його, доки документація та діагностика не скажуть інакше. Новий код має надавати перевагу документованій заміні, але наявні Plugin не повинні ламатися під час звичайних мінорних випусків. +Maintainers можуть перевірити поточну чергу міграції за допомогою +`pnpm plugins:boundary-report`. Звіт групує застарілі записи сумісності за датою вилучення, підраховує локальні посилання в коді/документації, показує зарезервовані імпорти SDK між різними власниками та підсумовує приватний міст SDK memory-host, щоб очищення сумісності залишалося явним, а не ґрунтувалося на ситуативних пошуках. + +Якщо поле маніфесту все ще приймається, автори Plugin можуть і далі використовувати його, доки документація та діагностика не скажуть інше. Новий код має надавати перевагу задокументованій заміні, але наявні Plugins не повинні ламатися під час звичайних мінорних випусків. ## Як виконати міграцію - - Комплектні Plugin мають припинити прямі виклики + + Вбудовані Plugins мають припинити прямі виклики `api.runtime.config.loadConfig()` і `api.runtime.config.writeConfigFile(...)`. Надавайте перевагу конфігурації, яку - вже було передано в активний шлях виклику. Довгоживучі обробники, яким - потрібен поточний знімок процесу, можуть використовувати `api.runtime.config.current()`. Довгоживучі - інструменти агента мають використовувати `ctx.getRuntimeConfig()` із контексту інструмента в - `execute`, щоб інструмент, створений до запису конфігурації, усе одно бачив - оновлену конфігурацію runtime. + вже передано в активний шлях виклику. Довгоживучі handlers, яким потрібен + поточний snapshot процесу, можуть використовувати `api.runtime.config.current()`. Довгоживучі + інструменти агентів мають використовувати `ctx.getRuntimeConfig()` із контексту інструмента всередині + `execute`, щоб інструмент, створений до запису конфігурації, усе ще бачив + оновлену конфігурацію часу виконання. - Записи конфігурації мають проходити через транзакційні допоміжні засоби й - обирати політику після запису: + Запис конфігурації має виконуватися через транзакційні допоміжні засоби з вибором + політики після запису: ```typescript await api.runtime.config.mutateConfigFile({ @@ -99,49 +102,49 @@ OpenClaw не вилучає і не переосмислює документо Використовуйте `afterWrite: { mode: "restart", reason: "..." }`, коли викликач знає, що зміна потребує чистого перезапуску Gateway, і `afterWrite: { mode: "none", reason: "..." }` лише тоді, коли викликач сам керує - подальшими діями й навмисно хоче придушити планувальник перезавантаження. + подальшими діями та свідомо хоче придушити планувальник перезавантаження. Результати мутації містять типізоване зведення `followUp` для тестів і логування; - Gateway як і раніше відповідає за застосування або планування перезапуску. + Gateway, як і раніше, відповідає за застосування або планування перезапуску. `loadConfig` і `writeConfigFile` залишаються як застарілі допоміжні - засоби сумісності для зовнішніх Plugin на час вікна міграції та один раз - попереджають із кодом сумісності `runtime-config-load-write`. Комплектні Plugin і код - runtime репозиторію захищені scanner guardrails у + засоби сумісності для зовнішніх Plugins протягом вікна міграції та один раз + показують попередження з кодом сумісності `runtime-config-load-write`. Вбудовані Plugins і код + часу виконання репозиторію захищені scanner guardrails у `pnpm check:deprecated-internal-config-api` і - `pnpm check:no-runtime-action-load-config`: нове використання production Plugin - одразу завершується помилкою, прямий запис конфігурації завершується помилкою, методи сервера Gateway мають використовувати - знімок runtime запиту, допоміжні засоби send/action/client runtime-каналу - мають отримувати конфігурацію зі своєї межі, а довгоживучі модулі runtime мають - нуль дозволених ambient викликів `loadConfig()`. + `pnpm check:no-runtime-action-load-config`: нове використання у production Plugin + завершується негайною помилкою, прямі записи конфігурації завершуються помилкою, серверні методи Gateway мають використовувати + snapshot часу виконання запиту, helper-и send/action/client часу виконання каналу + мають отримувати конфігурацію від своєї boundary, а довгоживучі модулі часу виконання мають + нуль дозволених ambient-викликів `loadConfig()`. Новий код Plugin також має уникати імпорту широкого - barrel сумісності `openclaw/plugin-sdk/config-runtime`. Використовуйте вузький + compatibility-barrel `openclaw/plugin-sdk/config-runtime`. Використовуйте вузький subpath SDK, що відповідає завданню: | Потреба | Імпорт | | --- | --- | | Типи конфігурації, такі як `OpenClawConfig` | `openclaw/plugin-sdk/config-types` | - | Already-loaded перевірки конфігурації та пошук конфігурації запису Plugin | `openclaw/plugin-sdk/plugin-config-runtime` | - | Читання поточного знімка runtime | `openclaw/plugin-sdk/runtime-config-snapshot` | - | Записи конфігурації | `openclaw/plugin-sdk/config-mutation` | + | Перевірки вже завантаженої конфігурації та пошук конфігурації входу Plugin | `openclaw/plugin-sdk/plugin-config-runtime` | + | Читання поточного snapshot часу виконання | `openclaw/plugin-sdk/runtime-config-snapshot` | + | Запис конфігурації | `openclaw/plugin-sdk/config-mutation` | | Допоміжні засоби сховища сесій | `openclaw/plugin-sdk/session-store-runtime` | - | Конфігурація таблиць Markdown | `openclaw/plugin-sdk/markdown-table-runtime` | - | Допоміжні засоби runtime політики груп | `openclaw/plugin-sdk/runtime-group-policy` | - | Розв’язання secret input | `openclaw/plugin-sdk/secret-input-runtime` | + | Конфігурація таблиці Markdown | `openclaw/plugin-sdk/markdown-table-runtime` | + | Допоміжні засоби політики групи часу виконання | `openclaw/plugin-sdk/runtime-group-policy` | + | Визначення secret input | `openclaw/plugin-sdk/secret-input-runtime` | | Перевизначення model/session | `openclaw/plugin-sdk/model-session-runtime` | - Комплектні Plugin та їхні тести захищені scanner-обмеженнями від широкого - barrel, щоб імпорти та mocks залишалися локальними щодо потрібної їм поведінки. Широкий + Вбудовані Plugins і їхні тести захищені scanner-правилами від широкого + barrel, щоб імпорти та mocks залишалися локальними для потрібної їм поведінки. Широкий barrel усе ще існує для зовнішньої сумісності, але новий код не повинен від нього залежати. - - Комплектні Plugin мають замінити обробники результатів інструментів лише для Pi - `api.registerEmbeddedExtensionFactory(...)` на - middleware, нейтральне до runtime. + + Вбудовані Plugins мають замінити handlers + `api.registerEmbeddedExtensionFactory(...)` результатів інструментів лише для Pi на + runtime-neutral middleware. ```typescript - // Pi and Codex runtime dynamic tools + // Динамічні інструменти часу виконання Pi і Codex api.registerAgentToolResultMiddleware(async (event) => { return compactToolResult(event); }, { @@ -159,61 +162,62 @@ OpenClaw не вилучає і не переосмислює документо } ``` - Зовнішні Plugin не можуть реєструвати middleware результатів інструментів, тому що воно може - переписувати результат інструмента з високим рівнем довіри до того, як модель його побачить. + Зовнішні Plugins не можуть реєструвати middleware результатів інструментів, оскільки воно може + переписувати високодовірений вивід інструментів до того, як модель його побачить. - - Plugin каналів із підтримкою approval тепер розкривають нативну поведінку approval через - `approvalCapability.nativeRuntime` плюс спільний registry контексту runtime. + + Plugins каналів із підтримкою approval тепер надають нативну поведінку approval через + `approvalCapability.nativeRuntime` разом зі спільним реєстром runtime-context. - Ключові зміни: + Основні зміни: - Замініть `approvalCapability.handler.loadRuntime(...)` на `approvalCapability.nativeRuntime` - - Перенесіть специфічну для approval auth/delivery із застарілої прив’язки `plugin.auth` / + - Перенесіть специфічні для approval auth/delivery зі старої прив’язки `plugin.auth` / `plugin.approvals` на `approvalCapability` - - `ChannelPlugin.approvals` вилучено з публічного - контракту channel-plugin; перенесіть поля delivery/native/render до `approvalCapability` - - `plugin.auth` залишається лише для потоків channel login/logout; approval auth - hooks там більше не зчитуються core - - Реєструйте об’єкти runtime, що належать каналу, як-от clients, tokens або Bolt + - `ChannelPlugin.approvals` вилучено з публічного контракту channel-plugin; + перенесіть поля delivery/native/render до `approvalCapability` + - `plugin.auth` залишається лише для потоків login/logout каналу; approval + hooks там більше не читаються ядром + - Реєструйте об’єкти часу виконання, що належать каналу, такі як clients, tokens або Bolt apps, через `openclaw/plugin-sdk/channel-runtime-context` - - Не надсилайте повідомлення reroute notice, що належать Plugin, із нативних approval-обробників; - core тепер сам володіє повідомленнями routed-elsewhere notice на основі фактичних результатів доставки + - Не надсилайте сповіщення reroute, що належать Plugin, із нативних approval handlers; + тепер ядро саме відповідає за routed-elsewhere notices на основі фактичних результатів доставки - Під час передавання `channelRuntime` до `createChannelManager(...)` надавайте справжню поверхню `createPluginRuntime().channel`. Часткові stubs відхиляються. - Поточну структуру capability approval див. у `/plugins/sdk-channel-plugins`. + Див. `/plugins/sdk-channel-plugins` для актуальної + структури approval capability. - - Якщо ваш Plugin використовує `openclaw/plugin-sdk/windows-spawn`, нерозв’язані wrappers Windows - `.cmd`/`.bat` тепер завершуються в закритий спосіб, якщо ви явно не передасте + + Якщо ваш Plugin використовує `openclaw/plugin-sdk/windows-spawn`, невизначені Windows + wrappers `.cmd`/`.bat` тепер завершуються fail closed, якщо ви явно не передасте `allowShellFallback: true`. ```typescript - // Before + // До const program = applyWindowsSpawnProgramPolicy({ candidate }); - // After + // Після const program = applyWindowsSpawnProgramPolicy({ candidate, - // Only set this for trusted compatibility callers that intentionally - // accept shell-mediated fallback. + // Установлюйте це лише для довірених сумісних викликачів, які свідомо + // допускають резервний варіант через shell. allowShellFallback: true, }); ``` - Якщо ваш викликач навмисно не покладається на shell fallback, не встановлюйте - `allowShellFallback` і натомість обробляйте викинуту помилку. + Якщо ваш викликач не спирається свідомо на резервний варіант через shell, не встановлюйте + `allowShellFallback`, а натомість обробляйте викинуту помилку. - Знайдіть у своєму Plugin імпорти з будь-якої із застарілих поверхонь: + Знайдіть у вашому Plugin імпорти з будь-якої застарілої поверхні: ```bash grep -r "plugin-sdk/compat" my-plugin/ @@ -224,35 +228,36 @@ OpenClaw не вилучає і не переосмислює документо - - Кожен експорт зі старої поверхні зіставляється з конкретним сучасним шляхом імпорту: + + Кожен експорт зі старої поверхні відповідає конкретному сучасному шляху імпорту: ```typescript - // Before (deprecated backwards-compatibility layer) + // До (застарілий шар зворотної сумісності) import { createChannelReplyPipeline, createPluginRuntimeStore, resolveControlCommandGate, } from "openclaw/plugin-sdk/compat"; - // After (modern focused imports) + // Після (сучасні цільові імпорти) import { createChannelReplyPipeline } from "openclaw/plugin-sdk/channel-reply-pipeline"; import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store"; import { resolveControlCommandGate } from "openclaw/plugin-sdk/command-auth"; ``` - Для допоміжних засобів на боці хоста використовуйте injected runtime Plugin замість прямого імпорту: + Для helper-ів на боці хоста використовуйте впроваджене середовище виконання Plugin замість + прямого імпорту: ```typescript - // Before (deprecated extension-api bridge) + // До (застарілий міст extension-api) import { runEmbeddedPiAgent } from "openclaw/extension-api"; const result = await runEmbeddedPiAgent({ sessionId, prompt }); - // After (injected runtime) + // Після (впроваджене середовище виконання) const result = await api.runtime.agent.runEmbeddedPiAgent({ sessionId, prompt }); ``` - Той самий шаблон застосовується й до інших застарілих допоміжних засобів bridge: + Той самий шаблон застосовується й до інших helper-ів застарілого моста: | Старий імпорт | Сучасний еквівалент | | --- | --- | @@ -262,48 +267,48 @@ OpenClaw не вилучає і не переосмислює документо | `resolveThinkingDefault` | `api.runtime.agent.resolveThinkingDefault` | | `resolveAgentTimeoutMs` | `api.runtime.agent.resolveAgentTimeoutMs` | | `ensureAgentWorkspace` | `api.runtime.agent.ensureAgentWorkspace` | - | допоміжні засоби сховища сесій | `api.runtime.agent.session.*` | + | helper-и сховища сесій | `api.runtime.agent.session.*` | `openclaw/plugin-sdk/infra-runtime` усе ще існує для зовнішньої - сумісності, але новий код має імпортувати цілеспрямовану поверхню допоміжних засобів, - яка йому фактично потрібна: + сумісності, але новий код має імпортувати цільову поверхню helper-ів, яка + йому фактично потрібна: | Потреба | Імпорт | | --- | --- | - | Допоміжні засоби черги системних подій | `openclaw/plugin-sdk/system-event-runtime` | - | Допоміжні засоби подій Heartbeat і видимості | `openclaw/plugin-sdk/heartbeat-runtime` | - | Спорожнення черги відкладеної доставки | `openclaw/plugin-sdk/delivery-queue-runtime` | + | Helper-и черги системних подій | `openclaw/plugin-sdk/system-event-runtime` | + | Helper-и подій і видимості Heartbeat | `openclaw/plugin-sdk/heartbeat-runtime` | + | Зливання черги очікуваної доставки | `openclaw/plugin-sdk/delivery-queue-runtime` | | Телеметрія активності каналу | `openclaw/plugin-sdk/channel-activity-runtime` | | Кеші дедуплікації в пам’яті | `openclaw/plugin-sdk/dedupe-runtime` | - | Безпечні допоміжні засоби шляхів до локальних файлів/медіа | `openclaw/plugin-sdk/file-access-runtime` | - | `fetch` з урахуванням dispatcher | `openclaw/plugin-sdk/runtime-fetch` | - | Допоміжні засоби proxy і guarded fetch | `openclaw/plugin-sdk/fetch-runtime` | - | Типи політики dispatcher SSRF | `openclaw/plugin-sdk/ssrf-dispatcher` | + | Безпечні helper-и шляхів до локальних файлів/медіа | `openclaw/plugin-sdk/file-access-runtime` | + | Fetch з урахуванням dispatcher | `openclaw/plugin-sdk/runtime-fetch` | + | Helper-и proxy і захищеного fetch | `openclaw/plugin-sdk/fetch-runtime` | + | Типи політики SSRF dispatcher | `openclaw/plugin-sdk/ssrf-dispatcher` | | Типи запиту/розв’язання approval | `openclaw/plugin-sdk/approval-runtime` | - | Допоміжні засоби payload відповіді approval і команд | `openclaw/plugin-sdk/approval-reply-runtime` | - | Допоміжні засоби форматування помилок | `openclaw/plugin-sdk/error-runtime` | + | Helper-и payload відповіді approval і команд | `openclaw/plugin-sdk/approval-reply-runtime` | + | Helper-и форматування помилок | `openclaw/plugin-sdk/error-runtime` | | Очікування готовності транспорту | `openclaw/plugin-sdk/transport-ready-runtime` | - | Допоміжні засоби безпечних токенів | `openclaw/plugin-sdk/secure-random-runtime` | - | Обмежена конкурентність асинхронних задач | `openclaw/plugin-sdk/concurrency-runtime` | + | Helper-и безпечних токенів | `openclaw/plugin-sdk/secure-random-runtime` | + | Обмежена конкурентність асинхронних завдань | `openclaw/plugin-sdk/concurrency-runtime` | | Числове приведення | `openclaw/plugin-sdk/number-runtime` | | Асинхронне блокування в межах процесу | `openclaw/plugin-sdk/async-lock-runtime` | | Блокування файлів | `openclaw/plugin-sdk/file-lock` | - Комплектні Plugin захищені scanner-обмеженнями від `infra-runtime`, тому код репозиторію - не може знову повернутися до широкого barrel. + Вбудовані Plugins захищені scanner-правилами від `infra-runtime`, тому код репозиторію + не може повернутися до широкого barrel. - - Новий код маршрутизації каналу має використовувати `openclaw/plugin-sdk/channel-route`. - Старіші назви route-key і comparable-target залишаються як псевдоніми сумісності - на час вікна міграції, але нові Plugin мають використовувати назви маршрутів, + + Новий код маршрутів каналу має використовувати `openclaw/plugin-sdk/channel-route`. + Старіші назви route-key і comparable-target залишаються як aliases сумісності + протягом вікна міграції, але нові Plugins мають використовувати назви маршрутів, які безпосередньо описують поведінку: - | Старий допоміжний засіб | Сучасний допоміжний засіб | + | Старий helper | Сучасний helper | | --- | --- | | `channelRouteIdentityKey(...)` | `channelRouteDedupeKey(...)` | | `channelRouteKey(...)` | `channelRouteCompactKey(...)` | @@ -313,11 +318,11 @@ OpenClaw не вилучає і не переосмислює документо | `comparableChannelTargetsMatch(...)` | `channelRouteTargetsMatchExact(...)` | | `comparableChannelTargetsShareRoute(...)` | `channelRouteTargetsShareConversation(...)` | - Сучасні допоміжні засоби маршрутів послідовно нормалізують `{ channel, to, accountId, threadId }` - для нативних approval, придушення відповідей, дедуплікації вхідних повідомлень, - доставки Cron і маршрутизації сесій. Якщо ваш Plugin використовує власну граматику - цільових об’єктів, застосовуйте `resolveChannelRouteTargetWithParser(...)`, щоб адаптувати - цей parser до того самого контракту цільового маршруту. + Сучасні helper-и маршрутів узгоджено нормалізують `{ channel, to, accountId, threadId }` + у нативних approvals, придушенні відповідей, дедуплікації вхідних повідомлень, + доставці Cron і маршрутизації сесій. Якщо ваш Plugin використовує власну граматику + цілей, використовуйте `resolveChannelRouteTargetWithParser(...)`, щоб адаптувати цей + parser до того самого контракту цілі маршруту. @@ -334,194 +339,193 @@ OpenClaw не вилучає і не переосмислює документо | Шлях імпорту | Призначення | Ключові експорти | | --- | --- | --- | - | `plugin-sdk/plugin-entry` | Канонічний допоміжний засіб входу Plugin | `definePluginEntry` | - | `plugin-sdk/core` | Застарілий umbrella повторний експорт для визначень/builder-ів входу каналу | `defineChannelPluginEntry`, `createChatChannelPlugin` | + | `plugin-sdk/plugin-entry` | Канонічний helper точки входу Plugin | `definePluginEntry` | + | `plugin-sdk/core` | Застарілий umbrella-реекспорт для визначень/конструкторів входу каналу | `defineChannelPluginEntry`, `createChatChannelPlugin` | | `plugin-sdk/config-schema` | Експорт кореневої схеми конфігурації | `OpenClawSchema` | - | `plugin-sdk/provider-entry` | Допоміжний засіб входу для одного provider | `defineSingleProviderPluginEntry` | - | `plugin-sdk/channel-core` | Цілеспрямовані визначення і builder-и входу каналу | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase` | - | `plugin-sdk/setup` | Спільні допоміжні засоби майстра налаштування | Підказки allowlist, builder-и статусу налаштування | - | `plugin-sdk/setup-runtime` | Допоміжні засоби runtime під час налаштування | Безпечні для імпорту patch-адаптери налаштування, допоміжні засоби нотаток lookup, `promptResolvedAllowFrom`, `splitSetupEntries`, delegated setup proxies | - | `plugin-sdk/setup-adapter-runtime` | Допоміжні засоби адаптера налаштування | `createEnvPatchedAccountSetupAdapter` | - | `plugin-sdk/setup-tools` | Допоміжні засоби інструментів налаштування | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` | - | `plugin-sdk/account-core` | Допоміжні засоби для кількох облікових записів | Допоміжні засоби списку/конфігурації/action-gate облікових записів | - | `plugin-sdk/account-id` | Допоміжні засоби account-id | `DEFAULT_ACCOUNT_ID`, нормалізація account-id | - | `plugin-sdk/account-resolution` | Допоміжні засоби lookup облікових записів | Допоміжні засоби lookup облікових записів + fallback до значення за замовчуванням | - | `plugin-sdk/account-helpers` | Вузькі допоміжні засоби облікових записів | Допоміжні засоби списку облікових записів/account-action | + | `plugin-sdk/provider-entry` | Helper точки входу для одного провайдера | `defineSingleProviderPluginEntry` | + | `plugin-sdk/channel-core` | Цільові визначення й конструктори входу каналу | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase` | + | `plugin-sdk/setup` | Спільні helper-и майстра налаштування | Allowlist prompts, builders статусу налаштування | + | `plugin-sdk/setup-runtime` | Helper-и часу виконання для налаштування | Import-safe адаптери patch налаштування, helper-и приміток lookup, `promptResolvedAllowFrom`, `splitSetupEntries`, delegated setup proxies | + | `plugin-sdk/setup-adapter-runtime` | Helper-и адаптера налаштування | `createEnvPatchedAccountSetupAdapter` | + | `plugin-sdk/setup-tools` | Helper-и інструментів налаштування | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` | + | `plugin-sdk/account-core` | Helper-и для кількох облікових записів | Helper-и списку облікових записів/конфігурації/action-gate | + | `plugin-sdk/account-id` | Helper-и account-id | `DEFAULT_ACCOUNT_ID`, нормалізація account-id | + | `plugin-sdk/account-resolution` | Helper-и пошуку облікового запису | Helper-и пошуку облікового запису + fallback за замовчуванням | + | `plugin-sdk/account-helpers` | Вузькі helper-и облікового запису | Helper-и списку облікових записів/account-action | | `plugin-sdk/channel-setup` | Адаптери майстра налаштування | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`, а також `DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` | | `plugin-sdk/channel-pairing` | Примітиви DM pairing | `createChannelPairingController` | | `plugin-sdk/channel-reply-pipeline` | Прив’язка префікса відповіді + typing | `createChannelReplyPipeline` | | `plugin-sdk/channel-config-helpers` | Фабрики адаптерів конфігурації | `createHybridChannelConfigAdapter` | - | `plugin-sdk/channel-config-schema` | Builder-и схем конфігурації | Спільні примітиви схем конфігурації каналу і лише узагальнений builder | - | `plugin-sdk/bundled-channel-config-schema` | Комплектні схеми конфігурації | Лише для комплектних Plugin, які підтримує OpenClaw; нові Plugin мають визначати локальні схеми Plugin | - | `plugin-sdk/channel-config-schema-legacy` | Застарілі комплектні схеми конфігурації | Лише псевдонім сумісності; для підтримуваних комплектних Plugin використовуйте `plugin-sdk/bundled-channel-config-schema` | - | `plugin-sdk/telegram-command-config` | Допоміжні засоби конфігурації команд Telegram | Нормалізація назв команд, обрізання опису, валідація дублікатів/конфліктів | - | `plugin-sdk/channel-policy` | Розв’язання політик груп/DM | `resolveChannelGroupRequireMention` | - | `plugin-sdk/channel-lifecycle` | Допоміжні засоби статусу облікових записів і життєвого циклу потоку чернеток | `createAccountStatusSink`, допоміжні засоби фіналізації попереднього перегляду чернеток | - | `plugin-sdk/inbound-envelope` | Допоміжні засоби вхідного envelope | Спільні допоміжні засоби builder-ів route + envelope | - | `plugin-sdk/inbound-reply-dispatch` | Допоміжні засоби вхідних відповідей | Спільні допоміжні засоби record-and-dispatch | - | `plugin-sdk/messaging-targets` | Розбір цілей повідомлень | Допоміжні засоби розбору/зіставлення цілей | - | `plugin-sdk/outbound-media` | Допоміжні засоби вихідних медіа | Спільне завантаження вихідних медіа | - | `plugin-sdk/outbound-send-deps` | Допоміжні засоби залежностей outbound send | Полегшений lookup `resolveOutboundSendDep` без імпорту повного outbound runtime | - | `plugin-sdk/outbound-runtime` | Допоміжні засоби outbound runtime | Допоміжні засоби outbound delivery, identity/send delegate, session, formatting і планування payload | - | `plugin-sdk/thread-bindings-runtime` | Допоміжні засоби thread-binding | Життєвий цикл thread-binding і допоміжні засоби адаптера | - | `plugin-sdk/agent-media-payload` | Застарілі допоміжні засоби payload медіа | Builder payload медіа агента для застарілих layouts полів | + | `plugin-sdk/channel-config-schema` | Конструктори схем конфігурації | Спільні примітиви схеми конфігурації каналу та лише універсальний builder | + | `plugin-sdk/bundled-channel-config-schema` | Схеми конфігурації вбудованих компонентів | Лише для вбудованих Plugins, які підтримує OpenClaw; нові Plugins мають визначати локальні схеми Plugin | + | `plugin-sdk/channel-config-schema-legacy` | Застарілі схеми конфігурації вбудованих компонентів | Лише alias сумісності; для підтримуваних вбудованих Plugins використовуйте `plugin-sdk/bundled-channel-config-schema` | + | `plugin-sdk/telegram-command-config` | Helper-и конфігурації команд Telegram | Нормалізація назв команд, обрізання опису, перевірка дублікатів/конфліктів | + | `plugin-sdk/channel-policy` | Визначення політики груп/DM | `resolveChannelGroupRequireMention` | + | `plugin-sdk/channel-lifecycle` | Helper-и статусу облікового запису та життєвого циклу потоку чернеток | `createAccountStatusSink`, helper-и фіналізації draft preview | + | `plugin-sdk/inbound-envelope` | Helper-и вхідного envelope | Спільні helper-и маршруту + builder envelope | + | `plugin-sdk/inbound-reply-dispatch` | Helper-и вхідної відповіді | Спільні helper-и record-and-dispatch | + | `plugin-sdk/messaging-targets` | Розбір цілей повідомлень | Helper-и розбору/зіставлення цілей | + | `plugin-sdk/outbound-media` | Helper-и вихідного медіа | Спільне завантаження вихідного медіа | + | `plugin-sdk/outbound-send-deps` | Helper-и залежностей вихідного надсилання | Полегшений lookup `resolveOutboundSendDep` без імпорту повного outbound runtime | + | `plugin-sdk/outbound-runtime` | Helper-и outbound runtime | Helper-и outbound delivery, identity/send delegate, session, formatting і планування payload | + | `plugin-sdk/thread-bindings-runtime` | Helper-и thread-binding | Helper-и життєвого циклу thread-binding та адаптерів | + | `plugin-sdk/agent-media-payload` | Застарілі helper-и media payload | Builder media payload агента для застарілих макетів полів | | `plugin-sdk/channel-runtime` | Застарілий shim сумісності | Лише застарілі утиліти channel runtime | - | `plugin-sdk/channel-send-result` | Типи результатів send | Типи результатів відповіді | + | `plugin-sdk/channel-send-result` | Типи результату надсилання | Типи результату відповіді | | `plugin-sdk/runtime-store` | Постійне сховище Plugin | `createPluginRuntimeStore` | - | `plugin-sdk/runtime` | Широкі допоміжні засоби runtime | Допоміжні засоби runtime/logging/backup/встановлення Plugin | - | `plugin-sdk/runtime-env` | Вузькі допоміжні засоби середовища runtime | Допоміжні засоби logger/runtime env, timeout, retry і backoff | - | `plugin-sdk/plugin-runtime` | Спільні допоміжні засоби runtime Plugin | Допоміжні засоби команд/хуків/http/interactive Plugin | - | `plugin-sdk/hook-runtime` | Допоміжні засоби pipeline хуків | Спільні допоміжні засоби pipeline Webhook/внутрішніх хуків | - | `plugin-sdk/lazy-runtime` | Допоміжні засоби lazy runtime | `createLazyRuntimeModule`, `createLazyRuntimeMethod`, `createLazyRuntimeMethodBinder`, `createLazyRuntimeNamedExport`, `createLazyRuntimeSurface` | - | `plugin-sdk/process-runtime` | Допоміжні засоби процесу | Спільні допоміжні засоби exec | - | `plugin-sdk/cli-runtime` | Допоміжні засоби CLI runtime | Форматування команд, очікування, допоміжні засоби версій | - | `plugin-sdk/gateway-runtime` | Допоміжні засоби Gateway | Допоміжні засоби клієнта Gateway і patch статусу каналу | + | `plugin-sdk/runtime` | Широкі helper-и runtime | Helper-и runtime/logging/backup/plugin-install | + | `plugin-sdk/runtime-env` | Вузькі helper-и runtime env | Logger/runtime env, helper-и timeout, retry і backoff | + | `plugin-sdk/plugin-runtime` | Спільні helper-и runtime Plugin | Helper-и команд/hooks/http/interactive Plugin | + | `plugin-sdk/hook-runtime` | Helper-и pipeline hook | Спільні helper-и pipeline Webhook/internal hook | + | `plugin-sdk/lazy-runtime` | Helper-и lazy runtime | `createLazyRuntimeModule`, `createLazyRuntimeMethod`, `createLazyRuntimeMethodBinder`, `createLazyRuntimeNamedExport`, `createLazyRuntimeSurface` | + | `plugin-sdk/process-runtime` | Helper-и процесу | Спільні helper-и exec | + | `plugin-sdk/cli-runtime` | Helper-и CLI runtime | Helper-и форматування команд, очікування, версій | + | `plugin-sdk/gateway-runtime` | Helper-и Gateway | Helper-и клієнта Gateway і patch статусу каналу | | `plugin-sdk/config-runtime` | Застарілий shim сумісності конфігурації | Надавайте перевагу `config-types`, `plugin-config-runtime`, `runtime-config-snapshot` і `config-mutation` | - | `plugin-sdk/telegram-command-config` | Допоміжні засоби команд Telegram | Стабільні fallback-допоміжні засоби валідації команд Telegram, коли поверхня контракту комплектного Telegram недоступна | - | `plugin-sdk/approval-runtime` | Допоміжні засоби prompt approval | Payload виконання/Plugin approval, допоміжні засоби capability/profile approval, нативні допоміжні засоби routing/runtime approval і форматування шляху структурованого відображення approval | - | `plugin-sdk/approval-auth-runtime` | Допоміжні засоби auth approval | Розв’язання approver, auth дій у тому самому чаті | - | `plugin-sdk/approval-client-runtime` | Допоміжні засоби клієнта approval | Допоміжні засоби profile/filter для нативного exec approval | - | `plugin-sdk/approval-delivery-runtime` | Допоміжні засоби доставки approval | Адаптери capability/delivery нативного approval | - | `plugin-sdk/approval-gateway-runtime` | Допоміжні засоби Gateway approval | Спільний допоміжний засіб gateway-resolution approval | - | `plugin-sdk/approval-handler-adapter-runtime` | Допоміжні засоби адаптера approval | Полегшені допоміжні засоби завантаження нативного адаптера approval для гарячих entrypoint-ів каналу | - | `plugin-sdk/approval-handler-runtime` | Допоміжні засоби обробника approval | Ширші допоміжні засоби runtime обробника approval; надавайте перевагу вужчим seams адаптера/Gateway, коли їх достатньо | - | `plugin-sdk/approval-native-runtime` | Допоміжні засоби цілей approval | Допоміжні засоби binding цілі/облікового запису нативного approval | - | `plugin-sdk/approval-reply-runtime` | Допоміжні засоби відповіді approval | Допоміжні засоби payload відповіді exec/Plugin approval | - | `plugin-sdk/channel-runtime-context` | Допоміжні засоби контексту runtime каналу | Узагальнені допоміжні засоби register/get/watch для контексту runtime каналу | - | `plugin-sdk/security-runtime` | Допоміжні засоби безпеки | Спільні допоміжні засоби trust, DM gating, external-content і збирання секретів | - | `plugin-sdk/ssrf-policy` | Допоміжні засоби політики SSRF | Допоміжні засоби allowlist хостів і політики приватної мережі | - | `plugin-sdk/ssrf-runtime` | Допоміжні засоби runtime SSRF | Pinned-dispatcher, guarded fetch, допоміжні засоби політики SSRF | - | `plugin-sdk/system-event-runtime` | Допоміжні засоби системних подій | `enqueueSystemEvent`, `peekSystemEventEntries` | - | `plugin-sdk/heartbeat-runtime` | Допоміжні засоби Heartbeat | Допоміжні засоби подій Heartbeat і видимості | - | `plugin-sdk/delivery-queue-runtime` | Допоміжні засоби черги доставки | `drainPendingDeliveries` | - | `plugin-sdk/channel-activity-runtime` | Допоміжні засоби активності каналу | `recordChannelActivity` | - | `plugin-sdk/dedupe-runtime` | Допоміжні засоби дедуплікації | Кеші дедуплікації в пам’яті | - | `plugin-sdk/file-access-runtime` | Допоміжні засоби доступу до файлів | Безпечні допоміжні засоби шляхів до локальних файлів/медіа | - | `plugin-sdk/transport-ready-runtime` | Допоміжні засоби готовності транспорту | `waitForTransportReady` | - | `plugin-sdk/collection-runtime` | Допоміжні засоби обмеженого кешу | `pruneMapToMaxSize` | - | `plugin-sdk/diagnostic-runtime` | Допоміжні засоби керування діагностикою | `isDiagnosticFlagEnabled`, `isDiagnosticsEnabled` | - | `plugin-sdk/error-runtime` | Допоміжні засоби форматування помилок | `formatUncaughtError`, `isApprovalNotFoundError`, допоміжні засоби графа помилок | - | `plugin-sdk/fetch-runtime` | Обгорнуті допоміжні засоби fetch/proxy | `resolveFetch`, допоміжні засоби proxy | - | `plugin-sdk/host-runtime` | Допоміжні засоби нормалізації хоста | `normalizeHostname`, `normalizeScpRemoteHost` | - | `plugin-sdk/retry-runtime` | Допоміжні засоби retry | `RetryConfig`, `retryAsync`, виконавці політик | + | `plugin-sdk/telegram-command-config` | Helper-и команд Telegram | Стабільні helper-и перевірки команд Telegram для fallback, коли поверхня контракту вбудованого Telegram недоступна | + | `plugin-sdk/approval-runtime` | Helper-и prompt approval | Payload approval exec/plugin, helper-и capability/profile approval, helper-и нативної маршрутизації/runtime approval і форматування структурованого шляху відображення approval | + | `plugin-sdk/approval-auth-runtime` | Helper-и auth approval | Визначення approver, auth дій у тому самому чаті | + | `plugin-sdk/approval-client-runtime` | Helper-и клієнта approval | Helper-и профілю/фільтра нативного exec approval | + | `plugin-sdk/approval-delivery-runtime` | Helper-и доставки approval | Адаптери capability/delivery нативного approval | + | `plugin-sdk/approval-gateway-runtime` | Helper-и Gateway approval | Спільний helper визначення Gateway approval | + | `plugin-sdk/approval-handler-adapter-runtime` | Helper-и адаптера approval | Полегшені helper-и завантаження адаптера нативного approval для гарячих точок входу каналу | + | `plugin-sdk/approval-handler-runtime` | Helper-и handler approval | Ширші helper-и runtime handler approval; віддавайте перевагу вужчим adapter/gateway seams, коли їх достатньо | + | `plugin-sdk/approval-native-runtime` | Helper-и цілей approval | Helper-и прив’язки цілі/облікового запису нативного approval | + | `plugin-sdk/approval-reply-runtime` | Helper-и відповіді approval | Helper-и payload відповіді exec/plugin approval | + | `plugin-sdk/channel-runtime-context` | Helper-и channel runtime-context | Універсальні helper-и register/get/watch для channel runtime-context | + | `plugin-sdk/security-runtime` | Helper-и безпеки | Спільні helper-и trust, DM gating, external-content і secret-collection | + | `plugin-sdk/ssrf-policy` | Helper-и політики SSRF | Helper-и allowlist хостів і політики приватної мережі | + | `plugin-sdk/ssrf-runtime` | Helper-и SSRF runtime | Helper-и pinned-dispatcher, guarded fetch, SSRF policy | + | `plugin-sdk/system-event-runtime` | Helper-и системних подій | `enqueueSystemEvent`, `peekSystemEventEntries` | + | `plugin-sdk/heartbeat-runtime` | Helper-и Heartbeat | Helper-и подій і видимості Heartbeat | + | `plugin-sdk/delivery-queue-runtime` | Helper-и черги доставки | `drainPendingDeliveries` | + | `plugin-sdk/channel-activity-runtime` | Helper-и активності каналу | `recordChannelActivity` | + | `plugin-sdk/dedupe-runtime` | Helper-и дедуплікації | Кеші дедуплікації в пам’яті | + | `plugin-sdk/file-access-runtime` | Helper-и доступу до файлів | Безпечні helper-и шляхів до локальних файлів/медіа | + | `plugin-sdk/transport-ready-runtime` | Helper-и готовності транспорту | `waitForTransportReady` | + | `plugin-sdk/collection-runtime` | Helper-и обмеженого кешу | `pruneMapToMaxSize` | + | `plugin-sdk/diagnostic-runtime` | Helper-и діагностичного gating | `isDiagnosticFlagEnabled`, `isDiagnosticsEnabled` | + | `plugin-sdk/error-runtime` | Helper-и форматування помилок | `formatUncaughtError`, `isApprovalNotFoundError`, helper-и графа помилок | + | `plugin-sdk/fetch-runtime` | Обгорнуті helper-и fetch/proxy | `resolveFetch`, helper-и proxy | + | `plugin-sdk/host-runtime` | Helper-и нормалізації хоста | `normalizeHostname`, `normalizeScpRemoteHost` | + | `plugin-sdk/retry-runtime` | Helper-и retry | `RetryConfig`, `retryAsync`, runners політик | | `plugin-sdk/allow-from` | Форматування allowlist | `formatAllowFromLowercase` | - | `plugin-sdk/allowlist-resolution` | Відображення входів allowlist | `mapAllowlistResolutionInputs` | - | `plugin-sdk/command-auth` | Керування командами і допоміжні засоби поверхні команд | `resolveControlCommandGate`, допоміжні засоби авторизації відправника, допоміжні засоби registry команд, зокрема форматування меню динамічних аргументів | + | `plugin-sdk/allowlist-resolution` | Відображення вводу allowlist | `mapAllowlistResolutionInputs` | + | `plugin-sdk/command-auth` | Gating команд і helper-и поверхні команд | `resolveControlCommandGate`, helper-и авторизації відправника, helper-и реєстру команд, включно з форматуванням меню динамічних аргументів | | `plugin-sdk/command-status` | Рендерери статусу/довідки команд | `buildCommandsMessage`, `buildCommandsMessagePaginated`, `buildHelpMessage` | - | `plugin-sdk/secret-input` | Розбір secret input | Допоміжні засоби secret input | - | `plugin-sdk/webhook-ingress` | Допоміжні засоби запитів Webhook | Утиліти цілей Webhook | - | `plugin-sdk/webhook-request-guards` | Допоміжні засоби guard для тіла запиту Webhook | Допоміжні засоби читання/обмеження тіла запиту | - | `plugin-sdk/reply-runtime` | Спільний runtime відповідей | Вхідний dispatch, Heartbeat, планувальник відповідей, chunking | - | `plugin-sdk/reply-dispatch-runtime` | Вузькі допоміжні засоби dispatch відповідей | Фіналізація, dispatch provider і допоміжні засоби міток розмов | - | `plugin-sdk/reply-history` | Допоміжні засоби історії відповідей | `buildHistoryContext`, `buildPendingHistoryContextFromMap`, `recordPendingHistoryEntry`, `clearHistoryEntriesIfEnabled` | + | `plugin-sdk/secret-input` | Розбір secret input | Helper-и secret input | + | `plugin-sdk/webhook-ingress` | Helper-и запиту Webhook | Утиліти цілі Webhook | + | `plugin-sdk/webhook-request-guards` | Helper-и guard для тіла запиту Webhook | Helper-и читання/обмеження тіла запиту | + | `plugin-sdk/reply-runtime` | Спільний reply runtime | Inbound dispatch, Heartbeat, planner відповідей, chunking | + | `plugin-sdk/reply-dispatch-runtime` | Вузькі helper-и dispatch відповідей | Helper-и finalize, provider dispatch і міток conversation | + | `plugin-sdk/reply-history` | Helper-и історії відповідей | `buildHistoryContext`, `buildPendingHistoryContextFromMap`, `recordPendingHistoryEntry`, `clearHistoryEntriesIfEnabled` | | `plugin-sdk/reply-reference` | Планування посилань відповіді | `createReplyReferencePlanner` | - | `plugin-sdk/reply-chunking` | Допоміжні засоби chunk відповіді | Допоміжні засоби chunking тексту/Markdown | - | `plugin-sdk/session-store-runtime` | Допоміжні засоби сховища сесій | Допоміжні засоби шляху сховища + updated-at | - | `plugin-sdk/state-paths` | Допоміжні засоби шляхів стану | Допоміжні засоби каталогів стану та OAuth | - | `plugin-sdk/routing` | Допоміжні засоби routing/session-key | `resolveAgentRoute`, `buildAgentSessionKey`, `resolveDefaultAgentBoundAccountId`, допоміжні засоби нормалізації session-key | - | `plugin-sdk/status-helpers` | Допоміжні засоби статусу каналу | Builder-и зведення статусу каналу/облікового запису, значення за замовчуванням стану runtime, допоміжні засоби метаданих проблем | - | `plugin-sdk/target-resolver-runtime` | Допоміжні засоби розв’язання цілей | Спільні допоміжні засоби розв’язання цілей | - | `plugin-sdk/string-normalization-runtime` | Допоміжні засоби нормалізації рядків | Допоміжні засоби нормалізації slug/рядків | - | `plugin-sdk/request-url` | Допоміжні засоби URL запитів | Витягання рядкових URL із входів, подібних до request | - | `plugin-sdk/run-command` | Допоміжні засоби timed command | Виконавець timed command із нормалізованими stdout/stderr | - | `plugin-sdk/param-readers` | Читачі параметрів | Поширені читачі параметрів інструментів/CLI | - | `plugin-sdk/tool-payload` | Витягання payload інструмента | Витягання нормалізованих payload із об’єктів результатів інструмента | - | `plugin-sdk/tool-send` | Витягання send інструмента | Витягання канонічних полів цілі send з аргументів інструмента | - | `plugin-sdk/temp-path` | Допоміжні засоби тимчасових шляхів | Спільні допоміжні засоби шляхів тимчасового завантаження | - | `plugin-sdk/logging-core` | Допоміжні засоби logging | Допоміжні засоби logger підсистеми та редагування | - | `plugin-sdk/markdown-table-runtime` | Допоміжні засоби Markdown-table | Допоміжні засоби режиму таблиць Markdown | - | `plugin-sdk/reply-payload` | Типи reply повідомлень | Типи payload відповіді | - | `plugin-sdk/provider-setup` | Кураторські допоміжні засоби налаштування локальних/self-hosted provider | Допоміжні засоби виявлення/конфігурації self-hosted provider | - | `plugin-sdk/self-hosted-provider-setup` | Цілеспрямовані допоміжні засоби налаштування self-hosted provider, сумісних з OpenAI | Ті самі допоміжні засоби виявлення/конфігурації self-hosted provider | - | `plugin-sdk/provider-auth-runtime` | Допоміжні засоби auth provider runtime | Допоміжні засоби розв’язання API-ключів runtime | - | `plugin-sdk/provider-auth-api-key` | Допоміжні засоби налаштування API-ключів provider | Допоміжні засоби onboarding/profile-write для API-ключів | - | `plugin-sdk/provider-auth-result` | Допоміжні засоби auth-result provider | Стандартний builder auth-result OAuth | - | `plugin-sdk/provider-auth-login` | Допоміжні засоби інтерактивного входу provider | Спільні допоміжні засоби інтерактивного входу | - | `plugin-sdk/provider-selection-runtime` | Допоміжні засоби вибору provider | Вибір provider configured-or-auto і злиття сирої конфігурації provider | - | `plugin-sdk/provider-env-vars` | Допоміжні засоби env-var provider | Допоміжні засоби lookup env-var auth provider | - | `plugin-sdk/provider-model-shared` | Спільні допоміжні засоби model/replay provider | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, спільні builder-и replay-policy, допоміжні засоби endpoint provider і нормалізації model-id | - | `plugin-sdk/provider-catalog-shared` | Спільні допоміжні засоби каталогу provider | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` | - | `plugin-sdk/provider-onboard` | Патчі onboarding provider | Допоміжні засоби конфігурації onboarding | - | `plugin-sdk/provider-http` | Допоміжні засоби HTTP provider | Узагальнені допоміжні засоби HTTP/можливостей endpoint provider, зокрема допоміжні засоби multipart form для транскрипції аудіо | - | `plugin-sdk/provider-web-fetch` | Допоміжні засоби web-fetch provider | Допоміжні засоби реєстрації/кешу provider web-fetch | - | `plugin-sdk/provider-web-search-config-contract` | Допоміжні засоби конфігурації web-search provider | Вузькі допоміжні засоби конфігурації/облікових даних web-search для provider, яким не потрібна прив’язка enable Plugin | - | `plugin-sdk/provider-web-search-contract` | Допоміжні засоби контракту web-search provider | Вузькі допоміжні засоби контракту конфігурації/облікових даних web-search, такі як `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig` і scoped setters/getters облікових даних | - | `plugin-sdk/provider-web-search` | Допоміжні засоби web-search provider | Допоміжні засоби реєстрації/кешу/runtime provider web-search | - | `plugin-sdk/provider-tools` | Допоміжні засоби compat інструментів/схем provider | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, очищення схем Gemini + діагностика, а також допоміжні засоби compat xAI, такі як `resolveXaiModelCompatPatch` / `applyXaiModelCompat` | - | `plugin-sdk/provider-usage` | Допоміжні засоби використання provider | `fetchClaudeUsage`, `fetchGeminiUsage`, `fetchGithubCopilotUsage` та інші допоміжні засоби використання provider | - | `plugin-sdk/provider-stream` | Допоміжні засоби wrapper потоку provider | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, типи wrapper-ів потоку і спільні допоміжні засоби wrapper-ів Anthropic/Bedrock/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot | - | `plugin-sdk/provider-transport-runtime` | Допоміжні засоби транспорту provider | Нативні допоміжні засоби транспорту provider, такі як guarded fetch, перетворення повідомлень транспорту і доступні для запису потоки подій транспорту | - | `plugin-sdk/keyed-async-queue` | Упорядкована асинхронна черга | `KeyedAsyncQueue` | - | `plugin-sdk/media-runtime` | Спільні допоміжні засоби медіа | Допоміжні засоби отримання/перетворення/зберігання медіа плюс builder-и payload медіа | - | `plugin-sdk/media-generation-runtime` | Спільні допоміжні засоби генерації медіа | Спільні допоміжні засоби failover, вибір кандидатів і повідомлення про відсутню модель для генерації зображень/відео/музики | - | `plugin-sdk/media-understanding` | Допоміжні засоби media-understanding | Типи provider media understanding плюс експорти допоміжних засобів для роботи із зображенням/аудіо для provider | - | `plugin-sdk/text-runtime` | Спільні допоміжні засоби тексту | Видалення видимого для асистента тексту, допоміжні засоби render/chunking/table для Markdown, допоміжні засоби редагування, допоміжні засоби тегів директив, утиліти безпечного тексту та пов’язані допоміжні засоби тексту/logging | - | `plugin-sdk/text-chunking` | Допоміжні засоби chunking тексту | Допоміжний засіб chunking вихідного тексту | - | `plugin-sdk/speech` | Допоміжні засоби мовлення | Типи provider мовлення плюс допоміжні засоби директив, registry, валідації для provider і builder TTS, сумісний з OpenAI | - | `plugin-sdk/speech-core` | Спільне ядро мовлення | Типи provider мовлення, registry, директиви, нормалізація | - | `plugin-sdk/realtime-transcription` | Допоміжні засоби транскрипції realtime | Типи provider, допоміжні засоби registry і спільний допоміжний засіб сесії WebSocket | - | `plugin-sdk/realtime-voice` | Допоміжні засоби голосу realtime | Типи provider, допоміжні засоби registry/розв’язання і допоміжні засоби bridge session | - | `plugin-sdk/image-generation` | Допоміжні засоби генерації зображень | Типи provider генерації зображень плюс допоміжні засоби image asset/data URL і builder provider зображень, сумісний з OpenAI | - | `plugin-sdk/image-generation-core` | Спільне ядро генерації зображень | Типи генерації зображень, допоміжні засоби failover, auth і registry | - | `plugin-sdk/music-generation` | Допоміжні засоби генерації музики | Типи provider/request/result для генерації музики | - | `plugin-sdk/music-generation-core` | Спільне ядро генерації музики | Типи генерації музики, допоміжні засоби failover, lookup provider і розбір model-ref | - | `plugin-sdk/video-generation` | Допоміжні засоби генерації відео | Типи provider/request/result для генерації відео | - | `plugin-sdk/video-generation-core` | Спільне ядро генерації відео | Типи генерації відео, допоміжні засоби failover, lookup provider і розбір model-ref | - | `plugin-sdk/interactive-runtime` | Допоміжні засоби інтерактивних відповідей | Нормалізація/зведення payload інтерактивної відповіді | + | `plugin-sdk/reply-chunking` | Helper-и chunks відповіді | Helper-и chunking тексту/Markdown | + | `plugin-sdk/session-store-runtime` | Helper-и сховища сесій | Шлях сховища + helper-и updated-at | + | `plugin-sdk/state-paths` | Helper-и шляхів стану | Helper-и каталогів стану та OAuth | + | `plugin-sdk/routing` | Helper-и routing/session-key | `resolveAgentRoute`, `buildAgentSessionKey`, `resolveDefaultAgentBoundAccountId`, helper-и нормалізації session-key | + | `plugin-sdk/status-helpers` | Helper-и статусу каналу | Builders зведення статусу каналу/облікового запису, значення runtime-state за замовчуванням, helper-и метаданих issue | + | `plugin-sdk/target-resolver-runtime` | Helper-и визначення цілі | Спільні helper-и target resolver | + | `plugin-sdk/string-normalization-runtime` | Helper-и нормалізації рядків | Helper-и нормалізації slug/рядків | + | `plugin-sdk/request-url` | Helper-и URL запиту | Витягання рядкових URL із request-подібних вхідних даних | + | `plugin-sdk/run-command` | Helper-и команд із таймером | Runner команд із таймером і нормалізованими stdout/stderr | + | `plugin-sdk/param-readers` | Зчитувачі параметрів | Поширені зчитувачі параметрів tool/CLI | + | `plugin-sdk/tool-payload` | Витягання payload інструмента | Витягування нормалізованих payload із об’єктів результатів інструментів | + | `plugin-sdk/tool-send` | Витягання надсилання інструмента | Витягування канонічних полів цілі надсилання з аргументів інструмента | + | `plugin-sdk/temp-path` | Helper-и тимчасових шляхів | Спільні helper-и шляхів тимчасового завантаження | + | `plugin-sdk/logging-core` | Helper-и logging | Helper-и logger підсистем і редагування | + | `plugin-sdk/markdown-table-runtime` | Helper-и Markdown-table | Helper-и режиму таблиць Markdown | + | `plugin-sdk/reply-payload` | Типи reply повідомлень | Типи payload відповідей | + | `plugin-sdk/provider-setup` | Добірні helper-и налаштування локального/self-hosted провайдера | Helper-и виявлення/конфігурації self-hosted провайдера | + | `plugin-sdk/self-hosted-provider-setup` | Цільові helper-и налаштування self-hosted провайдера, сумісного з OpenAI | Ті самі helper-и виявлення/конфігурації self-hosted провайдера | + | `plugin-sdk/provider-auth-runtime` | Helper-и auth провайдера під час виконання | Helper-и визначення API-key під час виконання | + | `plugin-sdk/provider-auth-api-key` | Helper-и налаштування API-key провайдера | Helper-и onboarding/profile-write для API-key | + | `plugin-sdk/provider-auth-result` | Helper-и auth-result провайдера | Стандартний builder auth-result OAuth | + | `plugin-sdk/provider-auth-login` | Helper-и інтерактивного login провайдера | Спільні helper-и інтерактивного login | + | `plugin-sdk/provider-selection-runtime` | Helper-и вибору провайдера | Helper-и вибору налаштованого або автоматичного провайдера та злиття необробленої конфігурації провайдера | + | `plugin-sdk/provider-env-vars` | Helper-и env-var провайдера | Helper-и пошуку env-var auth провайдера | + | `plugin-sdk/provider-model-shared` | Спільні helper-и model/replay провайдера | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, спільні builders replay-policy, helper-и endpoint провайдера та helper-и нормалізації model-id | + | `plugin-sdk/provider-catalog-shared` | Спільні helper-и каталогу провайдера | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` | + | `plugin-sdk/provider-onboard` | Patches onboarding провайдера | Helper-и конфігурації onboarding | + | `plugin-sdk/provider-http` | Helper-и HTTP провайдера | Універсальні helper-и можливостей HTTP/endpoint провайдера, включно з helper-ами multipart form для транскрипції аудіо | + | `plugin-sdk/provider-web-fetch` | Helper-и web-fetch провайдера | Helper-и реєстрації/кешу провайдера web-fetch | + | `plugin-sdk/provider-web-search-config-contract` | Helper-и конфігурації web-search провайдера | Вузькі helper-и конфігурації/облікових даних web-search для провайдерів, яким не потрібна прив’язка enable Plugin | + | `plugin-sdk/provider-web-search-contract` | Helper-и контракту web-search провайдера | Вузькі helper-и контракту конфігурації/облікових даних web-search, такі як `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig` і scoped setters/getters облікових даних | + | `plugin-sdk/provider-web-search` | Helper-и web-search провайдера | Helper-и реєстрації/кешу/runtime провайдера web-search | + | `plugin-sdk/provider-tools` | Helper-и сумісності tool/schema провайдера | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, очищення схеми Gemini + diagnostics і helper-и сумісності xAI, такі як `resolveXaiModelCompatPatch` / `applyXaiModelCompat` | + | `plugin-sdk/provider-usage` | Helper-и usage провайдера | `fetchClaudeUsage`, `fetchGeminiUsage`, `fetchGithubCopilotUsage` та інші helper-и usage провайдера | + | `plugin-sdk/provider-stream` | Helper-и обгорток stream провайдера | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, типи обгорток stream і спільні helper-и обгорток Anthropic/Bedrock/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot | + | `plugin-sdk/provider-transport-runtime` | Helper-и транспорту провайдера | Helper-и нативного транспорту провайдера, такі як guarded fetch, трансформації повідомлень транспорту та writable event streams транспорту | + | `plugin-sdk/keyed-async-queue` | Упорядкована async-черга | `KeyedAsyncQueue` | + | `plugin-sdk/media-runtime` | Спільні helper-и медіа | Helper-и fetch/transform/store медіа плюс builders media payload | + | `plugin-sdk/media-generation-runtime` | Спільні helper-и генерації медіа | Спільні helper-и failover, вибір candidate і повідомлення про відсутню model для генерації зображень/відео/музики | + | `plugin-sdk/media-understanding` | Helper-и media-understanding | Типи провайдера media understanding плюс provider-facing helper-експорти для зображення/аудіо | + | `plugin-sdk/text-runtime` | Спільні helper-и тексту | Видалення тексту, видимого асистенту, helper-и render/chunking/table Markdown, helper-и редагування, helper-и directive-tag, утиліти safe-text і пов’язані helper-и text/logging | + | `plugin-sdk/text-chunking` | Helper-и chunking тексту | Helper chunking вихідного тексту | + | `plugin-sdk/speech` | Helper-и speech | Типи провайдера speech плюс provider-facing helper-и directive, registry, validation і builder TTS, сумісний з OpenAI | + | `plugin-sdk/speech-core` | Спільне ядро speech | Типи провайдера speech, registry, directives, нормалізація | + | `plugin-sdk/realtime-transcription` | Helper-и транскрипції в реальному часі | Типи провайдера, helper-и registry і спільний helper сесії WebSocket | + | `plugin-sdk/realtime-voice` | Helper-и голосу в реальному часі | Типи провайдера, helper-и registry/resolution і helper-и bridge session | + | `plugin-sdk/image-generation` | Helper-и генерації зображень | Типи провайдера генерації зображень плюс helper-и image asset/data URL і builder провайдера зображень, сумісний з OpenAI | + | `plugin-sdk/image-generation-core` | Спільне ядро генерації зображень | Типи генерації зображень, helper-и failover, auth і registry | + | `plugin-sdk/music-generation` | Helper-и генерації музики | Типи провайдера/запиту/результату генерації музики | + | `plugin-sdk/music-generation-core` | Спільне ядро генерації музики | Типи генерації музики, helper-и failover, lookup провайдера та розбір model-ref | + | `plugin-sdk/video-generation` | Helper-и генерації відео | Типи провайдера/запиту/результату генерації відео | + | `plugin-sdk/video-generation-core` | Спільне ядро генерації відео | Типи генерації відео, helper-и failover, lookup провайдера та розбір model-ref | + | `plugin-sdk/interactive-runtime` | Helper-и інтерактивної відповіді | Нормалізація/скорочення payload інтерактивної відповіді | | `plugin-sdk/channel-config-primitives` | Примітиви конфігурації каналу | Вузькі примітиви channel config-schema | - | `plugin-sdk/channel-config-writes` | Допоміжні засоби config-write каналу | Допоміжні засоби авторизації запису конфігурації каналу | - | `plugin-sdk/channel-plugin-common` | Спільна преамбула каналу | Спільні експорти преамбули channel Plugin | - | `plugin-sdk/channel-status` | Допоміжні засоби статусу каналу | Спільні допоміжні засоби snapshot/summary статусу каналу | - | `plugin-sdk/allowlist-config-edit` | Допоміжні засоби конфігурації allowlist | Допоміжні засоби редагування/читання конфігурації allowlist | - | `plugin-sdk/group-access` | Допоміжні засоби доступу груп | Спільні допоміжні засоби ухвалення рішень group-access | - | `plugin-sdk/direct-dm` | Допоміжні засоби direct-DM | Спільні допоміжні засоби auth/guard direct-DM | - | `plugin-sdk/extension-shared` | Спільні допоміжні засоби розширень | Примітиви passive-channel/status і ambient proxy helper | - | `plugin-sdk/webhook-targets` | Допоміжні засоби цілей Webhook | Registry цілей Webhook і допоміжні засоби встановлення route | - | `plugin-sdk/webhook-path` | Допоміжні засоби шляхів Webhook | Допоміжні засоби нормалізації шляхів Webhook | - | `plugin-sdk/web-media` | Спільні допоміжні засоби вебмедіа | Допоміжні засоби завантаження віддалених/локальних медіа | - | `plugin-sdk/zod` | Повторний експорт Zod | Повторно експортований `zod` для користувачів Plugin SDK | - | `plugin-sdk/memory-core` | Комплектні допоміжні засоби memory-core | Поверхня допоміжних засобів memory manager/config/file/CLI | - | `plugin-sdk/memory-core-engine-runtime` | Фасад runtime рушія пам’яті | Фасад runtime індексу/пошуку пам’яті | - | `plugin-sdk/memory-core-host-engine-foundation` | Базовий рушій хоста пам’яті | Експорти базового рушія хоста пам’яті | - | `plugin-sdk/memory-core-host-engine-embeddings` | Рушій embeddings хоста пам’яті | Контракти embeddings пам’яті, доступ до registry, локальний provider і узагальнені batch/remote допоміжні засоби; конкретні remote provider живуть у своїх Plugin-власниках | - | `plugin-sdk/memory-core-host-engine-qmd` | Рушій QMD хоста пам’яті | Експорти рушія QMD хоста пам’яті | - | `plugin-sdk/memory-core-host-engine-storage` | Рушій сховища хоста пам’яті | Експорти рушія сховища хоста пам’яті | - | `plugin-sdk/memory-core-host-multimodal` | Допоміжні засоби multimodal хоста пам’яті | Допоміжні засоби multimodal хоста пам’яті | - | `plugin-sdk/memory-core-host-query` | Допоміжні засоби запитів хоста пам’яті | Допоміжні засоби запитів хоста пам’яті | - | `plugin-sdk/memory-core-host-secret` | Допоміжні засоби secret хоста пам’яті | Допоміжні засоби secret хоста пам’яті | - | `plugin-sdk/memory-core-host-events` | Допоміжні засоби журналу подій хоста пам’яті | Допоміжні засоби журналу подій хоста пам’яті | - | `plugin-sdk/memory-core-host-status` | Допоміжні засоби статусу хоста пам’яті | Допоміжні засоби статусу хоста пам’яті | - | `plugin-sdk/memory-core-host-runtime-cli` | CLI runtime хоста пам’яті | Допоміжні засоби CLI runtime хоста пам’яті | - | `plugin-sdk/memory-core-host-runtime-core` | Core runtime хоста пам’яті | Допоміжні засоби core runtime хоста пам’яті | - | `plugin-sdk/memory-core-host-runtime-files` | Допоміжні засоби файлів/runtime хоста пам’яті | Допоміжні засоби файлів/runtime хоста пам’яті | - | `plugin-sdk/memory-host-core` | Псевдонім core runtime хоста пам’яті | Нейтральний до vendor псевдонім для допоміжних засобів core runtime хоста пам’яті | - | `plugin-sdk/memory-host-events` | Псевдонім журналу подій хоста пам’яті | Нейтральний до vendor псевдонім для допоміжних засобів журналу подій хоста пам’яті | - | `plugin-sdk/memory-host-files` | Псевдонім файлів/runtime хоста пам’яті | Нейтральний до vendor псевдонім для допоміжних засобів файлів/runtime хоста пам’яті | - | `plugin-sdk/memory-host-markdown` | Допоміжні засоби керованого Markdown | Спільні допоміжні засоби керованого Markdown для суміжних із пам’яттю Plugin | - | `plugin-sdk/memory-host-search` | Фасад пошуку Active Memory | Лінивий фасад runtime менеджера пошуку active-memory | - | `plugin-sdk/memory-host-status` | Псевдонім статусу хоста пам’яті | Нейтральний до vendor псевдонім для допоміжних засобів статусу хоста пам’яті | - | `plugin-sdk/memory-lancedb` | Комплектні допоміжні засоби memory-lancedb | Поверхня допоміжних засобів memory-lancedb | - | `plugin-sdk/testing` | Утиліти тестування | Застарілий широкий barrel сумісності; надавайте перевагу цілеспрямованим test subpath, таким як `plugin-sdk/plugin-test-runtime`, `plugin-sdk/channel-test-helpers`, `plugin-sdk/channel-target-testing`, `plugin-sdk/test-env` і `plugin-sdk/test-fixtures` | + | `plugin-sdk/channel-config-writes` | Helper-и запису конфігурації каналу | Helper-и авторизації запису конфігурації каналу | + | `plugin-sdk/channel-plugin-common` | Спільний prelude каналу | Експорти спільного prelude channel Plugin | + | `plugin-sdk/channel-status` | Helper-и статусу каналу | Спільні helper-и snapshot/summary статусу каналу | + | `plugin-sdk/allowlist-config-edit` | Helper-и конфігурації allowlist | Helper-и edit/read конфігурації allowlist | + | `plugin-sdk/group-access` | Helper-и доступу до груп | Спільні helper-и визначення group-access | + | `plugin-sdk/direct-dm` | Helper-и direct-DM | Спільні helper-и auth/guard для direct-DM | + | `plugin-sdk/extension-shared` | Спільні helper-и extension | Примітиви helper-ів passive-channel/status і ambient proxy | + | `plugin-sdk/webhook-targets` | Helper-и цілей Webhook | Реєстр цілей Webhook і helper-и встановлення route | + | `plugin-sdk/webhook-path` | Helper-и шляху Webhook | Helper-и нормалізації шляху Webhook | + | `plugin-sdk/web-media` | Спільні helper-и web media | Helper-и завантаження віддалених/локальних медіа | + | `plugin-sdk/zod` | Реекспорт Zod | Повторно експортований `zod` для споживачів Plugin SDK | + | `plugin-sdk/memory-core` | Вбудовані helper-и memory-core | Поверхня helper-ів менеджера/config/file/CLI пам’яті | + | `plugin-sdk/memory-core-engine-runtime` | Runtime facade механізму пам’яті | Runtime facade індексу/пошуку пам’яті | + | `plugin-sdk/memory-core-host-engine-foundation` | Базовий механізм host пам’яті | Експорти базового механізму host пам’яті | + | `plugin-sdk/memory-core-host-engine-embeddings` | Механізм embeddings host пам’яті | Контракти embedding пам’яті, доступ до registry, локальний провайдер і універсальні batch/remote helper-и; конкретні remote-провайдери знаходяться у Plugins, яким вони належать | + | `plugin-sdk/memory-core-host-engine-qmd` | Механізм QMD host пам’яті | Експорти механізму QMD host пам’яті | + | `plugin-sdk/memory-core-host-engine-storage` | Механізм сховища host пам’яті | Експорти механізму сховища host пам’яті | + | `plugin-sdk/memory-core-host-multimodal` | Мультимодальні helper-и host пам’яті | Мультимодальні helper-и host пам’яті | + | `plugin-sdk/memory-core-host-query` | Helper-и запитів host пам’яті | Helper-и запитів host пам’яті | + | `plugin-sdk/memory-core-host-secret` | Helper-и secret host пам’яті | Helper-и secret host пам’яті | + | `plugin-sdk/memory-core-host-events` | Helper-и журналу подій host пам’яті | Helper-и журналу подій host пам’яті | + | `plugin-sdk/memory-core-host-status` | Helper-и статусу host пам’яті | Helper-и статусу host пам’яті | + | `plugin-sdk/memory-core-host-runtime-cli` | CLI runtime host пам’яті | Helper-и CLI runtime host пам’яті | + | `plugin-sdk/memory-core-host-runtime-core` | Core runtime host пам’яті | Helper-и core runtime host пам’яті | + | `plugin-sdk/memory-core-host-runtime-files` | Helper-и файлів/runtime host пам’яті | Helper-и файлів/runtime host пам’яті | + | `plugin-sdk/memory-host-core` | Alias core runtime host пам’яті | Vendor-neutral alias для helper-ів core runtime host пам’яті | + | `plugin-sdk/memory-host-events` | Alias журналу подій host пам’яті | Vendor-neutral alias для helper-ів журналу подій host пам’яті | + | `plugin-sdk/memory-host-files` | Alias файлів/runtime host пам’яті | Vendor-neutral alias для helper-ів файлів/runtime host пам’яті | + | `plugin-sdk/memory-host-markdown` | Helper-и керованого Markdown | Спільні helper-и керованого Markdown для Plugins, суміжних із пам’яттю | + | `plugin-sdk/memory-host-search` | facade пошуку Active Memory | Лінива runtime facade менеджера пошуку active-memory | + | `plugin-sdk/memory-host-status` | Alias статусу host пам’яті | Vendor-neutral alias для helper-ів статусу host пам’яті | + | `plugin-sdk/memory-lancedb` | Вбудовані helper-и memory-lancedb | Поверхня helper-ів memory-lancedb | + | `plugin-sdk/testing` | Утиліти тестування | Застарілий широкий compatibility-barrel; надавайте перевагу цільовим test subpaths, таким як `plugin-sdk/plugin-test-runtime`, `plugin-sdk/channel-test-helpers`, `plugin-sdk/channel-target-testing`, `plugin-sdk/test-env` і `plugin-sdk/test-fixtures` | Ця таблиця навмисно охоплює поширену підмножину для міграції, а не всю -поверхню SDK. Повний список із понад 200 entrypoint-ів міститься в +поверхню SDK. Повний список із понад 200 точок входу знаходиться в `scripts/lib/plugin-sdk-entrypoints.json`. -Цей список усе ще містить деякі seams допоміжних засобів комплектних Plugin, такі як +Цей список і далі містить деякі helper-seams вбудованих Plugins, наприклад `plugin-sdk/feishu`, `plugin-sdk/feishu-setup`, `plugin-sdk/zalo`, -`plugin-sdk/zalo-setup` і `plugin-sdk/matrix*`. Вони й надалі експортуються для -підтримки комплектних Plugin і сумісності, але навмисно -опущені з таблиці поширеної міграції та не є рекомендованою ціллю для -нового коду Plugin. +`plugin-sdk/zalo-setup` і `plugin-sdk/matrix*`. Вони й далі експортуються для +підтримки та сумісності вбудованих Plugins, але навмисно не включені до +таблиці поширеної міграції й не є рекомендованою ціллю для нового коду Plugin. -Те саме правило застосовується і до інших сімейств комплектних допоміжних засобів, зокрема: +Те саме правило застосовується й до інших сімейств вбудованих helper-ів, зокрема: -- допоміжні засоби підтримки браузера: `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` +- helper-и підтримки браузера: `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` - Matrix: `plugin-sdk/matrix*` - LINE: `plugin-sdk/line*` - IRC: `plugin-sdk/irc*` -- поверхні комплектних допоміжних засобів/Plugin, такі як `plugin-sdk/googlechat`, +- поверхні вбудованих helper-ів/Plugins, як-от `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles*`, `plugin-sdk/mattermost*`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, @@ -531,126 +535,127 @@ OpenClaw не вилучає і не переосмислює документо `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, і `plugin-sdk/voice-call` -`plugin-sdk/github-copilot-token` наразі надає вузьку поверхню -допоміжних засобів токенів: `DEFAULT_COPILOT_API_BASE_URL`, +`plugin-sdk/github-copilot-token` наразі надає вузьку поверхню helper-ів токена: +`DEFAULT_COPILOT_API_BASE_URL`, `deriveCopilotApiBaseUrlFromToken` і `resolveCopilotApiToken`. Використовуйте найвужчий імпорт, який відповідає завданню. Якщо ви не можете знайти експорт, -перевірте вихідний код у `src/plugin-sdk/` або запитайте в Discord. +перевірте джерело в `src/plugin-sdk/` або запитайте в Discord. -## Активні застарівання +## Активні deprecations -Вужчі застарівання, які застосовуються в усьому Plugin SDK, контракті provider, -поверхні runtime і маніфесті. Кожен із них іще працює сьогодні, але буде вилучений -у майбутньому мажорному випуску. Запис під кожним елементом зіставляє старий API -з його канонічною заміною. +Вужчі deprecations, що застосовуються в усьому Plugin SDK, контракті провайдера, +поверхні runtime і маніфесті. Кожен із них сьогодні все ще працює, але буде вилучений +у майбутньому мажорному випуску. Запис під кожним пунктом зіставляє старий API з його +канонічною заміною. - + **Старе (`openclaw/plugin-sdk/command-auth`)**: `buildCommandsMessage`, `buildCommandsMessagePaginated`, `buildHelpMessage`. **Нове (`openclaw/plugin-sdk/command-status`)**: ті самі сигнатури, ті самі - експорти — лише імпортуються з вужчого subpath. `command-auth` + експорти — лише імпорт із вужчого subpath. `command-auth` повторно експортує їх як compat stubs. ```typescript - // Before + // До import { buildHelpMessage } from "openclaw/plugin-sdk/command-auth"; - // After + // Після import { buildHelpMessage } from "openclaw/plugin-sdk/command-status"; ``` - + **Старе**: `resolveInboundMentionRequirement({ facts, policy })` і `shouldDropInboundForMention(...)` з `openclaw/plugin-sdk/channel-inbound` або `openclaw/plugin-sdk/channel-mention-gating`. **Нове**: `resolveInboundMentionDecision({ facts, policy })` — повертає - єдиний об’єкт рішення замість двох окремих викликів. + один об’єкт рішення замість двох розділених викликів. - Залежні Plugin каналів (Slack, Discord, Matrix, MS Teams) уже + Downstream channel Plugins (Slack, Discord, Matrix, Microsoft Teams) уже перейшли. - + `openclaw/plugin-sdk/channel-runtime` — це shim сумісності для старіших - Plugin каналів. Не імпортуйте його в новому коді; використовуйте + channel Plugins. Не імпортуйте його в новому коді; використовуйте `openclaw/plugin-sdk/channel-runtime-context` для реєстрації об’єктів runtime. - Допоміжні засоби `channelActions*` у `openclaw/plugin-sdk/channel-actions` є - застарілими разом із сирими експортами каналу типу "actions". Натомість розкривайте - можливості через семантичну поверхню `presentation` — Plugin каналів - декларують, що саме вони рендерять (картки, кнопки, selects), а не які сирі - назви дій вони приймають. + Helper-и `channelActions*` у `openclaw/plugin-sdk/channel-actions` є + застарілими разом із сирими експортами channel "actions". Натомість + надавайте можливості через семантичну поверхню `presentation` — channel Plugins + оголошують, що саме вони відображають (cards, buttons, selects), а не які сирі + назви action вони приймають. - + **Старе**: фабрика `tool()` з `openclaw/plugin-sdk/provider-web-search`. - **Нове**: реалізуйте `createTool(...)` безпосередньо в Plugin provider. - OpenClaw більше не потребує допоміжного засобу SDK для реєстрації wrapper-а інструмента. + **Нове**: реалізуйте `createTool(...)` безпосередньо у Plugin провайдера. + OpenClaw більше не потребує helper-а SDK для реєстрації обгортки інструмента. - + **Старе**: `formatInboundEnvelope(...)` (і - `ChannelMessageForAgent.channelEnvelope`) для побудови плоского текстового prompt - envelope із вхідних повідомлень каналу. + `ChannelMessageForAgent.channelEnvelope`) для побудови плоского prompt-конверта + plaintext із вхідних повідомлень каналу. **Нове**: `BodyForAgent` плюс структуровані блоки контексту користувача. - Plugin каналів додають метадані маршрутизації (thread, topic, reply-to, reactions) як - типізовані поля замість конкатенації їх у рядок prompt. Допоміжний засіб - `formatAgentEnvelope(...)` іще підтримується для синтезованих envelopes, - орієнтованих на асистента, але від вхідних текстових envelopes поступово відмовляються. + Channel Plugins додають метадані маршрутизації (thread, topic, reply-to, reactions) як + типізовані поля замість конкатенації їх у рядок prompt. + Helper `formatAgentEnvelope(...)` і далі підтримується для синтезованих + конвертів, видимих асистенту, але вхідні plaintext-конверти поступово + виводяться з ужитку. - Затронуті області: `inbound_claim`, `message_received` і будь-який власний - Plugin каналу, який постобробляв текст `channelEnvelope`. + Порушені області: `inbound_claim`, `message_received` і будь-який власний + channel Plugin, який постобробляв текст `channelEnvelope`. - - Чотири псевдоніми типів discovery тепер є тонкими обгортками над - типами епохи catalog: + + Чотири aliases типів виявлення тепер є тонкими обгортками над типами + епохи каталогу: - | Старий псевдонім | Новий тип | - | ------------------------- | ------------------------ | - | `ProviderDiscoveryOrder` | `ProviderCatalogOrder` | - | `ProviderDiscoveryContext`| `ProviderCatalogContext` | - | `ProviderDiscoveryResult` | `ProviderCatalogResult` | - | `ProviderPluginDiscovery` | `ProviderPluginCatalog` | + | Старий alias | Новий тип | + | ------------------------- | ------------------------- | + | `ProviderDiscoveryOrder` | `ProviderCatalogOrder` | + | `ProviderDiscoveryContext`| `ProviderCatalogContext` | + | `ProviderDiscoveryResult` | `ProviderCatalogResult` | + | `ProviderPluginDiscovery` | `ProviderPluginCatalog` | - Плюс застарілий статичний набір `ProviderCapabilities` — Plugin provider - мають приєднувати факти capability через контракт runtime provider, + Плюс застарілий статичний набір `ProviderCapabilities` — Plugins провайдера + мають прив’язувати facts можливостей через контракт runtime провайдера, а не через статичний об’єкт. - - **Старе** (три окремі хуки в `ProviderThinkingPolicy`): + + **Старе** (три окремі hooks у `ProviderThinkingPolicy`): `isBinaryThinking(ctx)`, `supportsXHighThinking(ctx)` і `resolveDefaultThinkingLevel(ctx)`. **Нове**: єдиний `resolveThinkingProfile(ctx)`, який повертає `ProviderThinkingProfile` із канонічним `id`, необов’язковим `label` і - ранжованим списком рівнів. OpenClaw автоматично знижує застарілі збережені значення - за рангом профілю. + ранжованим списком рівнів. OpenClaw автоматично знижує застарілі збережені + значення за рангом профілю. - Реалізуйте один хук замість трьох. Застарілі хуки й надалі працюють під час - вікна застарівання, але не композуються з результатом профілю. + Реалізуйте один hook замість трьох. Застарілі hooks і далі працюють протягом + вікна deprecation, але не композуються з результатом профілю. - + **Старе**: реалізація `resolveExternalOAuthProfiles(...)` без - оголошення provider у маніфесті Plugin. + оголошення провайдера в маніфесті Plugin. **Нове**: оголосіть `contracts.externalAuthProviders` у маніфесті Plugin **і** реалізуйте `resolveExternalAuthProfiles(...)`. Старий шлях @@ -666,79 +671,79 @@ OpenClaw не вилучає і не переосмислює документо - + **Старе** поле маніфесту: `providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }`. - **Нове**: віддзеркальте той самий lookup env-var у `setup.providers[].envVars` - у маніфесті. Це об’єднує метадані env налаштування/статусу в одному - місці й дає змогу уникнути запуску runtime Plugin лише для відповіді на - lookup env-var. + **Нове**: дублюйте той самий пошук env-var у `setup.providers[].envVars` + в маніфесті. Це об’єднує метадані env налаштування/статусу в одному + місці та дозволяє уникнути запуску runtime Plugin лише для відповіді на + запити щодо env-var. - `providerAuthEnvVars` і надалі підтримується через адаптер сумісності - до завершення вікна застарівання. + `providerAuthEnvVars` і далі підтримується через адаптер сумісності + до завершення вікна deprecation. - + **Старе**: три окремі виклики — `api.registerMemoryPromptSection(...)`, `api.registerMemoryFlushPlan(...)`, `api.registerMemoryRuntime(...)`. - **Нове**: один виклик на API memory-state — + **Нове**: один виклик API memory-state — `registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime })`. - Ті самі слоти, єдиний виклик реєстрації. Адитивні допоміжні засоби пам’яті + Ті самі slots, один виклик реєстрації. Додаткові helper-и пам’яті (`registerMemoryPromptSupplement`, `registerMemoryCorpusSupplement`, - `registerMemoryEmbeddingProvider`) не зачеплено. + `registerMemoryEmbeddingProvider`) це не зачіпає. - - Два застарілі псевдоніми типів іще експортуються з `src/plugins/runtime/types.ts`: + + Два застарілі aliases типів і далі експортуються з `src/plugins/runtime/types.ts`: - | Старе | Нове | - | ---------------------------- | ------------------------------ | - | `SubagentReadSessionParams` | `SubagentGetSessionMessagesParams` | - | `SubagentReadSessionResult` | `SubagentGetSessionMessagesResult` | + | Старе | Нове | + | ----------------------------- | ------------------------------- | + | `SubagentReadSessionParams` | `SubagentGetSessionMessagesParams` | + | `SubagentReadSessionResult` | `SubagentGetSessionMessagesResult` | Метод runtime `readSession` є застарілим на користь - `getSessionMessages`. Та сама сигнатура; старий метод викликає - новий. + `getSessionMessages`. Та сама сигнатура; старий метод делегує виклик + новому. - **Старе**: `runtime.tasks.flow` (в однині) повертав accessor live task-flow. + **Старе**: `runtime.tasks.flow` (в однині) повертав живий accessor TaskFlow. - **Нове**: `runtime.tasks.flows` (у множині) повертає DTO-базований доступ до TaskFlow, - який є безпечним для імпорту й не потребує завантаження повного runtime задач. + **Нове**: `runtime.tasks.flows` (у множині) повертає DTO-орієнтований доступ до TaskFlow, + який є import-safe і не потребує завантаження повного task runtime. ```typescript - // Before + // До const flow = api.runtime.tasks.flow(ctx); - // After + // Після const flows = api.runtime.tasks.flows(ctx); ``` - - Розглянуто вище в розділі "Як виконати міграцію → Перенесіть розширення результатів інструментів Pi на - middleware". Для повноти тут також зазначено: вилучений шлях лише для Pi - `api.registerEmbeddedExtensionFactory(...)` замінено на - `api.registerAgentToolResultMiddleware(...)` з явним - списком runtime у `contracts.agentToolResultMiddleware`. + + Розглянуто вище в розділі "Як виконати міграцію → Перенесіть extension результатів інструментів Pi на + middleware". Для повноти тут також зазначено: вилучений шлях + `api.registerEmbeddedExtensionFactory(...)` лише для Pi замінено на + `api.registerAgentToolResultMiddleware(...)` із явним списком runtime + у `contracts.agentToolResultMiddleware`. - - `OpenClawSchemaType`, повторно експортований з `openclaw/plugin-sdk`, тепер є - однорядковим псевдонімом для `OpenClawConfig`. Надавайте перевагу канонічній назві. + + `OpenClawSchemaType`, який повторно експортується з `openclaw/plugin-sdk`, тепер є + однорядковим alias для `OpenClawConfig`. Надавайте перевагу канонічній назві. ```typescript - // Before + // До import type { OpenClawSchemaType } from "openclaw/plugin-sdk"; - // After + // Після import type { OpenClawConfig } from "openclaw/plugin-sdk/config-schema"; ``` @@ -746,21 +751,21 @@ OpenClaw не вилучає і не переосмислює документо -Застарівання на рівні extension (усередині комплектних Plugin каналів/provider у +Deprecations на рівні extension (усередині вбудованих channel/provider Plugins у `extensions/`) відстежуються у власних barrels `api.ts` і `runtime-api.ts`. -Вони не впливають на контракти сторонніх Plugin і тут не перелічені. -Якщо ви напряму використовуєте локальний barrel комплектного Plugin, перед -оновленням прочитайте коментарі про застарівання в цьому barrel. +Вони не впливають на контракти сторонніх Plugins і тут не перелічуються. +Якщо ви напряму використовуєте локальний barrel вбудованого Plugin, перед +оновленням прочитайте коментарі deprecation у цьому barrel. -## Часова шкала вилучення +## Хронологія вилучення -| Коли | Що відбувається | -| --------------------- | ----------------------------------------------------------------------- | -| **Зараз** | Застарілі поверхні виводять попередження runtime | -| **Наступний мажорний випуск** | Застарілі поверхні буде вилучено; Plugin, які все ще їх використовують, завершаться помилкою | +| Коли | Що відбувається | +| ---------------------- | ----------------------------------------------------------------------- | +| **Зараз** | Застарілі поверхні виводять попередження під час runtime | +| **Наступний мажорний випуск** | Застарілі поверхні буде вилучено; Plugins, які досі їх використовують, перестануть працювати | -Усі core Plugin уже мігровано. Зовнішнім Plugin слід виконати міграцію +Усі core Plugins уже мігровано. Зовнішнім Plugins слід виконати міграцію до наступного мажорного випуску. ## Тимчасове приглушення попереджень @@ -772,13 +777,13 @@ OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway run OPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway run ``` -Це тимчасовий обхідний шлях, а не постійне рішення. +Це тимчасовий обхідний механізм, а не постійне рішення. -## Пов’язане +## Пов’язані матеріали -- [Початок роботи](/uk/plugins/building-plugins) — створення вашого першого Plugin +- [Початок роботи](/uk/plugins/building-plugins) — створіть свій перший Plugin - [Огляд SDK](/uk/plugins/sdk-overview) — повний довідник імпортів subpath -- [Plugin каналів](/uk/plugins/sdk-channel-plugins) — створення Plugin каналів -- [Plugin provider](/uk/plugins/sdk-provider-plugins) — створення Plugin provider +- [Plugins каналів](/uk/plugins/sdk-channel-plugins) — створення Plugins каналів +- [Plugins провайдерів](/uk/plugins/sdk-provider-plugins) — створення Plugins провайдерів - [Внутрішня будова Plugin](/uk/plugins/architecture) — глибоке занурення в архітектуру -- [Маніфест Plugin](/uk/plugins/manifest) — довідник схеми маніфесту +- [Маніфест Plugin](/uk/plugins/manifest) — довідник зі схеми маніфесту