Initial wiki push - 2026-04-10
This commit is contained in:
171
sources/skill.md
Normal file
171
sources/skill.md
Normal file
@@ -0,0 +1,171 @@
|
||||
---
|
||||
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 -->
|
||||
Reference in New Issue
Block a user