Files
Bonchellon 4e4e0f215a 123
2026-07-08 23:35:13 +03:00

12 KiB
Raw Permalink Blame History

🔥 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 — система плагинов / аддонов

Идея: фичи выпускаются как отдельные плагины, которые докачиваются по необходимости и не засоряют основной софт. Ядро остаётся лёгким; тяжёлое/нишевое (в т.ч. фичи 18 ниже) живёт в плагинах. Это фундамент — стоит сделать рано, тогда остальное можно поставлять как плагины.

Реалистичный дизайн под 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, интеграций.

Порядок реализации фундамента:

  1. Внутренний рефактор: вынести существующие contribution-точки (меню/контекст/view-табы/submit-hook) за стабильный интерфейс.
  2. Host SDK + загрузчик локальных плагинов из plugins/ + модель разрешений.
  3. UI «Плагины» (вкл/выкл, разрешения).
  4. Реестр на Gitea + скачивание/проверка подписи/обновления.
  5. Перенести 12 фичи из списка ниже в плагины как эталон (напр. визуальный дифф или 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 (ценность сначала): сделать 12 фичи инлайн ради быстрого «вау», потом построить плагин-систему и вынести их в плагины как эталон. Быстрее польза, но потом рефактор.

Рекомендую 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 — уже как плагины.