[2026-09-26] eagle: personal/plans/balda-mm-phase4-agents.md personal/plans/tagwriter-container.md personal/projects/personal-os/obsidian-mcp-setup.md personal/tech/balda-executor-mcp.md personal/tech/obsidian-mcp-ecosystem.md
This commit is contained in:
1 parent
9e7a888f94
commit
270c4b7c52
5 files changed
+326
-11
No files matched your search
@@ -14,8 +14,9 @@
|
||||
| 2 | Мост FastAPI :8790 | ✅ работает под launchd |
|
||||
| 3 | Сеть Kraken → Mac | ✅ **LAN напрямую**, туннель не нужен |
|
||||
| 4 | Секция «Agents» в Dashboard | ✅ активирована и проверена |
|
||||
| 5 | Связка Балда → мост | 🟡 **связка работает**, конфиг Балды ждёт переключения на `type: http` |
|
||||
| 6 | Приёмка от аккаунта Alex | 🔴 блокер: авторизация CLI |
|
||||
| 5 | Связка Балда → мост | 🟡 **связка работает**; конфиг Балды ждёт переключения на `type: http` — одним заходом с Obsidian |
|
||||
| 6 | Obsidian MCP для Балды | 🟡 контейнер `obsidian-mcp` **поднят на Kraken**, в конфиг Балды ещё не прописан |
|
||||
| 7 | Приёмка от аккаунта Alex | 🔴 блокер: авторизация CLI |
|
||||
|
||||
---
|
||||
|
||||
@@ -266,10 +267,46 @@ lsof -nP -iTCP:8790 -sTCP:LISTEN
|
||||
1. **Переключить конфиг Балды на HTTP-MCP** — сейчас там stdio-вариант с `docker run`,
|
||||
который не может работать (нет `docker.sock` и нет shell в образе Балды).
|
||||
Нужен `type: http` → `http://balda-executor-mcp:8890/mcp`. См. [[personal/tech/balda-executor-mcp]] §7.
|
||||
2. Проверить, что инструменты видны в сессии Балды (после перезапуска).
|
||||
3. Логин CLI (Alex вручную) — без него сквозная приёмка невозможна.
|
||||
4. Cloudflare Tunnel — **не нужен** на текущей схеме; держать как резерв, если Mac
|
||||
уедет из LAN.
|
||||
2. **Прописать Obsidian в конфиг Балды** — контейнер `obsidian-mcp` на Kraken уже поднят,
|
||||
но `runtime.mcp_servers.obsidian` ещё не добавлен. Делается тем же заходом, что п. 1:
|
||||
```yaml
|
||||
runtime:
|
||||
mcp_servers:
|
||||
obsidian:
|
||||
type: http
|
||||
url: "http://obsidian-mcp:3101/sse"
|
||||
balda:
|
||||
mcp_servers:
|
||||
- executor-mcp
|
||||
- obsidian
|
||||
```
|
||||
См. [[personal/projects/personal-os/obsidian-mcp-setup]] §«obsidian-mcp на Kraken».
|
||||
3. Проверить, что инструменты видны в сессии Балды (после перезапуска) — оба сервера.
|
||||
4. Логин CLI (Alex вручную) — без него сквозная приёмка невозможна.
|
||||
5. Cloudflare Tunnel — **не нужен** на текущей схеме; держать как резерв, если Mac
|
||||
уедет из LAN. ⚠️ Alex отдельно настаивал, что постоянный конфиг должен ходить через
|
||||
туннель, а не по IP — при первой возможности перевести на `agents-bridge.qentra.top`
|
||||
(нужны 2 маршрута в CF Zero Trust + Access Application, заводит Alex).
|
||||
|
||||
## 9a. 🔴 Obsidian на Kraken — существовал ДО этой сессии
|
||||
|
||||
Важное исправление ошибочного вывода. Я дважды сказал Alex, что Obsidian MCP
|
||||
на Kraken нет / есть только на Mac. **Оба утверждения неверны.**
|
||||
|
||||
**Почему ошибся:** искал через `docker ps --filter name=obsidian` — контейнера нет.
|
||||
Но на Kraken Obsidian MCP запущен **не контейнером**, а как stdio-процесс внутри
|
||||
агента Hermes:
|
||||
|
||||
```
|
||||
mcpvault /vault (PID 1168741, UID 10000)
|
||||
└─ родитель PID 5039 = hermes gateway (контейнер hermes-kraken)
|
||||
```
|
||||
|
||||
Конфиг — `/opt/data/config.yaml` **внутри** `hermes-kraken`. Волт на Kraken реальный:
|
||||
`/home/kraken/obsidian` → `/srv/…-49e8f586…/obsidian` (с `personal/`, `family/`, `.git/`).
|
||||
|
||||
📌 **Правило поиска: `docker ps` не является доказательством отсутствия сервиса.**
|
||||
Сначала `ps aux | grep <name>`, потом порты (`ss -tlnp`), и только потом контейнеры.
|
||||
|
||||
## 10. Шаг 5 — связка Балда → мост (что сделано 2026-09-26)
|
||||
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
---
|
||||
created: '2026-09-26'
|
||||
namespace: personal
|
||||
related:
|
||||
- '[[personal/plans/music-tags-wave38-fixes]]'
|
||||
- '[[personal/tech/music-tags-repair-truenas]]'
|
||||
status: plan
|
||||
tags:
|
||||
- music
|
||||
- truenas
|
||||
- docker
|
||||
- id3
|
||||
- plan
|
||||
title: tagwriter — контейнер применения тегов MP3
|
||||
type: plan
|
||||
updated: '2026-09-26'
|
||||
---
|
||||
# tagwriter — контейнер применения тегов MP3 (TrueNAS)
|
||||
|
||||
_Создан: 2026-09-26. **Статус: ПЛАН → СБОРКА.** Основание: [[personal/plans/music-tags-wave38-fixes]]._
|
||||
|
||||
## Задача
|
||||
|
||||
Применить `tag-fix-plan.csv` (7905 строк) к MP3 на `/storage/Music`, **без пересжатия аудио**,
|
||||
в **UTF-8/UTF-16**. Alex: «в контейнер». Чужие контейнеры (transmission/immich/jellyfin) **НЕ трогаем**.
|
||||
|
||||
## Разведка окружения (факты, 2026-09-26)
|
||||
|
||||
| Что | Факт |
|
||||
|---|---|
|
||||
| `/storage/Music` | 48 ГБ, владелец `truenas_admin` (uid 950) |
|
||||
| Свободно на `/mnt/RED_2TB` | 960 ГБ (бэкап влезет) |
|
||||
| python3 на хосте NAS | 3.11.9, **нет pip, нет ensurepip, нет venv** |
|
||||
| mutagen | **нигде** (ни на хосте, ни в контейнерах) |
|
||||
| ffmpeg | только `immich-server` (музыки не видит) |
|
||||
| `/storage/Music` видят | `jellyfin`, `radarr`, `sonarr`, `transmission` |
|
||||
| Docker Hub | доступен (`python:3.12-alpine` скачался) |
|
||||
| docker compose | v2.29.1 |
|
||||
| `media_net` | есть |
|
||||
|
||||
**Вывод:** пишем теги своим контейнером. mutagen ставится в образ при сборке (pip внутри образа есть).
|
||||
|
||||
## Решение: контейнер `tagwriter`
|
||||
|
||||
- **Путь проекта:** `/mnt/RED_2TB/docker/tagwriter/`
|
||||
- **Образ:** `python:3.12-alpine` + `pip install mutagen`
|
||||
- **Пользователь:** uid/gid `950:950` (`user: "950:950"`) — владелец Music
|
||||
- **Монтирование:** `/mnt/RED_2TB/storage/Music` → `/music` (rw)
|
||||
- **Теги:** ID3v2.3, кодировка `encoding=1` (UTF-16), аудио НЕ пересжимается (mutagen правит только тег-блок)
|
||||
|
||||
## Почему не чужой контейнер
|
||||
|
||||
`python3` есть только в `transmission`, но он чужой сервис — Alex запретил. Свой контейнер
|
||||
изолирован: не влияет на торренты/медиасервисы, снимается без следа.
|
||||
|
||||
## Скрипты
|
||||
|
||||
| Файл | Назначение |
|
||||
|---|---|
|
||||
| `apply_tags_truenas.py` | `--backup` → копия всех файлов к изменению в `/music/backup/`; `--dry-run` → печать плана; `--apply` → запись тегов |
|
||||
| `docker-compose.yml` | проект контейнера |
|
||||
| `Dockerfile` | `python:3.12-alpine` + mutagen |
|
||||
| `build_and_run.sh` | сборка + запуск |
|
||||
|
||||
## Порядок работ
|
||||
|
||||
1. ✅ **Бэкап** — `--backup` копирует 7905 файлов (48 ГБ → 960 ГБ свободно) в `/music/backup/`.
|
||||
2. ✅ **Dry-run** — печать плана, 0 записей. Приёмка Alex.
|
||||
3. ✅ **Apply** — запись тегов (по «go»).
|
||||
4. ✅ **Приёмка** — выборочная проверка тегов (`mutagen` read-back) + глазами в Jellyfin/webdav.
|
||||
|
||||
## Питфоллы (предвиденные)
|
||||
|
||||
- 🔴 Имена файлов на диске **НЕ в UTF-8** (mojibake в `ls`) → работать только python-скриптом (`os.listdir`), NFC-нормализация.
|
||||
- 🔴 Пути в CSV контейнерные (`/storage/Music/...`) → мапить в `/music/...`.
|
||||
- 🔴 mutagen сохраняет тег-блок; **аудио-поток не трогается** — пересжатия нет by design.
|
||||
- ⚠️ uid: контейнер под 950, иначе не сможет писать в Music.
|
||||
- ⚠️ Бэкап 48 ГБ — проверить `df` до и после.
|
||||
Reference in new issue
Block a user