PaperDraft

Черновик научной статьи в проекте: LaTeX и PDF в paper/<slug>/, генерация из контекста исследования, предложения правок от агента с ревью человека, совместное редактирование по Yjs/WebRTC. Долговременная копия — коммиты Git.

Слот для картинки или видео

Как работает

Кнопка PaperDraft на панели workspace открывает модальное окно статьи. Внутри:

  • список статей проекта (вкладки / slug);
  • редактор LaTeX (тело или полный файл — по текущей схеме UI);
  • превью / сборка PDF;
  • генерация или перегенерация из очереди Paper Inbox;
  • статус совместного редактирования;
  • предложения правок от агента: агент предлагает правки с подсветкой изменений, человек принимает или отклоняет по фрагментам;
  • комментарии;
  • выгрузка версии в Git (push чекпоинта).

Генерация: задача в .run/paper-queue.json → агент по koi-paper пишет английский LaTeX из дерева, research.json, отчётов и figures → answer собирает main.tex и PDF. Без выдуманных путей к картинкам — только из списка в промпте.

Совместная работа: документ в браузере — CRDT (Yjs); обмен между инстансами — WebRTC (до ~5 человек); signaling только для SDP/ICE (и relay, если DataChannel не открылся). Пиры с разным Git HEAD не синхронизируют текст. Realtime не создаёт коммиты.

Правило продукта: предложения агента по тексту статьи остаются на проверке человека — агент (и ассистент в IDE) не должен сам принимать предложение в основной текст от имени пользователя.

Как человек работает в интерфейсе

  1. Выберите проект → PaperDraft в доке.
  2. Первый раз для Paper Inbox: скопировать bootstrap → чат ResearchOS Paper Inbox → «Inbox готов» (в модалке статьи).
  3. Сгенерировать статью / перегенерировать — статус «Агент работает», затем появление tex/PDF.
  4. Правите LaTeX в поле; Сохранить пишет на диск; Собрать PDF запускает компиляцию.
  5. Если пришло предложение правок — в превью сегменты; принять или отклонить фрагмент. Пока предложение активно, поле tex может быть только для чтения.
  6. Комментарии — кнопка добавления в панели статьи.
  7. Статус коллаба показывает пиров / ошибки signaling. Для двух машин — одинаковые KOI_COLLAB_* в .env.
  8. Push версии — зафиксировать рукопись в Git, когда нужна долгая точка сохранения.

Какие сценарии для агента подключаются

Сценарий (skill) Роль
koi-paper Очередь UI: claim → context → LaTeX → answer (PDF).
Paper Inbox koi.paper.inbox_cli, wake PAPER_WAKE.
Контекст проекта Дерево, инсайты, отчёты, figures — уже в промпте context; отдельно «читать всё подряд» не нужно.
(коллаб) Клиент paper-collab.js / paper-webrtc.js; сервер signaling в koi/paper/collaboration/.
python -m koi.paper.cli pending
python -m koi.paper.cli claim <queue_id>
python -m koi.paper.cli context <queue_id>
python -m koi.paper.cli answer <queue_id> -f paper-body.txt
python -m koi.paper.inbox_cli watch

Как устроено технически

Файлы

Обычно koi-structure/paper/<slug>/ — main.tex, PDF, ассеты, метаданные прогресса (в UI есть блок настроек прогресса). Точный layout slug’ов задаёт backend paper API.

Очередь и API

Пакет koi/paper/ (cli, inbox, сборка). Клиент: #paper-modal в web/index.html, логика в web/app.js (состояние статьи, генерация, предложения правок, статус коллаба).

Realtime

  • Yjs-документ в браузере;
  • полная сеть WebRTC между инстансами;
  • комната от Git remote + slug + путь файла;
  • несовместимый HEAD — без обмена апдейтами;
  • переменные: KOI_COLLAB_SIGNALING_URL, KOI_COLLAB_TOKEN_SECRET, STUN/TURN.

Чеклист и деплой signaling: docs/paper-collaboration-spike-b.md. На главной features-странице раздел «Синхронизация» описывает, как это стыкуется с Git.

Ограничения

  • Генерация на английском под шаблон конференции (NeurIPS-ориентированный поток в скилле).
  • Без совместимой Git-базы коллаб между машинами не стартует.
  • Предложение правок без явного принятия человеком в основной текст не должно попадать.

Связанные страницы

Текст: content/paper.md. Медиа: media/paper-hero.*.