openclaw path
Наданий плагіном shell-доступ до адресної основи oc://: одна
схема шляхів із диспетчеризацією за типом для інспектування й редагування
адресованих файлів робочого простору
(markdown, jsonc, jsonl, yaml/yml/lobster). Користувачі самостійного хостингу, автори плагінів
і розширення редакторів використовують її, щоб читати, знаходити або оновлювати вузьку
ділянку без власноручного створення парсерів для кожного типу файлів.
CLI віддзеркалює публічні дієслова цієї основи:
resolveє конкретним і повертає один збіг.findє дієсловом для множинних збігів із шаблонами, об’єднаннями, предикатами та позиційним розгортанням.setприймає лише конкретні шляхи або маркери вставлення; шаблони з wildcard відхиляються перед записом.
path надається вбудованим опційним плагіном oc-path. Увімкніть його перед
першим використанням:
Навіщо це використовувати
Стан OpenClaw розподілений між редагованим людьми markdown, конфігурацією JSONC із коментарями, журналами JSONL лише для додавання та файлами workflow/spec у YAML. Shell-скриптам, хукам і агентам часто потрібне одне невелике значення з цих файлів: ключ frontmatter, налаштування плагіна, поле запису журналу, крок YAML або пункт списку під іменованим розділом.openclaw path дає таким викликачам стабільну адресу замість одноразового grep,
regex або парсера для кожного типу файлів. Той самий шлях oc:// можна перевірити,
розв’язати, знайти, виконати пробно й записати з термінала, що робить вузьку
автоматизацію простішою для рев’ю та безпечнішою для повторного запуску. Це особливо корисно, коли
потрібно оновити один листовий вузол, зберігаючи решту коментарів файлу,
закінчення рядків і навколишнє форматування.
Використовуйте це, коли потрібна сутність має логічну адресу, але фізична форма файлу
відрізняється:
- Хук хоче прочитати одне налаштування з JSONC із коментарями, не втрачаючи коментарів, коли записує значення назад.
- Скрипт обслуговування хоче знайти кожне відповідне поле події в журналі JSONL без завантаження всього журналу у власний парсер.
- Розширення редактора хоче перейти до розділу markdown або пункту списку за slug, а потім відрендерити точний рядок, до якого він розв’язався.
- Агент хоче пробно виконати крихітне редагування робочого простору перед застосуванням, із видимими під час рев’ю зміненими байтами.
openclaw path для звичайних редагувань цілих файлів, складних
міграцій конфігурації або записів, специфічних для пам’яті. Для них слід використовувати команду
або плагін власника. path призначений для малих, адресованих файлових операцій, де
повторювана команда термінала зрозуміліша за ще один спеціальний парсер.
Як це використовується
Прочитати одне значення з редагованого людьми конфігураційного файлу:--json, коли
викликачу потрібен структурований вивід, і --human, коли результат переглядає
людина.
Як це працює
openclaw path робить чотири речі:
- Розбирає адресу
oc://на слоти: файл, розділ, пункт, поле та опційну сесію. - Вибирає адаптер типу файлу за розширенням цілі (
.md,.jsonc,.jsonl,.yaml,.yml,.lobsterі пов’язаними alias). - Розв’язує слоти відносно AST цього типу файлу: заголовки/пункти markdown, ключі об’єктів/індекси масивів JSONC, рядкові записи JSONL або вузли map/sequence YAML.
- Для
setвиводить відредаговані байти через той самий адаптер, щоб незмінені частини файлу зберігали свої коментарі, закінчення рядків і близьке форматування там, де тип це підтримує.
resolve і set потребують однієї конкретної цілі. find є дослідницьким
дієсловом: воно розгортає wildcard, об’єднання, предикати та ordinals у конкретні
збіги, які можна інспектувати перед вибором одного для запису.
Підкоманди
| Підкоманда | Призначення |
|---|---|
resolve <oc-path> | Надрукувати конкретний збіг за шляхом (або “не знайдено”). |
find <pattern> | Перелічити збіги для шляху з wildcard / об’єднанням / предикатом. |
set <oc-path> <value> | Записати листовий вузол або ціль вставлення за конкретним шляхом. Підтримує --dry-run. |
validate <oc-path> | Лише розбір; надрукувати структурний розклад (файл / розділ / пункт / поле). |
emit <file> | Провести файл через round-trip parseXxx + emitXxx (діагностика байтової точності). |
Глобальні прапорці
| Прапорець | Призначення |
|---|---|
--cwd <dir> | Розв’язати файловий слот відносно цього каталогу (типово: process.cwd()). |
--file <path> | Перевизначити розв’язаний шлях файлового слота (абсолютний доступ). |
--json | Примусово виводити JSON (типово, коли stdout не є TTY). |
--human | Примусово виводити людський формат (типово, коли stdout є TTY). |
--dry-run | (лише для set) надрукувати байти, які були б записані, без запису. |
--diff | (з set --dry-run) надрукувати unified diff замість повних байтів. |
Синтаксис oc://
field потребує item, а item потребує section. Для всіх
чотирьох слотів:
- Сегменти в лапках —
"a/b.c"зберігає розділювачі/і.. Вміст є байтовим літералом;"і\не дозволені всередині лапок. Файловий слот також враховує лапки:oc://"skills/email-drafter"/Tools/$lastтрактуєskills/email-drafterяк один файловий шлях. - Предикати —
[k=v],[k!=v],[k<v],[k<=v],[k>v],[k>=v]. Числові операції потребують, щоб обидві сторони приводилися до скінченних чисел. - Об’єднання —
{a,b,c}збігається з будь-якою з альтернатив. - Wildcards —
*(один підсегмент) і**(нуль або більше, рекурсивно).findприймає їх;resolveіsetвідхиляють їх як неоднозначні. - Позиційні —
$first/$lastрозв’язуються до першого / останнього індексу або оголошеного ключа. - Ordinal —
#Nдля N-го збігу за порядком у документі. - Маркери вставлення —
+,+key,+nnnдля вставлення за ключем / індексом (використовуйте зset). - Область сесії —
?session=cron-dailyтощо. Ортогональна до вкладеності слотів. Значення сесії є raw, не percent-decoded; вони не можуть містити контрольні символи або зарезервовані розділювачі query (?,&,%).
?, &, %) поза сегментами в лапках, предикатах або об’єднаннях
відхиляються. Контрольні символи (U+0000-U+001F, U+007F) відхиляються
будь-де, зокрема в query-значенні session.
formatOcPath(parseOcPath(path)) === path гарантовано для канонічних шляхів.
Неканонічні query-параметри ігноруються, окрім першого непорожнього
значення session=.
Адресація за типом файлу
| Тип | Модель адресації |
|---|---|
| Markdown | Розділи H2 за slug, пункти списку за slug або #N, frontmatter через [frontmatter]. |
| JSONC/JSON | Ключі об’єктів та індекси масивів; крапки розділяють вкладені підсегменти, якщо вони не в лапках. |
| JSONL | Адреси рядків верхнього рівня (L1, L2, $first, $last), потім спуск у стилі JSONC всередині рядка. |
| YAML/YML/.lobster | Ключі map та індекси sequence; коментарі й flow style обробляються API YAML-документа. |
resolve повертає структурований збіг: root, node, leaf або
insertion-point, із номером рядка на основі 1. Листові значення подаються як текст
плюс leafType, щоб автори плагінів могли рендерити прев’ю без залежності від
форми AST конкретного типу.
Контракт мутації
set записує одну конкретну ціль:
- Значення frontmatter Markdown і поля пунктів
- key: valueє рядковими leaf. Вставлення Markdown додають розділи, ключі frontmatter або пункти розділу й рендерять канонічну markdown-форму для зміненого файлу. - Записи листових вузлів JSONC приводять рядкове значення до наявного типу leaf
(
string, скінченнийnumber,true/falseабоnull). Використовуйте--value-json, коли заміна leaf у JSONC/JSON/JSONL має парсити<value>як JSON і може змінювати форму, наприклад замінюючи рядковий shorthand SecretRef на об’єкт. Вставлення об’єктів і масивів JSONC парсять<value>як JSON і використовують шлях редагуванняjsonc-parserдля звичайних записів leaf, зберігаючи коментарі та близьке форматування. - Записи leaf у JSONL приводяться як JSONC всередині рядка. Заміна всього рядка та
append парсять
<value>як JSON. Відрендерений JSONL зберігає домінантну для файлу угоду закінчень рядків LF/CRLF. - Записи leaf у YAML приводяться до наявного scalar-типу (
string, скінченнийnumber,true/falseабоnull). Вставлення YAML використовують API документа вбудованого пакетаyamlдля оновлень map/sequence. Некоректні YAML-документи з помилками парсера відхиляються перед мутацією зparse-error.
--dry-run перед видимими для користувача записами, коли точні байти мають значення. Ця
основа зберігає байт-ідентичний вивід для round-trip parse/emit, але
мутація може канонізувати відредаговану ділянку або файл залежно від типу.
Додайте --diff, коли хочете отримати прев’ю як сфокусований патч before/after замість
повного відрендереного файлу.
Приклади
Рецепти за типом файлу
Ті самі п’ять дієслів працюють для всіх типів; схема адресації виконує диспетчеризацію за розширенням файлу. У наведених нижче прикладах використовуються фікстури з опису PR.Markdown
[frontmatter] адресує блок YAML frontmatter; tools зіставляється із заголовком ## Tools через slug, а листи елементів зберігають свою slug-форму навіть тоді, коли джерело використовує підкреслення (send_email → send-email).
JSONC
jsonc-parser, тому коментарі й пробіли зберігаються після set. Спочатку запустіть із --dry-run, щоб переглянути байти перед внесенням змін.
JSONL
[event=action]), коли не знаєте номер рядка, або за канонічним сегментом LN, коли знаєте.
YAML
Document пакета yaml, а не самописний парсер, тому звичайні цикли parse/emit зберігають коментарі й авторську структуру, а розв’язані шляхи використовують ту саму модель ключів мапи / індексів послідовності, що й JSONC. Той самий адаптер обробляє файли .yaml, .yml і .lobster.
Довідник підкоманд
resolve <oc-path>
Зчитує один лист або вузол. Wildcards відхиляються — для них використовуйте find. Завершується з кодом 0 у разі збігу, 1 у разі коректного промаху, 2 у разі помилки парсингу або відхиленого шаблону.
find <pattern>
Перелічує всі збіги для шаблону з wildcard / предикатом / об’єднанням. Завершується з кодом 0, якщо є принаймні один збіг, і 1, якщо збігів немає. Wildcards у слоті файлу відхиляються з OC_PATH_FILE_WILDCARD_UNSUPPORTED — передайте конкретний файл (globbing для кількох файлів є майбутньою функцією).
set <oc-path> <value>
Записує лист. Поєднуйте з --dry-run, щоб попередньо переглянути байти, які було б записано, не змінюючи файл. Додайте --diff для попереднього перегляду unified diff. Завершується з кодом 0 у разі успішного запису, 1, якщо субстрат відхиляє операцію (наприклад, спрацював sentinel-запобіжник), 2 у разі помилок парсингу.
+key створює дочірній елемент із вказаною назвою, якщо його ще не існує; +nnn і простий + працюють відповідно для індексованого вставлення та додавання в кінець.
validate <oc-path>
Перевірка лише парсингу. Без доступу до файлової системи. Корисно, коли потрібно підтвердити, що шлях шаблону має правильну форму перед підстановкою змінних, або коли потрібен структурний розбір для налагодження:
0, коли шлях валідний, 1, коли невалідний (зі структурованими code і message), 2 у разі помилок аргументів.
emit <file>
Пропускає файл через парсер і емітер відповідного типу. Для коректного файлу вихід має бути байт-у-байт ідентичним вхідним даним — розбіжність указує на баг парсера або спрацювання sentinel. Корисно для налагодження поведінки субстрату на реальних вхідних даних.
Коди завершення
| Код | Значення |
|---|---|
0 | Успіх. (resolve / find: принаймні один збіг. set: запис успішний.) |
1 | Немає збігу, або set відхилено субстратом (без помилки системного рівня). |
2 | Помилка аргументів або парсингу. |
Режим виводу
openclaw path враховує TTY: на терміналі виводить зручний для читання текст, а коли stdout передано в pipe або перенаправлено — JSON. --json і --human перевизначають автоматичне визначення.
Примітки
setзаписує байти через emit-шлях субстрату, який автоматично застосовує redaction-sentinel-запобіжник. Лист, що містить__OPENCLAW_REDACTED__(дослівно або як підрядок), відхиляється під час запису.- Парсинг JSONC і редагування листів використовують локальну для Plugin залежність
jsonc-parser, тому коментарі й форматування зберігаються під час звичайних записів листів, а не проходять через самописний шлях parser/re-render. pathне знає про LKG. Якщо файл відстежується LKG, наступний виклик observe вирішує, чи виконувати promote / recover.set --batchдля атомарного multi-set через життєвий цикл LKG promote/recover заплановано разом із субстратом LKG-recovery.