Перейти к содержимому
RAGRAF

22 операции: полный справочник фасада

Каждая операция — назначение, ключевые флаги, что в результате и какие пределы объявляет. Конверт ответа и правила чтения.

Как устроен контракт #

Все операции доступны тремя путями: Python-фасад (op_), CLI (ragraf query …) и MCP-инструменты (ragraf_, 23 штуки — list_capabilities дополнительно раскрывает режим). Каждая отвечает конвертом единого формата:

JSON
{
  "op": "impact", "index_rev": "rev-0016", "capability": "full",
  "drift": {"files": 0, "symbols": 0, "entries": 0},
  "provenance": "index",
  "limits": ["статический анализ; динамика не покрыта"],
  "stale_warnings": [],
  "result": [ ... ]
}

Правила чтения: limits объявлены всегда (их отсутствие — баг, а не удача); stale_warnings заполняются автоматически по журналу расхождений; capability: degraded означает, что CPG-слой недоступен и slice откажет; коды выхода CLI: 0 успех · 1 аргументы/корпус · 2 внутренняя ошибка · 3 «операция невозможна в этом состоянии».

Операции по группам #

Навигация и символы #

ОперацияЧто делаетКлючевые флагиПределы
symbolопределение символа по имени/FQN: file:line, подпись, kind, провенанс--name, --kind, --scope, --limit, --live, --reasonнеоднозначное имя → несколько фактов; динамические объявления не покрываются
referencesгде символ упомянут (в т.ч. строковые упоминания FQN)--name, --exclude-definition, --limitстроковые упоминания ≠ вызовы — разделяются в выдаче
callersвходящие вызовы символа--name, --mode hard|all, --limithard — только stated-рёбра; динамика (call_user_func) — в all отдельным блоком
calleesисходящие вызовыаналогичноаналогично
membersсостав класса/модуля--name—
impactтранзитивное влияние изменения ( BFS по графу)--name, --depth, --mode, --limitдинамические пути помечены derived; глубина ограничена конфигом
sliceмежпроцедурный срез (Joern CPG)--name, --direction, --depthтолько capability=full; при degraded — отказ с причиной
live_readпрямое чтение файла мимо индекса--path, --from, --toвсегда доступен; результат provenance: live
live_grepregex-поиск по дереву мимо индекса--pattern, --globвсегда доступен
searchгибридный поиск (FTS5 BM25 + векторы)--query, --top, --with-text, --modeсемантика ограничена моделью 384d; --with-text отдаёт фрагменты за один вызов
codeвыдача текста чанков по идентификаторам--entry-ids—

Схема данных (БД) #

ОперацияЧто делаетПределы
schemaтаблицы/колонки/FK из миграций и information_schemaу фактов схемы нет path:line — проверяемость M6 их не считает (честные 24,4% вместо 100%)
table_usageгде таблица читается/пишется в кодесвязка по SQL-литералам; динамически собранный SQL не покрывается
write_checkсверка плана записи (таблица+колонки) со схемой до выполнениявозвращает nearest-предложения при опечатке колонки; не проверяет бизнес-правила
column_usageиспользования колонкикак table_usage
data_flow (schema)поток данных таблица→кодстатический, по SQL-литералам

Маршруты и политики #

ОперацияЧто делаетПределы
routesвеб-маршруты (path→handler) из конфигурации/аннотацийпокрытие зависит от парсера маршрутов проекта
policy_traceтрассировка прав доступа: маршрут→middleware→проверка ролистатическая трассировка; рантайм-конфигурация ACL не исполняется

Состояние и метрики #

ОперацияЧто делает
statusсводка ревизии: файлы, узлы, рёбра, чанки, capability, тайминги стадий
healthсамодиагностика: файлы хранилищ, схемы, деградации
index_statusдетальное состояние индексации и журнала
reindexявная пересборка ревизии с архивацией журнала
drift_reportотчёт «что изменилось в знаниях» по журналу/архиву
usage_statsтелеметрия обращений: по операциям, фактам, спанам, токенам
selftestотчёт по 9 обязательным + 2 опциональным компонентам (всегда exit 0 — это отчёт, не гейт)
Точный состав 22 операций фасада может незначительно расходиться с табличной группировкой выше — источник истины: src/ragraf/facade.py и docs/operations.md в репозитории. Здесь grouping учебный: навигация (11), схема (5), маршруты/политики (2), состояние (7) ≈ 22+3 служебных CLI-операции (status/health/selftest живут и как команды верхнего уровня).

Анатомия результата: provenance в деле #

Пример реального вывода callers --mode all для динамического PHP:

Text
stated (доказано графом):
  z_agr_audit_log  ← Workflow.php:210  (edge_uid 3f2a…)
  z_agr_audit_log  ← DocRoute.php:88   (edge_uid 91bc…)
derived (эвристика, отдельно):
  z_agr_audit_log  ← call_user_func в hooks.php:44  confidence 0.60
  → требует проверки live_read

Два блока никогда не смешиваются. Вывод для агента: на stated можно опираться; derived — список мест, которые надо открыть (live_read) и проверить глазами/моделью.

Что операции НЕ делают #

  • Не пишут и не патчат код (RAGRAF отвечает — правит агент).
  • Не выполняют SQL и не подключаются к БД (схема — из миграций и read-only information_schema).
  • Не ходят в сеть (единственный сетевой трафик продукта — установка зависимостей и одноразовое скачивание модели эмбеддингов).
  • Не дают произвольных запросов к графу (принцип P4 — см. проблематику).

Лимиты и безопасность выдачи #

Каждая операция несёт явные --limit (защита от раздувания контекста агента) и глобальные ограничения из конфига корпуса. Ответы не содержат значений секретов: файлы secrets_exclude не индексируются вовсе, а телеметрия хранит хеши аргументов.


Смежное: CLI-справочник → · конфигурация корпуса → · как читать конверт в регламенте агента →