# SKILL.md — diagram-table

## Назначение

Генерация таблиц в виде PNG-картинок для отправки в Telegram. Таблицы в текстовом формате плохо читаются в Telegram (моноширинный шрифт, смещения), поэтому конвертируем их в красивую картинку.

---

## Архитектура

```
Вход: JSON/текстовая таблица
      ↓
Генерация PNG (Pillow)
      ↓
Отправка в Telegram (или сохранение в файл)
```

---

## Файлы

- `SKILL.md` — этот файл
- `scripts/generate_table.py` — генерация PNG из таблицы
- `scripts/send_table.py` — отправка таблицы в Telegram

---

## generate_table.py

**Вход (JSON):**
```json
{
  "headers": ["Проект", "Статус", "Исполнитель"],
  "rows": [
    ["Snowbike RAG", "active", "Dev-агент"],
    ["Noisemap FR24", "paused", "Слава"]
  ],
  "title": "Бэклог проектов",
  "width": 800,
  "theme": "dark"
}
```

**Параметры:**
- `headers` — список заголовков (обязательно)
- `rows` — список строк (обязательно)
- `title` — заголовок таблицы (опционально)
- `width` — ширина картинки (по умолчанию 800)
- `theme` — `dark` (по умолчанию) или `light`

**Выход:** PNG файл

**Цвета (dark theme):**
- Фон: `#0d1117`
- Заголовок: `#1a3a2a` (зелёный)
- Чередование строк: `#161b22` / `#0d1117`
- Текст: `#e6edf3`
- Границы: `#30363d`

**Цвета (light theme):**
- Фон: `#ffffff`
- Заголовок: `#238636`
- Чередование строк: `#f6f8fa` / `#ffffff`
- Текст: `#24292f`
- Границы: `#d0d7de`

---

## send_table.py

**Использование:**
```bash
./send_table.py "Бэклог" '{"headers":[...], "rows":[...]}' [BOT_TOKEN] [CHAT_ID]
```

**Или через stdin:**
```bash
echo '{"headers":[...], "rows":[...]}' | ./send_table.py "Заголовок"
```

**Параметры:**
- Аргумент 1: заголовок таблицы (или JSON, если 2 аргумента)
- Аргумент 2: JSON (если 1й аргумент — заголовок)
- BOT_TOKEN: из ~/.openclaw/.env если не передан
- CHAT_ID: из ~/.openclaw/.env если не передан

---

## Пример использования в агенте

```python
import subprocess
import json

table_data = {
    "headers": ["Проект", "Статус", "Исполнитель"],
    "rows": [
        ["Snowbike RAG", "active", "Dev-агент"],
        ["Noisemap FR24", "paused", "Слава"]
    ],
    "title": "Бэклог проектов"
}

result = subprocess.run(
    ["python3", "skills/diagram-table/scripts/generate_table.py"],
    input=json.dumps(table_data),
    capture_output=True
)
# result.stdout — путь к PNG файлу
```

---

## Шрифты

- Заголовок: DejaVu Sans Bold, 16px
- Ячейки: DejaVu Sans, 14px
- Путь к шрифтам: системные `/usr/share/fonts/truetype/dejavu/` или встроенный fallback

---

##Marginals

- Минимум 1 колонка, 1 строка
- Максимум 20 колонок, 100 строк
- Если строк > 20 — разбивает на несколько страниц внутри одного PNG (часть N/M)
- Высота картинки — автоматическая (по количеству строк)

## Ограничения send_table.py

- BOT_TOKEN и CHAT_ID должны быть в `~/.openclaw/.env`
- Формат: `TELEGRAM_BOT_TOKEN=<token>`, `TELEGRAM_CHAT_ID=<id>`
