openclaw path
Наданий Plugin доступ оболонки до адресної основи oc://: одна
схема шляхів із диспетчеризацією за типом для інспектування та редагування
адресованих файлів робочого простору (markdown, jsonc, jsonl). Ті, хто
розгортає власний хостинг, автори Plugin та розширення редакторів
використовують її, щоб читати, знаходити або оновлювати вузьку ділянку без
саморобних парсерів для кожного файлу.
CLI віддзеркалює публічні дієслова цієї основи:
resolveє конкретним і повертає один збіг.findє дієсловом для множинних збігів: шаблонів, об’єднань, предикатів і позиційного розгортання.setприймає лише конкретні шляхи або маркери вставлення; шаблони з підстановками відхиляються до запису.
path надається вбудованим необов’язковим Plugin oc-path. Увімкніть його
перед першим використанням:
Навіщо це використовувати
Стан OpenClaw розподілений між редагованим людьми markdown, коментованою конфігурацією JSONC та журналами JSONL лише з додаванням. Shell-скриптам, хукам і агентам часто потрібне одне невелике значення з цих файлів: ключ frontmatter, налаштування Plugin, поле запису журналу або пункт списку в іменованому розділі.openclaw path дає таким викликам стабільну адресу замість одноразового grep,
регулярного виразу чи парсера для кожного типу файлу. Один і той самий шлях
oc:// можна перевірити, розв’язати, знайти, прогнати в режимі пробного
запуску та записати з термінала, що спрощує перегляд вузької автоматизації та
робить її безпечнішою для повторного виконання. Це особливо корисно, коли ви
хочете оновити один листовий елемент, зберігши решту коментарів файлу,
закінчення рядків і навколишнє форматування.
Використовуйте це, коли потрібна сутність має логічну адресу, але фізична
форма файлу різниться:
- Хук хоче прочитати одне налаштування з коментованого JSONC, не втрачаючи коментарів під час запису значення назад.
- Скрипт обслуговування хоче знайти кожне відповідне поле події в журналі JSONL, не завантажуючи весь журнал у спеціальний парсер.
- Розширення редактора хоче перейти до розділу markdown або пункту списку за slug, а потім відрендерити точний рядок, до якого шлях розв’язався.
- Агент хоче пробно виконати крихітне редагування робочого простору перед застосуванням, із видимими для перегляду зміненими байтами.
openclaw path для звичайних редагувань цілих
файлів, складних міграцій конфігурації або записів, специфічних для пам’яті.
Для цього слід використовувати команду або Plugin власника. path призначений
для малих адресованих операцій із файлами, де повторювана термінальна команда
зрозуміліша за ще один спеціальний парсер.
Як це використовується
Прочитати одне значення з редагованого людьми конфігураційного файлу:--json,
коли виклику потрібен структурований вивід, і --human, коли результат
переглядає людина.
Як це працює
openclaw path виконує чотири дії:
- Розбирає адресу
oc://на слоти: файл, розділ, пункт, поле та необов’язкову сесію. - Вибирає адаптер типу файлу за цільовим розширенням (
.md,.jsonc,.jsonlта пов’язані псевдоніми). - Розв’язує слоти відносно AST цього типу файлу: заголовків/пунктів markdown, ключів об’єктів/індексів масивів JSONC або рядкових записів JSONL.
- Для
setвипускає відредаговані байти через той самий адаптер, щоб незмінені частини файлу зберігали свої коментарі, закінчення рядків і близьке форматування там, де це підтримує тип файлу.
resolve і set потребують однієї конкретної цілі. find є
дослідницьким дієсловом: воно розгортає підстановки, об’єднання, предикати й
порядкові номери в конкретні збіги, які можна переглянути перед вибором одного
для запису.
Підкоманди
| Підкоманда | Призначення |
|---|---|
resolve <oc-path> | Надрукувати конкретний збіг за шляхом (або “not found”). |
find <pattern> | Перелічити збіги для шляху з підстановкою / об’єднанням / предикатом. |
set <oc-path> <value> | Записати листовий елемент або ціль вставлення за конкретним шляхом. Підтримує --dry-run. |
validate <oc-path> | Лише розбір; надрукувати структурний поділ (файл / розділ / пункт / поле). |
emit <file> | Провести файл через parseXxx + emitXxx туди й назад (діагностика байтової точності). |
Глобальні прапорці
| Прапорець | Призначення |
|---|---|
--cwd <dir> | Розв’язати слот файлу відносно цього каталогу (типово: process.cwd()). |
--file <path> | Перевизначити розв’язаний шлях слота файлу (абсолютний доступ). |
--json | Примусово виводити JSON (типово, коли stdout не є TTY). |
--human | Примусово виводити для людини (типово, коли stdout є TTY). |
--dry-run | (лише для set) надрукувати байти, які були б записані, без запису. |
Синтаксис 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}збігається з будь-якою з альтернатив. - Підстановки —
*(один підсегмент) і**(нуль або більше, рекурсивно).findприймає їх;resolveіsetвідхиляють їх як неоднозначні. - Позиційний —
$lastрозв’язується в останній індекс / останній оголошений ключ. - Порядковий —
#Nдля N-го збігу в порядку документа. - Маркери вставлення —
+,+key,+nnnдля вставлення за ключем / індексом (використовуйте зset). - Область сесії —
?session=cron-dailyтощо. Ортогональна до вкладеності слотів. Значення сесії є сирими, не декодуються з percent-encoding; вони не можуть містити керівні символи або зарезервовані розділювачі запиту (?,&,%).
?, &, %) поза цитованими сегментами,
предикатами або об’єднаннями відхиляються. Керівні символи (U+0000-U+001F,
U+007F) відхиляються всюди, включно зі значенням запиту session.
formatOcPath(parseOcPath(path)) === path гарантовано для канонічних шляхів.
Неканонічні параметри запиту ігноруються, окрім першого непорожнього значення
session=.
Адресація за типом файлу
| Тип | Модель адресації |
|---|---|
| Markdown | Розділи H2 за slug, пункти списку за slug або #N, frontmatter через [frontmatter]. |
| JSONC/JSON | Ключі об’єктів та індекси масивів; крапки ділять вкладені підсегменти, якщо їх не взято в лапки. |
| JSONL | Адреси рядків верхнього рівня (L1, L2, $last), потім спуск у стилі JSONC усередині рядка. |
resolve повертає структурований збіг: root, node, leaf або
insertion-point, із номером рядка з основою 1. Листові значення подаються як
текст плюс leafType, щоб автори Plugin могли рендерити попередні перегляди,
не залежачи від форми AST конкретного типу.
Контракт мутації
set записує одну конкретну ціль:
- Значення markdown frontmatter і поля пунктів
- key: valueє рядковими листовими елементами. Вставлення в markdown додають розділи, ключі frontmatter або пункти розділів і рендерять канонічну форму markdown для зміненого файлу. - Записи листових елементів JSONC приводять рядкове значення до наявного типу
листка (
string, скінченнийnumber,true/falseабоnull). Вставлення об’єктів і масивів JSONC розбирають<value>як JSON і використовують шлях редагуванняjsonc-parserдля звичайних записів листків, зберігаючи коментарі та близьке форматування. - Записи листових елементів JSONL приводяться як JSONC усередині рядка. Заміна
цілого рядка й додавання розбирають
<value>як JSON. Відрендерений JSONL зберігає домінантну для файлу конвенцію закінчень рядків LF/CRLF.
--dry-run перед записами, видимими користувачу, коли точні
байти мають значення. Основа зберігає байтово ідентичний вивід для проходів
parse/emit туди й назад, але мутація може канонізувати відредаговану ділянку
або файл залежно від типу.
Приклади
Рецепти за типом файлу
Ті самі п’ять дієслів працюють для всіх типів; схема адресації диспетчеризує за розширенням файлу. Наведені нижче приклади використовують фікстури з опису PR.Markdown
[frontmatter] адресує YAML-блок frontmatter; tools збігається із
заголовком ## Tools через slug, а листки пунктів зберігають свою slug-форму
навіть коли джерело використовує підкреслення (send_email → send-email).
JSONC
jsonc-parser, тому коментарі й пробіли зберігаються після
set. Спершу запустіть із --dry-run, щоб переглянути байти перед фіксацією змін.
JSONL
[event=action]), коли ви не
знаєте номер рядка, або за канонічним сегментом LN, коли знаєте.
Довідник підкоманд
resolve <oc-path>
Зчитує один листок або вузол. Символи-замінники відхиляються — використовуйте для них find.
Завершується з кодом 0 за збігу, 1 за коректної відсутності збігу, 2 у разі помилки розбору або відхиленого
шаблону.
find <pattern>
Перелічує всі збіги для шаблону із символом-замінником / предикатом / об’єднанням. Завершується з кодом 0,
якщо є принаймні один збіг, і 1, якщо збігів немає. Символи-замінники в слоті файлу відхиляються з
OC_PATH_FILE_WILDCARD_UNSUPPORTED — передайте конкретний файл (пошук за шаблонами в кількох файлах
є майбутньою функцією).
set <oc-path> <value>
Записує листок. Поєднуйте з --dry-run, щоб попередньо переглянути байти, які було б
записано без зміни файлу. Завершується з кодом 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: людиночитний вивід у терміналі, JSON, коли
stdout передається через pipe або перенаправляється. --json і --human перевизначають
автовизначення.
Нотатки
setзаписує байти через шлях emit субстрату, який автоматично застосовує захист redaction-sentinel. Листок, що містить__OPENCLAW_REDACTED__(дослівно або як підрядок), відхиляється під час запису.- Розбір JSONC і редагування листків використовують локальну для plugin залежність
jsonc-parser, тому коментарі та форматування зберігаються під час звичайних записів листків, а не проходять через самописний шлях парсера/повторного рендерингу. pathне знає про LKG. Якщо файл відстежується LKG, наступний виклик observe вирішує, чи виконувати promote / recover.set --batchдля атомарного multi-set через життєвий цикл promote/recover LKG заплановано разом із субстратом LKG-recovery.