Co-authored-by: Nilton Constantino <nilton.constantino@visma.com> Reviewed-on: #5
84 lines
2.6 KiB
Markdown
84 lines
2.6 KiB
Markdown
# Prometeu DevTools Protocol
|
|
|
|
This document describes the communication protocol between the Prometeu Runtime and development tools (such as the Prometeu Debugger).
|
|
|
|
## Overview
|
|
|
|
The protocol is based on JSON, sent via a transport connection (usually TCP). Each message is a JSON object on a single line (JSONL).
|
|
|
|
## Structure
|
|
|
|
- **[protocol.json](protocol.json)**: Formal definition of the protocol in JSON format.
|
|
- **[protocol.md](README.md)**: Human-readable documentation describing commands, events, and types.
|
|
- **[examples/](examples)**: Examples of message flows (handshake, breakpoints, etc.) in JSONL format.
|
|
|
|
## Versioning
|
|
|
|
The protocol has an explicit version defined in the `protocol_version` field.
|
|
|
|
- Incompatible changes (breaking changes) increment the major version.
|
|
- New fields in existing messages should be optional whenever possible to maintain backward compatibility.
|
|
|
|
The current protocol version is: **1**
|
|
|
|
## Handshake
|
|
|
|
Upon connecting, the Runtime sends a handshake message to the client.
|
|
|
|
### Runtime -> Client
|
|
|
|
```json
|
|
{
|
|
"type": "handshake",
|
|
"protocol_version": 1,
|
|
"runtime_version": "0.1.0",
|
|
"cartridge": {
|
|
"app_id": 1,
|
|
"title": "ColorSquare",
|
|
"app_version": "1.0.0",
|
|
"app_mode": "Debug"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Client -> Runtime
|
|
|
|
The client must respond with `start` or `ok` to start the session.
|
|
|
|
```json
|
|
{ "type": "start" }
|
|
```
|
|
|
|
## Requests
|
|
|
|
The client can send the following requests to control execution:
|
|
|
|
| Name | Parameters | Description |
|
|
|------|------------|-----------|
|
|
| `pause` | `[]` | Pauses VM execution. |
|
|
| `resume` | `[]` | Resumes VM execution. |
|
|
| `step` | `[]` | Executes a single instruction (PC). |
|
|
| `stepFrame` | `[]` | Executes until the next frame. |
|
|
| `getState` | `[]` | Returns the current VM state (`pc`, `stack_top`, `frame_index`, `app_id`). |
|
|
| `setBreakpoint` | `{"pc": number}` | Sets a breakpoint at the specified address. |
|
|
| `clearBreakpoint` | `{"pc": number}` | Removes a breakpoint at the specified address. |
|
|
|
|
## Responses
|
|
|
|
Some requests generate specific responses. For example, `getState` returns the VM state.
|
|
|
|
## Events
|
|
|
|
The Runtime can send asynchronous events to the client:
|
|
|
|
| Name | Fields | Description |
|
|
|------|--------|-----------|
|
|
| `breakpointHit` | `pc`, `frame_index` | Emitted when execution hits a breakpoint. |
|
|
| `log` | `level`, `source`, `msg` | Emitted when the running code generates a log. |
|
|
| `telemetry` | `frame_index`, `vm_steps`, `syscalls`, `cycles` | Execution statistics sent periodically. |
|
|
| `cert` | `rule`, `used`, `limit`, `frame_index` | Certification information and resource limits. |
|
|
|
|
## Examples
|
|
|
|
See the `examples/` folder for complete message flows.
|