Files
wiki/MEMORY.md
2026-06-01 19:30:01 +03:00

310 lines
24 KiB
Markdown
Raw 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.
# MEMORY.md - Долгосрочная память
## О себе
- Имя: Стрим 🌊
- Стиль: дружелюбная ассистентка с юмором
- Фокус: работа с потоками информации - сбор, анализ, структурирование
## Правила форматирования
### Телеграм
- **Таблицы — через diagram-table** (PNG картинка), НЕ markdown-таблицы — они криво отображаются
- Вместо таблиц: списки с буллетами, нумерованные списки, или структурированный текст с разделителями
- Эмодзи для наглядности: ✅❌⚠️🔥💡🎯🌊
- **Голосовые сообщения:** когда Слава отправляет голосовое — отвечать голосовым (через voice-tts)
- **Схема отправки голосовых (12.05.2026):**
1. Генерировать: `send_voice.sh "текст"`
2. Отправлять CLI: `openclaw message send --channel telegram --target 126472752 --media <path> --delivery '{"asVoice": true}'` (timeout 30+)
3. В ответе писать короткий текст (НЕ NO_REPLY — рендерится как "(empty)")
4. **НЕ использовать `MEDIA:` директиву** — дублирует отправку
5. **НЕ использовать `[[audio_as_voice]]`** — тоже дублирует
- **Женский род!** Починила, проверила, нашла — не починил!
## Люди
### Слава
- Имя: Слава
- Обращение: неформальное, дружеское, с юмором
- Интересы: сбор, анализ и суммаризация информации из разных источников (Телеграм-чаты, интернет)
- Предпочитает общение на русском языке
- Первая встреча: 18 марта 2026
## Правила работы
### 🧠 Нет root → нет проблемы (урок 16.04.2026)
- Если `apt-get install` падает без прав — **deb-пакет это просто архив**
- Схема: `curl .deb``ar x``tar xf data.tar.xz` → бинарник готов
- Копировать в `~/bin/` — доступно без root
- Это быстрее и умнее, чем просить Славу перестроить контейнер или менять конфигурацию
### Онтология (18.04.2026)
- Онтология — источник правды для проектов и задач
- Для проектов/задач обновлять `memory/ontology/graph.jsonl` и `memory/ontology/RULES.md`
- При работе с `tasks/` сначала сверяться со структурой, потом править онтологию и документы
- Новые/спорные элементы `tasks/` разбирать по одному и не удалять без подтверждения Славы
## Правила работы
### ⛔ Перед запуском любого воркера FR24 (25.04.2026)
Обязательная проверка ПЕРЕД запуском `POST /run` или любым ручным запуском:
```bash
# Проверить что в контейнере — правильная версия кода
docker exec fr24-tracks-fr24 grep "flight-summary" /app/fr24_worker.py
# Должно быть: /api/flight-summary/full (НЕ light!)
```
Если `light` — задеплоить правильную версию из `tasks/flightradar24/ingest/tracks_fr24/fr24_worker.py` перед запуском.
Если `full` — можно запускать.
Аналогично для любого другого воркера: сначала `grep` ключевой строки, потом запуск.
### 🏠 Home Assistant — только с подтверждения
- **Любое изменение в HA** (конфиги, автоматизации, настройки, перезапуски) — только после явного подтверждения Славы
- Читать состояния, логи, статусы — можно без подтверждения
- Отправка сообщений через telegram_bot — можно без подтверждения (тесты)
- Всё остальное: объяснить что хочу сделать → получить ОК → действовать
### ⛔ Разработка — только через Dev-агента
- **Стрим НЕ пишет код самостоятельно.** Никогда. Даже если задача кажется мелкой.
- Роль Стрим: обсуждение, постановка задачи, ТЗ, проверка результата, документация
- Роль Dev: вся реализация (новые файлы, правки кода, скрипты)
- Когда задача дошла до «приступай» → передать ТЗ Dev-агенту через `sessions_spawn`
- **ТЗ по шаблону** `workspace/templates/DEV_TASK_TEMPLATE.md` (средние/крупные задачи) или inline (быстрые)
- **Процесс:** `workspace/templates/DEV_WORKFLOW.md`
- Обязательно в ТЗ: точные файлы, точный код, команды проверки, ограничения/грабли
- Нарушение зафиксировано: 27.03.2026 — слой плотности noisemap реализован Стримом напрямую
### Документация
- **Обязательно**: при любом изменении функционала немедленно обновлять документацию
- Документация всегда должна быть в актуальном состоянии - не "потом", а сразу после изменения
- Порядок работы: изменение → тест → документация → упаковка/коммит
### 📝 ТЗ для Dev-агента — шаблон (12.05.2026)
- **Шаблон:** `workspace/templates/DEV_TASK_TEMPLATE.md`
- **Процесс:** `workspace/templates/DEV_WORKFLOW.md`
- **Пример:** `tasks/enduro-trails/DEV_TASK_DARK_STYLE.md`
- Перед передачей задачи Dev-агенту — заполнить шаблон (средние/крупные задачи) или inline task (быстрые)
- Обязательно: точные файлы, точный код, команды проверки, ограничения/грабли
- Результат: Dev не задаёт вопросов, работает автономно
### Структура задач и проектов (18.04.2026)
- Стандарт `tasks/<project-slug>/` закреплён как основа для проектов OpenClaw
- `Task` без `Project` не существует
- У `Project` должны быть `folder` и `doc_path`
- У `Task` должны быть `project`, `folder` и `doc_path`
- Машинные id живут только в онтологии, в папках и человекочитаемых названиях используются slug-и
- `snowbike-kb` оформлен как задача внутри `snowbike-rag`, а не как отдельный проект
- В спорных папках `tasks/` сначала анализ, потом предложение Славе, и только после ОК — удаление или реформа
### 🔍 OpenClaw документация — порядок поиска (14.04.2026)
При **любых** вопросах про настройку/работу OpenClaw — строго соблюдать последовательность:
1. **Локальные доки** `/app/docs` — поиск по файлам, grep по релевантным ключевым словам
2. **docs.openclaw.ai** — если локально не найдено → `web_search site:docs.openclaw.ai <тема>`
3. **web_fetch** конкретной страницы с docs.openclaw.ai для деталей
4. **GitHub** `https://github.com/openclaw/openclaw` — если доки не покрывают вопрос
НЕ прыгать сразу в веб — локальные доки первыми. Это быстрее и всегда доступны.
### Управление ключами и секретами
- Ключи в `openclaw.json` (botToken, gateway.auth.token, tools.web.search.apiKey) — НЕ ТРОГАТЬ
- **Все остальные секреты** — только в `~/.openclaw/.env`
- Никогда не дублировать ключи в SKILL.md, скриптах или других файлах
### Структура workspace
- `tasks/{project}/` — каждый проект в своей папке, там же `PROJECT.md` с деталями
- `skills/` — готовые AgentSkills с полной документацией
- `data/` — выходные данные (`data/{skill-name}/`)
- `memory/` — дневные записи (`YYYY-MM-DD.md`)
- `temp/` — временные файлы, удаляются после использования
### Конфигурация моделей
- Текстовые задачи → `agents.defaults.model.primary`
- Анализ изображений → `agents.defaults.imageModel`
- После изменения конфига — перезапустить гейтвей
### Memory backend: QMD (настроен 10.04.2026)
- Конфиг: корневой ключ `memory` в openclaw.json (НЕ под `agents.defaults`!)
- QMD бинарник: `/home/node/.local/bin/qmd` — явно прописан в `memory.qmd.command`
- Коллекции main: memory-root, sessions, tasks, memory-dir, skills
- Проблема с index.yml: QMD создаёт `memory-root-main` с `**/*.md`, OpenClaw ищет `memory-alt-main`
- Фикс: вручную добавить в `~/.openclaw/agents/main/qmd/xdg-config/qmd/index.yml` запись `memory-alt-main`
- После фикса: `rm ~/.openclaw/agents/main/qmd/xdg-cache/qmd/index.sqlite* && openclaw memory index --force`
- Embed на CPU медленный (~30 мин на ~400 чанков) — Vector: unavailable пока идёт, потом auto-ready
- Sessions индексируются: транскрипты разговоров searchable!
### Memory Wiki (настроен 10.04.2026)
- wiki_status/search/get/apply/lint — добавлены в allowed tools main агента
- `includeCompiledDigestPrompt: true` — wiki digest в промптах
- Bridge mode НЕ работает (jiti-изоляция плагинов в 2026.4.9) — known limitation
- `openclaw wiki bridge import` всегда 0 артефактов — не баг конфига
- Workaround: ручной ingest (`openclaw wiki ingest <file>`) или unsafe-local режим
- Wiki пуста (0 entities/concepts) — нужно наполнять через `wiki_apply`
- Дневник по настройке: `memory/2026-04-10.md`
#### СКИЛЛЫ — читать ПЕРЕД любым действием (12.04.2026)
- **ВСЕГДА** открывать соответствующий скилл перед работой с новой задачей
- Не изобретать велосипед — инструкции в скилле уже есть
- Скилл открывается ДО начала действий, а не после того как застряла
- Исключение: диагностика когда непонятно куда смотреть — но потом сверяться со скиллом
- Факт нарушения: 12.04.2026 — HA audit делала вручную, скилл не открыла → потеряла время на костыли
## Проекты
## Multi-Agent Orchestrator (enduro-trails)
- **Документация:** `tasks/multi-agent/ORCHESTRATOR_DOCS.md`
- **Расхождения с proposal:** `tasks/multi-agent/PROPOSAL_VS_REALITY.md`
- **Host:** mva154 (82.22.50.71), container `orchestrator`, port 8500
- **Pipeline:** analyst → architect → developer → reviewer → tester → deployer → done
- **Deployer добавлен 01.06.2026:** merge PR → tag → deploy → healthcheck → smoke → rollback
- **Единственный ручной шаг:** `:approved:` от Славы после analyst'а
- **Фиксы 31.05.2026:** _monitor_agent PIPE streaming, check_reviewer_verdict, _ensure_pr, retry logic
- **Фикс 01.06.2026:** deployer как агент (убран хардкод _auto_merge_pr)
- **Фиксы 01.06.2026 (продолжение):**
- Analyst prompt: добавлена явная инструкция Write tool (артефакты на диск, не в stdout)
- Analyst model: возвращён на Sonnet (был Opus — расходовал лимиты Max 5x)
- Architect/Reviewer: Opus (claude-opus-4-7) — глубина важнее скорости
- Startup timeout 120s: если CLI не стартует → kill + Telegram уведомление
- **Plane comment webhook:** `handle_comment` теперь читает поле `issue` (Plane шлёт именно его, не `work_item_id`/`issue_id`) + `comment_stripped` вместо `comment_html`
- **ET-008 GPS-треки:** pipeline завершён (analysis→architecture→development→review→testing→deploy→done), v0.0.1 в main
- Pending: `docker compose up -d gps-collector` на хосте для активации `/api/gps-tracks/*`
## Claude CLI Proxy (настроен 14.05.2026)
- **Документация:** `tasks/claude-cli-proxy/PROJECT.md`
- **Корневая проблема (14.05):** HTTP_PROXY/HTTPS_PROXY перехватывали запросы к cli-proxy через Xray
- **Фикс:** `NO_PROXY=claude-cli-proxy,localhost,127.0.0.1,172.19.0.0/24` в docker-compose.yml
- **Важно:** `reasoning: true` нельзя ставить в моделях cli-proxy (OpenClaw парсер не извлекает content)
- **Важно:** SIGHUP не перечитывает providers — нужен полный рестарт gateway
- **Рабочий конфиг:** `api: openai-completions`, `baseUrl: http://claude-cli-proxy:8317/v1`, `apiKey: dummy`
- Dev-агент на `claude-cli-proxy/claude-sonnet-4-6`
## Proxy VM — vpn-srv (прокси-сервер)
- **Документация:** `tasks/proxy-vm/PROJECT.md`
- **vpn-srv:** 192.168.2.200, FRP туннель через 185.130.212.192:7000, SSH port 3322
- **Доступ:** `ssh -i ha_ssh_key -o Port=3322 vpn@185.130.212.192`, sudo: `echo meNt85doC | sudo -S`
- **VLESS:** 43.245.226.231:53903, yahoo.com SNI, **flow: xtls-rprx-vision** (обязателен!)
- **Xray порты:** 12345 (tproxy), 1080 (SOCKS5), 8888 (HTTP proxy)
### Задача #1: Homenet-VPN Wi-Fi (ГОТОВО ✅ 12.04.2026)
- **Старт:** 05.04.2026
- **Цель:** 192.168.4.0/24 → весь TCP через VLESS (прозрачный прокси)
- **Схема:** Device → iptables nat REDIRECT:12345 → Xray dokodemo-door (tproxy=redirect) → VLESS
- **Wi-Fi:** 192.168.4.0/24, шлюз 192.168.4.1 (ens19, netplan)
- **DNS:** UDP/53 → DNAT → 1.1.1.1 (напрямую)
- **UDP/443 (QUIC):** RETURN — xtls-rprx-vision не поддерживает UDP
- **MSS:** clamp 1280 — без этого Telegram/YouTube не работали (splice broken pipe)
- **Персистентность:** rules.v4 ✅, sysctl 99-tproxy.conf ✅, netfilter-persistent ✅
### Задача #2: HA Telegram через VLESS (готово ✅)
- **Дата:** 10.04.2026
- **Схема:** HA telegram_bot → SOCKS5 (192.168.2.200:1080) → VLESS → api.telegram.org
- **Только Telegram** через прокси, остальной трафик HA — напрямую
- **HA:** `ha.homenet542.keenetic.pro` (HAOS 17.1, IP 192.168.2.139)
- **Бот:** `@ha542_bot` (8251509944), chat_id Славы: 126472752
- **Entity:** `notify.telegram_bot_8251509944_126472752`
- **Сервис:** `notify.send_message``entity_id: notify.telegram_bot_8251509944_126472752`
- **Config entry:** `01KNVZDDM3ZNJS1WX309K7E1EN` (UI-интеграция с proxy_url)
- **SSH к HA через vpn-srv:** скопировать ha_ssh_key → `/tmp/ha_key`, потом `ssh -i /tmp/ha_key root@192.168.2.139`
### Интернет-заказы (vprok.ru)
- **Старт:** 31 марта 2026
- **Детали:** `tasks/internet-orders/PROJECT.md`
- **Статус:** relay-сервер запущен (185.130.212.192:5000), Windows-клиент готов, ожидает первого теста
### Карта шумового загрязнения FR24
- **Старт:** 22 марта 2026
- **Детали:** `tasks/flightradar24/PROJECT.md`
- **Статус:** прототип v0.3 работает, FR24 кредиты закончились, следующий шаг — RTL-SDR
### Telegram Collector
- **Старт:** 20 марта 2026
- **Детали:** `tasks/telegram-collector/PROJECT.md`
- **Статус:** активен, ежедневный инкремент, @snowbikerussia загружен (155K сообщений)
### Голосовые сообщения / Видеокружочки
- **Скилл:** `~/.openclaw/skills/voice-tts/SKILL.md` (ElevenLabs + Yandex SpeechKit fallback)
- **Видеокружочки:** `tasks/video-notes/TZ.md`, pipeline ElevenLabs → fal.ai → VEED → Telegram
## Агенты
### Dev — как правильно запускать
**Dev** — senior разработчик, workspace: `~/.openclaw/workspace-dev`
#### ⚠️ Обязательные параметры sessions_spawn:
- `runtime`: `"subagent"` (ACP не настроен — всегда subagent)
- `model`: `"nekocode/gpt-5.4"` (если Слава не указал другую)
- `cwd`: `"/home/node/.openclaw/workspace-dev"`**критично!** Без этого агент не находит свой workspace и завершается молча с 0 токенов
- `label`: короткое имя задачи (для трекинга, например `"dev-snowbike-rag-recovery"`)
- `mode`: `"run"` (одноразовая задача) или `"session"` (диалог)
#### Пример вызова:
```
sessions_spawn(
task="Прочитай ТЗ из /home/node/.openclaw/workspace/tasks/...\n\nСделай X, Y, Z.\n\nВерни отчёт.",
runtime="subagent",
model="nekocode/gpt-5.4",
cwd="/home/node/.openclaw/workspace-dev",
label="dev-taskname"
)
```
#### Что включать в task:
1. Ссылка на ТЗ-файл (абсолютный путь) или полный текст задачи
2. Путь к проекту (где лежат исходники)
3. Ограничения (например: "полную переиндексацию не запускать")
4. Формат ожидаемого отчёта
#### Модели:
- **Основная:** `nekocode/gpt-5.4` — если Слава не указал другую
- **Модель по умолчанию:** `anthropic/claude-sonnet-4-6` (Anthropic) — с 2026-04-11
- **Fallback при rate limit:** `openrouter/minimax/minimax-m2.7` — проверено, работает для dev-задач (2026-04-07)
- Rate limit gpt-5.4 проявляется как: агент стартует нормально, но отвечает `{"code":"rate_limited",...}`
- Если rate limit — не ждать, сразу переключаться на MiniMax или Sonnet 4.6
#### Частые ошибки:
- **Не указывать `cwd`** → агент завершается за 5 сек с 0 токенов (молчаливый фейл)
- **`streamTo: "parent"`** → работает только с `runtime=acp`, не с subagent
- **runtime=acp** → не настроен, всегда падает с ошибкой
#### Dev vs Legal:
- **Dev** (id: `dev`) — разработка, дебаг, скрипты
- **Юрист** (id: `legal`) — юридические вопросы по РФ, workspace: `~/.openclaw/workspace-legal`
- **Федя (Fedia)** — агент, workspace: `~/.openclaw/workspace-fedia`
## Скиллы
### Общие (`~/.openclaw/skills/`) — доступны всем агентам
- **voice-tts** — голосовые сообщения (ElevenLabs + Yandex SpeechKit)
- **diagram-png** — генерация PNG-диаграмм из JSON
- **diagram-table** — таблицы в PNG из JSON (Pillow, dark/light). Скрипты: `generate_table.py` (stdin→PNG), `send_table.py` (PNG→Telegram). Требует `TELEGRAM_BOT_TOKEN` и `TELEGRAM_CHAT_ID` в `.env`
### Мои личные (`workspace/skills/`) — только для Стрим
- **ontology** — граф знаний (сущности, связи, запросы)
- **telegram-collector** — сбор данных из Telegram-каналов
- **youtube-search** — YouTube Data API v3. Ключ: `YOUTUBE_API_KEY`
- **yandex-search** — Yandex Search API v2. Ключ: `YANDEX_API_KEY`
- **ontology** — граф знаний (сущности, связи, запросы)
- **Онтология — общая база знаний**: `memory/ontology/`
- `graph.jsonl` — сущности и связи
- `schema.yaml` — схема типов
- `RULES.md` — правила ведения (обязательны)
- **Стрим — единственный writer**: все изменения — только через Стрим
- ⚠️ **Правило (10.04.2026):** При работе с проектами всегда автоматически обновлять онтологию (create/update) и запускать `openclaw wiki ingest` для документации — без напоминания Славы
- **Другие агенты (Dev, Legal, Feda) — читатели**: запрашивают через `sessions_send`
- **Изменения — только с подтверждения Славы**
- **При работе с проектами/задачами — всегда использовать онтологию** (правила: `memory/ontology/RULES.md`)
- Запуск из workspace: `python3 skills/ontology/scripts/ontology.py <command>`
- Storage: `memory/ontology/graph.jsonl` + `memory/ontology/schema.yaml`
- PyYAML не установлен — validate暂时 не работает
## Интеграции
- **Flightradar24 API** — тариф Explorer, 60K кредитов/мес (до 31.05.2026 промо 120K)
- FR24 API key (обновлён 24.04.2026): `019dbf18-3575-71d0-84eb-eb44606fbb63|QU3h8jqLPFyuo9qbQbPu9uoXVK42bTeclMuyRJ5Qb86ba0ea`
- **GigaChat API** — через gpt2giga прокси
- gpt2giga: `185.130.212.192:8443` (baseUrl в openclaw.json)
- Xray VLESS outbound: `43.245.226.231:15281` (Франкфурт), UUID b8d92081-..., Reality+chrome, SNI google.com
- Xray конфиг: `/home/slin/openclaw/xray-config.json`
- OpenClaw получает `HTTPS_PROXY=socks5://xray:10808` через docker-compose environment
- Цепочка: OpenClaw (mva154) → Xray VLESS → ??? → gpt2giga → GigaChat API
- Примечание: прямое подключение из контейнера к 185.130.212.192:8443 недоступно (timeout), трафик идёт через host-сеть
- ⚠️ **TODO:** Слава проверит схему — точно ли Xray участвует в цепочке к gpt2giga или это отдельный маршрут
- Локальный gpt2giga НЕ используется, удалён (08.04.2026)