Skip to main content

v8unpack-agent

Прикладной инструмент над upstream-распаковщиком v8unpack: превращает выгрузку конфигурации 1С в читаемый текстовый слой, машиночитаемую опись форм и компактный контекст для LLM.

Задача пакета — дать агенту достоверные сведения о формах и модулях без угадывания. Где данные нечитаемы, результат помечается как неполный, а не достраивается догадками.

Границы и non-goals

  • Пакет не распаковывает контейнер сам: дерево выгрузки готовит upstream v8unpack, а агент работает с уже раскрытым каталогом.
  • Production-адаптера одиночного Form.bin в пакете нет: реализацию распаковщика передаёт вызывающая сторона.
  • Функций index_cf() и rag.rebuild() не существует; векторная индексация находится вне scope пакета.
  • Пакет не подключается к живой информационной базе и не читает её данные.

Кто что решает

Компонент Ответственность
upstream v8unpack распаковка контейнеров в дерево файлов
v8unpack-agent опись форм, текстовый слой, индексы, контекст, отчёт о запуске
вызывающая сторона реализация распаковщика формы и решения по degraded-результату

Установка

Основная установка из PyPI:

pip install v8unpack-agent

Исторический pre-release 0.1.0rc1 остаётся доступным в PyPI и по умолчанию не выбирается резолверами (нужен явный pin или --pre):

pip install v8unpack-agent==0.1.0rc1

Установка актуального состояния main напрямую из Git остаётся вариантом для проверки ещё не опубликованных изменений:

pip install git+https://github.com/MRDK80/v8unpack-agent.git

Установка для разработки из клона:

pip install -e ".[test]"

upstream v8unpack нужен для фактического извлечения текстов, включая поддержку внешних отчётов .erf.

Быстрый старт: CLI

Один прогон — один отчёт и один код возврата. На вход подаётся каталог уже распакованной выгрузки.

v8unpack-agent-run <корень_выгрузки> --report-path post-run.json

Аргумент --report-path обязателен, значения по умолчанию нет, а каталог-родитель должен существовать заранее.

Код Значение
0 все объекты обработаны полностью
2 ошибка аргументов или корень не является каталогом
3 degraded: есть частичные или отказавшие объекты
4 управляемая фатальная ошибка пайплайна
5 ошибка записи отчёта
6 фатальная ошибка и ошибка записи одновременно

Degraded — неуспешное завершение: неполный контекст не должен выглядеть успехом для автоматизации. Полное описание аргументов, стадий и кодов причин — в docs/runner.md, схема отчёта — в docs/run_report.md.

Быстрый старт: Python

Каноническая цепочка: обнаружение источников, распаковка по FormBinSource, обновление индекса.

from pathlib import Path

from v8unpack_agent import unpack_all_forms, update_forms_index
from v8unpack_agent.form_artifact import FormArtifact
from v8unpack_agent.form_identity import FormBinSource
from v8unpack_agent.scan_forms import scan_forms

dump_root = Path("unpacked_cf")
unpacked_root = Path("text_layer")


def unpack_one(source: FormBinSource, root: Path) -> FormArtifact:
    """Здесь вызывается реальное извлечение текстов из source.bin_path."""
    return FormArtifact.for_form(root, source.name)


scan_index = scan_forms(dump_root)
print(f"Найдено форм: {scan_index.total}")

artifacts = unpack_all_forms(dump_root, unpacked_root, unpack_one)
index = update_forms_index(dump_root, unpacked_root, artifacts)
index.save(Path("forms_index.json"))

Распаковщик получает FormBinSource и корень текстового слоя — ровно два аргумента. Существующая трёхаргументная реализация подключается только через adapt_legacy_unpacker(). Подробный разбор и отбор по form_ids — в docs/pipeline.md, готовые сценарии — в examples/README.md.

Пайплайн

Шаг Функция Результат
опись форм scan_forms() FormScanIndex с layout-метаданными и индексом ссылочных типов
обнаружение источников discover_form_sources() FormBinSource с каноническим form_id
распаковка unpack_all_forms() FormArtifact на каждую форму
структура формы parse_elem_json() элементы и привязки data_path, best-effort
реквизиты объекта decode_object_attributes() Properties и TabularSections
классификация classify_form() object, service или unknown
внешние отчёты unpack_erf() текстовый слой и запросы СКД
индекс актуальности update_forms_index() FormsIndex с ключом form_id
контроль дрейфа check_drift() DriftReport по хешам
контекст для LLM build_form_context() FormContext и промпт-фрагмент

Ключевые возможности

  • Одноимённые формы разных владельцев не затирают друг друга: идентичность — form_id, а не имя.
  • Формы без кода попадают в опись: elem-only ветка заполняет elem_json_path.
  • Частичный результат всегда явный: extraction_ok=False невозможен без непустого extraction_warnings.
  • Ссылочные типы реквизитов приводятся к имени объекта метаданных; неизвестный UUID остаётся Ref#<uuid> и не угадывается.
  • Сервисные формы отделены от объектных, чтобы метрика покрытия не занижалась архитектурным паттерном платформы.
  • Дрейф детектируется по хешам модуля и структуры, а не только по времени изменения файла.
  • Сериализация индексов переносима: в файлы пишутся только относительные POSIX-пути, одинаковые на POSIX и NT.

Версии схем

Три независимые версии, которые не сравниваются друг с другом.

Артефакт Версия Где описан
FormsIndex 2 docs/pipeline.md
FormScanIndex 2 при чтении legacy 1 docs/scan_forms.md
post-run report 1 docs/run_report.md

Публичная поверхность

Модуль Основные имена Канонический документ
scan_forms scan_forms, FormEntry, FormScanIndex, scan_warning_code scan_forms
pipeline unpack_all_forms, unpack_erf, update_forms_index, FormUnpacker pipeline
form_identity FormBinSource, discover_form_sources, select_sources, adapt_legacy_unpacker pipeline
form_artifact FormArtifact pipeline
forms_index FormsIndex, FormsIndexEntry, is_form_stale pipeline
runner, cli RunOptions, RunOutcome, run_pipeline runner
run_report PostRunReport, ObjectRunResult, write_post_run_report run_report
elem_parser parse_elem_json, ElemIndexResult, UnindexedReason elem_parser
form_classifier classify_form, FormClass, classify_empty_tree_form form_classifier
coverage_metric calc_data_path_coverage, CoverageReport form_classifier
object_decoder decode_object_attributes, DecodeResult, DecodeError object_decoder
catalog_resolver resolve_data_path, ResolvedBinding catalog_resolver
form_context FormContext, build_form_context, to_llm_prompt_fragment form_context
form_summary build_form_summary, to_normalized_json form_summary
form_router FormRouter, form_paths form_router
common_modules scan_common_modules, build_common_module_context common_modules
managed_forms discover_elem_forms, ElemFormEntry managed_forms_structure
skd_extractor extract_skd_queries, extract_all_skd_queries skd_extractor
drift_checker check_drift, DriftReport drift_checker

Документация

Начало работы

Пайплайн и запуск

Формы и разбор

Метаданные и индексы

Исследования

Датированные протоколы с агрегатами; выводы не переписываются задним числом.

Примеры и политики

Известные ограничения

  • Обычные (неуправляемые) формы хранят разметку в бинарном виде и частично не читаются; такие формы получают unknown и исключаются из знаменателя метрики.
  • Квалификаторы реквизитов и составные типы не декодируются.
  • Индекс ссылочных типов строится только для видов метаданных с доказанной ссылочной формой; остальные UUID остаются Ref#<uuid>.
  • В режиме mode="external" индекс ссылочных типов не собирается.
  • Распаковщики из examples/ и тестов — заглушки и не читают бинарный формат.
  • Пакет ещё не опубликован в индексе пакетов (issue #149).

Тесты

pytest

Фикстуры синтетические: реальная выгрузка для прогона не требуется. Порядок работы с ветками, проверки перед PR и требования к обезличенности описаны в CONTRIBUTING.md.

Связанное

Лицензия

MIT — см. LICENSE.

Release files for v8unpack-agent 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for v8unpack-agent 0.1.0
File Size Uploaded
v8unpack_agent-0.1.0.tar.gz 266.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for v8unpack-agent 0.1.0
File Interpreter ABI Platform
v8unpack_agent-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size:396.1 kB

Release files / v8unpack_agent-0.1.0.tar.gz

Download URL v8unpack_agent-0.1.0.tar.gz
Size 266.7 kB
Tags Source
SHA-256 checksum
How to use checksums
64c0fcf1e1a4badab13d46e54e49146c9c62d8cea662423c5a9103579a132e14
BLAKE2b-256 checksum
How to use checksums
10460909a1810a80f85ca96106633695fa88f2d317ed93cd15896c25f82480ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.

Transparency log

Release files / v8unpack_agent-0.1.0-py3-none-any.whl

Download URL v8unpack_agent-0.1.0-py3-none-any.whl
Size 129.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4d4386f7181140f14e0c8f1411eff4940879508c84b0c1fb8ca2fbbd17038baf
BLAKE2b-256 checksum
How to use checksums
5c0652a724d883f62ea8d381e1f5fb187ffc181d57d70e31ad5ed47bdce023c1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page