Skip to main content
Glama
ALasek
by ALasek
# DCS Mission Authoring Gateway

`dcs-me-gateway` — это локальный MCP-сервер между AI-проектировщиком миссий и мостом Mission Editor [DCS-SMS](https://github.com/nielsvaes/dcs-sms). Он превращает множество хрупких команд редактора в небольшой, версионируемый протокол разработки миссий.

Шлюз не нажимает элементы интерфейса и никогда не фокусирует DCS. Запросы записываются в существующий почтовый ящик DCS-SMS. Если DCS не в фокусе и цикл обновления Mission Editor замедлен, запрос остаётся в очереди, пока тики не возобновятся или не истечёт выбранный вызывающим кодом срок.

## Реализовано в 0.9

* Тридцать пять MCP-инструментов: обнаружение обновлений, создание/валидация миссий, предварительная обработка постоянной семантической карты и гидрологии, офлайн-запросы, инспекция живой карты, распределение живых авиабаз и палубных пакетов, нативная маршрутизация транспорта, обнаружение загрузок, созданных DCS, обнаружение живых AI-задач, планирование профилей/времени полёта, шаблоны пакетов, чертежи, детерминированные документы миссий, опциональная настройка Skynet-IADS и ограниченное офлайн-управление внешним контентом.

* Сорок один операционный патч для среды миссии, групп, юнитов, нагрузок, маршрутов, типизированных параметров и поведения путевых точек, именованных групповых триггерных действий, триггеров, круговых зон, групповых частот и позывных юнитов.

* Стабильные логические ссылки, включая присвоение существующих именованных сущностей миссии и выделенных DCS имен юнитов.

* Рекомендации по проектированию миссий объявляются как инструкции при инициализации MCP-сервера, а не только как опциональный ресурс/подсказка, поэтому совместимые клиенты автоматически получают значения по умолчанию для планирования, тайминга, загрузки и AI-политики.

* Компактные семантические снимки, детерминированные версии, оптимистическая параллельность и проверка постусловий для каждой операции.

* Привязки и записи идемпотентности для каждой миссии, защищённые атомарными записями и межпроцессной блокировкой.

* Абсолютное истечение срока действия запроса и явная обработка `OUTCOME_UNKNOWN` предотвращают позднее выполнение и небезопасное повторное воспроизведение после потери ответа.

* Проверенный патч отправляется в Mission Editor как один вызов; частичные зафиксированные префиксы записываются, если последующая операция завершается ошибкой.

* Фрагменты миссий в форме префабов используют выделенную транзакционную конечную точку DCS-SMS с нативной ID/имени-аллокацией, переназначением перекрёстных ссылок, откатом и защитой от повторных запусков на стороне редактора.

* Проверка «сохранить/открыть» ждёт стабильной семантической ревизии и переносит привязки при изменениях идентичности Save As.

* Исправлены совместимость для маршрутов автомобильных юнитов, созданных DCS-SMS, и устаревшего владения панелью маршрутов Mission Editor.

* Нет MCP-инструмента с произвольным Lua.

* Аннотации карты F10 с отслеживанием ревизий поддерживают проверенные пакеты кругов, линий, полигонов, текстовых меток и удалений без отдельного инструмента для каждой фигуры.

* Управляемый данными каталог шаблонов миссий возвращает настраиваемые компоновки S-300PS/Buk и поэтапные маршруты AWACS/заправщиков. Оба SAM-пакета проверяются в реальном времени против установленной базы данных юнитов DCS; это функциональные, репрезентативные отправные точки, а не точные реальные боевые порядки.

* Создание палубных пакетов обнаруживает живую лицензию Supercarrier, доступ к свободным/платным корпусам и авианосц-совместимые самолёты из метаданных категорий полос установленного DCS. Одна транзакция может разместить авианосец один или вместе с репрезентативным синим/красным сопровождением, рассчитать ветер над палубой, настроить поддерживаемые действия TACAN/ICLS/Link-4/ACLS, привязав старт самолётов и опциональные путевые точки восстановления к палубе, а также применить именованные загрузки и боевые расходники.

* Базовая настройка связи записывает групповые частоты и нормализованные позывные юнитов. Офлайн-валидация предупреждает о конфликте частоты в группе АВАКС/заправщиков.

* Кэшированная местность может отвечать на вопросы о координатах/высоте и прямой видимости по рельефу с явными точками препятствий. Здания и растительность не входят в эту модель.

* Смешанное авторство включает детерминированный досье игрока, а также наложение внешнего содержимого `.miz` с копированием при записи. Досье считывает позывной, самолёт, маршрут, время, радио, помощь на авианосце, боекомплект, топливо, пушку и всё – из закреплённой сохранённой миссии; опциональный текстовый боевой текст остаётся явным вводом агента. Страницы маршрутов используют чистую кэш местности DCS с отключёнными семантическими наложениями и наложениями F10. Наложение управляет авиационными/общими планшетами, текстом карты и изображениями, а также ограниченными образами/звуками/Lua-ресурсами без сохранения исходной миссии.

* Резюмируемый кэш тайлов извлекает авторитетные данные высот и типов поверхностей DCS, вычислиет склон, экспозиция, шероховатость и/полирует кандидаторы на гребни/узлы/перевалы, затем создаёт чистую PNG-карту и аннотированную контекстную PNG без вызова DCS для последующих запросов.

* Независимо от резюмируемый гидрологический слой по умолчанию выбирает данные поверхности DCS с разрешением 50 м без перестроения высот, склонов или семантических областей. Он упаковывает каждый образец в два бита, пропускает высокоуверенные однородные сушу и открытые морские базовые тайлы, выводит ограниченные восьмисвязные речные/озёрные компоненты с отдельно указанным консервативным сшиванием коротких разрывов и может развернуться из валидированного среза до покрытия полного набора данных со стабильными ID тайлов.

* Каждый кэш хранит именованные места, созданные в DCS, и метаданные фиксированных авиабаз, включая пороги взлётно-посадочных полос/длину, конверты стоянки, флаги укрытий и производные группы перронов. Метки мест остаются явно неранжированными, поскольку источники Input `towns` DCS дают имена и координаты без уровней важности.

* Фрагментовированный граф с ограниченными рёбрами кэширует дороги и железные дороги, нативные DCS, между соседними авиабазами и именованными местами, включая объезд, высотные условия, присоединение конечных точек и свидетельства о переходах через воду. Офлайн-маршрутизация остаётся доступна для точных конечных точек, потому что кэш не является полной экспортируемой дорожной сетью.

* Гибридные области поселений — буферизованные кластеры именованных мест с явной поговоркой и рекомендуемыми границами обзорной карты. Это не контуры зданий; отдельные объекты остаются визуальной задачей инспекции карты.

* Семантический кэш также хранит запрашиваемые сущности авиабаз, поселений и именованных мест, а также цельные территории, классифицированные по поверхности, высоте, наклону, шероховатости и признакам низкого деталя. Области используют компактные строки и записывают соседние отношения, не пред подавая себя как административные границы реального мира.

* Резюмируемый макротранспортный граф использует авиабазы и поселения в качестве узлов. Его рёбра — это нативные пути DCS (дороги/железные дороги) с закреплёнными конечными точками и технологическими порталами, поэтому офлайн-запрос может выбрать маршрут с несколькими рёбрами, в то время как живой DCS-маршрутизатор остаётся авторитетом для точной геометрии первого/последнего километра конвоя.

* Инспекция карты по запросу подстраивает живую карту ME под запрошенные границы, захватывает только её виджет карты, записывает геопривязанный PNG и усиливает предыдущую камеру. Проверка кадра движения камеры отклоняет снимки скрытого редактора (например, если реально на экране F10 активной миссии).

* Препроцессинг автоматически проверяет форму кэшированных файлов, общие границы тайлов и 16 детерминированных точек против живого DCS. Тот же отчёт можно перезапустить с помощью `validate_map_dataset` или с отключённой живой паритетностью для офлайн-квализации.

* Консервативное смещение определяет признаки низкой плотности и сохраняет только грубый тайл, когда почти однородная суша проходит каждый порог; оно не молча приравнивает обычный плоский рельеф к статус-квоック на оправ государца.

* Сохранённые golden fixtures, офлайн-тесты archive/Lua/reference и изолированный живой авторский стенд, который редактирует существующий файл, восстанавливает оригинал и проверяет хеш.

* Планирование авиабазы в реальном времени использует фильтр самолётной упаковки DCS и его данные категорий, открытые зарезервированных места, наземный ветер и положения, маркированные на дорожках, а также аппроксимацию такси до возможного порога. Проверенное создание поддерживает холодный, горючий и издевный старты для одного–четырёх самолётов, а также создаёт частично построенную группу при ошибке этапа. Стратегия активного направления может переназначить собственный компактный выбор места на проверенный предпочтительный набор.

* Предустановленное авторство нагрузки запрашивает установленную сборку DCS для именованных авиационных наборов, вложений, их заявленной совместимости, классов и веса. Патчи могут применить один пресетий или сделать ограниченную корректировку по пилону; шлюз никогда не просит модель изобретать CLSID или полный маршрут нагрузки. Также при военной автодоставке явно проверяется доля боезапаса пушеч; бескорпусный самолёт предупреждается, если это намеренно.

- Обнаружение живых задач перечисляет только те точки маршрута и активности по пути, которые DCS предоставляет для существующей группы; описания задач обеспечивают значения по умолчанию, допустимые варианты и недостающие указания по выбору целей, прежде чем будет разработан патч.

- Даты/время миссии и существенные поля погоды можно прочитать в каждом семантическом снапшote и записываются как операция среды с проверкой ревизией. В типизированных опциях точки маршрута включены «Реакция на угрозу», ВПВ, использование радара/ЭФО, отсутствие аварии возврат на базу (Bingo RTB), радиомолчание и запрет сброса/форсажа.

- Ролевые профили самолётов с фиксированным крылом и прозрачные оценки запуска/руления/взлёта/набора высоты помогают синхронизировать прибытие пакета. Офлайн-линт предупреждает, когда AI перехват/rumor начинает свой путь низко или медленно.

- Офлайн-линт поведения предупреждает о невоорönженных боевых самолётах AI, боевых группах без связанного боевого задания, целевых столидиях без целевых ID, семантических именах точек маршрута без соответствующего поведения, и воздушных маршрутах без конечного действия (посадки/орбита/петли). Линт целей также предупреждает о противоположных исходах, которые могут оба словить, условия параллельного удержания при одном выжившем члене группы, исключённых из всех известных условий инструкции группах, и точках перехвата, назначенных группам без самолётов. Это евристические замечания о построении миссии, а не безопасности достоверности AI-поведения DCS.

Шлюз **не** претендует на откат для декларативных исправлений. Команды малых исправлений DCS-SMS выполняются последовательно в одном обратном вызове ME; если команда N завершится ошибкой, команды с 1 по N-1 могут быть уже применены. Результат кофикса фиксирует применённый префикс и ключ идемпотентности, что предотвращает слепой повторный запуск. Отдельная точка `apply_mission_fragment` имеет внутренний откат DCS-SMS и обязательно указывает на неполный откат. Если окончательный результат или снапшот после применения не могут подтвердить требование результат, шлюз возвращает `OUTCOME_UNKNOWN` и требует проверки миссии перед восстановлением; он никогда не делает вид, что не прошедшая проверка отклонила сам факт изменения. Будущая транзакционная команда патча описана в [`docs/dcs-sms-extension.md`](docs/dcs-sms-extension.md). Поскольку живая семантическая ревизия не содержит данных складов, шлюз консервативно блокирует кэшированное восстановление фрагментов, содержащих эффекты складов; проверьте миссию перед выбором нового ключа. Чертежи включены в семантические ревизии и проверки «сохранить/открыть».

Ревизии и новые проверки «сохранить/повторно» охватывают API-поверхность протокола авторства версии 0.1: семантическая среда, группа, юнит, маршрут, триггер, зона, записи рисунков, а также путь миссии и театр. Брифинг, склады и глобальные параметры миссии не входят в текущую границу ревизии.

DCS сохраняет курсы юнитов на уровне группы. Поэтому семантический снимок использует веду выдел юнита для каждого юнита этой группы. Попытка назначить разный постоянный курс только неведущему юниту приведёт к провалу проверки постусловия, а не к молчаливому дрейфу после повторного обновления.

## Требования

* Выпуск для Windows включает свой собственный runtime Node.js. Разработка из определений версий требует Node.js 20 или новее.
* Windows, DCS World и DCS-SMS ME-мод для инструментов живого эдитора.
* Mission Editor должен быть открыт с включённым пунктом `DCS-SMS -> External execution` для изменений.
* `inspect_map_view` дополнительно требует, чтобы карта Editor открыта не в свёрнутом окне. DCS может оставаться не в фокусе или быть закрытым; шлюз захватывает своё окно приложения без вывода фона на передний план и не использует фоновый захват, зависящий от одного мониторакаффе.

Извлечение карты требует типизированных глаголов terrain info, terrain sample-grid, terrain list-places, terrain nearest-transport, terrain transport-path, airbase plan-start и airbase create-start в сопутствующем рабочем дереве DCS-SMS ME-mod 0.32.4.

Установка Windows-релиза

Релиз представляет собой один ZIP-архив. Он включает шлюз, зафиксированные производственные зависимости, переносимую среду выполнения Node и совместимый исходный код моста DCS-SMS Mission Editor. Он не требует отдельной установки DCS-SMS и не устанавливает хук миссии DCS-SMS или дополнительные файлы LuaSec/OpenSSL.

Распакуйте ZIP, закройте DCS и выполните:

powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1 -Clients codex

Поддерживаемые значения -Clients: codex, claude-code, claude-desktop и generic; можно передать несколько. generic записывает переносимый mcp-config.json. Codex и ChatGPT desktop используют общую локальную конфигурацию MCP от Codex. Claude Code и Claude Desktop регистрируются независимо. Другие клиенты могут использовать ту же команду stdio и окружение из файла generic. ChatGPT в вебе не может напрямую запустить локальный stdio-сервер; этот пакет предназначен для ChatGPT desktop/Codex на машине, где запущен DCS. См. текущую документацию OpenAI MCP и документацию Claude Code MCP для их нативных поверхностей конфигурации.

Установщик:

  • обнаруживает DCS и Saved Games или принимает -DcsPath и -SavedGames;

  • проверяет, что в DCS отключён Full Screen, но никогда не изменяет эту настройку;

  • отказывается патчить Mission Editor, пока DCS запущен;

  • создаёт резервную копию пользовательского MissionEditor.lua и любого предыдущего моста;

  • устанавливает встроенный исходный код моста GPLv3 и добавляет только свой разграниченный блок require в собственный файл редактора пользователя; и

  • регистрирует только запись MCP dcs-me, запрошенную пользователем, и привязывает эту запись к выбранному экземпляру Saved Games.

При запуске MCP шлюз проверяет конечную точку последнего стабильного релиза GitHub с таймаутом 2,5 секунды и локальным кэшем на шесть часов. Когда доступна более новая семантическая версия, его инструкции MCP сообщают агенту спросить пользователя, обновлять ли. Проверка никогда ничего не устанавливает. После явного одобрения закройте DCS и все MCP-клиенты, использующие шлюз, затем выполните:

powershell -NoProfile -ExecutionPolicy Bypass -File `
  "$env:LOCALAPPDATA\DcsMeGateway\update.ps1"

Обновлятор снова спрашивает перед изменением, загружает только версионированный Windows-релиз, проверяет его отдельно опубликованный SHA-256 и вызывает обычный установщик с сохранением резервных копий. Установите DCS_ME_GATEWAY_UPDATE_CHECK=0, чтобы отключить автоматическую проверку. check_gateway_update выполняет проверку по требованию или принудительную. Теги предварительных версий намеренно исключены из этого канала обновления.

Для установки под руководством агента передайте извлечённую папку агенту и попросите его следовать VIBEINSTALL.md. После установки перезапустите MCP-клиент, откройте миссию в DCS Mission Editor и включите DCS-SMS -> External execution. Этот переключатель действует только в рамках сеанса.

Шлюз имеет лицензию MIT. Встроенный мост DCS-SMS остаётся под GPLv3 и поставляется с полным исходным кодом и лицензией в payload/bridge; см. THIRD_PARTY_NOTICES.md.

Related MCP server: DCS Lua Runner MCP Server

Установка из исходников и проверка

cd C:\path\to\dcs-me-gateway
npm install
npm test
npm run build
npm run test:golden
npm run test:live

Всё вплоть до test:golden полностью офлайн; DCS может оставаться закрытым. Проверьте любую сохранённую миссию независимо с помощью:

npm run validate:miz -- D:\Missions\mission.miz

Проверяющий инструмент проверяет целостность ZIP и ограничения на развёртывание, обязательные записи, буквальный синтаксис Lua, структуру миссии, ID/имена, маршруты, координаты, ссылки на сущности, ключи словаря и упакованные ресурсы. Он разбирает Lua в данные без загрузки или выполнения кода миссии.

Имея декларативный патч и сохранённые файлы непосредственно до и после него, создайте сфокусированный отчёт о приёмке с помощью:

npm run report:patch -- patch.json before.miz after.miz [bindings-before.json] [bindings-after.json]
npm run docs:render -- --mission <saved.miz> --dataset <dataset-id> --output <new-directory>

Отчёт содержит прямые цели патча, контекст зависимостей на один переход, постусловия операций, введённые/разрешённые результаты проверки и любые изменённые сущности вне этой области. Он завершается ненулевым кодом, если файл после изменения недействителен, постусловие не выполняется, зависимость изменилась неожиданно, несвязанные метаданные/параметры/склады миссии изменились или изменилась сущность вне области. Патчи, ссылающиеся на логические ID, созданные ранее, должны предоставлять соответствующий объект привязки {"entities": ...} (до и, если распределения изменились, после); неразрешённые ID явно сообщаются и приводят к провалу приёмки.

test:live читает только сеанс редактора. Добавьте -- --snapshot для живого снимка миссии только для чтения.

npm run test:live-authoring намеренно изменяет данные. Он требует, чтобы сохранённая миссия уже была открыта в Mission Editor. Тестовая обвязка сначала клонирует эту миссию через Save-As в .artifacts/live, редактирует только клон, проверяет идемпотентность, конфликты ревизий, редактирование маршрутов, зоны и стабильность сохранения/повторного открытия, затем снова открывает оригинал и проверяет, что его SHA-256 не изменился. Он не запускает и не выполняет миссию.

Запустите MCP-сервер через stdio:

node C:\path\to\dcs-me-gateway\build\index.js

MCP-хост должен настроить эту команду и путь как stdio-сервер с именем dcs-me. Диагностика идёт в stderr; stdout зарезервирован для кадров MCP.

Конфигурация

Переменная окружения

По умолчанию

Описание

DCS_ME_GATEWAY_SAVED_GAMES

автоопределение

Корневой каталог экземпляра DCS Saved Games

DCS_SMS_SAVED_GAMES

автоопределение

Совместимое переопределение DCS-SMS; также принимается

DCS_ME_GATEWAY_STATE

<DCS_SAVED_GAMES>\dcs-me-gateway

Состояние привязок и идемпотентности

DCS_ME_GATEWAY_MAP_CACHE

<DCS_ME_GATEWAY_STATE>\maps

Постоянные наборы тайлов местности и предпросмотры

DCS_ME_GATEWAY_MAP_REGISTRY_FILE

в комплекте maps\registry.json

Встроенный реестр карт-паков и указатель удалённого реестра

DCS_ME_GATEWAY_MAP_REGISTRY_URL

указатель реестра или нет

Явное переопределение HTTPS-реестра карт-паков

DCS_ME_GATEWAY_TIMEOUT_MS

60000

Предельный срок по умолчанию для live-smoke

DCS_ME_GATEWAY_POLL_MS

100

Интервал опроса почтового ящика

DCS_ME_VIEWER_PORT

4317

Порт локального просмотрщика семантических карт (только localhost)

Без переопределения шлюз читает значение конфигурации saved_games из DCS-SMS, затем выбирает экземпляр DCS, DCS.openbeta или DCS.server с самым новым heartbeat ME. Установите DCS_SMS_SAVED_GAMES, если Windows Saved Games был перемещён, а DCS-SMS не записал этот путь в свою конфигурацию.

Инструменты MCP

Инструмент

Мутация

Назначение

create_or_open_mission

Да

Новый/открытый жизненный цикл с барьером семантической стабильности

get_editor_session

Нет

Разрешения, жизненный цикл, heartbeat, статус очереди

get_catalog

Нет

Возможности, типизированные параметры ИИ, профили полёта, актуальные авиабазы, права на авианосцы/корпуса/самолёты, предикаты триггеров

plan_flight_profile

Нет

Ролевые значения по умолчанию для высоты/скорости/параметров и прозрачная оценка прибытия

get_mission_template

Нет

Перечисление/разрешение настраиваемых планов создания ЗРК, ЗРК/зенитной артиллерии на подготовленных позициях, AWACS и заправщиков

get_aircraft_loadouts

Нет

Актуальные пресеты, созданные в DCS, совместимость с задачами, подвески, вес и опциональные детали по точкам подвески

get_ai_task_catalog

Нет

Актуальные задачи на точках маршрута/по маршруту, допустимые для существующей группы

describe_ai_task

Нет

Актуальные поля, значения по умолчанию, допустимые значения и рекомендации по выбору цели для одной задачи

get_mission_snapshot

Нет

Нормализованное состояние миссии плюс ревизия

validate_miz_file

Нет

Офлайн-проверка структуры, ссылок, поведения ИИ и семантики целей

create_patch_report

Нет

Сфокусированный отчёт о приёмке .miz до/после для заявленного патча

validate_mission_patch

Нет

Компиляция и предварительная проверка патча

apply_mission_patch

Да

Пакетная операция за один тик, с проверкой ревизии, идемпотентная

apply_mission_fragment

Да

Нативная транзакция DCS-SMS с откатом; неопределённые постусловия требуют проверки

setup_carrier_package

Да

Шаблон авианосца/эскорта синих/красных с учётом прав, WOD, радио/маяки, самолёты, привязанные к палубе, и предустановленные подвески

apply_map_annotations

Да

Массовые круги, линии, полигоны, подписи и удаления F10 с отслеживанием ревизий

apply_miz_overlay

Новый файл

Планшеты с копированием при записи и SHA-фиксацией, текст/изображения брифинга и типизированные внешние ресурсы; DCS может быть закрыт

setup_iads

Новый файл

При явном согласии пользователя внедряет зафиксированные рантаймы MIST/Skynet и проверенную конфигурацию IADS с префиксом; DCS может быть закрыт

inspect_miz_external_content

Нет

Разрешение текста/изображений брифинга, планшетов, ресурсов карты, наличия архивов и счётчиков ссылок миссии в офлайн-режиме

render_mission_documents

Новые предпросмотры

Детерминированные PNG-страницы: карточка миссии на каждый самолёт, связь/подвески, точки маршрута и чистая карта маршрута

save_and_verify

Да

Сохранение как, повторное открытие и семантическое сравнение

list_map_datasets

Нет

Перечисление постоянных кэшей местности; полностью офлайн

ensure_map_dataset

Загрузка/запись в кэш

Обязательная проверка театра: повторное использование локального, загрузка и проверка размещённого пакета или явный запрос разрешения перед локальной сборкой

preprocess_map_region

Запись в кэш

Ограниченная/возобновляемая извлечение местности из работающего DCS и генерация производных данных

preprocess_hydrology_layer

Запись в кэш

Отдельная возобновляемая маска поверхности рек/озёр высокого разрешения; однородная низкодетализированная суша и открытое море пропускаются

query_map_context

Только предпросмотр

Офлайн-местность, авиабазы, именованные места, кандидаты объектов и аннотированный PNG-контекст

inspect_map_view

Временная камера

Геопривязанный PNG по запросу видимой карты ME в реальном времени с восстановлением камеры и подтверждением видимости

analyze_terrain_line

Обычно нет

Трёхсостоятельный кэшированный LOS местности; только refinement_mode=auto-live требует соответствующего состояния DCS ME, когда нужны более точные данные

validate_map_dataset

Только отчёт

Проверка тайлов/швов плюс опциональная детерминированная сверка точек с работающим DCS

query_airbase_context

Нет

Офлайн-контекст ВПП, стоянок, укрытий, размерных категорий и перрона

query_transport_context

Только предпросмотр

Офлайн-выборка дорожных/железнодорожных коридоров, кандидатов переездов, районов поселений и рекомендации по просмотру изображений

route_ground_transport

Нет

Точный маршрут по дорогам в реальном времени или консервативно проверенный железнодорожный кандидат DCS

plan_airbase_start

Нет

Нативная совместимость/занятость DCS плюс планирование ветра/ВПП/руления/взлёта

create_airbase_start

Да

Создание группы стоянки/ВПП с проверкой ревизии, идемпотентное, проверенное, компактное или на активной ВПП

Жизненный цикл картографических пакетов

Перед планированием миссии, зависящим от карты, агент миссии должен вызвать ensure_map_dataset для театра. Инструмент сначала повторно использует полный локальный набор данных, затем проверяет встроенный реестр и его опциональный удалённый реестр, размещённый на GitHub. Загрузка выполняется потоково, ограничена зарегистрированным количеством байт, проверяется по зарегистрированному SHA-256, безопасно извлекается, проверяется на соответствие идентичности набора данных/театра и полноту, и публикуется атомарно. Встроенный реестр в maps/registry.json также является каноническим удалённым реестром. Крупные наборы данных — это неизменяемые ресурсы релизов GitHub, зафиксированные по SHA-256; сырые кэши и сгенерированные архивы никогда не фиксируются в Git.

Если пакет не зарегистрирован, инструмент возвращает permission_required, а не открывает DCS и не начинает многочасовое извлечение самостоятельно. Только после одобрения пользователя агент может повторить вызов с allow_local_build=true. Запрошенный театр должен быть установлен и открыт в Mission Editor с включённым внешним выполнением. Сборка возобновляема и может потребовать повторных вызовов.

Разработчики могут явно собрать и упаковать неразмещённый театр:

npm run maps:settlements
npm run maps:build -- --theatre Caucasus
npm run maps:package -- --dataset caucasus-full-v01-250m `
  --base-url https://github.com/ALasek/DCS-ME-gateway/releases/download/maps-v0.9.0

maps:settlements — это быстрый независимый проход проверки для театра, открытого в данный момент в Mission Editor. Он разрешает соответствующий курируемый каталог через авторитетное преобразование координат DCS, объединяет собственные метки городов DCS и записывает JSON плюс размеченный PNG в .artifacts/settlements. Он не выполняет выборку и не перестраивает данные местности, рельефа, земного покрова, гидрологии, транспорта или авиабаз. Используйте --output <directory>, чтобы выбрать стабильное расположение вывода.

Команда упаковки выводит точную запись реестра, включая размер архива и SHA-256. Добавьте эту запись в maps/registry.json и загрузите .tgz в соответствующий релиз. Локальная сборка — это запасной вариант для карт, которыми автор проекта не владеет; это никогда не является подразумеваемым согласием.

preprocess_map_region проверяет запрошенный прямоугольник на соответствие авторитетным границам театра DCS. Ограничение DCS в 4 096 применяется к выборкам в каждом запросе сетки местности, а не к тайлам набора данных. max_tiles — это лишь намеренная защита размера набора данных (50 000 по умолчанию); tile_batch_limit ограничивает каждый вызов MCP 200 отсутствующими тайлами по умолчанию. Если результат имеет complete=false, повторите вызов с идентичной геометрией набора данных и настройками выборки. Каждое обновление тайла и манифеста уже является устойчивым, неполные наборы данных отклоняют обычные запросы, а финальная проверка может удалить нечитаемые, повреждённые или невалидные по швам тайлы для автоматического исправления при следующем пакете. Изменения размера пакета и защитных ограничений не меняют автоматически сгенерированный идентификатор набора данных. Его координаты north/east — это те же локальные метры театра, которые используются объектами миссии. Предварительный проход по умолчанию может сохранять однородное море с высокой уверенностью или однородную сушу, похожую на заглушку, при грубом разрешении; каждое такое решение видно в манифесте и результате запроса. Береговые линии, смешанные поверхности и плоская местность, не удовлетворяющие всем порогам, остаются в полном разрешении. Авиабазы и метки мест, созданные в DCS, кэшируются рядом с тайлами местности и аннотируются на предпросмотрах. Записи мест не классифицируются как город/посёлок/деревня, поскольку источник DCS не раскрывает это различие. Семантическое происхождение фиксирует сборку DCS, локаль и источник городов театра; идентификаторы мест выводятся из координат, поскольку дублирующиеся ключи Lua перезаписываются при загрузке некоторых наборов данных театра в DCS. Изменённая сборка местности DCS требует явной пересборки с force=true вместо молчаливого повторного использования устаревших тайлов. query_map_context, query_airbase_context и query_transport_context читают только кэш, поэтому DCS может быть закрыт. Кластеризация перрона на 200 м и полосы конвертов компактный/стандартный/большой — это навигационные эвристики, а не заявления о совместимости с DCS. plan_airbase_start всегда повторно проверяет запрошенный самолёт и текущую занятость через DCS перед изменением.

render_mission_documents детерминирован для одного и того же сохранённого задания, кэша рельефа, версии стиля, выбранных групп и предоставленной прозы. По умолчанию он выбирает полёты Player/Client. Он создаёт манифест и готовые к передаче записи kneeboard_images, но не изменяет миссию. Папки колендуров DCS могут быть нацелены на все самолёты или на тип самолёта; они не могут различать два полёта, использующих один и тот же тип, поэтому объединяйте такие инструкции или используйте страницы брифинга, когда требуется разделение по полётам. Карточка миссии определяет тип самолёта, не подразумевая количества на полёт. Страница связи/снаряжения использует канонические читаемые имена подвесок, топливо в фунтах и боекомплект пушки в процентах; она никогда не отображает внутренние CLSID. Если в сохранённой миссии есть подвески, но нет читаемого имени пресета, вызовите get_aircraft_loadouts с include_stations=true и передайте его имена DCS в flight_notes.loadout_summary. Затем рендеринг выдаёт явное предупреждение, пока эти имена не будут предоставлены. Таблицы путевых точек используют проверенные значения ETA сохранённого маршрута там, где маршрут действительно запланирован; для событий, управляемых состоянием или темпом игрока, можно использовать flight_notes.waypoint_notes[].time_label для подсказок и временных окон, не выдумывая фиксированное время. Рендеринг предупреждает, когда у многопутевого маршрута игрока нет ни полезных значений ETA, ни временных меток. Карты маршрутов добавляют только разреженные подписи авиабаз и крупных населённых пунктов, при этом подписи маршрутов и путевых точек сохраняют приоритет коллизий и визуальный приоритет. Предварительно просматривайте каждую страницу перед её встраиванием.

apply_miz_overlay намеренно не является универсальным редактором таблиц миссии. Сохраните активную миссию ME, закройте или откройте другой файл, проверьте существующее внешнее содержимое, зафиксируйте сообщённый SHA-256 исходного файла и запишите в новый выходной путь. Инструмент проверяет реальные сигнатуры изображений/звуков/скриптов, запрещает удаление связанных ресурсов и удаляет заменённые изображения брифинга только тогда, когда не остаётся ссылок из миссии. После успешного наложения откройте выходной файл в ME и запустите save_and_verify. Основные группы, маршруты, триггеры и цели остаются созданными в ME; это предотвращает молчаливое расхождение двух редакторов над одним .miz.

Опциональный Skynet-IADS

Для значимого многопозиционного сценария/сети EWR, сценария SEAD/DEAD или миссии, чей баланс зависит от тактики излучения РЛС, агент может один раз порекомендовать Skynet и спросить, принимает ли пользователь поведение, зависящее от скриптов времени выполнения. Не следует прерывать этим вопросом каждый проект изолированной ПВО. Встроенные состояния тревоги DCS и детерминированные триггеры излучения остаются по умолчанию для изолированных, предсказуемых или учебных угроз.

После принятия дайте управляемым группам SAM общий префикс, а управляемым подразделениям EWR отдельный префикс, сохраните миссию и вызовите setup_iads с SHA-256 сохранённого файла и новым выходным путём. Инструмент проверяет и встраивает Skynet-IADS 3.3.0 с проверенным вышестоящим MIST 4.5.107, затем добавляет один триггер Mission Start, загружающий MIST, Skynet и сгенерированную конфигурацию в этом порядке. Результирующий .miz является автономным; игрокам ничего устанавливать не нужно. Откройте выходной файл в Mission Editor и запустите save_and_verify перед продолжением.

Настройка проверяет хэши скриптов, порядок загрузки, принадлежность коалиции, префиксы и именованные командные центры. Она не может доказать поведение IADS во время выполнения без запуска миссии. Сохраняйте один тип ЗРК на управляемую группу SAM, одну РЛС EWR на управляемую группу EWR и не добавляйте собственные действия по излучению, которые конкурируют со Skynet за одни и те же радары. Происхождение, точные хэши и лицензии записаны в vendor/skynet-iads/3.3.0 и THIRD_PARTY_NOTICES.md.

analyze_terrain_line билинейно интерполирует самую мелкую кэшированную сетку, покрывающую каждую выборку, и сообщает clear, blocked или indeterminate. Классификатор использует явную огибающую разрешения рельефа: для clear и blocked требуется, чтобы вся огибающая оставалась по одну сторону линии визирования. Режим только кэша сообщает о неопределённом коридоре и рекомендуемом шаге, не обращаясь к DCS. refinement_mode=auto-live сэмплирует этот ограниченный коридор из соответствующего открытого театра Mission Editor, разбивает его по лимиту выборок на вызов расширения, сохраняет более мелкие тайлы в наборе данных и немедленно повторяет LOS. Последующие запросы повторно используют эти тайлы при закрытом DCS. Повторный мелкий прогон может правомерно остаться indeterminate; ответ сообщает предел разрешения и, где возможно, меньший следующий шаг, а не выдумывает ответ clear/blocked. Это подходит для размещения РЛС/ЗРК и проверки маршрутов, но не для окончательных утверждений о видимости там, где важны здания или деревья.

После завершения тайлов рельефа семантическая предобработка создаёт классификационный растр 2 км, сглаживает изолированные ячейки суши и преобразует каждую четырёхсвязную компоненту в компактный регион рельефа со статистикой, смежностью и геометрией строк. Авиабазы и скопления поселений становятся узлами графа. Кандидаты дорог включают до четырёх соседей в пределах 80 км плюс ограниченное восстановление связности; кандидаты железных дорог — до двух соседей в пределах 120 км. Маршрутизация железных дорог DCS рассматривается как косвенное свидетельство, поскольку её селектор наземной сети может возвращать несвязанные линейные объекты. Кэшированный железнодорожный коридор должен попадать в 1,5 км от обеих опор, а его маршрутная длина должна покрывать не менее половины прямого расстояния между ними; более слабые результаты остаются неудачными кандидатами для проверки, а не выдаются агенту как железная дорога. transport_batch_limit ограничивает извлечение путей DCS за один вызов, а состояние рёбер pending/complete/failed является устойчивым и возобновляемым. Завершённые полилинии сохраняют идентификаторы узлов и привязанные точки шлюзов. query_transport_context использует алгоритм Дейкстры по завершённым кэшированным рёбрам для офлайн-маршрута между именованными узлами; route_ground_transport применяет те же консервативные проверки железных дорог к точным текущим путям DCS, используемым при создании миссий. Водные участки помечаются как water-crossing-candidate, а не утверждаются как разрушаемые мостовые объекты. Кластеризация поселений намеренно избегает покаталожного перечня зданий, который был бы чувствителен к версии рельефа и излишне большим.

Процессор Persian Gulf дополняет собственные подписи городов DCS разреженным редактируемым каталогом maps/settlements/persian-gulf.json. Он содержит крупные города, порты и островные поселения, отобранные для словаря сценариев примерно 1980–1990 годов; это не исторический городской след. Во время предобработки DCS преобразует каждую точку WGS84 в локальные координаты загруженного театра. Совпадающие близлежащие подписи DCS сохраняют свою позицию DCS, получая при этом курируемые имя, псевдонимы, тип и важность. Отдельная курируемая точка остаётся только региональным семантическим свидетельством. SHA-256 каталога и происхождение источника/эпохи хранятся в semantics.json, поэтому редактирование каталога делает недействительной и пересобирает кэшированную семантику поселений и транспорта без пересборки тайлов рельефа. См. maps/settlements/README.md с намеренно простым форматом очистки.

query_map_context можно вызывать с границами, semantic_search или обоими. Семантический поиск может фильтровать классы рельефа, минимальную площадь региона, близость к объекту, тип/имя объекта и приблизительный доступ к дорогам без загрузки тайлов рельефа или необходимости в DCS. inspect_map_view — это дополнительный путь детализации: он не кэширует каждое здание или дорожную разметку, а возвращает текущий рендеринг ME в запрошенном масштабе с аффинным преобразованием из пикселей в театр. Он временно записывает камеру карты ME, сериализуется с другими изменениями шлюза и восстанавливает предыдущую камеру, даже если захват или проверка видимости не удались. Он определяет точный дескриптор окна DCS и завершается с геометрией окна и деталями восстановления, когда DCS свёрнут или эксклюзивный полноэкранный Alt-Tab удалил его захватываемую поверхность. Безрамочный/оконный DCS может оставаться позади MCP-клиента во время проверки. Если авиабаза, скопление поселений и исходное место DCS имеют одно имя, используйте возвращённый идентификатор объекта или селектор kind:name, например settlement:Batumi или airbase:Batumi; неоднозначные голые имена приводят к ошибке, а не молчаливому выбору одного из них.

Запустите локальное средство просмотра многослойного кэша с помощью npm run viewer во время разработки или npm run viewer:start после npm run build, затем откройте http://127.0.0.1:4317. Он визуализирует чистую кэшированную топографию, смежные области рельефа, пригодные и неудачные транспортные рёбра, оболочки поселений, семантические объекты и подписи без обращения к DCS.

validate_map_dataset потоково проверяет читаемость тайлов и массивы, сравнивает только соседние общие рёбра и не материализует всю карту в памяти. Его значение по умолчанию direct_samples=16 сравнивает равномерно распределённые кэшированные точки с текущим загруженным театром DCS; используйте direct_samples=0 для проверок только в офлайне. Отчёт также сохраняется как validation.json в каталоге набора данных. Обзор завершённого набора данных аналогично рисуется по одному тайлу в ограниченный выходной растр.

Ограниченный кавказский сборочный стенд намеренно сэмплирует детализированную полосу Батуми-Кобулети от побережья до гор, а не плоскую внешнюю область карты:

npm run test:live-map

Он сэмплирует north=-370000..-330000, east=610000..670000 с шагом 250 м, сохраняет прогресс после каждого тайла и безопасен для повторного запуска. Добавляйте -- --force только для намеренного обновления уже кэшированных тайлов. Он не обрабатывает всю карту.

Уточнение гидрологии

Кэш рельефа 250 м намеренно не рассматривается как авторитетная геометрия рек: узкая река может попасть между точками сетки и выглядеть как редкие синие точки. preprocess_hydrology_layer прикрепляет отдельный кэш hydrology/ к существующему завершённому набору данных. Его сетка по умолчанию 50 м хранит только компактный двухбитовый код поверхности для каждой выборки; высоты и производные рельефа остаются в базовом разрешении. Базовые тайлы, уже доказанно являющиеся однородной заглушкой суши или открытого моря, исключаются из планирования, а детализированные и смешанные прибрежные тайлы сэмплируются. Начните с репрезентативных границ и повторяйте идентичные вызовы, пока completeForBounds=true. Позже опустите bounds, чтобы расширить тот же слой на все детализированные базовые тайлы. tile_batch_limit ограничивает каждый вызов, а max_tiles — это лишь намеренный предохранительный предел. Изменённый шаг, размер тайла, театр или сигнатура рельефа DCS завершаются с отказом; force=true намеренно начинает новое обновление гидрологии, а последующие возобновляемые вызовы используют force=false. query_map_context возвращает покрытие, точные ограниченные количества поверхностей, детерминированные метрики сшивки и сэмплированные восьмисвязные компоненты рек/озёр, когда слой существует. Его предпросмотр и чистые карты документации включают более точную водную маску.

Исходные коды DCS и подсчёты поверхностей остаются неизменяемым доказательством. Офлайн-направленный сшиватель может заполнить не более двух отсутствующих ячеек, когда исходные выборки на обоих концах продолжаются вдоль одной линии; выведенные ячейки сообщаются отдельно и используются только для непрерывности компонентов и отрисовки. Это намеренно более консервативно, чем неограниченное морфологическое замыкание, которое может слить близлежащие несвязанные водные пути. Геометрия компонента не является ни полигоном берега, ни гарантией навигации. Реки, более узкие, чем выбранный шаг, всё ещё могут быть фрагментированы, поэтому используйте более плотный ограниченный проход или проверку на живой карте, когда точное размещение берегов имеет значение. Высокодостоверные грубые базовые тайлы суши-заглушки и однородного моря намеренно находятся вне зоны покрытия гидрологии; эта оптимизация предполагает, что базовая низкодетальная калибровка уже отделила нематериальную для миссии местность карты от реальных детализированных равнин. Просмотрщик отображает сгенерированный слой как отдельно переключаемый оверлей Rivers / lakes. Представление является производным, а не доказательным: озёра сохраняют сглаженный растр выбранной области, тогда как речные полосы детерминированно утончаются, консервативно соединяются через разрывы, упрощаются и рисуются как сглаженные SVG-центролинии с фиксированной экранной шириной. Запросы и валидация продолжают использовать исходные упакованные ячейки и отдельно идентифицированные точки сшивки.

Полная схема патча также доступна как ресурс MCP dcs-me://schema/mission-patch/0.1. См. examples/f16-rwr-patch.json и последующий examples/f16-rwr-route-patch.json.

Авторство миссии целиком должно начинаться с MCP-промпта design_dcs_mission. Он направляет диалог, а не требует одноразовой спецификации: агент может задавать важные вопросы, рекомендовать значения по умолчанию, предлагать альтернативы и вести живую запись роли игрока, исхода, фаз, назначения каждой группы, причинно-следственных взаимодействий, возможностей/снаряжения и баланса. Каноническая человекочитаемая инструкция находится в docs/design-dcs-mission.md; сервер загружает этот же файл для инструкций по инициализации, MCP-промпта и ресурса руководства. Связный каркас и первый срез предшествуют мутации, но более поздние детали могут оставаться открытыми, пока одобренные срезы создаются и тестируются. Та же инструкция доступна как ресурс только для чтения dcs-me://guidance/mission-design/0.1. Концепции миссии разрабатываются с пользователем и реализуются инкрементально с учётом ограничений привязки Mission Editor.

Схема полного фрагмента доступна по адресу dcs-me://schema/mission-fragment/0.1. Она принимает модель данных, используемую префабом DCS-SMS (meta, groups, statics, zones, drawings и triggers), плюс явную политику размещения. Конечная точка выполняет свою предварительную проверку и мутацию внутри Mission Editor, поэтому для её вызова требуется DCS; разработка и запуск тестовых наборов репозитория — нет.

Схема высокоуровневого запроса авианосца доступна по адресу dcs-me://schema/carrier-package/0.1. Сначала запросите get_catalog с kind=carrier_capabilities, чтобы проверить корпуса, лицензии, совместимые с авианосцем самолёты и типы эскорта в открытой установке DCS. dry_run=true возвращает скомпилированный фрагмент и разрешённый план ветра над палубой без изменения миссии. Автоматический выбор модуля предпочитает Supercarrier, когда DCS сообщает, что он установлен и авторизован, и в противном случае выбирает бесплатный авианосец коалиции.

Схема высокоуровневого запроса авиабазы доступна по адресу dcs-me://schema/airbase-start/0.1. create_airbase_start требует открытого Mission Editor, проверяет запрошенную семантическую ревизию и ключ идемпотентности, предварительно проверяет свободные совместимые стоянки, вызывает нативный глагол конструирования DCS-SMS, а затем проверяет размер группы, тип самолёта, привязку к аэродрому нулевой путевой точки, режим взлёта и явные ID парковки в свежем снимке. Стратегия парковки по умолчанию active_runway использует приземный ветер и обозначения ВПП для ранжирования свободных совместимых стоянок по пороговому расстоянию по прямой, затем проверяет переназначение; compact сохраняет исходный выбор близлежащей группы DCS-SMS. Это расстояние — прокси для руления, а не гарантированное время по маршруту. Фиксированные наземные аэродромы используют эту конечную точку; палубные слоты авианосца используют setup_carrier_package. FARP остаются отдельной будущей поверхностью.

Значения полей триггеров могут ссылаться на более раннюю логическую сущность с помощью "$ref:<logical_id>"; компилятор подставляет её стабильное имя DCS. Ссылка на именованное Triggered Action разрешается в текущий кортеж DCS {groupId, taskNumber} непосредственно перед добавлением действия триггера. Значения index путевых точек в снимках и каждый waypoint_index патча являются нулевыми. Индексы правил триггеров и слоты Triggered Action остаются единичными.

Поддерживаемые операции:

  • Существующие сущности: adopt_entity для точных имён групп, юнитов, триггеров или зон.

  • Группы: create_group, set_group_task, set_group_late_activation, remove_group. Установите lead_logical_id в create_group, когда последующие патчи должны обращаться к её первому юниту; шлюз привязывает имя, возвращённое DCS.

  • Юниты: add_unit, set_unit_skill, set_unit_heading, set_unit_loadout, set_unit_payload, clear_unit_payload, remove_unit. Расходуемые запасы: set_unit_fuel, set_unit_chaff, set_unit_flare и set_unit_gun.

  • Маршруты: add_waypoint, insert_waypoint, remove_waypoint, link_waypoint_airbase.

  • Поведение путевых точек: add_waypoint_task, add_waypoint_enroute_task, remove_waypoint_task, remove_waypoint_enroute_task, clear_waypoint_tasks, clear_waypoint_enroute_tasks и типизированная операция set_waypoint_option. Поля fields задач принимают вложенные JSON-подобные массивы и записи, включая селекторы, такие как targetTypes: ["Air"].

  • Групповые Triggered Actions: add_triggered_task, replace_triggered_task и remove_triggered_task. Они создают записи задач/попутных задач со стабильными именами; используйте логический ID задачи в поле действия триггера a_ai_task или a_set_ai_task. Удалите ссылающееся действие триггера перед удалением задачи.

  • Окружение: set_mission_environment для даты/времени, температуры, QNH, видимости, турбулентности, ветра на трёх уровнях, облаков и пыли.

  • Триггеры: create_trigger, add_trigger_condition, add_trigger_action, remove_trigger_condition, remove_trigger_action и remove_trigger.

  • Зоны: create_zone_circle, remove_zone.

Редактирование маршрута для группы, созданной в том же патче, требует последующего патча, чтобы Mission Editor мог завершить построение состояния её маршрута. Редактирование или удаление юнита, созданного add_unit, или лидера, объявленного через create_group.lead_logical_id, также требует последующего патча, поскольку DCS выделяет окончательное имя юнита в результате операции. Валидация сообщает об этих ошибках как о явных барьерах до отправки любой мутации.

Рабочий процесс «сначала пресет» для самолётов

Для вооружённого самолёта вызовите get_aircraft_loadouts с aircraft_type и intended_task. Предпочитайте пресет, созданный DCS, который объявляет совместимость с этой задачей; когда совпадают несколько, выбирайте умеренный, чётко названный пресет, чьи подвески соответствуют миссии и ожидаемой дальности. Запросите include_stations=true для выбранного пресета перед любой настройкой. Примените его с помощью set_unit_loadout, затем используйте set_unit_payload или clear_unit_payload только для явного требования, которое пресет не удовлетворяет. Именованный пресет DCS меняет только пилоны: сравните унаследованные значения топлива/помех/тепловых ловушек/пушки юнита с возвращёнными максимумами планера и значениями средств противодействия по умолчанию, затем явно установите неподходящие значения. Настройки взрывателей/программ для конкретных подвесок пока не являются частью ограниченной схемы патчей шлюза.

Перечисление снаряжения — это адаптер шлюза только для чтения поверх DCS Mission Editor me_loadoututils, а не формальный глагол DCS-SMS. Поэтому он чувствителен к версии, закрывается с ошибкой, если API Mission Editor изменится, и был проверен на локально установленной сборке DCS, а не заявлен как стабильный интерфейс Eagle Dynamics.

Для поведения ИИ сначала вызовите get_ai_task_catalog для фактической группы и вида задачи, затем describe_ai_task. EngageGroup/AttackGroup требуют числовой groupId; варианты для юнитов требуют unitId; EngageTargetsInZone требует локальные для театра x (север) и y (восток). Используйте ID из текущего семантического снимка. Одно только имя задачи не делает назначение цели действительным.

Граница безопасности

Базовый мост DCS-SMS выполняет Lua в полном окружении Mission Editor. Этот сервер ограничивает сгенерированный код фиксированным пакетным диспетчером и вызовами глаголов DCS-SMS, сериализованными в JSON/base64. Держите его локальным, не открывайте его stdio через неаутентифицированный сетевой сервис и оставляйте External execution отключённым, когда он не нужен.

Офлайн-валидатор и отчёт о патчах не используют почтовый ящик DCS-SMS и не требуют установки или запуска DCS. Они устанавливают только структурную и ссылочную целостность. Они не могут доказать, что DCS загрузит архив, нормализует его идентично при сохранении, или что поведение ИИ, датчиков, триггеров и вооружения во время выполнения будет таким, как задумано; это остаётся явными более поздними уровнями приёмки.

Лицензия

MIT. DCS-SMS — отдельный проект; его дерево tools/ распространяется под GPLv3.

Сборка релиза для Windows

Сборщик релиза компилирует шлюз, устанавливает только заблокированные производственные npm зависимости в промежуточный каталог, загружает официальный дистрибутив Node для Windows и проверяет его опубликованный SHA-256, копирует точный совместимый исходный код моста DCS-SMS и текст GPL, инвентаризирует лицензии npm, записывает манифест для каждого файла и создаёт ZIP плюс контрольную сумму:

npm run release:windows -- -DcsSmsSource C:\path\to\dcs-sms

Пока кастомизированный исходный код моста 0.32.4 не зафиксирован и не опубликован, релизы должны собираться из проверенного локального рабочего дерева DCS-SMS. Сгенерированный payload/bridge/SOURCE.md записывает его базовую ревизию и то, было ли рабочее дерево грязным; полный соответствующий исходный код моста находится внутри того же пакета.

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
3Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to interact with DCS World in real-time through chat by executing Lua scripts and providing tools for mission info, unit management, coordinate conversion, and more.
    10
    7
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to interact with an ArduPilot vehicle in real-time via MAVLink, including reading state, inspecting and changing parameters, switching flight modes, diagnosing arming failures, and gated arming/disarming.
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • Build, validate, and deploy multi-agent AI solutions from any AI environment.

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

  • MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ALasek/DCS-ME-gateway'

If you have feedback or need assistance with the MCP directory API, please join our Discord server