Files
crm-wiki/SPEC.md

4.6 KiB
Raw Blame History

добавлено
добавлено
2026-10-13

Спецификация. Вики для CRM

База знаний для людей и агентов, отдельный сайт, встраивается в CRM через боковую панель. Задача владельца в CRM: «Додати в CRM вікі-сторінки зі структурою папок» (mv2pby2qbv9vdj, проект Tvorymo shotam). Как встраивать: Встраивание страниц в CRM.

Стек

  • Бэкенд на C# (ASP.NET Core): REST API, чтобы к вики было легко обращаться из скиллов и других сервисов.
  • Данные в SQLite, нагрузка небольшая. Файл базы на постоянном томе Coolify, иначе пропадёт при пересборке.
  • Хостинг: наш сервер, Coolify storage, код в gitea.tes.gd. Агента (crm-wiki) создаёт админ.
  • Домен: https://wiki-crm.tes.gd.
  • Картинки хранятся на диске, на том же постоянном томе, что и SQLite. Отдаются только после проверки токена и доступа к workspace страницы.

Авторизация

  • Токен пользователя CRM приходит через postMessage (crm:ready → crm:auth), как на тестовой странице https://test-crm.tes.gd.
  • Токен нужен только для входа: сервер вики проверяет его через Supabase (GET /auth/v1/user с publishable-ключом, exp, aud = "authenticated"). Данные вики в Supabase не хранятся.
  • Агенты получают такой же доступ, как люди. Отдельный скилл для работы с вики сделаем позже, сейчас на агентах не фокусируемся.

Workspace

  • Сейчас CRM workspace во встроенную страницу не передаёт: в crm:auth только access_token, expires_at, user { id, email, name } (проверено по js/pagebridge.js 2026-10-13). Выбранный workspace CRM держит в localStorage.
  • Нужна доработка протокола от Олега (задача в CRM): поле workspace: { id, kind, title } в crm:auth и новое сообщение при переключении workspace.
  • Сервер вики id из сообщения не доверяет, а сверяет доступ: personal:<uid> только для владельца, shared для всех, custom проверяется запросом к таблице workspaces Supabase с токеном пользователя (RLS).
  • У каждой папки и страницы поле workspace_id, дерево показывает только текущий workspace.

Первая версия

  1. Страницы: название и текст в визуальном редакторе как в Notion (заголовки, списки, жирный, ссылки, таблицы, картинки). Хранить текст в Markdown или в JSON редактора с экспортом в Markdown — решает агент, но API должен отдавать Markdown.
  2. Папки с любой вложенностью, дерево сбоку (раскрыть, свернуть), хлебные крошки сверху.
  3. Действия: создать, переименовать, переместить, удалить с подтверждением.
  4. Ссылки между страницами по id: не ломаются при переименовании и переносе.
  5. Поиск по названиям и тексту (SQLite FTS5).
  6. Стили CRM: tvorymo-ui.css и crm.css ссылками, body.side-off.
  7. Защита от одновременной правки: проверка версии страницы при сохранении.

Потом

  • История изменений и откат версий.
  • Скилл для агентов.

Зависимости

  • Фильтр по workspace зависит от задачи Олега mv6p5b92slw1an (она блокирует задачу вики в CRM). До её выкатки делать всё остальное; workspace брать из сообщения, если поле есть, иначе временно работать в общем workspace (shared).