Newer
Older
navi-1 / manuals / content_publish.md

content_publish

Что делает

Публикует файл из директории текущей сессии для просмотра пользователем прямо в чате. Поддерживаются интерактивные viewer'ы для 3D-моделей (STL), HTML-страниц, SVG, PDF, изображений и видео.

Важно: workspace/ и директория сессии — разные места.

  • workspace/ — постоянная приватная рабочая зона Нави для черновиков, скриптов, заметок, промежуточных данных и файлов, которые могут пригодиться позже.
  • session_files/{session_id}/ — временная зона конкретной сессии для загруженных пользователем файлов и артефактов, которые пользователь должен увидеть в чате.
  • content_publish публикует только файлы из директории текущей сессии. Он не копирует файлы из workspace/.
  • Если нужен только download link для файла из workspace/, используйте share_file: он сам копирует файл в директорию сессии. Если нужен inline viewer, файл должен оказаться в директории сессии, а затем его нужно зарегистрировать через content_publish.

Как работает внутри

  1. Файл уже должен быть в директории сессии (session_files/{session_id}/ по умолчанию; точный корень задаёт SESSION_FILES_DIR).
  2. Инструмент не копирует файл — он только регистрирует метаданные в базе данных.
  3. Пользователь видит файл по URL /sessions/{session_id}/files/{filename}.
  4. Если вы отредактируете файл после публикации, пользователь увидит изменения сразу (перезагружать страницу не нужно).

Формат вызова

content_publish(
    filename="мой_файл.svg",      # обязательно — имя файла в директории сессии
    title="Моя диаграмма",        # опционально — заголовок карточки
    content_type="svg"            # опционально — тип для viewer (автоопределение по расширению)
)

Где находится директория сессии

Директория сессии — это session_files/{session_id}/ по умолчанию. Полный путь зависит от настройки SESSION_FILES_DIR.

Как узнать путь:

filesystem info session_files/{session_id}

Если content_publish не нашёл файл, он вернёт точный путь директории текущей сессии. Доверяйте этому пути и пишите/копируйте файл туда.

Типичный workflow

1. Создание и публикация

# Создать SVG в директории сессии
filesystem write session_files/sess-abc/chart.svg "<svg>...</svg>"

# Опубликовать
content_publish(filename="chart.svg", title="Диаграмма продаж")

2. Редактирование после публикации

# Прочитать текущий файл
filesystem read session_files/sess-abc/chart.svg

# Отредактировать
filesystem write session_files/sess-abc/chart.svg "<svg>...исправлено...</svg>"

Пользователь увидит изменения мгновенно — URL не меняется.

Поддерживаемые типы

Расширение Тип Viewer
.stl 3D-модель Three.js 3D viewer
.html, .htm HTML iframe
.svg SVG iframe
.pdf PDF iframe
.png, .jpg, .jpeg, .gif, .webp Изображение img
.mp4, .webm Видео video

Для неизвестных типов показывается карточка со ссылкой на скачивание.

Важные правила

  1. Файл должен существовать ДО вызоваcontent_publish не создаёт файлы, только регистрирует.
  2. Не публикуйте напрямую из workspace/ — сначала поместите финальный файл в директорию текущей сессии.
  3. Проверяйте коллизии — если файл с таким именем уже есть, запись публикации будет обновлена, а файл останется тем же путём.
  4. Используйте понятные именаchart.svg лучше чем file_1.svg.
  5. Для редактирования используйте тот же путь — не создавайте новые копии, правьте оригинал в директории сессии.