3.8 KiB
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)theme—dark(по умолчанию) или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>