[2026-09-25] eagle: personal/plans/lampac-watchlist-plugin.md personal/tech/lampac-deployment.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-25 22:15:59 +06:00
1 parent aed8c42aa3
commit 7dbfead569
2 files changed
+208 -13

No files matched your search

+86 -1
View File
@@ -1,7 +1,7 @@
---
title: Lampac — развёртывание и эксплуатация (Кра́кен)
created: '2026-09-22'
updated: '2026-09-24'
updated: '2026-09-25'
type: tech
namespace: personal
tags:
@@ -28,6 +28,91 @@ related:
> Технический справочник. Развёрнуто 2026-09-22. План и статус шагов — [[personal/plans/lampac-kraken]].
## 🔴 2026-09-25: деплой `plugin.js` модуля Catalog — контракт и подводные камни
Правки фида Watchlist в UI Lampa живут НЕ в YAML, а в `plugin.js` модуля Catalog
(патч `enumerable:true` + инжект секций через перехват `Lampa.Api.partNext`).
Полный план и статус — [[personal/plans/lampac-watchlist-plugin]].
### Где лежит файл (три разных места — не путать)
| Слой | Путь | Примечание |
|---|---|---|
| Mac, исходник | `/Users/admin/lampac-tmp/plugin-cub.js` | результат `build_plugin.py` |
| Mac, сборщик | `/Users/admin/lampac-tmp/build_plugin.py` | 🔴 `plugin-cub.js` РУКАМИ не правим |
| Кра́кен, хост | `/srv/dev-disk-by-uuid-6194539b-.../lampac/catalog/plugin.js` | bind-mount |
| В контейнере | `/lampac/module/Catalog/plugin.js` | `:ro` по compose |
| По HTTP | `http://192.168.1.14:9118/catalog.js` | что реально грузит ТВ |
🔴 **`wwwroot/catalog.js` НЕ существует.** `wwwroot/` содержит только JSON фида
(`watchlist.json`, `watchlist-<cat>.json`, `cards.json`, `cards/`, `missing.json`).
Попытка `scp` оттуда падает с «No such file or directory» — это не сбой сети.
### Порядок деплоя (боевой конфиг — коммит ДО, правка, заливка, ПРОВЕРКА, коммит ПОСЛЕ)
```bash
cd /Users/admin/lampac-tmp
python3 build_plugin.py # инварианты: сборка падает при нарушении
node --check plugin-cub.js # SYNTAX OK обязателен
# бэкап боевого
ssh kraken 'cp .../lampac/catalog/plugin.js .../catalog/plugin.js.bak-<что>-$(date +%Y%m%d-%H%M%S)'
scp plugin-cub.js kraken:.../lampac/catalog/plugin.js
# проверка, что файл виден в контейнере (bind-mount)
ssh kraken 'docker exec lampac grep -c "<маркер>" /lampac/module/Catalog/plugin.js'
```
### 🔴 Перезапуск Lampa на ТВ обязателен
`docker restart lampac` **НЕ сбрасывает** кэш `catalog.js` в браузере webOS — ТВ
продолжит исполнять старую версию плагина. Нужен рестарт приложения на ТВ:
```bash
scp /Users/admin/lampac-tmp/tv_restart.sh root@192.168.1.70:/tmp/ \
&& ssh root@192.168.1.70 'sh /tmp/tv_restart.sh'
```
⚠️ `luna-send` через `ssh 'script -q -c "luna-send ... -a {\"id\":...}"'` ломается на
экранировании JSON (luna-send печатает help) — поэтому скрипт кладётся файлом на ТВ.
### 🔴 Форма `Lampa.Activity.active()` — ИЗМЕРЕНО на живом ТВ 2026-09-25
```
Lampa.Activity.active() → {url, title, component, source, page, params, activity}
Lampa.Activity.active().activity → {component, object, slide, body, is_stopped, is_started}
↑ url ЗДЕСЬ НЕТ
```
**`url` лежит на ВЕРХНЕМ уровне.** Обращение к `.activity.url` всегда даёт `undefined` —
на этом была потеряна приёмка 2026-09-25 (фильтр «только главная» смотрел не туда и
секции исчезли полностью). Читать оба уровня, верхний первым.
### 🔴 CDP-диагностика ТВ (порт 9998) — питфоллы
```bash
curl -s "http://192.168.1.70:9998/json/list" | jq -r '.[] | select(.title=="Lampac") | .webSocketDebuggerUrl'
```
Клиент — `websocket-client` (модуля `websockets` на Mac НЕТ). Готовый скрипт:
`/Users/admin/lampac-tmp/wl_console.py`.
- `JSON.stringify(Lampa.Activity.active())` → **`TypeError: Converting circular structure
to JSON`**. Возвращать поля по одному.
- Обращение к отсутствующему полю в `Runtime.evaluate` без обёртки → ответ без
`result.value`, выглядит как «все пробы вернули `<none>`». Оборачивать в
`String(...)` / `typeof ...`, проверять `subtype == "error"`.
- `Runtime.enable` + `Log.enable` дают **0 строк**, если Lampa уже загрузилась:
сообщения, напечатанные до подключения, не отдаются. Логи читать сразу после
рестарта приложения либо подтверждать состояние пробами.
- 🔴 `URL страницы ТВ — надёжный индикатор экрана`: `...index.html?title=Главная%20-%20CUB
&component=main&source=cub` = главная CUB.
### 🔴 `Manifest.catalogs` пуст = фид вставлять некуда
Если `/catalog` от Lampac не ответил, `loadCatalogs()` не отработал →
`window.__wl_menu` не создан → **секции Watchlist не появятся ни на одном экране**,
независимо от фильтров. Наблюдалось 2026-09-25: `catalog_all = NOMANIFEST`,
`wl_menu = undefined`, при этом `patch = true`. Диагностировать это ПЕРВЫМ, до
разбора логики фильтра.
## 🔴 2026-09-24 (вечер): «Мастерская сатаны» — один источник, торренты пусты. План диагностики
**Вопрос Alex:** *«для Мастерская сатаны например в lampac в источниках есть только