| Filename | Latest commit message | Latest commit date |
|---|---|---|
| diagrams | ||
| tests | ||
| .gitignore | ||
| README.md | ||
docs
Architecture
В данном разделе описана архитектура системы в целом и для компонентов по отдельности, а также представленны диаграммы.
System
Разработанная система состоит из следующих компонентов:
-
mals-vscode- расширение дляVSCode,VSCodiumи прочих сборок (далееVSCode), настраивающее и запускающее адаптерLSPmals-lsp-adapterи реализующее специфичные дляVSCodeфункции. -
mals-lsp-adapter- клиент, обеспечивающий базовую функциональность системы, коммуницирующий с тектовыми редакторами поstdioсогласно спецификацииLSP. Запускается непосредственно текстовым редактором. -
mals-engine- сервис, реализующий основную логику системы. Общается сLSPсерверами, таким образом получая семантическую информацию о проекте, и сLLMсерверами, дополнительно расширяющими ответы.- Запускает
LSPсервера по необходимости клиентов. - Подключается к
LLMсерверам, общаясь согласно стандартам (например,OpenAI API spec).
- Запускает
Таким образом, через mals-lsp-adapter реализуется функциональность, которая будет сразу поддерживаться текстовыми редакторами, которые поддерживают LSP, а для расширения этой функциональности для конкретных текстовых редакторов реализуются плагины или расширения (например, как для VSCode расширение mals-vscode).
mals-lsp-adapter
На диаграмме LSP Message passing from mals-vscode to mals-engine описывается один из основных прецедентов компонента. На нем показан процесс обработки запросов от пользователей:
- Поступает
LSPсообщение от пользователя. - Это сообщение парсится (для считывания, поскольку с клиентом общение происходит через
stdio) и валидируется. - Из запроса пользователя формируются сообщения для отправки на
mals-engine, так какmals-engineне гарантирует общение по спецификацииLSP. - Сформированные сообщения отправляются на
mals-engine.
Обратный процесс отправки сообщений аналогичен рассмотренному выше, где одно и более сообщений от mals-engine конвертируются в формат, определяемый LSP, и отправляются согласно той же спецификации.
Благодаря этому осуществляется декомпозиция системы, что упрощает разработку mals-engine.
mals-engine
На диаграмме Completion Request Processing описывается прецедент автодополнения.
- Клиент отправляет запрос на автодополнение.
- Осуществляется поиск запроса по
Workspace, так как каждый пользователь может иметь несколько активных рабочих проектов. - Выполняется поиск
LSPсерверов, результаты которых могут понадобиться для генерации ответа (например, если файлpython, то может быть найден серверpyright, если он был сконфигурирован). - Каждому
LSPсерверу отправляетсяLSPзапрос на автодополнение. - После того, как были получены все ответы от
LSPсерверов, из их ответов и контекстной информации о проекте составляется промпт для модели. - Выбранной модели отправляется промпт и ожидается ответ.
- Ответ модели валидируется и результат автодополнения отправляется клиенту.
Features
В данном разделе описываются основные функциональности реализованных компонентов.
mals-vscode
- Конфигурация
mals-lsp-adapterи его запуск черезsettings.jsonи настройкиVSCode.
Платформоспецифичные функции не реализованы.
mals-lsp-adapter
- Общение с клиентами (текстовыми редакторами) через
stdio - Общение с
mals-engineчерезTCP, bidirectional.
Прочее:
- Логирование (файл)
- Параметризация запуска, смотреть описание через передачу параметра
-h.
Текущая функциональность адаптера -
proxyбез модификации запросов/ответов.
mals-engine
- Независимая обработка запросов от нескольких клиентов
- Поддержка нескольких
workspaceдля каждого клиента - Настройка конфигурации (
LLMсерверов,LSPсерверов иworkspaceклиентов) через конфигурационный файл - Генерация автодополнения с использованием выбранной
LLM(смотретьinternal/workspace/completion.goиinternal/workspace/completion_prompt.go)
LSP:
- Полная синхронизация файлов от клиентов
TextDocumentSync FULL. - Автодополнение
CompletionProvider
Прочее:
- Логирование (stdout)
- Параметризация запуска, смотреть описание через передачу параметра
-h.
Tests
В данном разделе представлены отчеты о тестировании и их описание.
mals-vscode
Extension Tests- тесты возможностей запущенного расширенияConfiguration Tests- тесты конфигурации расширенияActivation Tests- модульные тесты процесса активации расширения
mals-lsp-adapter
--- PASS: TestScannerSplit (0.00s)
--- PASS: TestScannerSplit/complete_valid_message (0.00s)
--- PASS: TestScannerSplit/incomplete_message_no_separator (0.00s)
--- PASS: TestScannerSplit/incomplete_message_partial_content (0.00s)
--- PASS: TestScannerSplit/zero_length_content (0.00s)
--- PASS: TestScannerSplit/invalid_content_length (0.00s)
--- PASS: TestScannerSplit/exact_content_length_match (0.00s)
--- PASS: TestScannerSplit/content_longer_than_specified (0.00s)
--- PASS: TestScannerSplit/multiple_messages_in_buffer (0.00s)
--- PASS: TestScannerSplit/empty_input (0.00s)
PASS
ok mals-lsp-adapter/test 0.002s
mals-engine
--- PASS: TestScannerSplit (0.00s)
--- PASS: TestScannerSplit/complete_valid_message (0.00s)
--- PASS: TestScannerSplit/incomplete_message_no_separator (0.00s)
--- PASS: TestScannerSplit/incomplete_message_partial_content (0.00s)
--- PASS: TestScannerSplit/zero_length_content (0.00s)
--- PASS: TestScannerSplit/invalid_content_length (0.00s)
--- PASS: TestScannerSplit/exact_content_length_match (0.00s)
--- PASS: TestScannerSplit/content_longer_than_specified (0.00s)
--- PASS: TestScannerSplit/multiple_messages_in_buffer (0.00s)
--- PASS: TestScannerSplit/empty_input (0.00s)
--- PASS: TestDecodeRequest (0.00s)
--- PASS: TestDecodeRequest/valid_request (0.00s)
--- PASS: TestDecodeRequest/request_with_different_method (0.00s)
--- PASS: TestDecodeRequest/no_separator (0.00s)
--- PASS: TestDecodeRequest/invalid_content_length (0.00s)
--- PASS: TestDecodeRequest/invalid_JSON (0.00s)
--- PASS: TestDecodeRequest/negative_ID (0.00s)
--- PASS: TestDecodeRequest/zero_ID (0.00s)
--- PASS: TestDecodeNotification (0.00s)
--- PASS: TestDecodeNotification/valid_notification (0.00s)
--- PASS: TestDecodeNotification/notification_with_different_method (0.00s)
--- PASS: TestDecodeNotification/no_separator (0.00s)
--- PASS: TestDecodeNotification/invalid_JSON (0.00s)
--- PASS: TestDecodeNotification/invalid_content_length (0.00s)
--- PASS: TestDecodeNotification/long_method_name (0.00s)
--- PASS: TestEncode/encode_request (0.00s)
--- PASS: TestEncode/encode_notification (0.00s)
--- PASS: TestEncode/encode_response (0.00s)
--- PASS: TestEncode/encode_request_with_negative_ID (0.00s)
--- PASS: TestEncode/encode_LSP_method (0.00s)
--- PASS: TestEncode/unencodable_input (0.00s)
--- PASS: TestUrlFile (0.00s)
--- PASS: TestUrlDirectory (0.00s)
--- PASS: TestUrlDirectorySlash (0.00s)
--- PASS: TestGetLastNChars (0.00s)
--- PASS: TestGetLastNChars/Simple_single_line_-_get_3_chars (0.00s)
--- PASS: TestGetLastNChars/Single_line_-_get_more_chars_than_available (0.00s)
--- PASS: TestGetLastNChars/Multi-line_-_position_at_start_of_second_line (0.00s)
--- PASS: TestGetLastNChars/Multi-line_-_position_in_middle_of_second_line (0.00s)
--- PASS: TestGetLastNChars/Multi-line_-_get_last_chars_crossing_lines (0.00s)
--- PASS: TestGetLastNChars/Empty_content (0.00s)
--- PASS: TestGetLastNChars/Position_at_start_of_content (0.00s)
--- PASS: TestGetLastNChars/Line_beyond_content_length (0.00s)
--- PASS: TestGetLastNChars/Char_beyond_line_length (0.00s)
--- PASS: TestGetLastNChars/Zero_characters_requested (0.00s)
--- PASS: TestGetLastNChars/Multi-line_with_empty_lines (0.00s)



