172 lines
4.7 KiB
Markdown
172 lines
4.7 KiB
Markdown
---
|
|
pageType: source
|
|
id: source.skill
|
|
title: SKILL
|
|
sourceType: local-file
|
|
sourcePath: /home/node/.openclaw/skills/diagram-table/SKILL.md
|
|
ingestedAt: 2026-04-10T13:17:08.264Z
|
|
updatedAt: 2026-04-10T13:17:08.264Z
|
|
status: active
|
|
---
|
|
|
|
# SKILL
|
|
|
|
## Source
|
|
- Type: `local-file`
|
|
- Path: `/home/node/.openclaw/skills/diagram-table/SKILL.md`
|
|
- Bytes: 3890
|
|
- Updated: 2026-04-10T13:17:08.264Z
|
|
|
|
## Content
|
|
````text
|
|
# 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>`
|
|
|
|
````
|
|
|
|
## Notes
|
|
<!-- openclaw:human:start -->
|
|
<!-- openclaw:human:end -->
|
|
|
|
## Related
|
|
<!-- openclaw:wiki:related:start -->
|
|
### Referenced By
|
|
|
|
- [Skill: ontology](concepts/skill-ontology.md)
|
|
- [Skill: telegram-collector](concepts/skill-telegram-collector.md)
|
|
- [Skill: voice-tts](concepts/skill-voice-tts.md)
|
|
- [Skills: diagram-png & diagram-table](concepts/skill-diagram.md)
|
|
- [Skills: youtube-search & yandex-search](concepts/skill-search.md)
|
|
<!-- openclaw:wiki:related:end -->
|