Claude Skill

v8unpack-cf

Распаковка и сборка бинарных файлов 1С (CF/CFE/EPF) через Python-утилиту v8unpack. Используй когда нужно распаковать конфигурацию, расширение или обработку в исходники, или собрать обратно.

LLM Mart · 0 points · 16 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download Desko77-claude-code-skills-1c-skills_v8unpack-cf-eb281b4.zip · 3 KB
Part of desko77/claude-code-skills-1c — 48 skills

Install

skills CLI npx skills add https://github.com/Desko77/claude-code-skills-1c/tree/main/skills/v8unpack-cf
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install desko77-claude-code-skills-1c@llmmart
Git git clone https://github.com/Desko77/claude-code-skills-1c.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole desko77/claude-code-skills-1c collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

v8unpack-cf - распаковка и сборка бинарных файлов 1С

Утилита saby v8unpack (Python) распаковывает CF/CFE/EPF файлы 1С в человекочитаемые исходники (JSON + BSL) с деревом метаданных - без платформы 1С.

Установка: pip install v8unpack (или dev-install из репозитория).

Команды

Распаковка (-E)

python -m v8unpack -E "<файл.cf>" "<папка_исходников>" --temp "<папка_temp>"
Параметр Описание
<файл.cf> Путь к CF, CFE или EPF файлу
<папка_исходников> Куда распаковать (создается автоматически)
--temp <путь> Папка для промежуточных данных (не удаляется - для отладки)
--processes N Количество потоков (по умолчанию cpu_count - 2)
--descent XYYZZZ Режим версионирования расширений (суффикс версии конфигурации)
--auto_include Динамическое оглавление из папки, а не из заголовка
--prefix STR Префикс имен метаданных 1-го уровня

Сборка (-B)

python -m v8unpack -B "<папка_исходников>" "<файл.cf>"
Параметр Описание
<папка_исходников> Папка с распакованными исходниками
<файл.cf> Путь к выходному CF/CFE/EPF файлу
--index <path> JSON-файл оглавления (маппинг файлов по папкам)
--version XYYZZ Версия режима совместимости (для расширений), напр. 80306 = 8.3.6
--descent XYYZZZ Суффикс версии конфигурации

Индексация (-I)

python -m v8unpack -I "<папка_исходников>" --index index.json --core core

Генерирует/обновляет index.json - файл оглавления для раскладки исходников по подпапкам.

Пакетные операции (-EA, -BA, -IA)

python -m v8unpack -EA products.json              # распаковать все продукты
python -m v8unpack -BA products.json              # собрать все продукты
python -m v8unpack -BA products.json --index KEY  # собрать конкретный продукт

Файл products.json описывает несколько продуктов с индивидуальными параметрами сборки.

Python API

import v8unpack

v8unpack.extract('d:/sample.cf', 'd:/src')
v8unpack.extract('d:/sample.cf', 'd:/src', temp_dir='d:/temp',
                 options={'descent': 4100200, 'auto_include': True})

v8unpack.build('d:/src', 'd:/repacked.cf')
v8unpack.build('d:/src', 'd:/repacked.cf', index='index.json',
               options={'descent': 4100200, 'version': '80306'})

Примеры использования

Распаковать конфигурацию

python -m v8unpack -E "<project>/1Cv8.cf" "<project>/src" --temp "<project>/temp"

Собрать обратно

python -m v8unpack -B "<project>/src" "<project>/1Cv8_new.cf"

Распаковать внешнюю обработку

python -m v8unpack -E "МояОбработка.epf" "src_epf"

Распаковать расширение

python -m v8unpack -E "МоеРасширение.cfe" "src_cfe" --descent 3000112

Собрать расширение

python -m v8unpack -B "src_cfe" "bin/ext.cfe" --index cmd/index.json --descent 3000112 --version 80316

Совместимость версий

Версия утилиты записывается в Configuration.json ("v8unpack": "1.2.6"). При сборке проверяется совпадение major.minor. Если версии не совпадают:

  1. Собрать старой версией
  2. Обновить утилиту
  3. Распаковать новой версией
  4. Закоммитить

Круговая сборка: проверяй, а не верь на слово

Про версию 1.2.6 встречается утверждение, что при сборке (-B) она пишет в заголовок контейнера размер блока 0x54 вместо 0x200, из-за чего результат приходится патчить.

На 1.2.9 это не воспроизводится (проверено 14.08.2026 на реальной .epf 1.8 МБ): распаковка и обратная сборка проходят без ошибок, в заголовке и исходного, и пересобранного файла page_size = 0x200. Размер файлов при этом отличается - это нормально и само по себе о поломке не говорит.

Отсюда правило: перед тем как городить патч заголовка, сделай круговую проверку на своей версии.

python -m v8unpack -E исходный.epf ./src
python -m v8unpack -B ./src пересобранный.epf
python -c "import struct;print([hex(struct.unpack('<IIII', open(p,'rb').read(16))[1]) for p in ('исходный.epf','пересобранный.epf')])"

Оба значения 0x200 - заголовок в порядке. Дальше проверяется главное: пересобранный файл должен открываться платформой и содержать те же модули.

Промежуточные стадии (--temp)

Стадия Описание
decode_stage_0/ Извлечение из контейнера 1С
decode_stage_1/ Декомпрессия (zlib), скобкофайлы
decode_stage_3/ Разбор метаданных → дерево
Папка назначения Организация кода (include, элементы форм)

Ограничения

  • Свойства объектов и разметка форм хранятся в header / raw как сырые массивы
  • Файлы > 1 МБ (макеты, HTML) хранятся как .bin без декодирования
  • Зашифрованные модули сохраняются в бинарном виде
  • При --auto_include вложенные объекты сортируются по алфавиту
Files (claude-code-skills-1c)
  • evals
    • evals.json 2.8 KB
      {
        "skill_name": "v8unpack-cf",
        "evals": [
          {
            "id": 1,
            "prompt": "Распакуй конфигурацию D:/Projects/MyApp/1Cv8.cf в исходники. Временные файлы помести в D:/Projects/MyApp/temp/.",
            "expected_output": "Команда v8unpack вызвана с флагом -E, путём к CF-файлу и папке назначения, параметром --temp для временных файлов.",
            "expectations": [
              "Команда python -m v8unpack вызвана с флагом -E (распаковка)",
              "Первый аргумент после -E указывает на D:/Projects/MyApp/1Cv8.cf",
              "Второй аргумент указывает на папку назначения для исходников",
              "Параметр --temp указывает на D:/Projects/MyApp/temp/",
              "Claude поясняет что создастся в папке исходников (JSON + BSL файлы)"
            ]
          },
          {
            "id": 2,
            "prompt": "Собери обратно конфигурацию из исходников D:/Projects/MyApp/src/ в файл D:/Projects/MyApp/1Cv8_new.cf.",
            "expected_output": "Команда v8unpack вызвана с флагом -B, путём к папке исходников и путём к выходному CF-файлу.",
            "expectations": [
              "Команда python -m v8unpack вызвана с флагом -B (сборка)",
              "Первый аргумент после -B указывает на папку исходников D:/Projects/MyApp/src/",
              "Второй аргумент указывает на путь к выходному файлу D:/Projects/MyApp/1Cv8_new.cf",
              "Claude предупреждает о проверке совместимости версии v8unpack (поле v8unpack в Configuration.json)"
            ]
          },
          {
            "id": 3,
            "prompt": "Распакуй расширение МоёРасширение.cfe в папку src_cfe с режимом descent для версии конфигурации 3.0.112.",
            "expected_output": "Команда v8unpack вызвана с флагом -E, путём к CFE-файлу, папкой назначения src_cfe и параметром --descent 3000112.",
            "expectations": [
              "Команда python -m v8unpack вызвана с флагом -E (распаковка)",
              "Аргумент указывает на МоёРасширение.cfe как источник",
              "Папка назначения указана как src_cfe",
              "Параметр --descent указан со значением 3000112 (версия 3.0.112 в формате XYYZZZ)"
            ]
          }
        ]
      }
      
  • SKILL.md 7.3 KB
    ---
    name: v8unpack-cf
    description: "Распаковка и сборка бинарных файлов 1С (CF/CFE/EPF) через Python-утилиту v8unpack. Используй когда нужно распаковать конфигурацию, расширение или обработку в исходники, или собрать обратно."
    argument-hint: "<-E|-B> <source> <destination> [--temp path] [--descent ver] [--auto_include]"
    allowed-tools:
      - Bash
      - Read
      - Glob
      - Grep
    ---
    
    # v8unpack-cf - распаковка и сборка бинарных файлов 1С
    
    Утилита `saby v8unpack` (Python) распаковывает CF/CFE/EPF файлы 1С в человекочитаемые исходники (JSON + BSL) с деревом метаданных - **без платформы 1С**.
    
    Установка: `pip install v8unpack` (или dev-install из репозитория).
    
    ## Команды
    
    ### Распаковка (-E)
    
    ```bash
    python -m v8unpack -E "<файл.cf>" "<папка_исходников>" --temp "<папка_temp>"
    ```
    
    | Параметр | Описание |
    |----------|----------|
    | `<файл.cf>` | Путь к CF, CFE или EPF файлу |
    | `<папка_исходников>` | Куда распаковать (создается автоматически) |
    | `--temp <путь>` | Папка для промежуточных данных (не удаляется - для отладки) |
    | `--processes N` | Количество потоков (по умолчанию cpu_count - 2) |
    | `--descent XYYZZZ` | Режим версионирования расширений (суффикс версии конфигурации) |
    | `--auto_include` | Динамическое оглавление из папки, а не из заголовка |
    | `--prefix STR` | Префикс имен метаданных 1-го уровня |
    
    ### Сборка (-B)
    
    ```bash
    python -m v8unpack -B "<папка_исходников>" "<файл.cf>"
    ```
    
    | Параметр | Описание |
    |----------|----------|
    | `<папка_исходников>` | Папка с распакованными исходниками |
    | `<файл.cf>` | Путь к выходному CF/CFE/EPF файлу |
    | `--index <path>` | JSON-файл оглавления (маппинг файлов по папкам) |
    | `--version XYYZZ` | Версия режима совместимости (для расширений), напр. `80306` = 8.3.6 |
    | `--descent XYYZZZ` | Суффикс версии конфигурации |
    
    ### Индексация (-I)
    
    ```bash
    python -m v8unpack -I "<папка_исходников>" --index index.json --core core
    ```
    
    Генерирует/обновляет `index.json` - файл оглавления для раскладки исходников по подпапкам.
    
    ### Пакетные операции (-EA, -BA, -IA)
    
    ```bash
    python -m v8unpack -EA products.json              # распаковать все продукты
    python -m v8unpack -BA products.json              # собрать все продукты
    python -m v8unpack -BA products.json --index KEY  # собрать конкретный продукт
    ```
    
    Файл `products.json` описывает несколько продуктов с индивидуальными параметрами сборки.
    
    ## Python API
    
    ```python
    import v8unpack
    
    v8unpack.extract('d:/sample.cf', 'd:/src')
    v8unpack.extract('d:/sample.cf', 'd:/src', temp_dir='d:/temp',
                     options={'descent': 4100200, 'auto_include': True})
    
    v8unpack.build('d:/src', 'd:/repacked.cf')
    v8unpack.build('d:/src', 'd:/repacked.cf', index='index.json',
                   options={'descent': 4100200, 'version': '80306'})
    ```
    
    ## Примеры использования
    
    ### Распаковать конфигурацию
    
    ```bash
    python -m v8unpack -E "<project>/1Cv8.cf" "<project>/src" --temp "<project>/temp"
    ```
    
    ### Собрать обратно
    
    ```bash
    python -m v8unpack -B "<project>/src" "<project>/1Cv8_new.cf"
    ```
    
    ### Распаковать внешнюю обработку
    
    ```bash
    python -m v8unpack -E "МояОбработка.epf" "src_epf"
    ```
    
    ### Распаковать расширение
    
    ```bash
    python -m v8unpack -E "МоеРасширение.cfe" "src_cfe" --descent 3000112
    ```
    
    ### Собрать расширение
    
    ```bash
    python -m v8unpack -B "src_cfe" "bin/ext.cfe" --index cmd/index.json --descent 3000112 --version 80316
    ```
    
    ## Совместимость версий
    
    Версия утилиты записывается в `Configuration.json` (`"v8unpack": "1.2.6"`). При сборке проверяется совпадение major.minor. Если версии не совпадают:
    1. Собрать старой версией
    2. Обновить утилиту
    3. Распаковать новой версией
    4. Закоммитить
    
    ### Круговая сборка: проверяй, а не верь на слово
    
    Про версию 1.2.6 встречается утверждение, что при сборке (`-B`) она пишет в заголовок контейнера
    размер блока `0x54` вместо `0x200`, из-за чего результат приходится патчить.
    
    **На 1.2.9 это не воспроизводится** (проверено 14.08.2026 на реальной `.epf` 1.8 МБ): распаковка и
    обратная сборка проходят без ошибок, в заголовке и исходного, и пересобранного файла
    `page_size = 0x200`. Размер файлов при этом отличается - это нормально и само по себе о поломке не
    говорит.
    
    Отсюда правило: перед тем как городить патч заголовка, **сделай круговую проверку на своей версии**.
    
    ```bash
    python -m v8unpack -E исходный.epf ./src
    python -m v8unpack -B ./src пересобранный.epf
    python -c "import struct;print([hex(struct.unpack('<IIII', open(p,'rb').read(16))[1]) for p in ('исходный.epf','пересобранный.epf')])"
    ```
    
    Оба значения `0x200` - заголовок в порядке. Дальше проверяется главное: пересобранный файл должен
    открываться платформой и содержать те же модули.
    
    ## Промежуточные стадии (--temp)
    
    | Стадия | Описание |
    |--------|----------|
    | `decode_stage_0/` | Извлечение из контейнера 1С |
    | `decode_stage_1/` | Декомпрессия (zlib), скобкофайлы |
    | `decode_stage_3/` | Разбор метаданных → дерево |
    | Папка назначения | Организация кода (include, элементы форм) |
    
    ## Ограничения
    
    - Свойства объектов и разметка форм хранятся в `header` / `raw` как сырые массивы
    - Файлы > 1 МБ (макеты, HTML) хранятся как `.bin` без декодирования
    - Зашифрованные модули сохраняются в бинарном виде
    - При `--auto_include` вложенные объекты сортируются по алфавиту
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related