Failed to authenticate. API Error: 401 Invalid authentication credentials

[2026-05-14] vault sync
This commit is contained in:
Alexey Martemyanov
2026-05-14 22:07:10 +06:00
parent 4ab0243654
commit 8fade60029
2 changed files with 55 additions and 41 deletions
+7 -13
View File
@@ -6,25 +6,19 @@ ssh -i ~/.ssh/id_rsa bazzite@192.168.1.86
```
Пароль sudo: `bazzite`
## SSH-доступ с Кракена (Portainer)
## SSH-доступ с Кракена
Кракен-агент работает внутри Docker-контейнера — SSH-клиента нет.
Управление HTPC через Portainer API EP=3: одноразовый alpine-контейнер с примонтированными ключами.
Кракен может SSH на HTPC напрямую. Ключ уже авторизован.
**Ключ Кракена** (добавить в HTPC `~/.ssh/authorized_keys`):
```
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFl9JjpovitpHUdM1yCpmWb/iC0fe7fYVyXjLLrJSCVR kraken
```
Добавить с Eagle (когда HTPC проснётся):
```bash
ssh -i ~/.ssh/id_rsa bazzite@192.168.1.86 \
"echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFl9JjpovitpHUdM1yCpmWb/iC0fe7fYVyXjLLrJSCVR kraken' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
ssh -i /opt/data/home/.ssh/id_ed25519 -o StrictHostKeyChecking=no bazzite@192.168.1.86 'КОМАНДА'
```
⚠️ **TODO:** выполнить, когда HTPC проснётся. До этого Кракен не может SSH на HTPC.
- Ключ внутри контейнера: `/opt/data/home/.ssh/id_ed25519`
- WoL (пробудить): Python socket, MAC `B0:6E:BF:60:6D:64`
- sudo пароль: `bazzite`
Полная дока по управлению с Кракена: скилл `htpc-control` (`~/.hermes/skills/smart-home/htpc-control/`)
Полная дока: скилл `htpc-control` в `~/.hermes/skills/smart-home/htpc-control/SKILL.md`
## Go (на HTPC)
Go установлен в `/usr/local/go/bin/go` (не в PATH по умолчанию).
+48 -28
View File
@@ -44,13 +44,16 @@ media-pipeline (~/Developer/media_files_db, ветка kraken-agent)
## Текущий статус (2026-05-14, сессия 5)
### Sync результаты
| Категория | Папок | NFO | Статус |
|-----------|-------|-----|--------|
| movies | 127 | 127 | ✅ 100% |
| series | 45 | ✅ | ✅ |
| cartoons | 126 | ~119 | ✅ почти всё (8 через resolve-manual) |
| documentaries | 35 | ~27 | ⚠️ 8 остались (см. ниже) |
### Sync результаты (последний запуск — dry_run=false)
| Категория | Resolved | Unresolved | Статус |
|-----------|----------|------------|--------|
| movies | ✅ | 2 (generation.p, Black Mirror dup) | NFO пишутся |
| series | | 1 (Black Mirror — homonym) | NFO пишутся |
| cartoons | ✅ | 6 | в работе |
| documentaries | | 6 | Tier 4 запускается |
| **Итого** | **401** | **15** | sync запущен |
> `dry_run` выключен (2026-05-14), запущен `sync` — NFO пишутся на диск.
### Что работает
- ✅ Docker образ `media-pipeline:kraken` задеплоен (ветка `kraken-agent`)
@@ -62,31 +65,31 @@ media-pipeline (~/Developer/media_files_db, ветка kraken-agent)
### Открытые задачи
#### 1. 🔴 Web search path для документалок и специфичного контента
**Принятое решение:** ничто из библиотеки не должно оставаться в unresolved. Если TMDb/KP не находят — должен срабатывать web search (IMDb HTML scrape, Tier 4). Сейчас `webSearch.enabled=true` в config.json, но 8 документалок всё равно в unresolved.
#### 1. 🔴 [ОБЯЗАТЕЛЬНО К ИСПОЛНЕНИЮ] Довести media-pipeline до 0 unresolved без resolve-manual
**8 оставшихся:**
- `/media/cartoons/25е - первый день`
- `/media/documentaries/bbc. the real jungle book bear 2012`
- `/media/documentaries/bbc. секреты собак`
- `/media/documentaries/penguin meet the family (2020)`
- `/media/documentaries/бегемоты - жизнь в воде`
- `/media/documentaries/гиганты моря 2011`
- `/media/documentaries/таинственная жизнь собак (hdtvrip 720p, 2013)`
- `/media/documentaries/тайная жизнь собак (2016г)`
**Принцип:** `resolve-manual` — не решение. Тул должен резолвить всё автоматически.
**Текущее состояние:** 32 unresolved после sync (dry_run=false). Разбивка:
**Что нужно сделать:**
- Запустить sync с `--debug` или отследить почему web search не помогает для этих item'ов
- IMDbSearchProvider (Tier 4) должен находить BBC документалки по названию
- Если IMDb тоже не находит — включить AIAgent (Tier 5) с OpenAI key, или добавить fallback: если все тиры вернули 0 кандидатов и папка содержит хотя бы один видеофайл → запускать web search по Google/IMDb с более агрессивными вариантами запроса
- Цель: `unresolved.json` после sync = пустой
**Группа A — старые source-папки (scan подхватывает оригиналы после apply):**
`apply` создаёт canonical папки с симлинками, но оригинальные папки (`flow.aka.straume...`, `bezumnyj_maks_3...` и т.д.) остаются и при следующем scan снова попадают в unresolved. Это архитектурный баг.
- **Нужно:** scanner должен пропускать папки, чьи файлы уже используются как цели симлинков в canonical структуре (или: хранить список resolved source-paths в unresolved.json и пропускать их при scan).
**Группа B — мультики (tie/ambiguity):**
`козленок`, `тигренок`, `нехочуха.xvid`, `чебурашка.m4v`, `котенок по имени гав.m4v`, `25е - первый день`, `рики тики тави`, `приключения фунтика`, `незнайка`, `миграция`
- Причины: KP возвращает несколько кандидатов с одинаковым весом (tie), или IMDB/web search не находит по транслитерации.
- **Нужно:** улучшить tie-breaking (год из папки/файла, popularity score из KP), расширить кириллические варианты запроса.
**Группа C — документалки:**
`bbc. the real jungle book bear 2012`, `bbc. секреты собак`, `penguin meet the family (2020)`, `бегемоты - жизнь в воде`, `гиганты моря 2011`, `таинственная жизнь собак (hdtvrip 720p, 2013)`, `тайная жизнь собак (2016г)`, `prehistoric.planet.s02.1080p`, `жизнь птиц 1998`, `пингвины. шпион в толпе`, `супер белки (2018)`, `шпион в снегах 2018`
- Tier 4 (IMDb scrape) запускается, но candidates = 0 — title matching слишком строгий для BBC-документалок.
- **Нужно:** для documentaries/ добавить relaxed matching (убирать "bbc.", год, технические теги из запроса перед поиском).
#### 2. 🟡 torrent-fix для 7 старых торрентов с путями `D:/Movies`
- Transmission хранит old paths `D:/Movies/...` — нужен `torrent-fix` subcommand
#### 3. 🟡 Jellyfin библиотеки
- Настроить библиотеки в Jellyfin (http://192.168.1.14:8096)
- NFO файлы готовы, Jellyfin должен их подхватить
- NFO файлы готовы (716 шт.), Jellyfin должен их подхватить
#### 4. 🟢 Hermes cron на Кракене
- Периодический запуск sync (новые загрузки через Transmission)
@@ -97,8 +100,8 @@ media-pipeline (~/Developer/media_files_db, ветка kraken-agent)
| Решение | Описание |
|---------|----------|
| **Unresolved = 0** | Цель — ничто из библиотеки не должно оставаться в unresolved после sync. Web search (Tier 4) и AI agent (Tier 5) — последние резервы перед тем как считать item нераспознанным |
| **Web search enabled** | `providers.webSearch.enabled=true` в config.json. IMDb scrape как Tier 4 для всего, что не нашли TMDb/KP |
| **Unresolved = last resort** | `unresolved.json` — НЕ мусорка. Это очередь для AI-агента (Tier 5), который по крону подбирает нераспознанные и разрешает их через LLM + web search. Для данной библиотеки цель: Tier 0-4 (TMDb → KP → IMDb scrape → web search) должны закрывать всё — в `unresolved.json` не должно попадать ни одного item'а из текущей библиотеки. |
| **Web search enabled** | `providers.webSearch.enabled=true` в config.json. IMDb scrape как Tier 4 для всего, что не нашли TMDb/KP. Tier 4 должен срабатывать до того, как item уходит в unresolved.json |
| **Документалки приоритет KP** | BBC/Discovery документалки плохо индексированы в TMDb. KP часто знает их под русскими названиями. Стратегия: сначала KP с русским названием из папки, потом IMDb |
| **resolve-manual** | Только для экстренных случаев, не как регулярный процесс |
| **Single-file NFO** | Для `.mkv`/`.m4v` файлов NFO создаётся рядом (`film.nfo`), не внутри |
@@ -184,10 +187,27 @@ docker run --rm ... media-pipeline:kraken \
---
## Источник торрентов (важно)
Торренты на Кракене (128 шт.) импортированы из **Windows Transmission-daemon** на HTPC:
```
/run/media/bazzite/Windows/windows/serviceprofiles/localservice/appdata/local/transmission-daemon/
├── torrents/ ← 210 .torrent файлов
└── resume/ ← 214 resume (пути, статус)
```
Валидация resume (2026-05-14): **185/214 файлов есть на HTPC**. 29 missing:
- ~15 медиафайлов с утраченного диска `X:/Movies/` — потеряны безвозвратно
- ~14 игр/архивов из `Downloads/Unsorted/` — не медиа, не важно
Отдельно: **uTorrent** (`/run/media/bazzite/Windows/program files/utorrent/`) — 131 .torrent файл, resume.dat с 18 записями. Из них только 6 хешей совпадают с Кракеном.
`Karnavalnaya.noch.1956.BDRip.AVC.mkv` — есть в uTorrent и в Transmission на Кракене (`downloaded=0`). Файла нет нигде — **никогда не скачивался**.
## Журнал
- **2026-05-13 сессия 1:** HTPC разбужен, rsync запущен (~1.3TB), торрент-база импортирована (128 торрентов)
- **2026-05-13 сессия 1:** HTPC разбужен, rsync запущен (~1.3TB), торрент-база импортирована (128 торрентов из Windows Transmission-daemon)
- **2026-05-13 сессия 2:** Docker build arm64, deploy на Кракен, first sync
- **2026-05-13 сессия 3:** `kraken-agent` ветка: UnresolvedStore, resolve-manual, agent, torrent-fix subcommands
- **2026-05-14 сессия 4:** 5 системных багов исправлены. Sync: 222/317 resolved (70%).
- **2026-05-14 сессия 5:** resolve-manual для 13 items (movies/cartoons/series/documentaries). unresolved: 24 → 8. Исправлен баг NFO path для single-файлов. kraken-ssh переключён на WireGuard.
- **2026-05-14 сессия 5:** resolve-manual для 13 items. unresolved: 24 → 8. NFO path bug fix. kraken-ssh → WireGuard.
- **2026-05-14 сессия 6 (текущая):** dry_run=false, sync запущен → 401 resolved, 32 unresolved. `apply` создаёт canonical папки + симлинки (оригиналы не трогает). 716 NFO написано. Валидация торрентов HTPC.