prometeu-runtime/devtools-protocol
Nilton Constantino 38ec13b248
redefine README.md
2026-01-19 06:37:30 +00:00
..
2026-01-18 06:43:24 +00:00
2026-01-18 07:46:04 +00:00
2026-01-19 06:37:30 +00:00

Prometeu DevTools Protocol

Este documento descreve o protocolo de comunicação entre o Runtime do Prometeu e ferramentas de desenvolvimento (como o Prometeu Debugger).

Visão Geral

O protocolo é baseado em JSON, enviado via uma conexão de transporte (geralmente TCP). Cada mensagem é um objeto JSON em uma única linha (JSONL).

Estrutura

  • protocol.json: Definição formal do protocolo em formato JSON.
  • protocol.md: Documentação legível para humanos descrevendo os comandos, eventos e tipos.
  • examples/: Exemplos de fluxos de mensagens (handshake, breakpoints, etc.) em formato JSONL.

Versionamento

O protocolo possui uma versão explícita definida no campo protocol_version.

  • Mudanças incompatíveis (breaking changes) incrementam a versão principal.
  • Novos campos em mensagens existentes devem ser opcionais sempre que possível para manter compatibilidade retroativa.

A versão atual do protocolo é: 1

Handshake

Ao conectar, o Runtime envia uma mensagem de handshake para o cliente.

Runtime -> Cliente

{
  "type": "handshake",
  "protocol_version": 1,
  "runtime_version": "0.1.0",
  "cartridge": {
    "app_id": 1,
    "title": "ColorSquare",
    "app_version": "1.0.0",
    "app_mode": "Debug"
  }
}

Cliente -> Runtime

O cliente deve responder com start ou ok para iniciar a sessão.

{ "type": "start" }

Requisições (Requests)

O cliente pode enviar as seguintes requisições para controlar a execução:

Nome Parâmetros Descrição
pause [] Pausa a execução da VM.
resume [] Retoma a execução da VM.
step [] Executa uma única instrução (PC).
stepFrame [] Executa até o próximo frame.
getState [] Retorna o estado atual da VM (pc, stack_top, frame_index, app_id).
setBreakpoint {"pc": number} Define um breakpoint no endereço especificado.
clearBreakpoint {"pc": number} Remove um breakpoint no endereço especificado.

Respostas (Responses)

Algumas requisições geram respostas específicas. Por exemplo, getState retorna o estado da VM.

Eventos (Events)

O Runtime pode enviar eventos assíncronos para o cliente:

Nome Campos Descrição
breakpointHit pc, frame_index Emitido quando a execução atinge um breakpoint.
log level, source, msg Emitido quando o código em execução gera um log.
telemetry frame_index, vm_steps, syscalls, cycles Estatísticas de execução enviadas periodicamente.
cert rule, used, limit, frame_index Informações de certificação e limites de recursos.

Exemplos

Veja a pasta examples/ para fluxos de mensagens completos.