Add shared-session MCP source debugger adapter

This commit is contained in:
Александр Петров
2026-09-16 20:43:50 +03:00
parent addc00a0f3
commit 9ad5a018a2
19 changed files with 740 additions and 22 deletions
+18 -2
View File
@@ -251,6 +251,7 @@ def main():
mame_process=subprocess.Popen(command,cwd=state,env=environment,
stdout=log,stderr=subprocess.STDOUT)
server=None
socket_identity=None
def mame_diagnostics():
log.flush()
output=(state/'mame.log').read_text(errors='replace')[-4000:].strip()
@@ -261,8 +262,13 @@ def main():
if mame_process.poll() is not None:
raise RuntimeError('MAME завершился до main; лог: '+
str(state/'mame.log')+mame_diagnostics())
if (state/'main.json.error').exists() or time.monotonic()>deadline:
raise RuntimeError('Таймаут ожидания main; лог: '+
error_file=state/'main.json.error'
if error_file.exists():
raise RuntimeError('MAME не дошёл до main: '+
error_file.read_text(errors='replace').strip()+
'; лог: '+str(state/'mame.log')+mame_diagnostics())
if time.monotonic()>deadline:
raise RuntimeError('Таймаут ожидания main без ответа Lua; лог: '+
str(state/'mame.log')+mame_diagnostics())
time.sleep(.05)
entry=json.loads(ready.read_text())
@@ -273,6 +279,8 @@ def main():
if not line:
raise RuntimeError('Session server не запустился'+mame_diagnostics())
server_ready=json.loads(line)
socket_state=Path(args.socket).lstat()
socket_identity=(socket_state.st_dev,socket_state.st_ino)
print(json.dumps({'ready':True,'socket':args.socket,'pid':mame_process.pid,
'entry':entry,'build_id':server_ready['build_id']},
ensure_ascii=False),flush=True)
@@ -284,6 +292,14 @@ def main():
server.terminate()
try: server.wait(timeout=3)
except subprocess.TimeoutExpired: server.kill();server.wait()
if socket_identity is not None:
socket_path=Path(args.socket)
try:
current=socket_path.lstat()
if (current.st_dev,current.st_ino)==socket_identity:
socket_path.unlink()
except FileNotFoundError:
pass
if mame_process.poll() is None:
mame_process.terminate()
try: mame_process.wait(timeout=5)