Что нужно

Получите доступ к закрытому репозиторию у владельца и скачайте исходный код. Установите Docker с работающим daemon и инструменты, указанные в репозитории. Для host-разработки нужен Node.js, совместимый с проектом, npm и зависимости из lockfile. Production-процедура через k3s описана отдельно.

Перед запуском изучите .env.example. Пример ограничивает локальную публикацию адресом 127.0.0.1. Без BIND_ADDR development-сервер и Compose-порт по умолчанию доступны на всех интерфейсах, включая Wi-Fi.

Быстрый запуск в Docker

make up

Команда создаёт локальную конфигурацию, собирает образ ядра и запускает приложение. Каждая комната получает собственный контейнер; общего instance-wide Jupyter нет. Откройте приложение на http://localhost:3000 и завершите настройку владельца.

Данные и файлы находятся в локальных data/ и workspace/. Development backend имеет доступ к Docker socket; используйте его для доверенной локальной разработки, а не как production-границу безопасности.

Приложение на хосте

npm ci
make dev
NODE_ENV=development KERNEL_BACKEND=docker npm run dev

make dev готовит образ комнатного ядра; приложение запускается следующей командой. Для native macOS дополнительно требуется явное разрешение локального режима файлов:

COLLOQ_UNSAFE_DEV_FILES=1 NODE_ENV=development \
  KERNEL_BACKEND=docker npm run dev

Этот opt-in не предоставляет защищённую Linux-работу с файлами через /proc/self/fd и запрещён в production. Для сборки и запуска host-сервера есть make run.

Development-окружения

make env-list
make env-new NAME=nlp
# Измените требования в kernel/environments/
make env-build NAME=nlp
make env-use NAME=nlp

Это команды Docker-разработки. В production окружения публикуются заранее и выбираются из digest-каталога, как описано в руководстве окружений.

Тексты интерфейса

Парные переводы находятся в shared/locales/: admin.ts, room.ts, server.ts и common.ts. Добавляйте русский и английский варианты под одним ключом, а в месте показа вызывайте tr(key, params) из shared/i18n.ts. Подставляйте имена и другие переменные параметрами; для счётчиков используйте формы множественного числа, для дат и чисел — общие функции форматирования.

В Svelte перевод должен вычисляться реактивно при показе: перевод, сохранённый в константу при загрузке модуля, не обновится. Для нативных элементов редактора есть подписка на смену языка; пересоздавать весь редактор ради подписи не нужно. Служебные значения протокола, имена файлов и пользовательские тексты через переводчик не пропускаются. Проверка tests/i18n.test.mts сверяет наличие обоих языков и совпадение параметров; поведение переключателя проверяют тесты instance-language, admin-language и language-room.

Проверки изменений

npm run typecheck
npm test
npm run build

Запускайте также относящиеся к изменению интеграционные сценарии из tests/README.md. Локальный green test не заменяет deployment smoke, сетевые проверки, backup/restore и реальную GPU-операцию на целевой VM.

Если ядро не запускается, проверьте Docker daemon, наличие образа, права на socket и пути workspace. Не подставляйте один общий Jupyter endpoint как временную замену отдельным комнатам.