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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

v8unpack_agent-0.1.0.tar.gz (266.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

v8unpack_agent-0.1.0-py3-none-any.whl (129.4 kB view details)

Uploaded Python 3

File details

Details for the file v8unpack_agent-0.1.0.tar.gz.

File metadata

  • Download URL: v8unpack_agent-0.1.0.tar.gz
  • Upload date:
  • Size: 266.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for v8unpack_agent-0.1.0.tar.gz
Algorithm Hash digest
SHA256 64c0fcf1e1a4badab13d46e54e49146c9c62d8cea662423c5a9103579a132e14
MD5 6468ef38a17cc440121a4857edc1f1b5
BLAKE2b-256 10460909a1810a80f85ca96106633695fa88f2d317ed93cd15896c25f82480ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for v8unpack_agent-0.1.0.tar.gz:

Publisher: release.yml on MRDK80/v8unpack-agent

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file v8unpack_agent-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: v8unpack_agent-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 129.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for v8unpack_agent-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4d4386f7181140f14e0c8f1411eff4940879508c84b0c1fb8ca2fbbd17038baf
MD5 4ae5137f93ab6a257c21bdd12eeb6d85
BLAKE2b-256 5c0652a724d883f62ea8d381e1f5fb187ffc181d57d70e31ad5ed47bdce023c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for v8unpack_agent-0.1.0-py3-none-any.whl:

Publisher: release.yml on MRDK80/v8unpack-agent

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 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