Verify visible hello MCP run and add shared control lease

This commit is contained in:
Александр Петров
2026-09-17 18:15:01 +03:00
parent 619c4c9af5
commit a43e7bda89
14 changed files with 575 additions and 44 deletions
+18 -12
View File
@@ -2,11 +2,10 @@
`toolchain/sdbg_mcp.py` подключается к уже работающей `sdbg_server.py` через
Unix socket. Это отдельный stdio MCP-сервер для C-уровня: он использует ту же
сессию, карту сборки и журнал, что VS Code/DAP. В репозитории MAME есть две
Lua-реализации **другого**, raw MCP-моста: `src/mame_bridge.lua`
(`-autoboot_script`) и более новый `-plugin mamebridge`. Оба обслуживают
один `src/mame_mcp.py` и одинаковый файловый транспорт, но legacy Lua
обрабатывает только 16 из 30 публикуемых Python-команд. Plugin использует
сессию, карту сборки и журнал, что VS Code/DAP. В MAME.HT отдельно работает
raw MCP-мост `-plugin mamebridge` с `src/mame_mcp.py`. Старый
`src/mame_bridge.lua` удалён после проверки: он обрабатывал лишь 16 из 30
публикуемых Python-команд и не отвечал при остановленном CPU. Plugin использует
`register_periodic` и отвечает даже при остановленном CPU. Ни один из этих
вариантов не должен одновременно управлять тем же MAME в обход sdbg-сессии.
`src/mame_mcp.py` всё ещё импортирует `FastMCP` по пути SDK 1.x;
@@ -48,7 +47,8 @@ MCP-сервер заново вместе с новой DAP-сессией. А
Доступные инструменты: `session_status`, `where`, `read_registers`,
`read_memory`, `list_variables`, `read_variable`, `recent_events`,
`mame_console_tail`, `set_line_breakpoint`, `set_function_breakpoint`,
`clear_breakpoint`, `clear_my_breakpoints`, `continue_execution`,
`clear_breakpoint`, `clear_my_breakpoints`, `claim_control`, `release_control`,
`continue_execution`,
`pause_execution`, `step_instruction`, `step_source`. Ответы SDK 2.x содержат
`structuredContent`. `step_source` принимает `into`, `over` или `out` и
возвращает принятие команды; итоговую остановку получите через
@@ -71,8 +71,8 @@ MCP-сервер заново вместе с новой DAP-сессией. А
Это следующий этап, а не запрет на функции raw MCP. Нельзя просто загрузить
`mamebridge` рядом с `sdbgbridge`: два независимых обработчика начнут менять
CPU и точки без общего owner ID и журнала.
Поэтапные проверки перед удалением legacy Lua и перенос всех 30 возможностей
в общую C-сессию описаны в [плане сведения MCP](mcp-convergence-plan.md).
Результаты удаления legacy Lua и этапы переноса всех 30 возможностей в общую
C-сессию описаны в [плане сведения MCP](mcp-convergence-plan.md).
Чтение памяти принимает десятичный адрес или `0xHEX`, 1256 байт logical
Z80 memory, только при остановленном CPU, без side effects. Ответ содержит
@@ -86,10 +86,16 @@ generation и страницы банков; диапазон не может п
удалить DAP-точку отвергается и точка VS Code срабатывает после выхода MCP.
Удаление личной точки при running CPU отдельно проверено на ожидании
`getchar()`; оно не ставит CPU на паузу и не блокирует ввод.
Общий session server сериализует команды, но эксклюзивного владельца
управления CPU пока нет: не посылайте `continue`/`step` одновременно из MCP
и VS Code. При аварийном завершении MCP его точки могут остаться до конца
сессии MAME; нужна отдельная lease/cleanup-механика. Несколько одновременно
Общий session server выдаёт 30-секундный control lease первому владельцу
команды CPU; MCP может захватить/освободить его явно. Фоновый heartbeat MCP
и опрос событий DAP продлевают активный lease. Конкурентная команда получает
отказ с именем владельца, после штатного закрытия lease освобождается.
При аварийном завершении MCP lease истекает за 30 секунд; сервер удаляет
личные точки и отпускает удерживаемые клавиши. Живой прогон с владельцем без
heartbeat подтвердил удаление его точки и отсутствие ложной остановки после
возобновления DAP; освобождение удерживаемой клавиши пока проверено только
unit-тестом.
Несколько одновременно
запущенных MAME с MCP не проверялись и не гарантируются; это отложенный тест.
Проверка совместной работы с DAP и реальным MAME: