Expand shared Sprinter MCP with managed launch, raw reads and key input

This commit is contained in:
Александр Петров
2026-09-17 22:57:27 +03:00
parent a43e7bda89
commit 5dc7998324
22 changed files with 1120 additions and 67 deletions
+34 -4
View File
@@ -11,7 +11,8 @@
`MAME.HT/plugins/mamebridge` вместе с `src/mame_mcp.py` публикует 30
raw-инструментов. Удалённый на этапе А `src/mame_bridge.lua` использовал тот
же Python frontend, но обрабатывал только 16 команд и не отвечал при hard-stop.
`toolchain/sdbg_mcp.py` публикует 18 C-инструментов через общую с DAP сессию.
`toolchain/sdbg_mcp.py` публикует 26 C-инструментов через общую с DAP сессию
(28 в автономном режиме с командами start/stop).
**Цель — покрыть возможности всех 30 raw-инструментов в C-сессии, а не
механически скопировать имена и небезопасную семантику.** Полный raw MCP
остаётся отдельным режимом для задач без C-пакета и других машин MAME.
@@ -107,9 +108,11 @@ control lease: команды CPU и ввод принимаются от тек
удерживаемые клавиши после истечения heartbeat. Живой прогон с владельцем
без heartbeat подтвердил событие `owner_expired`, удаление точки и отсутствие
ложной остановки в `hello.c:62` после возобновления DAP.
**Этап Б не закрыт:** ещё нужны защита
всех мутаций, проверка session ID в каждом изменяющем запросе и безопасная
invalidation при reset/load.
RPC теперь привязывает последующие запросы DAP/MCP/CLI к session ID и build ID;
мутации CPU и точек также требуют актуальную generation. Смена сессии/socket
или устаревшая generation дают явный отказ, без автоматического повтора.
**Этап Б не закрыт:** ещё нужны проверка reset/load на живом MAME, контроль
новых типов мутаций и политика передачи lease между долгоживущими клиентами.
## В. Перенести 30 возможностей raw MCP по группам
@@ -132,6 +135,20 @@ invalidation при reset/load.
pass-through и особенности адресов перечислены поимённо. Число методов C-MCP
может быть больше 30 из-за разных адресных пространств и C-операций.
**Промежуточный статус В, 2026-09-17.** Через существующий `sdbgbridge`
добавлены `list_shares`, `read_share`, `read_vram`, `read_screen_pixels`,
`screenshot`, `read_program_memory`, `list_ports` с пределами размеров,
точным tag share, изолированным каталогом PNG и признаком устаревшего кадра
при stop. Живой DAP+MCP-прогон подтвердил совпадение raw program/logical Z80
в `main`, VRAM/share, список портов и PNG; второй прогон снял экран работающего
`hello` во время `getchar()` и затем завершил шаг клавишей `x`. Полное
поимённое состояние — в [матрице 30 raw-инструментов](mcp-capability-matrix.md).
Одиночный публичный `press_key` теперь требует running CPU и control lease,
удерживает клавишу 1..60 кадров и отпускает её при stop/ошибке. Автономный
официальный MCP-клиент ввёл `x` в ожидающий `getchar()` и попал на следующую
C-строку. Очередь строки, другие имена физических клавиш и мышь ещё не
реализованы; поэтому строка raw `press_key` покрыта частично.
## Г. Сделать запуск пригодным для Codex и Claude без VS Code
Сейчас `sdbg_mcp.py` подключается лишь к уже работающему socket. Сам
@@ -157,6 +174,19 @@ pass-through и особенности адресов перечислены п
**Выход Г:** C-отладка полностью доступна агенту без VS Code, а подключение
агента к VS Code-сессии не создаёт второй MAME и не теряет точки DAP.
**Промежуточный статус Г, 2026-09-17.** `sdbg_mcp.py --build` публикует
асинхронный `start_session`, фазовый `session_status` и `stop_session`.
Живой официальный MCP-клиент получил ответ старта за 5–7 мс, дождался
DSS→`hello.exe``main`, прочитал переменную и PNG. DAP подключился к тому же
socket; его disconnect оставил MAME работающим. Повторный MCP start был
отклонён, `stop_session` удалил socket и завершил свой MAME. При закрытии
MCP-процесса supervisor также завершает принадлежащий ему launcher.
Тем же официальным клиентом проверены установка C-точки перед `getchar()`,
ввод `x` через публичный MCP `press_key` и остановка на следующей C-строке.
**Этап Г не закрыт:** нужны реальные подключения из Codex и Claude,
проверка передачи control lease между их клиентами и DAP, а также устойчивость
к сбоям launcher/клиента на разных стадиях boot.
## Проверки и ограничения на всём пути
- Живые прогоны выполнять на `MAME.HT/sprinter`, собранном командой