DSH-CodeEditor_BSL
interactive CodeEditor for BSL
- Stars
- 1
- Language
- JavaScript
- Created
- Aug 20, 2026
- Updated
- Aug 21, 2026
Introduction
dsh-bsl-editor
Редактор кода 1С (BSL) прямо внутри DeepSeek Harness — одно окно, без code-server и Docker.
Открой любую выгрузку конфигурации 1С во вкладке чата DSH: дерево метаданных, редактор Monaco с раскраской BSL, переход к определениям и отправка кода в чат одной кнопкой.
Возможности
🌲 Дерево метаданных 1С
Левая панель переключается между обычным деревом файлов и настоящим деревом метаданных 1С:Предприятия с иконками типов — Подсистемы, Справочники, Документы, Регистры, Общие модули, … → объекты → Реквизиты / Табличные части / Формы / Команды / Макеты / Модули. Клик по модулю — и он открывается в редакторе. Поиск по имени объекта, клик по результату — и вы в нужном модуле.
Три формата выгрузки определяются автоматически: EDT (.mdo), XML-выгрузка из Конфигуратора (ConfigDumpInfo.xml) и пообъектная XML-выгрузка. Дерево ленивое — парсится только то, что раскрываешь, поэтому крупные конфигурации остаются мгновенными.
🎨 Раскраска BSL
Редактор использует официальную TextMate-грамматику 1С (ту же, что в VS Code-расширении 1c-syntax) через monaco-textmate + onigasm. Грамматика вшита в плагин — раскраска не зависит от CDN в рантайме. Ключевые слова, строки, комментарии, &Аннотации, #Область — всё цветное. Сам Monaco грузится с CDN-цепочкой с запасными вариантами (jsdelivr → unpkg → cdnjs).
⚡ Переход к определению без LSP
Особенность — собственный definition-провайдер Monaco на базе модели метаданных, а не перехват клавиши: через него работают F12, Ctrl+Click и «Go to Definition» в контекстном меню — всё без тяжёлого language server:
ОбщийМодуль.Метод()/Справочники.Товары.Метод()→ точный модуль и позиция (миллисекунды);- имя метода без точки → поиск только в текущем модуле;
- повторный F12 циклически перебирает несколько кандидатов и не показывает тост Monaco «No definition found» на промахе.
«Peek Definition» из контекстного меню работает только при включённом LSP.
💬 Отправка кода в чат
Выдели фрагмент в редакторе → правый клик → «Добавить к обсуждению» → код попадает в композер DSH, готовый к вопросу модели.
🔵 Индикаторы изменений git
Бейджи M / A / D у файлов в дереве плюс маркеры на изменённых строках прямо в редакторе — всегда видно, что поменялось в рабочей копии.
🔌 Опциональный LSP (выключен по умолчанию)
Поддержка bsl-language-server (диагностика, автодополнение, hover, форматирование) через WebSocket — по умолчанию выключена, и плагин её никогда не скачивает: включите явно в Settings DSH → «1С-редактор», если у вас установлен bsl-language-server.exe. На очень больших конфигурациях сервер может зависнуть при построении модели конфигурации.
⚙️ Настройки в штатных Settings DSH
Отдельный раздел «1С-редактор» в настройках DSH (рядом с General / Models / Side card): переключатель LSP, порт, путь к бинарнику.
Установка
Скачайте dsh-bsl-editor-0.1.0.tgz из последнего релиза GitHub (или соберите сами: cd dsh-bsl-editor && npm pack) и установите:
dsh plugin --profile web add dsh-bsl-editor-0.1.0.tgz
Либо по прямой ссылке на архив релиза:
dsh plugin --profile web add https://github.com/Mempemp/DSH-CodeEditor_BSL/releases/download/v0.1.0/dsh-bsl-editor-0.1.0.tgz
Затем перезапустите dsh web (host-часть) и обновите вкладку браузера (Ctrl+Shift+R).
Если pnpm ругается на стор (
ERR_PNPM_UNEXPECTED_STORE) — добавьте--store-dir="<путь к вашему pnpm store>"к команде установки.
Плагин не скачивает
bsl-language-server. LSP выключен по умолчанию и запускается только после включения в настройках — и только если бинарник найден по адресу%LOCALAPPDATA%\Programs\bsl-language-server\bsl-language-server\bsl-language-server.exe(или по пути, указанному вами в настройках).
Требования
- DeepSeek Harness (
dsh web), любая актуальная версия - Node.js ≥ 20
- Windows (редактор работает везде, где работает Monaco; сам плагин платформенно-независим)
Конфигурация
| Ключ | По умолчанию | Значение |
|---|---|---|
lspEnabled | false | мастер-переключатель LSP (Settings → «1С-редактор») |
serverPort | 8025 | порт WebSocket bsl-language-server |
serverBin | "" | явный путь к бинарнику; пусто = стандартное место установки |
workspaceDir | "" | переопределение корня workspace; пусто = workspace DSH |
sourceExtensions | [".bsl", ".os"] | текстовые исходники, открываемые как код |
Поддерживаемые форматы выгрузки
| Формат | Признак | Примечания |
|---|---|---|
| EDT | Configuration/Configuration.mdo | объекты из файлов .mdo (реквизиты, табличные части, формы, команды, макеты) |
| XML-выгрузка (Конфигуратор) | ConfigDumpInfo.xml + Configuration.xml | полное дерево из плоского/иерархического списка метаданных |
| Пообъектная XML-выгрузка | корневой Configuration.xml + папки типов (Catalogs/, Documents/, …) | разделы восстанавливаются из файловой системы: Формы / Команды / Макеты / Модули / Предопределённые |
Сопоставление модулей: CommonModules/<Имя>/Ext/Module.bsl, Catalogs/<Имя>/Ext/ObjectModule.bsl, Forms/<Форма>/Ext/Form/Module.bsl, корневой Ext/ManagedApplicationModule.bsl и т.д. — где бы файл ни лежал на диске, узел дерева открывает его.
Структура репозитория
lib/index.js— host-часть (ESM): маршруты/bsl/*(tree, read, search, git, meta, find-symbol), запуск bsl-language-server по требованию.lib/metadata.js— модель метаданных 1С: определение формата + три парсера, ленивая загрузка с кешированием, статическое разрешение символов.lib/client.js— клиентская часть: вкладка «Редактор» в conversation-view (дерево + Monaco, переключатель «Файлы | Метаданные»).resources/— иконки узлов метаданных + официальные TextMate-грамматики 1С.tests/— HTTP и LSP smoke-тесты (запускаются против живогоdsh web).
Благодарности
Структура дерева метаданных и иконки узлов адаптированы из
zerobig/vscode-1c-metadata-viewer
(MIT License, © Ilya Bushin). Поддержка пообъектного формата выгрузки (без
ConfigDumpInfo.xml) — оригинальная работа сверх того расширения.