Единый граф конфигурации 1С и расширений для анализа исходников, зависимостей и влияния изменений
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-18 18:20:22 +05:00
.github Исправить проверки CI для отдельного репозитория Graphify-1C 2026-09-18 16:07:19 +05:00
docs Make manual and agent setup instructions consistent 2026-09-18 18:20:22 +05:00
graphify Make manual and agent setup instructions consistent 2026-09-18 18:20:22 +05:00
scripts Cache unchanged 1C modules and document two-project checks 2026-09-18 18:02:10 +05:00
tests Make manual and agent setup instructions consistent 2026-09-18 18:20:22 +05:00
tools Bound 1C agent queries and skip unchanged project updates 2026-09-18 16:43:50 +05:00
.dockerignore Начальная публикация Graphify-1C 2026-09-18 14:30:16 +05:00
.gitattributes Начальная публикация Graphify-1C 2026-09-18 14:30:16 +05:00
.gitignore Начальная публикация Graphify-1C 2026-09-18 14:30:16 +05:00
.pre-commit-config.yaml Начальная публикация Graphify-1C 2026-09-18 14:30:16 +05:00
AGENTS.md Начальная публикация Graphify-1C 2026-09-18 14:30:16 +05:00
ARCHITECTURE.md Начальная публикация Graphify-1C 2026-09-18 14:30:16 +05:00
BENCHMARKS.md Начальная публикация Graphify-1C 2026-09-18 14:30:16 +05:00
CHANGELOG.md Начальная публикация Graphify-1C 2026-09-18 14:30:16 +05:00
Dockerfile Начальная публикация Graphify-1C 2026-09-18 14:30:16 +05:00
LICENSE Начальная публикация Graphify-1C 2026-09-18 14:30:16 +05:00
LICENSE-MIT Начальная публикация Graphify-1C 2026-09-18 14:30:16 +05:00
NOTICE Начальная публикация Graphify-1C 2026-09-18 14:30:16 +05:00
pyproject.toml Add isolated graphify-1c installation and 1C index commands 2026-09-18 14:58:17 +05:00
README.md Make manual and agent setup instructions consistent 2026-09-18 18:20:22 +05:00
README.upstream.md Начальная публикация Graphify-1C 2026-09-18 14:30:16 +05:00
SECURITY.md Начальная публикация Graphify-1C 2026-09-18 14:30:16 +05:00
uv.lock Add isolated graphify-1c installation and 1C index commands 2026-09-18 14:58:17 +05:00

Graphify-1C

Graphify-1C строит единый поисковый граф файловой выгрузки 1С: метаданных, модулей BSL, основной конфигурации и всех выбранных расширений. Его главная задача — дать агенту короткий путь от вопроса к нужным исходникам в большой конфигурации. Вместо поиска по тысячам файлов и чтения целых модулей агент запрашивает конкретный объект, его входящие или исходящие связи и проверяет несколько найденных строк. HTML-граф служит для исследования человеком; для ежедневной работы агента предназначен локальный SQLite-индекс.

Пошаговая инструкция для новичка — установка, подключение первого и следующих проектов, проверка результата и работа в ChatGPT, Codex, Claude Code и VS Code. Настройка проекта агентом по одной ссылке — короткий запрос для агента с доступом к терминалу.

Проект основан на Graphify. Исходная документация сохранена в README.upstream.md. Лицензии и уведомления авторов сохранены в репозитории.

Возможности

  • Автоматическое обнаружение основной конфигурации в src/cf и всех корректных непосредственных расширений в src/cfe/*. Чтобы включить только часть расширений, укажите корнем ./src/cf и повторите --extension для каждого выбранного каталога.
  • Узлы конфигурации и расширений, объектов метаданных, реквизитов, табличных частей, форм, модулей, процедур и функций. contains связывает конфигурацию с объектами, объект с составными частями, модуль с методами.
  • Каждый узел хранит происхождение: source_type=configuration|extension, extension_name, путь к исходному XML/BSL и, если известна, строку. Объекты разных расширений не сливаются.
  • EXTENDS связывает заимствованные объекты с базовыми; BEFORE, AFTER, INSTEAD, CHANGE_CONTROL — перехваты методов. Все расширения, изменяющие одну цель, остаются в графе.
  • calls, calls_server, references, type_reference, query_reads, writes, handler, uses_command и другие связи помогают искать вызовы, использование метаданных, чтение таблиц и движения по регистрам.
  • Дисковый SQLite-индекс поддерживает поиск по имени/ID и постраничный просмотр входящих и исходящих связей. Для большого графа локальный просмотрщик показывает обзор и загружает связи по запросу, не рисуя весь граф сразу.
  • Универсальные возможности оригинального Graphify для других проектов сохранены. Их перечень — в исходном README; особенности применения к 1С описаны ниже.

Какие вопросы решает агент

Вопрос Первый запрос к графу
Где используется объект или метод? Найти точный ID; просмотреть входящие calls, references, type_reference, query_reads, writes по страницам.
Что затронет изменение документа? Просмотреть contains для состава, затем входящие ссылки, вызовы и расширения.
Какие расширения меняют объект или метод? Входящие EXTENDS и связи перехватов; проверить extension_name каждой вершины.
Откуда запись регистра? Входящие writes, затем владеющие методы/модули через contains.
Где расположен элемент формы или обработчик? Найти имя; пройти contains, uses_command, handler к форме и модулю.

Результат поиска — список кандидатов для проверки, а не доказательство полноты выполнения программы. Динамические вызовы, сложные запросы и поток данных могут остаться неразрешёнными. Проверка на двух конфигурациях сравнивает ответы, время поиска и объём выдачи инструментов; общий расход токенов агента ею не измерен.

Два режима форка

Задача Команда Результат
Подключить очередной проект к агентам graphify-1c init-project . Локальные инструкции Codex, Claude и VS Code с сохранением существующих правил; программу ставить снова не нужно.
Извлечь граф метаданных и BSL всей конфигурации 1С с расширениями graphify-1c analyze ./src Единый JSON-граф; HTML и SQLite при указании --html.
Обновить граф после изменений исходников 1С graphify-1c update . Проверка текущего проекта; при изменениях повторный анализ той же конфигурации и выбранных расширений.
Найти объект и пройти его связи без чтения большого JSON graphify-1c index search, neighbors, explain, path Небольшой ответ из локального SQLite; поиск и связи поддерживают --limit и --offset.
Посчитать связи и сохранить все места использования graphify-1c index groups, index export Краткие счётчики в ответе; полный список JSONL записывается на диск без передачи агенту.
Открыть большой граф человеку graphify-1c serve graphify-out/graph.html Локальный сервер обзора и соседей.
Анализировать обычный код, документы и медиа средствами Graphify Универсальные команды и навык из исходной документации Отдельный универсальный граф со своей экстракцией, кластеризацией, wiki и экспортами.

Функции оригинального Graphify сохранены, включая его универсальный поиск, путь, объяснение, интеграции с агентами и MCP. Их наличие не означает, что они используют специализированный SQLite-индекс 1С. Для больших конфигураций используйте index; текущая версия не объединяет универсальный граф документов/медиа с графом метаданных 1С. Команда graphify-1c update . сохраняет выбранные расширения и пути результатов, быстро завершается при неизменных исходниках. После изменений она заново строит граф и индекс, повторно используя кэш разбора неизменённых BSL-модулей размером от 4 КиБ. graphify-1c update . --force выполняет полный анализ без этого кэша.

Установка и запуск

Требуются Python 3.10+, Git и pipx. Форк устанавливается один раз для пользователя в отдельное окружение, а его команда получает имя graphify-1c:

python -m pip install --user pipx
python -m pipx ensurepath
git config --global core.longpaths true # Windows: для сборки парсера BSL
python -m pipx install --suffix=-1c 'graphifyy[onec] @ git+https://github.com/alexjamk/Graphify-1C.git'

После открытия нового терминала перейдите в корень каждого проекта 1С и выполните:

graphify-1c init-project . --agents 'codex,claude,vscode'
graphify-1c analyze ./src --out graphify-out/graph.json --html graphify-out/graph.html

Для второго проекта повторите только init-project и analyze из его корня. У каждого проекта отдельные граф и манифест; индекс обычно находится в graphify-out/graph.sqlite, а при другом размещении агент берёт его путь из манифеста. Codex, Claude или VS Code читают правила текущего проекта. init-project добавляет graphify-out/ в .gitignore и не заменяет существующие инструкции. Если оригинальный graphify уже установлен, он сохранится как отдельная команда. Подробности — в пошаговой инструкции.

Из корня проекта найдите объект и его входящие связи (точный ID возьмите из результата поиска):

graphify-1c index search graphify-out/graph.sqlite 'ЗаказКлиента'
graphify-1c index neighbors graphify-out/graph.sqlite '<точный ID>' --direction in --relation calls --limit 10 --offset 0
graphify-1c index neighbors graphify-out/graph.sqlite '<точный ID>' --direction in --relation calls --limit 10 --offset 10
graphify-1c index groups graphify-out/graph.sqlite '<точный ID>' --direction in
graphify-1c index export graphify-out/graph.sqlite '<точный ID>' graphify-out/usages.jsonl --direction in --relation calls

Повторяйте страницы до пустого ответа. Для разных видов использования повторите запрос с нужным --relation. Размер страницы ограничен 30 записями, вывод команды — 12 КиБ. Если нужно сохранить тысячи совпадений, используйте index export и не отправляйте весь файл агенту. Большой JSON 1С защищён от загрузки в память даже при повышенном общем лимите Graphify. На графах до 5000 узлов SQLite может не создаваться автоматически: тогда выполните graphify-1c index build graphify-out/graph.json graphify-out/graph.sqlite.

Для большого графа запустите локальный просмотрщик и откройте адрес, который он напечатает:

graphify-1c serve graphify-out/graph.html

Пример структуры проекта:

src/
├── cf/                 # основная конфигурация
└── cfe/
    ├── РасширениеА/
    └── РасширениеБ/

Для агента подготовлен порядок работы с вопросами и связями. Также доступны состояние реализации, архитектура просмотра и проверки на конфигурации «Управление торговлей».

Данные и ограничения

В репозитории нет выгрузок конфигураций, копий баз и построенных графов. Результаты анализа записываются локально в graphify-out/ и исключены из Git. Встроенные тесты и небольшие исходные фикстуры включены.

Восстановление динамических вызовов и составных текстов запросов может быть неполным. Полная инкрементальная индексация пока не реализована; текущие ограничения перечислены в статусе проекта. Большой JSON теперь записывается потоком, а SQLite-индекс заменяется только после успешной сборки.

Команды graphify-1c analyze/update/index/serve предназначены для специализированного графа 1С. Сохранённые функции оригинального Graphify (query, path, explain, навыки, универсальная индексация, wiki, экспорты, MCP) доступны; некоторые из них читают полный graph.json и не подходят для ежедневных запросов к графу 1С на сотни тысяч узлов. Их результат и потребление памяти следует оценивать отдельно. update при неизменных исходниках использует быстрый отпечаток имён, размеров и времени изменения файлов. При изменениях XML, итоговые JSON и SQLite всегда пересобираются; неизменённые крупные BSL-модули берутся из локального кэша разбора. Для проверки с нуля используйте update . --force. Кэш находится рядом с результатами анализа и не входит в репозиторий проекта.