Skip to content
Back to skills

Lab Report

ASecurity

Генерация финального документа (DOCX/PDF/MD) с изображениями

  • 3 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added May 27, 2026
data-aipython

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add id-andyyy/LabAI --skill lab-report --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Lab Report?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Lab Report
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/id-andyyy-lab-report/badge)](https://www.skillsdirectory.com/skills/id-andyyy-lab-report)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: lab-report
description: Генерация финального документа (DOCX/PDF/MD) с изображениями
---

Пользователь хочет сгенерировать финальный документ отчёта. На этом этапе report.md уже должен быть готов (создан через
/lab-draft и доработан через /lab-improve, /lab-research, /lab-conclusion).

## Что делать

### Этап 1. Проверка полноты

1. Прочитай `.claude/lab/config.json`. Если не найден — сообщи: «Сначала запусти `/lab-setup`.» и остановись.
2. Проверь наличие `report.md`. Если не найден — сообщи: «Сначала создай черновик отчёта через `/lab-draft`.» и
   остановись.
3. Прочитай `report.md` и проверь:
    - Есть ли раздел дополнительного исследования (если `config.preferences.needs_research` = true) — предупредить, если
      нет (но не блокировать).
    - Есть ли итоговый вывод — предупредить, если нет (но не блокировать).
4. Спроси пользователя: продолжить генерацию или сначала доработать отчёт?

### Этап 2. Работа с изображениями

1. Проверь наличие папки `images/` в корне проекта.
2. Если папка существует и содержит файлы:
   a. **Прочитай каждый файл изображения через Read tool (vision).**
   b. **Проанализируй содержимое каждого изображения** — текст, интерфейс, данные, графики, что изображено.
   c. **Сопоставь содержимое изображений с подписями рисунков в report.md по СМЫСЛУ, а не по имени файла или дате.**
      КРИТИЧЕСКИ ВАЖНО: нельзя бездумно сопоставлять рисунки по порядку (по алфавиту имён, по дате создания).
      Нужно именно анализировать содержимое каждого изображения и находить, какой подписи в report.md оно соответствует.
      Например: если подпись «Рисунок 3. Настройка DNS», а на изображении видно окно настройки DNS-сервера — это совпадение.
   d. Создай `.claude/lab/image_map.json` — маппинг номера рисунка на файл:
      ```json
      {
        "1": "images/screenshot1.png",
        "2": "images/network_config.jpg"
      }
      ```
   e. Если автоматическое сопоставление не удалось для некоторых изображений — покажи пользователю список нераспознанных
   файлов и подписей, спроси о соответствии.
   f. **Перепроверь ещё раз**, правильно ли ты соотнёс каждое изображение с местом, куда его вставлять. Открой каждое
   изображение повторно и убедись, что оно действительно соответствует подписи.
3. Если папка `images/` пуста или не существует — предупредить (плейсхолдеры останутся в документе).

### Этап 3. Резервная копия шаблона

Если используется шаблон-пустышка (`config.template.has_template` = true):
1. Скопируй шаблон в резервную копию: `cp <template_path> <template_path>.backup`
2. Сообщи пользователю, что резервная копия создана.

Это позволяет заново запустить генерацию, восстановив шаблон из бэкапа, если результат неудачный.

### Этап 4. Генерация документа

Определи формат из `config.preferences.report_format` и имя файла из `config.preferences.output_filename` (по умолчанию
`report`).

**ВАЖНО:** report.md — это черновик. Этот этап НЕ меняет содержание report.md. Генерация итогового файла — это только
форматирование: подстановка изображений, отступы, стили, титульный лист.

**Шаблон-пустышка (почти всегда):** скорее всего пользователь уже предоставил шаблон report.docx. Путь к нему в
`config.template.example_path`. Правила работы с шаблоном:

- Вставлять текст отчёта между заготовленными секциями.
- Титульный лист — не трогать.
- Заголовки секций (Цели работы, Ход работы, и т.д.) — не трогать.
- Все подзаголовки создавать с тем же стилем, что и заголовки шаблона.

**Формат MD:**

- Скопировать report.md в `{output_filename}.md` (если имя отличается от `report`; иначе — в `output.md`, чтобы не
  перезаписать черновик).
- Заменить плейсхолдеры `[ВСТАВИТЬ РИСУНОК N ЗДЕСЬ]` на `![Рисунок N. Описание](images/файл.png)` (используя
  image_map.json).

**Формат DOCX:**

1. Проверь наличие venv: `.claude/lab/venv/bin/python --version` (или `Scripts/python.exe` на Windows).
2. Если venv есть — запусти генератор:
   ```
   .claude/lab/venv/bin/python .claude/lab/scripts/generate_docx.py \
     --config .claude/lab/config.json \
     --report report.md \
     --output {output_filename}.docx \
     --images images/ \
     --image-map .claude/lab/image_map.json
   ```
   Если есть шаблон-пустышка (`config.template.has_template` = true и `config.template.example_path` не null):
   ```
     --template <путь из config.template.example_path>
   ```
   Если без титульного листа (`config.preferences.no_title_page` = true, без шаблона):
   ```
     --no-title-page
   ```
   Возможности скрипта:
   - **Режим шаблона**: не трогает титульный лист и заголовки секций, вставляет содержимое между секциями, копирует стиль заголовков из шаблона для подзаголовков (НЕ использует Heading 1/2)
   - **Markdown-таблицы**: автоматически конвертируются в Word-таблицы (Table Grid, шрифт 14 пт по ГОСТ)
   - **Списки**: маркированные (`- item`) и нумерованные (`N) item`) — с правильными отступами
   - **Заголовки**: поддерживаются оба формата — нумерованный (`1.`, `1.1.`, `1.1.1.`) и markdown (`##`, `###`, `####`)
   - **Титульный лист**: тип работы из `config.course.lab_type`, преподаватель из `config.course.reviewer`
   - Не применяет жирный шрифт в тексте (только в заголовках)
   - Пропускает блоки кода (```) — в документ попадают только однострочные выражения
   - После каждого рисунка (подписи) вставляет пустую строку
   - Красная строка 1,5 см, выравнивание по ширине, contextualSpacing
   - Изображения масштабируются до макс. 15,5 см (не выходят за правое поле)
3. Если venv нет — сообщи, что DOCX-генерация невозможна без Python. Предложи формат MD.

**Формат PDF:**

1. Сначала сгенерируй DOCX (как описано выше).
2. Проверь наличие LibreOffice: `libreoffice --version`.
3. Если LibreOffice есть — конвертируй: `libreoffice --headless --convert-to pdf {output_filename}.docx`.
4. Если LibreOffice нет — сообщи пользователю, что PDF-конвертация невозможна. Предложи открыть DOCX и сохранить как PDF
   вручную.

### Этап 5. Подтверждение

Сообщи пользователю:

- Путь к сгенерированному файлу (report.docx / report.pdf / report.md).
- Количество вставленных изображений (если были).
- Количество оставшихся плейсхолдеров (если изображения не найдены).
- Рекомендацию проверить документ перед сдачей.
- Напомни, что если результат неудачный, шаблон можно восстановить из бэкапа (.backup) и запустить `/lab-report` заново.

## Дополнительный контекст от пользователя

$ARGUMENTS

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.