bQUARKz 47c082adb1
dev/prometeuc-improvements (#5)
Co-authored-by: Nilton Constantino <nilton.constantino@visma.com>
Reviewed-on: #5
2026-03-24 13:40:19 +00:00

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.