33 lines
2.5 KiB
Markdown
33 lines
2.5 KiB
Markdown
# Control protocol
|
||
|
||
Start the app with `--control <port>`. The server listens on `127.0.0.1` only and speaks JSON
|
||
lines: one request object per line, one reply per line.
|
||
|
||
```json
|
||
{"id": 1, "method": "engine.execute", "params": {"command": "shape.insert", "params": {"preset": "roundRect", "rect": [100, 100, 240, 120], "text": "Hello"}}}
|
||
{"id": 1, "ok": true, "result": {"id": 258}}
|
||
```
|
||
|
||
Coordinates are slide points (1/72 inch; a 16:9 slide is 960 × 540) unless noted.
|
||
|
||
| Method | Params | What it does |
|
||
|---|---|---|
|
||
| `engine.execute` / `ui.menu.invoke` / `command` | `{command, params}` | Run any command (see `engine.commands`; `deckcraft-cli describe ID` documents one) |
|
||
| `engine.commands` | — | Every command: id, label, menu path, shortcut, params doc, enabled / disabled reason |
|
||
| `document.inspect` | — | Slides, sections, layouts, shapes, selection |
|
||
| `ui.inspect` | — | UI state, active tool, window/canvas/slide rects, dialog, Home (start screen over the open presentations), slide show state, documents, perf (fps, render ms) |
|
||
| `ui.tool.select` | `{tool, preset?}` | `select`, `text`, `shape` + preset, any preset name, `curve`, `freeform`, `scribble`, `pen`, `highlighter`, `eraser` |
|
||
| `ui.pointer` | `{events: [{kind: down\|drag\|up\|move\|doubleclick\|tripleclick, x, y, mods?}], mods?}` | Drive the active tool in slide points through the same code path as the mouse |
|
||
| `ui.key` / `ui.text` | `{key, shift?, alt?, cmd?}` / `{text}` | Keyboard input (also drives a running slide show) |
|
||
| `ui.move` / `ui.click` / `ui.drag` | screen points | Real egui pointer input — reaches every widget, menu and pane |
|
||
| `ui.set` | `{tab?, view?, pane?, notes?, zoom?, brightness?, ruler?, gridlines?, guides?, …}` | UI state (returns the full state) |
|
||
| `ui.dialog.open` / `ui.dialog.close` | `{id, fields?}` | Open or close a dialog by id; `fields` pre-fills its fields (About: `{"tab": "contributors"}` or `"models"`) |
|
||
| `ui.screenshot` | `{path?}` | PNG of the whole window (base64 when no path) |
|
||
| `ui.render` | `{path?, slide?, scale?}` | Render a slide headlessly |
|
||
| `ui.resize` / `ui.focus` | | Window control |
|
||
| `show.start` / `show.end` | `{from?: slide index, presenter?, reading?}` | Slide show |
|
||
| `app.open` / `app.save` / `app.export` / `app.quit` | `{path, …}` | Files (export takes the `file.export` params, e.g. `{"path": "deck.pdf", "layout": "handouts", "perPage": 3}`) |
|
||
|
||
The MCP server (`deckcraft-cli mcp`, see [mcp.md](mcp.md)) wraps the same methods for Claude
|
||
and other agents; `deckcraft-cli app METHOD [JSON]` sends one request from a shell.
|