dsh-edt-projects
Health Warn
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 7 GitHub stars
Code Fail
- process.env — Environment variable access in packages/dsh-edt-projects/cordis.patch.yml
- exec() — Shell command execution in packages/dsh-edt-projects/lib/bsl.mjs
- process.env — Environment variable access in packages/dsh-edt-projects/lib/bsl.mjs
- process.env — Environment variable access in packages/dsh-edt-projects/lib/config.mjs
- process.env — Environment variable access in packages/dsh-edt-projects/lib/index.js
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
Плагин Deepseek Harness для работы с 1С проектами через EDT
dsh-edt-projects
Плагин DeepSeek Harness для
разработки на 1С. Держит подключённым 1C:EDT через
EDT-MCP, поднимает по требованию
BSL Language Server, при необходимости подключает MCP-сервер трекера и
добавляет в системный промпт правила, по которым агент работает с конфигурацией
1С, а не с файлами наугад.
Плагин включается только в выбранных проектах (см. «Где включается»). В
остальных сессиях в контексте остаётся один маленький инструмент edt_config:
ни правил 1С, ни MCP-инструментов, ни навыков там нет.
Что вы получаете
mcp__edt__*— инструменты EDT во включённых проектах. Метаданные и
объекты, формы, СКД, запросы, сборка внешних обработок, YAxUnit — около ста
инструментов сервераedt-mcp-server. Монтируются при создании сессии, а не в
чужие проекты.mcp__bsl__*— BSL Language Server по требованию. Диагностика конкретного
файла, переходы, иерархия вызовов, типы платформы. Монтируется черезedt_pin,
чтобы его схемы не занимали контекст постоянно.mcp__tasks__*— любой MCP-сервер трекера (YouTrack, Jira, GitLab, GitHub)
тем же способом.mcp__v8std__*— стандарты 1С и диагностики. Публичная read-only база
v8std.ru: объясняет код ошибки EDT/BSL и правило, на которое
он ссылается. Подключается по требованию (edt_pin("v8std")); свой инстанс —
черезservers.v8std.urlилиV8STD_MCP_URL.- Настройки на проект. Второй проект — другой
.dsh-1c.json, без перезапуска
DSH: порт EDT, корень исходников для BSL, вики, флаги тестов и навыков. - Свой EDT- workspace в git worktree. В linked worktree плагин сам поднимает
EDT в<worktree>/build/wsна отдельном порту, импортирует проекты и монтируетmcp__edt__*туда — параллельные worktree не мешают друг другу и основному
checkout. Останавливается, когда закрылась последняя сессия. - Вики проекта только для чтения. Пути попадают в промпт, запись по ним
отклоняется на уровне инструментов. - Правила для модели. «Исходники 1С правим только инструментами EDT», точечная
диагностика через BSL, изменения состояния проекта — только по явной просьбе. - Навыки SonarQube и GitLab и правила тестируемости (YAxUnit, Vanessa) —
включаются флагами в конфиге включённого проекта.
Требования
- DSH 0.2.x и профиль (
desktopилиweb). - EDT 2026.1 / 2026.2 с установленным EDT-MCP: Help → Install New Software →
https://ditrixnew.github.io/EDT-MCP/→ EDT MCP Server Feature → перезапуск.
Для основного checkout EDT запускается вручную (п. 3); в worktree плагин находит
установку сам (workspace.homeилиDSH_1C_EDT_HOME, иначе старшая найденная). - MCP-сервер запущен в основном checkout: Window → Preferences → MCP Server →
Server Port и автостарт. Порт по умолчанию —8765, плагин по умолчанию ходит
туда же. В worktree сервер поднимается сам вместе с отдельным workspace. - Plain text mode включён (там же, Plain text mode (Cursor compatibility)).
Без него EDT отдаёт результат как embedded resource, а клиент показывает вместо
него[embedded resource unsupported]— и инструменты становятся бесполезны.
Установка
plugin_manager { action: "install_bundle", target: "dsh-edt-projects" }
Пакет публичный, поэтому этого достаточно: менеджер плагинов возьмёт его из npm и
включит. После установки перезапуск DSH не нужен; инструменты 1С появятся в новой
сессии, каталог которой выбран (см. «Где включается»).
Другие способы — для разработки и закрытых сетей:
| Способ | Что передать |
|---|---|
| локальные исходники | install_bundle с путём C:\git\dsh-edt-plugin\packages\dsh-edt-projects (создаёт link:, правки видны после пересборки профиля) |
| релизный tarball | URL https://github.com/pravets/dsh-edt-projects/releases/download/v0.12.1/dsh-edt-projects-0.12.1.tgz |
| Web UI | Plugins → Add plugin → тот же путь или URL |
Где включается
Плагин не активен глобально: при создании сессии он смотрит на исходный каталог
сессии и решает так:
| Условие | Итог |
|---|---|
enabled: true в настройках проекта или пользователя |
включён |
enabled: false там же |
выключен, даже если есть файл проекта и путь в списке |
в каталоге сессии есть разбираемый .dsh-1c.json |
включён |
каталог (или его предок) есть в projects файла $DSH_HOME/dsh-1c.json |
включён |
| ничего из перечисленного | выключен |
Сравнение путей идёт по границе каталога (C:\git\trade2 не считается проектомC:\git\trade), ~ раскрывается, на Windows регистр не важен. Битый JSON не
включает проект: ошибка пишется в лог, а edt_config остаётся доступным.
Worktree наследует включённость. Если каталог сессии — linked git worktree,
плагин находит его основной checkout (или репозитории первого уровня, как в task
space у dsh-worktree-space) и проверяет enabled, projects и .dsh-1c.json по
ним. Отдельный .dsh-1c.json в worktree не нужен, а если он есть (например,
закоммичен) — он сильнее настроек основного checkout. Подробности и настройка
окружения — в разделе «EDT-окружение в git worktree».
В выключенном проекте от плагина остаётся только edt_config — у него жеaction=init создаёт .dsh-1c.json и тем самым включает проект на лету. В
включённом — правила 1С, mcp__edt__*, edt_servers/edt_pin/edt_unpin/edt_reload, вики, навыки и правила тестируемости.
Быстрый старт
- Установить плагин (команда выше) и начать новую сессию в каталоге проекта.
- Включить проект: в нём вызвать
edt_config action=init(создаст.dsh-1c.json) или добавить путь вprojectsпользовательского файла. - Проверить связку: вызвать
mcp__edt__get_edt_versionиmcp__edt__list_projects. Если инструментов нет — раздел «Диагностика». - Если порт EDT не 8765, или нужна вики, или флаги тестов — дополнить
.dsh-1c.json(см. ниже).
Настройки
Два файла, одинаковый формат, читаются на каждый edt_pin, edt_reload, каждый
шаг и каждый рендер промпта:
| Слой | Файл |
|---|---|
| пользователь | $DSH_HOME/dsh-1c.json |
| проект | <каталог, где создана сессия>/.dsh-1c.json |
Приоритет: проект > пользователь > встроенные значения cordis.patch.yml.
Проект определяется исходным каталогом сессии: cd внутри сессии не
переключает конфиг, корень BSL и пути вики.
{
"enabled": true,
"projects": ["C:\\git\\trade"],
"wiki": { "paths": ["C:\\git\\dev-llm-wiki"], "entry": "wiki/index.md" },
"servers": {
"edt": { "url": "http://127.0.0.1:8765/mcp" },
"bsl": { "root": "C:\\git\\trade\\src\\cf" },
"tasks": { "url": "https://tracker.example/mcp" }
},
"workspace": { "import": "auto", "xmxIde": "6g" },
"tests": { "yaxunit": { "enabled": true, "project": "cfe_yaxunit" } },
"sonar": { "enabled": true },
"gitlab": { "enabled": false }
}
| Ключ | Смысл | По умолчанию |
|---|---|---|
enabled |
явно включить/выключить плагин для проекта | не задан: решают файл проекта и projects |
projects |
каталоги, где плагин включён (обычно в пользовательском файле) | пусто |
servers.edt.url |
адрес MCP-сервера EDT | http://127.0.0.1:8765/mcp |
servers.edt.toolCallTimeoutMs |
таймаут вызова: update_database, run_yaxunit_tests идут дольше 60 с |
900000 |
servers.bsl.jar / url / version |
готовый jar, зеркало или закреплённый тег релиза | не заданы |
servers.bsl.root |
корень исходников для BSL LS | каталог запуска DSH |
servers.bsl.mode |
hybrid (LSP+MCP) или stdio |
hybrid |
servers.tasks.url |
MCP-сервер трекера | не задан |
servers.v8std.url / headers |
адрес MCP-сервера стандартов (свой инстанс) | https://ai.v8std.ru/mcp из cordis.patch.yml |
wiki.paths / wiki.entry |
корни вики и входная страница | пусто |
workspace.enabled |
поднимать ли отдельный EDT-workspace в worktree | true |
workspace.home.win32 / linux |
каталог установки EDT (где 1cedt.exe); пусто — автопоиск |
пусто |
workspace.import |
импорт проектов в новый workspace: true, false, "auto" |
"auto" |
workspace.projects |
шаблоны EDT-проектов для импорта; пусто — все каталоги с .project до 3 уровней |
пусто |
workspace.ports.min / max |
диапазон портов MCP-сервера worktree | 20000–39999 |
workspace.xmxIde / xmxImport |
память EDT и 1cedtcli |
6g / 8g |
workspace.stopOnSessionEnd |
останавливать EDT после последней сессии на worktree | true |
workspace.plainText |
Plain text mode вместо embedded resource (DSH их не рендерит) | true |
workspace.formScreenshots |
включить get_form_screenshot и JVM-флаг nativeFormBufferedLayoutRender |
true |
tests.yaxunit / tests.vanessa |
правила тестируемости | выключены |
sonar.enabled / sonar.projectKey |
навык SonarQube | выключен |
gitlab.enabled |
навык GitLab | выключен |
servers.*.shared больше не работает: сервер всегда монтируется в скоупе
сессии. Полный список ключей, включая servers.bsl.java, cwd, port иservers.*.headers, — в схеме edt_config action=validate и вpackages/dsh-edt-projects/cordis.patch.yml.
Создать файл и дополнить новыми ключами:
node tools/config-init.mjs # .dsh-1c.json проекта
node tools/config-init.mjs --user # $DSH_HOME/dsh-1c.json
node tools/config-init.mjs --dry-run # показать, что добавится
Из сессии то же делает инструмент edt_config: show (действующие значения,
источники и включён ли проект), init, upgrade (дописывает только
отсутствующие ключи, по умолчанию dryRun: true), validate. Существующие
значения не меняются никогда, битый JSON не перезаписывается; enabled в
дефолты не входит, чтобы upgrade не выключил уже включённый проект.
Что применяется на лету:
| Изменение | Как применить |
|---|---|
wiki.paths, servers.bsl.root |
сразу: читаются на каждый запрос и edt_pin |
servers.<name>.url, headers |
edt_reload("edt") — сервер переподключится |
enabled, projects |
сразу: на следующем шаге сессии |
workspace.* |
edt_workspace action=restart — подъём идёт по снимку настроек |
cordis.patch.yml, переменные окружения |
только перезапуск DSH |
Переменные окружения — для разовых запусков и CI:
| Переменная | Что задаёт |
|---|---|
EDT_MCP_URL, EDT_MCP_TOKEN |
адрес и токен MCP-сервера EDT |
TASKS_MCP_URL, TASKS_MCP_TOKEN |
адрес и токен трекера |
V8STD_MCP_URL, V8STD_MCP_TOKEN |
адрес и токен MCP-сервера стандартов (по умолчанию https://ai.v8std.ru/mcp) |
DSH_1C_WIKI, DSH_1C_WIKI_ENTRY |
корни вики через ; и входная страница |
DSH_1C_BSL_LS_JAR, DSH_1C_BSL_LS_URL |
готовый jar или зеркало |
DSH_1C_BSL_LS_VERSION |
закреплённый тег, например v1.0.7 |
DSH_1C_BSL_LS_GITHUB_TOKEN |
токен GitHub для API (иначе GITHUB_TOKEN, GH_TOKEN) |
DSH_1C_BSL_LS_CACHE, DSH_1C_BSL_LS_DOWNLOAD |
каталог кэша и запрет скачивания |
DSH_1C_BSL_LS_ROOT, DSH_1C_BSL_LS_CWD |
корень рабочего пространства и рабочий каталог LS |
DSH_1C_EDT_HOME |
каталог установки EDT для worktree (перекрывает workspace.home) |
DSH_1C_EDT_IMPORT |
1/0 — импортировать ли проекты в workspace worktree |
EDT-окружение в git worktree
Основной checkout работает с одним EDT, запущенным вручную, — и это правильно:
он один. Параллельные worktree так работать не могут: у каждого свой набор
исходников, а один EDT- workspace показывает один набор проектов. Поэтому в linked
worktree плагин поднимает отдельное окружение и монтирует mcp__edt__* на его
порт.
<worktree>/build/
├── ws/ EDT workspace (-data) с prefs MCP-сервера
├── logs/init.log | edt.log | edt-import.log
├── workspace.json снимок настроек, по которому поднимали
├── edt-mcp-port | edt-mcp.pid
├── edt-mcp-ready | edt-mcp-failed маркеры готовности
├── edt-imported | import.script
└── init-progress.json фаза подъёма для статуса
Что происходит при создании сессии в worktree:
- Плагин видит linked worktree и наследует включённость от основного checkout.
- Занимает свободный порт из
workspace.ports, пишет prefs MCP-сервера
(mcpServerAutoStart=true, порт) и снимок настроек вbuild/workspace.json. - Запускает в фоне
init: при необходимости импортирует EDT-проекты
(1cedtcli), стартует1cedtс-data build/wsи ждёт/health.
Первый запуск — 1–3 минуты, с импортом дольше. - Монтирует
edtнаhttp://127.0.0.1:<порт>/mcpс реконнектом: инструменты
появляются, как только сервер поднялся, а неудачное стартовое подключение не
валит сессию. - Когда закрылась последняя сессия на этом worktree, останавливает EDT, если его
поднял сам (workspace.stopOnSessionEnd, по умолчаниюtrue). Окружение,
поднятое opencode, плагин принимает и не останавливает.
Состояние, порт, фазу и логи показывает edt_workspace:
| Действие | Что делает |
|---|---|
status |
корень, build/ws, состояние (absent/stopped/starting/ready/stale/failed), порт, pid, фаза, число импортированных проектов, предупреждения |
init |
поднять (или повторить неудачный запуск); возвращается сразу, работа идёт в фоне |
stop |
остановить EDT этого worktree |
restart |
остановить и поднять заново; import: true — заново импортировать проекты |
import |
импорт при остановленном EDT (если запущен — подскажет restart) |
Настройки — в обычных файлах плагина, секция workspace:
{
"workspace": {
"home": { "win32": "C:\\Program Files\\1C\\1CE\\components\\1c-edt-2026.1.2+2-x86_64" },
"root": "",
"import": "auto",
"projects": ["src/cf", "src/cfe/*", "src/epf/*"],
"xmxIde": "6g",
"ports": { "min": 20000, "max": 39999 },
"stopOnSessionEnd": true
}
}
workspace.homeпустой — плагин берёт старшую найденную установку EDT
(C:\Program Files\1C\1CE\components\1c-edt-*,/opt/1C/1CE/components),
предпочитая ту, где вplugins/featuresесть EDT-MCP. Java ищется рядом
(jdk-full-17),workspace.vmперекрывает.workspace.import: "auto"импортирует, только если в workspace ещё нет
проектов.true— импортировать по спискуworkspace.projects(пусто — все
каталоги с.projectдо трёх уровней),false— не импортировать (проекты
можно добавить в EDT вручную).workspace.rootпустой — окружение в корне worktree. Если в task space
несколько включённых репозиториев, берётся первый по сортировке и вstatus
появляется предупреждение;workspace.root(абсолютный или относительный от
корня worktree) выбирает нужный.build/должен быть в.gitignoreрепозитория (у типовых 1С-проектов уже там).
Если это не так,statusпредупредит; чужие.gitignoreплагин не правит.
Уборка без DSH:
node tools/edt-workspace.mjs status --root <worktree>
node tools/edt-workspace.mjs stop --root <worktree>
node tools/edt-workspace.mjs stop-all --repo C:\git\trade
Окружение поднимается только в linked worktree. Обычный каталог, основной
checkout и выключенный проект ничего не запускают — там работает EDT изservers.edt.url. Механизм не зависит от конкретного плагина worktree: подходитgit worktree add, task space из dsh-worktree-space, worktree opencode и
экспериментальный create_worktree DSH — плагин определяет worktree по .git-
файлу и commondir, без вызова git и без чужих событий.
Совместно с dsh-git-worktree
Плагин рассчитан на работу с dsh-git-worktree: он создаёт
изолированный worktree в <repo>/.dsh/gitworktree/<branch>/, регистрирует его как обычный DSH
Workspace и открывает там сессию.
- Специальной настройки не нужно: worktree определяется по
.git-файлу иcommondir, поэтому
in-repo layout и legacy~/.dsh/gitworktreeподдерживаются одинаково. - Если сессия открыта в основном checkout, но
workingDirectoryуказывает в worktree этого же
репозитория, плагин считает проектом worktree и поднимает окружение там. build/окружения лежит внутри worktree, который и так исключён из git; освобождать каталог
вручную не требуется.- Перед удалением worktree закройте сессию (
stopOnSessionEndостановит EDT) или вызовитеedt_workspace action=stop.
Скриншоты форм и plain text
DSH не рендерит embedded resource, поэтому в workspace сразу включаются:
mcpPlainTextMode=true— EDT-MCP отдаёт markdown/текст вместо resource (list_projects,get_project_errorsи т.д.). Настройкаworkspace.plainText: falseвозвращает прежнее
поведение сервера. Ключ пишется вbuild/ws/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.ditrix.edt.mcp.server.prefs
до запуска EDT (там жеmcpServerHttpEnabled=true); сервер читает его черезActivator.getPreferenceStore()при каждом вызове инструмента, но store кэшируется на
время работы — если EDT уже запущен, нуженedt_workspace action=restart. Отдельной
переменной окружения для plain text в EDT-MCP нет.mcpDisabledToolsбезget_form_screenshotи JVM-флаг-DnativeFormBufferedLayoutRender=trueпосле-vmargs— иначеget_form_screenshotна Windows
не работает. Настройкаworkspace.formScreenshots: falseвыключает и флаг, и инструмент.
На Windows этот флаг включает буферизованный рендер форм на всю сессию EDT: собственный
дизайнер форм показывает серый прямоугольник — это поведение EDT, а не плагина. Смена
флага требует перезапуска окружения (edt_workspace action=restart).
Серверы по требованию
Собственные инструменты плагина названы с префиксом edt_, чтобы не пересекаться
с чужими MCP-плагинами и с серверными mcp__edt__*:
| Инструмент | Что делает |
|---|---|
edt_config |
настройки плагина: включение проекта, вики, тесты, серверы, навыки; show/init/upgrade/validate |
edt_servers |
состояние серверов: mounted, lazy, unavailable, failed, транспорт, число инструментов |
edt_pin |
монтирует сервер; его инструменты появляются в следующем же запросе модели |
edt_unpin |
снимает сервер и освобождает контекст |
edt_reload |
перечитывает настройки и перезапускает серверы с изменившимся конфигом |
edt_workspace |
окружение EDT в worktree: status/init/stop/restart/import |
edt_config доступен всегда — им включают проект. Остальные пять видны только
во включённом проекте.
EDT монтируется при создании сессии включённого проекта (lazy: false), BSL LS,
трекер и v8std — по требованию. Каждая сессия (и субагент) получает свой MCP-клиент:
для EDT это отдельное HTTP-подключение, отдельный workspace в EDT не создаётся.
Ошибка подключения не валит старт: сервер остаётся в состоянии failed, клиент
продолжает реконнект в фоне. Для bsl корень можно передать прямо при
монтировании: edt_pin("bsl", root: "C:\\git\\trade\\src\\cf").
BSL Language Server
Если servers.bsl.jar не задан, плагин скачивает сервер сам при первомedt_pin("bsl"): из кэша → со страниц релизов GitHub → через API (если задан
токен) → по предсказуемому адресу → из любого другого jar в кэше. Файл пишется как.part и переименовывается только после сверки sha256; несовпадение хеша
обрывает загрузку, а не повторяется без проверки.
- Без токена загрузка идёт со страниц релизов и не упирается в лимит GitHub API
(60 запросов в час на IP). СDSH_1C_BSL_LS_GITHUB_TOKEN— 5000/ч, API первым. - Если лимит всё же исчерпан, ошибка называет время сброса и выходы: задать токен,
закрепитьDSH_1C_BSL_LS_VERSION, указатьURLили готовыйJAR. - Кэш (
$DSH_HOME/cache/bsl-language-server) переиспользуется: следующиеpin
не ходят в сеть.
Гибридный режим. BSL LS узнаёт о рабочих пространствах только через MCP roots,
а dsh-mcp-client этот capability не объявляет. Поэтому плагин запускаетjava -jar … lsp --mcp --server.port=<порт> и сам отправляет LSP-initialize сworkspaceFolders, а клиент подключает к http://127.0.0.1:<порт>/mcp. Один процесс
обслуживает и LSP, и MCP. Границы конфигурации задаёт DSH_1C_BSL_LS_ROOT; если
корень не тот, межфайловые операции работают хуже, чем могли бы.
Стандарты и ошибки (v8std)
v8std.ru — публичная база стандартов 1С и диагностик с
MCP-эндпоинтом https://ai.v8std.ru/mcp (страница v8std.ru/mcp/ — это описание,
а не адрес сервера). Плагин подключает её как сервер v8std: он только читает и
объясняет, но не анализирует проект и не меняет код.
| Инструмент | Что делает |
|---|---|
v8std_explain_diagnostics |
по коду из отчёта EDT/BSL (acc 1245, АПК:361, bslls:AssignAliasFieldsInQuery, v8cs) находит диагностику, связанные стандарты и частоту |
v8std_search |
поиск по базе: тема, вопрос или неточный идентификатор |
v8std_get_page |
полный Markdown статьи по id, псевдониму или URL (std437) |
v8std_get_related |
связи стандарта и диагностик |
v8std_explain_snippet |
эвристический разбор одного метода BSL или фрагмента SDBL |
Порядок, которому следуют правила плагина: EDT (get_project_errors) или BSL LS
(analyze_file) выдал код → edt_pin("v8std") → v8std_explain_diagnostics →v8std_get_page → правка через EDT-MCP. Результат поиска — справка, а не
подтверждение нарушения: проверку даёт анализатор, v8std объясняет правило.
Сервер ленивый, чтобы пять его схем не занимали контекст постоянно. Значение по
умолчанию (https://ai.v8std.ru/mcp) живёт в cordis.patch.yml, поэтому файл
настроек его не перекрывает, пока вы сами этого не захотите. Переопределение — в
любом из файлов настроек, приоритет как обычно проект > пользователь > патч:
{ "servers": { "v8std": { "url": "http://v8std.example:8080/mcp" } } }
Переменные: V8STD_MCP_URL (адрес) и V8STD_MCP_TOKEN (Bearer, если инстанс
требует авторизацию). Чтобы держать сервер подключённым всегда, добавить"servers": {"v8std": {"lazy": false}}. Без сети сервер останется в failed —
остальные инструменты работают, а правила требуют сказать об этом, а не придумывать
стандарт.
Вики проекта
При заданном wiki в промпт добавляется блок с путями и входной точкой, а запись
по этим путям запрещена на уровне инструментов: edit, write,str_replace_editor и apply_patch отклоняются с сообщением «Вики доступна только
для чтения». Чтение (read, grep, glob) работает как обычно — это документация,
а не конфигурация, правило «правки только через EDT» к ней не относится.
Входная точка ищется по порядку: entry из настроек → wiki/index.md →index.md → README.md → AGENTS.md. Несуществующие каталоги отбрасываются с
предупреждением в лог.
Тесты и навыки
Флаги включают в промпт правила тестируемости:
{ "tests": { "yaxunit": { "enabled": true, "project": "cfe_yaxunit" }, "vanessa": { "enabled": true } } }
yaxunit— закладывать тестируемость: логика отдельными процедурами без побочных
эффектов, зависимости параметрами, тонкие обработчики, изоляция через Мокито;
тесты писать в указанный проект.vanessa— если юнитов мало (интеграция, обмен, интерфейс, печатные формы),
предлагать 2–3 сценария с шагами и ожидаемым результатом, не создавая их молча.
Навыки появляются в каталоге только во включённом проекте и при включённом флаге;
они приходят из пакета, так что проектный навык с тем же именем их переопределяет:
{ "sonar": { "enabled": true }, "gitlab": { "enabled": true } }
Адреса и ключи в текстах навыков не зашиты: сервер Sonar, ключ проекта, GitLab-хост
и glab-авторизация определяются в момент работы. Мерж, force-push и пуш в основную
ветку запрещены текстом навыка.
Правила для модели
Во включённом проекте плагин добавляет в системный промпт одну секцию: искать
структуру и метаданные через edt__*, а не файловым поиском; править исходники
1С только инструментами EDT (write_module_source, create_metadata,modify_metadata, dcs, apply_quick_fix), иначе модель EDT разъезжается с
диском; точечную диагностику брать у bsl__analyze_file, а не уget_project_errors; типы платформы сверять по bsl__type_info; менять состояние
проекта (update_database, удаление, переименование) только по явной просьбе.
Если нужного инструмента в EDT нет, модель должна остановиться и назвать операцию,
а не обходить ограничение файловыми правками. Секция собирается под фактически
настроенные серверы: пока bsl не смонтирован, про его инструменты в промпте нет ни
строки. В выключенном проекте секция пустая и в промпт не попадает.
Диагностика
| Симптом | Что делать |
|---|---|
нет mcp__edt__* |
edt_config action=show → включён ли проект; затем edt_servers → состояние edt, порт и запущенный сервер в EDT |
edt_pin("bsl") падает «не удалось получить релиз» |
задать DSH_1C_BSL_LS_JAR, URL или VERSION; при лимите — DSH_1C_BSL_LS_GITHUB_TOKEN |
[embedded resource unsupported] |
включить Plain text mode в настройках MCP-сервера EDT |
| BSL не видит файлы конфигурации | задать DSH_1C_BSL_LS_ROOT (корень исходников) |
edt_pin("v8std") не подключается |
проверить V8STD_MCP_URL / servers.v8std.url, доступ к сети или свой инстанс; без него стандарты можно смотреть на v8std.ru |
| правки не видны в EDT | править через edt__*; после ручной правки — revalidate_objects или resync_to_disk |
| плагин не появился в списке | plugin_manager list_bundles; проверить, что версия DSH ≥ 0.2.0 |
в worktree нет mcp__edt__* |
edt_workspace action=status: starting — подождать (импорт 19 проектов ≈ 11 мин), failed — смотреть build/logs/edt.log, off — проверить, что это linked worktree и проект включён |
edt_workspace status: «EDT-MCP не подтверждён по файлам» |
это только эвристика: бандл может стоять в пользовательской ~/.eclipse/...; готовность подтверждает /health после ready |
edt_workspace status: EDT не найден |
задать workspace.home.win32 или DSH_1C_EDT_HOME |
EDT падает сразу после старта, failed за секунды |
проверить status → «Java … (EDT требует N)»; задать workspace.vm на jdk-full-<N> или убрать -vm |
| импорт в worktree завис/упал | прогресс и хвост — в build/ws/.metadata/.log (он же digest в build/logs/edt-import.log); повторить edt_workspace action=init, при необходимости restart с import: true |
get_form_screenshot нет в tools/list |
workspace.formScreenshots должен быть true; после restart проверить prefs mcpDisabledTools и флаг -DnativeFormBufferedLayoutRender=true |
| после переименования каталога плагина ошибки про старый путь | переустановить плагин: remove_bundle, затем install_bundle |
Живая проверка без DSH: npm run check:edt — печатает версию сервера, число
инструментов и делает два безопасных вызова.
Разработка
packages/dsh-edt-projects/ бандл: манифест, cordis.patch.yml, lib/, skills/, locale/, иконка
tools/ проверки, тесты, smoke, заглушка MCP
.github/workflows/ CI, Release по тегу, Smoke по расписанию
npm ci # зависимости проверок
npm run validate # манифест, патч, локали, иконка, готовность к публикации, порт
npm test # 201 проверка: правила, BSL, конфиг, включение, worktree, окружение, вики, схема, навыки, cwd
npm run pack:check # состав tarball
npm run check:edt # живой MCP-сервер EDT
npm run smoke # прогон бандла в одноразовом профиле DSH
npm run workspace -- status --root <worktree> # окружение worktree без DSH
npm run workspace:stop-all -- --repo C:\git\trade
Smoke ставит бандл из dist/*.tgz в одноразовый DSH_HOME, проверяет композицию
профиля и поднимает заглушку MCP на порту из патча. Затем дважды стартует headless
сессию: из каталога без .dsh-1c.json (заглушка не должна получить initialize) и
из каталога с .dsh-1c.json (должна). Нужен установленный DSH
(npm i --no-save @deepseek-ai/[email protected] или DSH_BIN); если порт занят живым
EDT — задайте SMOKE_PORT.
Релиз: поднять version в packages/dsh-edt-projects/package.json, добавить
запись в CHANGELOG.md, поставить тег vX.Y.Z и запушить. release.yml сверит тег
с версией, соберёт tarball, приложит его к GitHub Release и опубликует версию в npm
через trusted publisher (OIDC, без токенов и секретов).
Версионирование
Проект в статусе беты и версионируется как 0.x (текущая — v0.12.1). Между 0.x
без миграции могут меняться ключи конфига, имена инструментов и структураcordis.patch.yml; edt_config upgrade дополняет файл, но совместимость не
гарантирует. Версия 1.0.0 будет означать зафиксированный API. История — в
CHANGELOG.md.
Лицензия
MIT — см. LICENSE.
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found