--- добавлено: 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:` только для владельца, `shared` для всех, `custom` проверяется запросом к таблице `workspaces` Supabase с токеном пользователя (RLS). - Доступ для акаунтів (CRM, 2026-10): владелец открывает другому акаунту свой личный воркспейс (`access_grants`: `projects` none/selected/all, `level` read/full, `plan`, `shared`). Личную вики открывает `projects = all`, права — `level`; через `shared = all` открываются и спільні воркспейсы владельца с правами `level`. `level = read` — вики только для чтения. - У каждой папки и страницы поле `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`).