st-protocol
Binary wire protocol for Smart Tree daemon communication.
Overview
A tight, 6502-inspired binary protocol using control ASCII (0x00-0x1F) as opcodes. No JSON in the core path. Every byte means something.
Frame Format
┌──────┬─────────────────┬──────┐
│ verb │ payload │ 0x00 │
│ 1B │ N bytes │ END │
└──────┴─────────────────┴──────┘
Escape Sequences
0x1B 0x1B= literal0x1Bin payload0x1B 0x00= literal0x00in payload
Verb Map
0x01 SOH SCAN 0x11 DC1 PERMIT
0x02 STX FORMAT 0x12 DC2 DENY
0x03 ETX SEARCH 0x13 DC3 ELEVATE
0x04 EOT END_STREAM 0x14 DC4 AUDIT
0x05 ENQ PING 0x15 NAK ERROR
0x06 ACK OK 0x16 SYN SUBSCRIBE
0x07 BEL ALERT 0x17 ETB UNSUBSCRIBE
0x08 BS BACK/UNDO 0x18 CAN CANCEL
0x09 HT CONTEXT 0x19 EM M8_WAVE
0x0A LF NEXT 0x1A SUB REMEMBER
0x0B VT STATS 0x1B ESC ESCAPE
0x0C FF CLEAR 0x1C FS RECALL
0x0D CR COMPLETE 0x1D GS FORGET
0x0E SO AUTH_START 0x1E RS SESSION
0x0F SI AUTH_END 0x1F US USER
Network Addressing
Single byte prefix for routing:
0x00= local daemon (Unix socket)0x01-0x7F= cached host index0x80-0xFE= inline address (len = byte - 0x80)0xFF= broadcast/discover
Security Levels
- Level 0x00: Read-only (SCAN, SEARCH, STATS) - no auth required
- Level 0x01: Local write (FORMAT, temp files) - session required
- Level 0x02: Mutate (EDIT, DELETE) - requires FIDO
- Level 0x03: Admin (PERMIT, config) - requires FIDO + PIN
Usage
use ;
// Create a PING frame (2 bytes)
let ping = ping;
let bytes = ping.encode; // [0x05, 0x00]
// Create a SCAN frame
let scan = scan;
let bytes = scan.encode;
// Decode a frame
let frame = decode?;
println!;
License
MIT