# Lab Report

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

- **Type:** Skill
- **Install:** `agentstack add skill-id-andyyy-labai-lab-report`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [id-andyyy](https://agentstack.voostack.com/s/id-andyyy)
- **Installs:** 0
- **Category:** [Content & Media](https://agentstack.voostack.com/c/content-and-media)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [id-andyyy](https://github.com/id-andyyy)
- **Source:** https://github.com/id-andyyy/LabAI/tree/main/.claude/skills/lab-report

## Install

```sh
agentstack add skill-id-andyyy-labai-lab-report
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

Пользователь хочет сгенерировать финальный документ отчёта. На этом этапе 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  .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 ЗДЕСЬ]` на `` (используя
  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.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

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [id-andyyy](https://github.com/id-andyyy)
- **Source:** [id-andyyy/LabAI](https://github.com/id-andyyy/LabAI)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-id-andyyy-labai-lab-report
- Seller: https://agentstack.voostack.com/s/id-andyyy
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
