Files
wiki/skills/diagram-table/SKILL.md
2026-04-12 21:55:33 +03:00

3.8 KiB

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):

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

Параметры:

  • headers — список заголовков (обязательно)
  • rows — список строк (обязательно)
  • title — заголовок таблицы (опционально)
  • width — ширина картинки (по умолчанию 800)
  • themedark (по умолчанию) или light

Выход: PNG файл

Цвета (dark theme):

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

Цвета (light theme):

  • Фон: #ffffff
  • Заголовок: #238636
  • Чередование строк: #f6f8fa / #ffffff
  • Текст: #24292f
  • Границы: #d0d7de

send_table.py

Использование:

./send_table.py "Бэклог" '{"headers":[...], "rows":[...]}' [BOT_TOKEN] [CHAT_ID]

Или через stdin:

echo '{"headers":[...], "rows":[...]}' | ./send_table.py "Заголовок"

Параметры:

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

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

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>