Web IDE. В основе IDE-части лежит редактор Monaco. Редактор позволяет работать с markdown-текстом, python-кодом и SQL-запросами.
Особенности редактора Markdown:
- поддержка LaTeX-формул;
- поддержка markdown-таблиц;
- поддержка mermaid-визуализаций;
- свои шорткаты и кастомное поведение для работы с Markdown.
Редактор Python. Для редактора Python развернули python-lsp-server в web worker браузера, конвертировав его в WASM. Его подключаем к виртуальному документу, который содержит все python-параграфы, через websocket и предоставляем подсказки, linting и code completion.
Редактор SQL. Используем парсеры на клиентской стороне, которые созданы поверх jison-описания грамматик языков. Эти парсеры позволяют предоставлять функции code completion.
Для валидации корректности запроса и проверок правил линтинга используем antlr4. Кастомные правила линтинга реализованы через собственный линтер, содержащий рекомендации для разных диалектов.
Система контроля версий. Мы даем пользователю легкую и удобную возможность версионирования его тетрадок — как в Google Документах. Автосохранение, сравнение версий, возможность восстановить любую из прошлых версий — вот только малая часть того, что делает пользовательский опыт надежным.
Система исполнения кода. Сервис, который отвечает за выполнение пользовательских тетрадок. Фактически это планировщик задач. Состоит из трех основных частей:
- Executor. Отвечает за хранение, обработку состояний, управление зависимостями и результатами сессий, контекстов и задач. Отвечает за общение с Interpreters.
- Interpreters. Java-сервисы, отвечающие за выполнение пользовательского кода. Python-интерпретатор запускает в себе python-процесс и работает с ним, вычитывая из него результаты. SQL -интерпретатор ответственен за работу с источниками данных и подключается к ним по JDBC.
- Engine. Отвечает за поддержку прямых обращений от других сервисов, работу с файлами, инкрементальный вывод результатов работы, post-processing задач из Executor.
Сервис рассылки уведомлений об изменениях в тетрадках в режиме реального времени. Это основная часть работы в коллаборативном режиме с ноутбуком.
Сервис статического анализа и интеграций отвечает за AI/ML-интеграции, интеграцию с метаданными и статический анализ кода — валидаторы на antlr4, проверку эвристик.
Сервис работы с ноутбуками реализует практически все CRUD, работу с параграфами, рабочим пространством пользователей и так далее.