api.runtime, який впроваджується в кожен плагін під час реєстрації. Використовуйте ці допоміжні засоби замість прямого імпорту внутрішніх компонентів хоста.
Плагіни каналів
Покроковий посібник, який показує використання цих допоміжних засобів у контексті плагінів каналів.
Плагіни провайдерів
Покроковий посібник, який показує використання цих допоміжних засобів у контексті плагінів провайдерів.
Завантаження та запис конфігурації
Віддавайте перевагу конфігурації, яку вже передано в активний шлях виклику, наприкладapi.config під час реєстрації або аргумент cfg у зворотних викликах каналу чи провайдера. Це зберігає один знімок процесу протягом виконання роботи замість повторного розбору конфігурації на гарячих шляхах.
Використовуйте api.runtime.config.current() лише тоді, коли довгоживучому обробнику потрібен поточний знімок процесу і цій функції не було передано конфігурацію. Повернене значення доступне лише для читання; перед редагуванням склонуйте його або використайте допоміжний засіб мутації.
Фабрики інструментів отримують ctx.runtimeConfig і ctx.getRuntimeConfig(). Використовуйте гетер усередині зворотного виклику execute довгоживучого інструмента, коли конфігурація може змінитися після створення визначення інструмента.
Зберігайте зміни за допомогою api.runtime.config.mutateConfigFile(...) або api.runtime.config.replaceConfigFile(...). Кожен запис має вибрати явну політику afterWrite:
afterWrite: { mode: "auto" }дозволяє планувальнику перезавантаження Gateway ухвалити рішення.afterWrite: { mode: "restart", reason: "..." }примусово виконує чистий перезапуск, коли автор запису знає, що гаряче перезавантаження небезпечне.afterWrite: { mode: "none", reason: "..." }пригнічує автоматичне перезавантаження або перезапуск лише тоді, коли викликач відповідає за подальші дії.
afterWrite разом із типізованим підсумком followUp, щоб викликачі могли журналювати або тестувати, чи вони запросили перезапуск. Gateway усе ще відповідає за те, коли цей перезапуск фактично відбудеться.
api.runtime.config.loadConfig() і api.runtime.config.writeConfigFile(...) є застарілими допоміжними засобами сумісності в межах runtime-config-load-write. Вони один раз попереджають під час виконання й залишаються доступними для старих зовнішніх плагінів протягом вікна міграції. Вбудовані плагіни не повинні їх використовувати; захисні перевірки межі конфігурації завершуються помилкою, якщо код плагіна викликає їх або імпортує ці допоміжні засоби з підшляхів SDK плагінів.
Для прямих імпортів SDK використовуйте цільові підшляхи конфігурації замість широкого
сумісного barrel openclaw/plugin-sdk/config-runtime: config-contracts для
типів, plugin-config-runtime для тверджень щодо вже завантаженої конфігурації та пошуку
точки входу плагіна, runtime-config-snapshot для поточних знімків процесу, а
config-mutation для записів. Тести вбудованих плагінів мають мокати ці цільові
підшляхи напряму замість мокання широкого сумісного barrel.
Внутрішній код середовища виконання OpenClaw має той самий напрям: завантажуйте конфігурацію один раз на межі CLI, Gateway або процесу, а потім передавайте це значення далі. Успішні записи мутацій оновлюють знімок середовища виконання процесу та просувають його внутрішню ревізію; довгоживучі кеші мають прив’язуватися до ключа кешу, яким володіє середовище виконання, замість локальної серіалізації конфігурації. Довгоживучі модулі середовища виконання мають сканер із нульовою терпимістю до неявних викликів loadConfig(); використовуйте переданий cfg, запит context.getRuntimeConfig() або getRuntimeConfig() на явній межі процесу.
Шляхи виконання провайдерів і каналів мають використовувати активний знімок конфігурації середовища виконання, а не знімок файлу, повернений для зворотного читання або редагування конфігурації. Знімки файлів зберігають вихідні значення, як-от маркери SecretRef, для UI та записів; зворотним викликам провайдерів потрібне розв’язане представлення середовища виконання. Коли допоміжний засіб може бути викликаний або з активним вихідним знімком, або з активним знімком середовища виконання, перед читанням облікових даних маршрутизуйте через selectApplicableRuntimeConfig().
Багаторазові утиліти середовища виконання
Використовуйте вхідні фактиbotLoopProtection для вхідних повідомлень, створених ботом. Ядро застосовує спільний вбудований у пам’ять захист із ковзним вікном перед записом сесії та диспетчеризацією, не прив’язуючи політику до одного каналу. Захист відстежує ключі (scopeId, conversationId, participant pair), підраховує обидва напрями пари разом, застосовує період охолодження після перевищення бюджету вікна та за можливості видаляє неактивні записи.
Плагіни каналів, які відкривають цю поведінку операторам, мають віддавати перевагу спільній формі channels.defaults.botLoopProtection для базових бюджетів, а потім накладати поверх неї перевизначення, специфічні для каналу чи провайдера. Спільна конфігурація використовує секунди, оскільки вона орієнтована на користувача:
enabled:
openclaw/plugin-sdk/pair-loop-guard-runtime напряму лише для власних
двосторонніх циклів подій, які не проходять через спільний runner вхідних відповідей.
Простори імен середовища виконання
api.runtime.agent
api.runtime.agent
Ідентичність агента, каталоги та керування сеансами.Надавайте перевагу
runEmbeddedAgent(...) — нейтральний допоміжний засіб для запуску звичайного ходу агента OpenClaw з коду plugin. Він використовує те саме визначення provider/model і вибір agent-harness, що й відповіді, запущені каналом.runEmbeddedPiAgent(...) залишається застарілим псевдонімом сумісності для наявних plugins. Новий код має використовувати runEmbeddedAgent(...).resolveThinkingPolicy(...) повертає підтримувані provider/model рівні мислення та необов’язкове значення за замовчуванням. Provider plugins володіють профілем, специфічним для моделі, через свої thinking hooks, тому tool plugins мають викликати цей runtime helper замість імпорту або дублювання списків провайдерів.normalizeThinkingLevel(...) перетворює користувацький текст, як-от on, x-high або extra high, на канонічний збережений рівень перед перевіркою за розв’язаною політикою.Допоміжні засоби сховища сеансів розташовані в api.runtime.agent.session:getSessionEntry(...), listSessionEntries(...), patchSessionEntry(...) або upsertSessionEntry(...) для робочих процесів сеансів. Ці допоміжні функції адресують сеанси за ідентичністю агента/сеансу, щоб plugins не залежали від застарілої форми сховища sessions.json. Використовуйте preserveActivity: true для виправлень лише метаданих, які не повинні оновлювати активність сеансу, і replaceEntry: true лише тоді, коли зворотний виклик повертає повний запис, а видалені поля мають залишатися видаленими.Використовуйте runWithWorkAdmission(...), коли plugin починає роботу з персистентним сеансом. Зворотний виклик відхиляє архівовані або паралельно замінені сеанси, координує мутації архівування/скидання/видалення до завершення та отримує AbortSignal, який потрібно передати до запуску агента.Для читання й запису транскриптів імпортуйте openclaw/plugin-sdk/session-transcript-runtime і використовуйте resolveSessionTranscriptIdentity(...), resolveSessionTranscriptTarget(...), readSessionTranscriptEvents(...), appendSessionTranscriptMessageByIdentity(...), publishSessionTranscriptUpdateByIdentity(...) або withSessionTranscriptWriteLock(...) з { agentId, sessionKey, sessionId }. Ці API дають plugins змогу ідентифікувати транскрипт, читати його події, додавати повідомлення, публікувати оновлення та виконувати пов’язані операції під тим самим блокуванням запису транскрипта. Передавання sessionFile, використання resolveSessionTranscriptLegacyFileTarget(...) або імпорт низькорівневих appendSessionTranscriptMessage(...) / emitSessionTranscriptUpdate(...) з openclaw/plugin-sdk/agent-harness-runtime застаріли; ці шляхи існують лише для застарілого коду, який уже отримує активний артефакт транскрипта.loadSessionStore(...), saveSessionStore(...), updateSessionStore(...), resolveSessionFilePath(...) і resolveAndPersistSessionFile(...) — це застарілі допоміжні функції сумісності для plugins, які досі навмисно залежать від застарілої форми всього сховища або файлу транскрипта. Новий код plugin не повинен використовувати ці допоміжні функції, а наявні виклики слід мігрувати на допоміжні функції записів і допоміжні функції ідентичності транскриптів.api.runtime.agent.defaults
api.runtime.agent.defaults
Константи моделі та провайдера за замовчуванням:
api.runtime.llm
api.runtime.llm
Запустіть текстове доповнення, кероване хостом, без імпорту внутрішніх компонентів провайдера або
дублювання підготовки моделі, автентифікації та базової URL OpenClaw.Допоміжна функція використовує той самий шлях підготовки простого доповнення, що й
вбудоване середовище виконання OpenClaw, а також знімок конфігурації середовища виконання, керований хостом. Рушії контексту
отримують прив’язану до сеансу можливість
llm.complete, тому виклики моделі використовують
агента активного сеансу й не переходять непомітно до агента за замовчуванням. Результат
містить атрибуцію провайдера/моделі/агента, а також нормалізоване використання токенів,
кешу й оціненої вартості, коли це доступно.api.runtime.subagent
api.runtime.subagent
Запускайте й керуйте фоновими запусками підлеглих агентів.
deleteSession(...) може видаляти сеанси, створені тим самим plugin через api.runtime.subagent.run(...). Видалення довільних сеансів користувача або оператора все ще потребує запиту Gateway з областю адміністратора.api.runtime.nodes
api.runtime.nodes
Перелічуйте підключені вузли й викликайте команду хоста вузла з коду plugin, завантаженого Gateway, або з CLI-команд plugin. Використовуйте це, коли plugin володіє локальною роботою на спареному пристрої, наприклад мостом браузера або аудіо на іншому Mac.Усередині Gateway це середовище виконання працює в процесі. У CLI-командах plugin воно викликає налаштований Gateway через RPC, тож команди на кшталт
openclaw googlemeet recover-tab можуть перевіряти спарені вузли з термінала. Команди Node все одно проходять звичайне спарення вузлів Gateway, списки дозволених команд, політики виклику вузлів plugin і локальну обробку команд на вузлі.Plugins, які відкривають небезпечні команди хоста вузла, мають зареєструвати політику виклику вузла через api.registerNodeInvokePolicy(...). Політика виконується в Gateway після перевірок списку дозволених команд і перед пересиланням команди на вузол, тож прямі виклики node.invoke і високорівневі інструменти plugin використовують той самий шлях застосування правил.api.runtime.tasks.managedFlows
api.runtime.tasks.managedFlows
Прив’яжіть середовище виконання Task Flow до наявного ключа сеансу OpenClaw або довіреного контексту інструмента, а потім створюйте й керуйте Task Flows без передавання власника під час кожного виклику.Task Flow відстежує довготривалий стан багатоетапного робочого процесу. Це не планувальник:
використовуйте Cron або Використовуйте
api.session.workflow.scheduleSessionTurn(...) для майбутніх
пробуджень, а потім використовуйте managedFlows із запланованого ходу, коли цій роботі
потрібні стан потоку, дочірні завдання, очікування або скасування.bindSession({ sessionKey, requesterOrigin }), коли вже маєте довірений ключ сеансу OpenClaw із власного шару прив’язки. Не прив’язуйте з необробленого введення користувача.api.runtime.tts
api.runtime.tts
Синтез мовлення з тексту.Використовує основну конфігурацію
messages.tts і вибір провайдера. Повертає аудіобуфер PCM + частоту дискретизації.api.runtime.mediaUnderstanding
api.runtime.mediaUnderstanding
Аналіз зображень, аудіо та відео.Повертає
{ text: undefined }, коли не створено жодного виводу (наприклад, введення пропущено).api.runtime.stt.transcribeAudioFile(...) залишається сумісним псевдонімом для api.runtime.mediaUnderstanding.transcribeAudioFile(...).api.runtime.imageGeneration
api.runtime.imageGeneration
Генерація зображень.
api.runtime.webSearch
api.runtime.webSearch
Вебпошук.
api.runtime.media
api.runtime.media
Низькорівневі медіаутиліти.
api.runtime.config
api.runtime.config
Поточний знімок конфігурації середовища виконання й транзакційні записи конфігурації. Надавайте перевагу
конфігурації, яку вже передано в активний шлях виклику; використовуйте
current() лише тоді, коли обробнику потрібен безпосередньо знімок процесу.mutateConfigFile(...) і replaceConfigFile(...) повертають значення followUp,
наприклад { mode: "restart", requiresRestart: true, reason },
яке записує намір записувача, не забираючи контроль перезапуску від
gateway.api.runtime.system
api.runtime.system
Утиліти системного рівня.
runCommandWithTimeout(...) повертає захоплені stdout і stderr, необов’язкові
лічильники обрізання, code, signal, killed, termination і
noOutputTimedOut. Результати тайм-ауту й тайм-ауту без виводу повідомляють code: 124,
коли дочірній процес не надає ненульового коду виходу. Виходи за сигналом
без тайм-ауту все ще можуть повертати code: null, тому використовуйте termination і
noOutputTimedOut, щоб розрізняти причини тайм-ауту.api.runtime.events
api.runtime.events
Підписки на події.
api.runtime.logging
api.runtime.logging
Журналювання.
api.runtime.modelAuth
api.runtime.modelAuth
Розв’язання автентифікації моделі та провайдера.
api.runtime.state
api.runtime.state
Визначення каталогу стану та сховище ключів на основі SQLite.Сховища ключів зберігаються після перезапусків і ізолюються за прив’язаним до середовища виконання id Plugin. Використовуйте
registerIfAbsent(...) для атомарних заявок дедуплікації: він повертає true, коли ключ був відсутній або прострочений і зареєстрований, або false, коли активне значення вже існує без перезапису його значення, часу створення чи TTL. Обмеження: maxEntries на простір імен, 6 000 активних рядків на Plugin, JSON-значення менші за 64KB та необов’язкове завершення строку дії TTL. Коли запис перевищив би ліміт рядків Plugin, середовище виконання може витіснити найстаріші активні рядки з простору імен, у який виконується запис; суміжні простори імен для цього запису не витісняються, а запис усе одно завершується помилкою, якщо простір імен не може звільнити достатньо рядків.api.runtime.tools
api.runtime.tools
Фабрики інструментів пам’яті та CLI.
api.runtime.channel
api.runtime.channel
Допоміжні засоби середовища виконання для каналів (доступні, коли завантажено Plugin каналу).Використовуйте Доступні допоміжні засоби для згадок:
api.runtime.channel.media — рекомендована поверхня для завантаження та зберігання медіа каналу:saveRemoteMedia(...), коли віддалена URL-адреса має стати медіа OpenClaw. Використовуйте saveResponseMedia(...), коли Plugin уже отримав Response із власною для Plugin обробкою автентифікації, переспрямування або списку дозволених адрес. Використовуйте readRemoteMediaBuffer(...) лише тоді, коли Plugin потрібні необроблені байти для інспекції, перетворень, розшифрування або повторного завантаження. fetchRemoteMedia(...) залишається застарілим сумісним псевдонімом для readRemoteMediaBuffer(...).api.runtime.channel.mentions — спільна поверхня політики вхідних згадок для вбудованих plugins каналів, які використовують ін’єкцію середовища виконання:buildMentionRegexesmatchesMentionPatternsmatchesMentionWithExplicitimplicitMentionKindWhenresolveInboundMentionDecision
api.runtime.channel.mentions навмисно не відкриває старіші сумісні допоміжні засоби resolveMentionGating*. Надавайте перевагу нормалізованому шляху { facts, policy }.Зберігання посилань на середовище виконання
ВикористовуйтеcreatePluginRuntimeStore, щоб зберегти посилання на середовище виконання для використання поза callback register:
Надавайте перевагу
pluginId для ідентичності runtime-store. Низькорівнева форма key призначена для нечастих випадків, коли одному Plugin навмисно потрібно більше ніж один слот середовища виконання.Інші поля api верхнього рівня
Окрім api.runtime, об’єкт API також надає:
Id Plugin.
Відображувана назва Plugin.
Поточний знімок конфігурації (активний знімок середовища виконання в пам’яті, коли доступний).
Конфігурація, специфічна для Plugin, з
plugins.entries.<id>.config.Обмежений за областю логер (
debug, info, warn, error).Поточний режим завантаження;
"setup-runtime" — легковагове вікно запуску/налаштування перед повноцінною точкою входу.Визначити шлях відносно кореня Plugin.
Пов’язане
- Внутрішня архітектура Plugin — модель можливостей і реєстр
- Точки входу SDK — параметри
definePluginEntry - Огляд SDK — довідник підшляхів