Files
Агальцов Антон 690abf379c daily update 2026-03-29
2026-03-30 00:02:10 +03:00

273 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Проект: docs.a2v.space — Персональная документация
## Техническое задание
### Каркас
- Hugo static site generator (уже установлен)
- Кастомная тема на Bootstrap 5 (не использовать готовые темы, создать свою)
- Bootstrap 5 через CDN
- Тёплая цветовая палитра: бежевый (#f5f0e8), терракота (#c4623a), тёплый серый (#6b6560), тёмно-коричневый (#3d3530), акцент — золотистый (#d4a853)
- Шрифт: системный sans-serif, читаемый, не мелкий
### Навигация
- **Горизонтальное меню в шапке** — 5 разделов: Дневник, База знаний, Планы, Инструкции, Креды
- **Боковое меню слева** — фильтры/подразделы для каждого раздела (теги, категории, статусы)
- **Мобильная адаптация** — hamburger menu, боковое меню скрывается, контент на всю ширину
### Разделы
#### 1. Дневник (Diary) — `/diary/`
- Формат блога, постинг по датам
- Каждый пост = один день
- Внутри поста: записи с указанием времени обсуждения и кратким описанием
- Timeline-вид на странице списка (дата → превью)
- Front matter: date, title, tags
#### 2. База знаний (Knowledge Base) — `/kb/`
- Сквозной список статей (одностраничных)
- Теги для категоризации
- Боковое меню: список тегов как фильтр
- Поиск по заголовкам и содержимому (client-side, fuse.js)
#### 3. Планы (Plans) — `/plans/`
- Список планов-карточек
- Статусы: 🟡 Запланировано, 🟠 В процессе, ✅ Сделано, ❌ Отменено
- **Ранжирование**: завершённые (✅, ❌) в конце по дате завершения, предстоящие (🟡, 🟠) — ближайшая дата первой
- На карточке: что планируется, когда планируем, статус, когда и при каких обстоятельствах запланировали (с цитатой автора)
- Front matter: title, date, plan_date (когда планируется), status (planned/in_progress/done/cancelled), done_date, context_quote
#### 4. Инструкции (Guides) — `/guides/`
- Аналогичен Базе знаний
- Пошаговые инструкции
- Теги, боковое меню с фильтрами
#### 5. Креды (Credentials) — `/creds/`
- Одни креды = одна запись
- **Шифрование содержимого**: пароли хранятся зашифрованными (AES через Web Crypto API)
- При загрузке страницы — кнопка "Расшифровать", пользователь вводит мастер-пароль
- Без мастер-пароля видны только названия/описания, значения скрыты
- Front matter: title, description, service
- Тело: зашифрованный JSON с полями (user, password, host, port, notes и т.д.)
### Шифрование кредов (ВАЖНО!)
Реализовать через JavaScript Web Crypto API:
1. При создании записи — JS-скрипт шифрует JSON с кредами мастер-паролем → сохраняет encrypted payload в Markdown
2. При просмотре — кнопка "Расшифровать" → prompt для мастер-пароля → AES-GCM дешифровка → показать поля
3. Использовать PBKDF2 для деривации ключа из пароля, AES-256-GCM для шифрования
4.Salt и IV хранить вместе с payload (base64 encoded)
### Поиск
- Client-side поиск через Fuse.js (CDN)
- Индекс строится при сборке Hugo (JSON index)
- Поле поиска в шапке
### Адаптивность
- Mobile-first
- На мобильных: hamburger menu, без боковой панели, контент на полную ширину
- На планшетах: боковая панель сворачиваемая
- На десктопе: полная навигация + боковая панель
---
## Контент для наполнения
### База знаний — API Eversolo
Создать статью `/content/kb/eversolo-api.md`:
Eversolo T8 — музыкальный стример, IP: 192.168.0.156, порт API: 9529, без авторизации.
#### Воспроизведение
| Действие | URL |
|----------|-----|
| Play/Pause | `/ZidooMusicControl/v2/playOrPause` |
| Следующий трек | `/ZidooMusicControl/v2/playNext` |
| Предыдущий трек | `/ZidooMusicControl/v2/playLast` |
| Перемотка (ms) | `/ZidooMusicControl/v2/seekTo?time=<ms>` |
| Воспроизвести по ID | `/ZidooMusicControl/v2/playMusic?type=4&id=<id>` |
| Состояние | `/ZidooMusicControl/v2/getState` |
#### Громкость
| Действие | URL |
|----------|-----|
| Громкость вверх | `/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeUp` |
| Громкость вниз | `/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeDown` |
| Точная громкость | `/ZidooMusicControl/v2/setDevicesVolume?volume=<0-200>` |
| Mute | `/ZidooMusicControl/v2/setMuteVolume?isMute=1` |
| Unmute | `/ZidooMusicControl/v2/setMuteVolume?isMute=0` |
#### Входы/Выходы
| Действие | URL |
|----------|-----|
| Получить список | `/ZidooMusicControl/v2/getInputAndOutputList` |
| Установить вход | `/ZidooMusicControl/v2/setInputList?tag=<tag>&index=<n>` |
| Установить выход | `/ZidooMusicControl/v2/setOutInputList?tag=<tag>&index=<n>` |
| Теги выхода: RCA, XLRRCA, XLR, HDMI, SPDIF, USB |
#### Дисплей
| Действие | URL |
|----------|-----|
| Яркость экрана (get) | `/SystemSettings/displaySettings/getScreenBrightness` |
| Яркость экрана (set) | `/SystemSettings/displaySettings/setScreenBrightness?index=<0-115>` |
| Яркость ручки (get) | `/SystemSettings/displaySettings/getKnobBrightness` |
| Яркость ручки (set) | `/SystemSettings/displaySettings/setKnobBrightness?index=<0-255>` |
| VU-режим (get) | `/SystemSettings/displaySettings/getVUModeList` |
| VU-режим (set) | `/SystemSettings/displaySettings/setVUMode?index=<n>` |
| Спектр (get) | `/SystemSettings/displaySettings/getSpPlayModeList` |
| Спектр (set) | `/SystemSettings/displaySettings/setSpPlayModeList?index=<n>` |
| Переключить VU/Спектр | `/ZidooMusicControl/v2/changVUDisplay?openType=<0|1>` |
#### Питание
| Действие | URL |
|----------|-----|
| Параметры питания | `/ZidooMusicControl/v2/getPowerOption` |
| Перезагрузка | `/ZidooMusicControl/v2/setPowerOption?tag=reboot` |
| Выключение | `/ZidooMusicControl/v2/setPowerOption?tag=poweroff` |
| Переключить экран | `/ZidooMusicControl/v2/setPowerOption?tag=screen` |
| Включить экран | `/ZidooControlCenter/RemoteControl/sendkey?key=Key.Screen.ON` |
| Выключить экран | `/ZidooControlCenter/RemoteControl/sendkey?key=Key.Screen.OFF` |
#### Поиск
| Поиск | URL |
|-------|-----|
| По трекам | `/ZidooMusicControl/v2/searchMusicV2?key=<text>&start=0&count=100` |
| По артистам | `/ZidooMusicControl/v2/searchArtistV2?key=<text>&start=0&count=100` |
| По альбомам | `/ZidooMusicControl/v2/searchAlbumV2?key=<text>&start=0&count=100` |
#### Обложки и устройство
| Действие | URL |
|----------|-----|
| Обложка по ID | `/ZidooMusicControl/v2/getImage?id=<song_id>&target=16` |
| Модель устройства | `/ControlCenter/getModel` |
Источники:
- Форум Zidoo: https://forum.zidoo.tv/index.php?threads/some-api.96983/
- HA интеграция: https://github.com/hchris1/Eversolo/blob/main/custom_components/eversolo/api.py
---
### Инструкции
#### Инструкция: Подключение claw.a2v.space (OpenClaw)
**Архитектура:** Mac Studio (192.168.0.37:18789) → autossh SSH-туннель → VPS 95.163.232.9:8080 → nginx HTTPS → https://claw.a2v.space
**Шаги:**
1. DNS: A-запись claw.a2v.space → 95.163.232.9 (ns1/ns2.hosting.reg.ru)
2. Mac Studio: OpenClaw запущен на порту 18789, конфиг ~/.openclaw/openclaw.json
3. SSH-туннель: launchd plist `~/Library/LaunchAgents/com.openclaw.sshtunnel.plist` с `-R 8080:localhost:18789`
4. VPS nginx конфиг:
- listen 80 → redirect to https
- listen 443 ssl, cert `/etc/letsencrypt/live/claw.a2v.space/`
- proxy_pass http://127.0.0.1:8080
- proxy_set_header Host $host, X-Real-IP, X-Forwarded-For, X-Forwarded-Proto
5. SSL: certbot certonly --nginx -d claw.a2v.space
6. OpenClaw config: allowedOrigins ["https://claw.a2v.space"], trustedProxies
#### Инструкция: Подключение code.a2v.space (OpenCode)
**Порт:** 4096, pm2 процесс "opencode"
**SSH-туннель:** `-R 8081:localhost:4096`
**nginx:** proxy_pass http://127.0.0.1:8081
**SSL:** /etc/letsencrypt/live/code.a2v.space/
#### Инструкция: Подключение sand.a2v.space (Leadera Project)
**Порты:** Frontend 4200 (Angular, pm2 leadera-fe), Backend 8080 (Go, pm2 leadera-api)
**SSH-туннель:** `-R 8082:localhost:4200 -R 8083:localhost:8080`
**nginx:** location / → proxy_pass :8082, location /api → proxy_pass :8083
**SSL:** /etc/letsencrypt/live/sand.a2v.space/
**БД:** PostgreSQL 16 в Docker (Colima), container app-leadera-db
#### Инструкция: Настройка VPS как реверс-прокси
Общая схема: Mac Studio (локальная сеть) → autossh (SSH-туннели) → VPS 95.163.232.9 (Debian) → nginx (HTTPS reverse proxy) → интернет
**Что нужно на VPS:**
- nginx + certbot (Let's Encrypt)
- SSH-доступ с ключами с Mac Studio
- Для каждого домена: server block с SSL, proxy_pass на localhost-порт туннеля
**Что нужно на Mac Studio:**
- autossh через launchd (com.openclaw.sshtunnel.plist)
- Один plist с несколькими -R флагами для всех сервисов
---
### Креды (зашифровать!)
#### VPS reg.ru
- **Сервис:** VPS хостинг (реверс-прокси)
- **IP:** 95.163.232.9
- **User:** root
- **Auth:** SSH ключ
#### VPN VPS
- **Сервис:** VPN сервер
- **IP:** 185.234.64.52
- **User:** root
- **Password:** lO6kC9gY7r
- **VPN:** Amnezia (xray порт 443, AWG порт 46002)
#### Mac Studio — leadera-api БД (локальная)
- **Сервис:** PostgreSQL (Docker)
- **Host:** localhost:5432
- **User:** leadera
- **Password:** popoloka16
- **Database:** leadera
#### Mac Studio — leadera-api БД (docker-compose)
- **Сервис:** PostgreSQL (docker-compose)
- **Host:** localhost:5432
- **User:** postgres
- **Password:** password
- **Database:** it_landscape
---
### Планы
#### Настроить интеграцию Ollama с OpenClaw
- **Статус:** 🟡 Запланировано
- **Дата:** TBD
- **Контекст:** Добавлен qwen3.5:9b в openclaw.json, но модель не появилась в openclaw models list. Отложено по решению Антона.
#### Реализовать управление Eversolo из OpenClaw
- **Статус:** 🟡 Запланировано
- **Дата:** TBD
- **Контекст:** API изучен, записан в TOOLS.md. Проблема: нет доступа к LAN из sandbox OpenClaw.
---
### Дневник — сегодня (29.03.2026)
- 20:03 — Настроили Angular + Go проекты (leadera) через pm2, удалили proxy.conf, подняли PostgreSQL в Docker
- 20:31 — Изучили API Eversolo T8 — полный список REST-эндпоинтов для управления музыкой
- 20:49 — Обсудили важность записи контекста в файлы для сохранения памяти между сессиями
- 21:13 — Начали проект docs.a2v.space — персональная документация на Hugo
---
## Структура Hugo
```
content/
diary/
2026-03-29.md
kb/
eversolo-api.md
plans/
ollama-openclaw.md
eversolo-control.md
guides/
claw-a2v-space.md
code-a2v-space.md
sand-a2v-space.md
vps-reverse-proxy.md
creds/
vps-reg-ru.md
vpn-vps.md
leadera-db-local.md
leadera-db-docker.md
```