12 KiB
🔥 HotTODO — Exbyte Depot
Фичи «супер-удобства», которых нет ни в P4V, ни в git — заточены под UE-команду на бинарных ассетах. Ранжировано по «польза / усилие». Стек, на который опираемся: Tauri (Rust) backend + p4 CLI, React фронт, встроенный OpenRouter (AI), UE-MCP (mcp__ue-blueprint__*), уже готовые тумбы .uasset / 3D-вьювер / медиа-превью / файл-локи / трей+уведомления / offline / Files & Sizes / View-дерево.
Статус: план, реализуем по мере выбора.
🧩 Foundation — система плагинов / аддонов
Идея: фичи выпускаются как отдельные плагины, которые докачиваются по необходимости и не засоряют основной софт. Ядро остаётся лёгким; тяжёлое/нишевое (в т.ч. фичи 1–8 ниже) живёт в плагинах. Это фундамент — стоит сделать рано, тогда остальное можно поставлять как плагины.
Реалистичный дизайн под Tauri (Rust-бэкенд скомпилирован, поэтому плагины — на фронте/сайдкаре, а не нативные .dll):
- Тип плагина = JS/ESM-бандл (± WASM для тяжёлого), грузится в webview в рантайме через стабильный Host SDK, который экспортит ядро:
p4.*(whitelisted-команды), события (p4-log,p4-transfer,p4-scan…),flash/notify, чтение выбранного файла/CL, i18n, тема.- Contribution points — куда плагин встраивается: пункт меню Actions, контекст-меню файла/чейнджлиста, вкладка view-панели (у нас уже есть File Viewer/Tree/Locks — тот же механизм), кнопка в тулбаре, шаг перед Submit (hook). Ядро уже построено на этих точках — надо просто открыть их как API.
- Манифест
plugin.json:name, version, entry, minAppVersion, permissions[], contributes{menus,panels,contextItems,submitHooks}. - Модель разрешений: плагин декларирует, что ему нужно (
p4:read,p4:write,fs:read,network:<host>,ui:panel). Пользователь подтверждает при установке. JS-песочница: iframe/Web Worker с message-bridge, доступ к ядру только через Host SDK (не напрямую кinvoke). - CSP: у нас строгий CSP (внешнее запрещено), поэтому плагины не грузятся с чужих URL — их скачивают в локальную папку
plugins/и подключают контролируемо; сетевой доступ плагину даётся только к явно разрешённым хостам. - Реестр/маркет: индекс плагинов на Gitea (список манифестов) → скачивание подписанного бандла (у нас уже есть инфраструктура подписи minisign) → проверка подписи → распаковка в
plugins/. UI «Плагины»: установлено / доступно / обновления / вкл-выкл, версии, разрешения. - Изоляция сбоев: упавший плагин не роняет ядро (ловим ошибки на границе bridge), можно отключить.
- Сайдкар-вариант (опционально, для бэкенд-тяжёлых плагинов): плагин = отдельный исполняемый/скрипт, ядро дёргает его по stdio-JSON (как VS Code language servers). Полезно для парсеров
.uasset, интеграций.
Порядок реализации фундамента:
- Внутренний рефактор: вынести существующие contribution-точки (меню/контекст/view-табы/submit-hook) за стабильный интерфейс.
- Host SDK + загрузчик локальных плагинов из
plugins/+ модель разрешений. - UI «Плагины» (вкл/выкл, разрешения).
- Реестр на Gitea + скачивание/проверка подписи/обновления.
- Перенести 1–2 фичи из списка ниже в плагины как эталон (напр. визуальный дифф или reference-guard).
Усилие: высокое (архитектура), но окупается: дальше фичи добавляются без раздувания ядра и обновляются независимо от основного релиза.
🥇 Топ — уникальное, максимум пользы
1. Reference-guard: целостность ассет-референсов перед Submit ⭐ рекомендация №1
Перед сабмитом парсить импорты .uasset (через UE asset registry / UE-MCP, либо чтение заголовков .uasset) и проверять: не сабмитишь ли ассет, который ссылается на другой ассет, которого нет ни в депоте, ни в текущем changelist.
- Зачем: причина №1 сломанных билдов в UE. Ни P4V, ни git не понимают референсы ассетов.
- UX: «⚠️
M_Heroссылается наT_Hero_D, его нет на сервере и не в коммите → добавить в changelist / отменить сабмит». - Как: backend-команда
p4_check_refs(files)→ карта референсов → сверка сp4 files+ открытыми. Бонус: «submit together» — сгруппировать взаимозависимые ассеты в один атомарный CL. - Усилие: среднее-высокое (парсинг референсов — ключевой кусок).
2. Визуальный дифф бинарников
Не «binary files differ», а реально:
- Картинки (png/tga/exr/bmp): сравнение свайпом / onion-skin / попиксельная подсветка разницы.
.uasset: дифф по свойствам (какой параметр материала / LOD / настройку меняли) из встроенных данных.- Зачем: P4V/git по бинарям молчат; Anchorpoint умеет частично.
- Как: переиспользовать существующие тумбы/
readDepot; для двух ревизий —p4 printобеих версий → canvas-свайп. Свойства.uasset— через UE-MCP или парсер. - Усилие: картинки — низкое-среднее (быстрый вин); свойства
.uasset— среднее.
3. Lock handoff — запрос залоченного файла у коллеги
Бинарь эксклюзивно залочен напарником → кнопка «Попросить файл». Ему — нативное уведомление (трей уже есть); отпустил — тебе прилетает «свободно».
- Зачем: убирает «отпусти плиз ассет» из дискорда. Нет нигде.
- Как: нужен лёгкий канал сообщений между клиентами. Варианты: свой мини-эндпоинт (как waitlist-server) / Perforce как транспорт (спец. changelist-описание или counter) / общий канал. Требует продумать транспорт.
- Усилие: среднее (основное — транспорт уведомлений между людьми).
🥈 Осведомлённость (git/P4V не дают)
4. Presence — кто где работает прямо сейчас
Лёгкий поллинг p4 opened -a + свой heartbeat → «Mira: Content/Characters, Voss: Config». Presence как в Google Docs, но по депоту. Предупреждает о коллизии до открытия того же ассета.
- Усилие: низкое-среднее (частично уже есть
others-индикаторы; нужен агрегированный вид + heartbeat).
5. Impact-preview перед Get Latest
Показать не только «сколько файлов», а что это значит для UE: «синк тронет 400 материалов → ~20 мин компиляции шейдеров», «меняется .ini упаковки», «конфликт с твоими открытыми файлами».
- Как:
p4 sync -n(уже естьp4_behind) + классификация путей/типов; для шейдеров — эвристика по кол-ву материалов/шейдеров. - Усилие: среднее.
🥉 Скорость/безопасность (кусочки уже есть)
6. AI-ревью changelist перед Submit
OpenRouter уже вшит (commit-месседжи) — расширить: «кладёшь 2 ГБ несжатого ассета», «забыл .uasset, на который ссылается материал» (пересекается с №1), «этот тип обычно лочат — взять лок?».
- Усилие: низкое-среднее (инфра AI готова).
7. Управление занятым местом на диске
Есть Files & Sizes — добавить «синкнуто 380 ГБ; вот что можно p4 sync #none, чтобы освободить 120 ГБ». Пересекается с View-деревом (исключил → освободил).
- Усилие: низкое (есть
fs_ls/ sizes).
8. Time-travel превью ассета
Ползунок по истории ревизии → тумба/3D на каждой версии. Есть revision graph + тумбы — соединить в визуальную ленту.
- Усилие: среднее.
Порядок, который предлагаю
Развилка по стратегии:
- Вариант A (плагины сначала): сделать 🧩 Foundation, затем каждую фичу — как плагин. Ядро остаётся лёгким с самого начала, но первый результат для пользователя дольше.
- Вариант B (ценность сначала): сделать 1–2 фичи инлайн ради быстрого «вау», потом построить плагин-систему и вынести их в плагины как эталон. Быстрее польза, но потом рефактор.
Рекомендую B → потом Foundation: сначала №2 (визуальный дифф картинок свайпом — быстрый «вау» на готовой инфре), затем №1 (reference-guard — главная польза для билдов), после этого 🧩 Foundation и перенос №1/№2 в плагины как образец. Дальше по выбору: №4 presence → №6 AI-ревью → №5 impact-preview → №7 диск → №3 lock handoff → №2 .uasset-дифф свойств → №8 time-travel — уже как плагины.