workspace: initial clean commit

This commit is contained in:
Stream
2026-04-12 21:55:33 +03:00
commit 0fc86ac3ae
220 changed files with 31657 additions and 0 deletions

148
BACKLOG_GENERAL.md Normal file
View File

@@ -0,0 +1,148 @@
# Бэклог общего развития
Задачи по развитию инфраструктуры, инструментов и возможностей системы.
Не привязаны к конкретным проектам.
---
## 🤖 Агенты
### [ ] Dev-агент (Claude Code)
- Настроить Claude Code как постоянного агента `dev` в `openclaw.json`
- Создать workspace агента с `SOUL.md`, `CLAUDE.md`, `MEMORY.md`
- Описать стек, правила работы, структуру проектов
- Протестировать связку: я (координатор) → Claude Code → результат
- Выбрать первую реальную задачу для теста
### [ ] Агент-аналитик данных
- Создать скилл `data-analyst` для анализа структурированных данных
- Поддержка: pandas, статистика, графики, выводы в Markdown
- Интеграция с данными из `workspace/data/`
- Автоматические отчёты по запросу
- Потенциально: Jupyter + LLM или Claude Code в режиме аналитика
---
## 🔧 Инфраструктура
### [ ] Умная колонка / голосовой ассистент
**Вариант А: Своя колонка (ReSpeaker / OpenVoiceOS)**
- Протестировать Tasker + AutoVoice (самый быстрый путь)
- Оценить ReSpeaker Lite (есть на Ozon, 3 варианта)
- Изучить OpenVoiceOS + интеграция через Ollama-compatible API
- Выбрать стратегию TTS: ElevenLabs / Yandex SpeechKit / OVOS встроенный
**Вариант Б: Яндекс Алиса + ElevenLabs (webhook-навык)**
- Создать webhook-навык для Алисы (HTTPS, Flask/Node.js)
- Голос ElevenLabs через загрузку MP3 в Диалоги API (до 120 сек, до 5 МБ)
- Схема: голосовой запрос → webhook → ElevenLabs API → загрузка в Диалоги → ответ с кастомным голосом
- Ограничение: webhook ≤5 сек, нужен pre-generation или кэш ID загруженных файлов
- Альтернатива: статический набор фраз с предзагруженным голосом ElevenLabs
- Голоса Алисы (бесплатно): Марина, Дмитрий, Ермил, Оксана, Захар
- Документация: https://yandex.ru/dev/dialogs/alice/doc/ru/resource-sounds-upload.html
- Потенциально: голосовой интерфейс для OpenClaw через Алису
**Общее:** потенциальный голосовой интерфейс для OpenClaw
**Статус:** Слава думает, какой вариант выбрать
### [ ] Семантический поиск и RAG по данным Telegram
**Задача:** реализовать семантический поиск + суммаризацию по 155K сообщений сноубайков
**Стартовый вариант (простой):**
- ChromaDB (Python, 10 строк кода)
- Embeddings через OpenAI или бесплатную модель (sentence-transformers)
- Sonnet для суммаризации
**Продвинутый вариант:**
- Qdrant (Docker)
- Embeddings через OpenRouter
- Sonnet/Haiku для ответов
- UI на Flask
**Гибридный (максимальная мощь):**
- Meilisearch (ключевые слова, быстро) + ChromaDB (семантика) + Sonnet (суммаризация)
- Схема: вопрос → Meilisearch (точные совпадения) → ChromaDB (смысловые) → объединить контекст → LLM ответит
**Технологии на выбор:**
- Meilisearch — полнотекстовый, typo-tolerance, без семантики
- Elasticsearch — полнотекстовый + векторный поиск (dense vectors)
- ChromaDB — векторная БД, проще всего для старта
- Qdrant — векторная БД, Docker, быстрый
- FAISS (Meta) — максимальная скорость, библиотека
**Применение:** ответы на вопросы типа «какие масла рекомендуют для Polaris 850?» — не найти сообщение, а получить агрегированный ответ на основе всех данных
**Статус:** в бэклоге, вернёмся позже
### [ ] Видеокружочки в Telegram (ElevenLabs Lip Sync)
**Задача:** отправлять кружочки с голосом + анимированная аватарка
**Аватарка:** `data/avatars/stream-avatar.jpg` (уже сохранена)
**Схема:**
- Аватарка → ElevenLabs Image to Video (4 сек, 1:1, MP4)
- Голос → ElevenLabs TTS
- Lip Sync → синхронизация губ с голосом
- MP4 → отправить как кружочек в Telegram (`asVideoNote: true`)
**Требования:** платный тариф ElevenLabs (Video generation)
**Модели:** OpenAI Sora 2 Pro, Google Veo 3.1, Kling 2.5
**Статус:** в бэклоге, проверить тариф ElevenLabs
**Задача:** отправлять кружочки с голосом + анимированный аватар
**Что нужно:**
- Сгенерировать видео (ffmpeg: круглая маска + аватар + анимация)
- Наложить аудио (голос ElevenLabs)
- Отправить через `asVideoNote: true`
**Статус:** в бэклоге
### [ ] Отправка стикеров в Telegram
**Задача:** реализовать отправку стикеров в ответ на входящие стикеры
**Проблема:** sticker cache пуст, fileId не сохраняется при получении стикеров
**Что нужно:**
- Разобраться почему `~/.openclaw/telegram/sticker-cache.json` не заполняется
- Настроить vision-обработку стикеров (для кэширования fileId)
- Реализовать отправку стикеров через `sticker-search` + `sticker` actions
- Sticker actions включены в конфиге (`channels.telegram.actions.sticker: true`)
**Статус:** в бэклоге
### [ ] Учёт токенов и стоимости задач Dev-агента
**Задача:** при каждой задаче Dev-агента фиксировать токены и стоимость
**Что отслеживать:**
- Токены: input + output
- Стоимость: по тарифу модели (Sonnet 4.6: $3/$15 за 1M токенов)
- Длительность: runtime в секундах
**Откуда данные:** stats из `sessions_spawn` completion event
**Формула:** `(input_tokens × 3 + output_tokens × 15) / 1_000_000`
**Формат в отчёте:** `Токены: XXX in / XXX out | Стоимость: $X.XX | Время: Xм`
**Реализация:** Стрим фиксирует stats при каждом завершении задачи Dev-агента
**Статус:** в бэклоге
### [ ] Residential proxy для парсинга
- Нужен для Ozon, Яндекс.Маркет, Перекрёсток
- Варианты: Bright Data, Smartproxy, ProxyLine (~500 руб/мес)
- Или туннель через домашний IP для бесплатного теста
### [ ] Покупки / корзина в магазинах
- Ozon: Statistics API (цены) + Playwright (корзина)
- Перекрёсток: Playwright (проще всего технически)
- Яндекс.Маркет: Playwright (сложнее, единый Яндекс ID)
- Требует: residential proxy + авторизация
---
## 📚 Скиллы
### [x] youtube-search — ГОТОВ
- YouTube Data API v3
- Поиск видео, метаданные
- API ключ: `YOUTUBE_API_KEY` в `.env`
### [x] yandex-search — ГОТОВ
- Yandex Search API v2 (async)
- Русскоязычный поиск, цены в магазинах
- API ключ: `YANDEX_API_KEY` в `.env` (тот же, что для SpeechKit)
### [x] voice-tts — ГОТОВ
- ElevenLabs + Yandex SpeechKit fallback
### [x] telegram-collector — ГОТОВ
- Сбор данных из Telegram-каналов
---
*Обновлён: 24 марта 2026*