Expand shared Sprinter MCP with managed launch, raw reads and key input
This commit is contained in:
@@ -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`, собранном командой
|
||||
|
||||
Reference in New Issue
Block a user