Files
yaze/src/protos/canvas_automation.proto
2025-10-17 12:10:25 -04:00

237 lines
5.1 KiB
Protocol Buffer

syntax = "proto3";
package yaze.proto;
// ============================================================================
// Canvas Automation Service
// ============================================================================
// Provides remote control of canvas operations for:
// - AI agents via tool calls
// - ImGuiTestHarness automation
// - Remote GUI testing and validation
// - Batch scripting workflows
// - Coordinate conversion independent of zoom/scroll
//
// All operations use logical tile coordinates, not pixel coordinates.
// This ensures commands work consistently regardless of UI zoom level.
service CanvasAutomation {
// Tile Operations
rpc SetTile(SetTileRequest) returns (SetTileResponse);
rpc GetTile(GetTileRequest) returns (GetTileResponse);
rpc SetTiles(SetTilesRequest) returns (SetTilesResponse);
// Selection Operations
rpc SelectTile(SelectTileRequest) returns (SelectTileResponse);
rpc SelectTileRect(SelectTileRectRequest) returns (SelectTileRectResponse);
rpc GetSelection(GetSelectionRequest) returns (GetSelectionResponse);
rpc ClearSelection(ClearSelectionRequest) returns (ClearSelectionResponse);
// View Operations
rpc ScrollToTile(ScrollToTileRequest) returns (ScrollToTileResponse);
rpc CenterOn(CenterOnRequest) returns (CenterOnResponse);
rpc SetZoom(SetZoomRequest) returns (SetZoomResponse);
rpc GetZoom(GetZoomRequest) returns (GetZoomResponse);
// Query Operations
rpc GetDimensions(GetDimensionsRequest) returns (GetDimensionsResponse);
rpc GetVisibleRegion(GetVisibleRegionRequest) returns (GetVisibleRegionResponse);
rpc IsTileVisible(IsTileVisibleRequest) returns (IsTileVisibleResponse);
}
// ============================================================================
// Common Types
// ============================================================================
message TileCoord {
int32 x = 1;
int32 y = 2;
}
message TileData {
int32 x = 1;
int32 y = 2;
int32 tile_id = 3;
}
message Rect {
int32 x1 = 1;
int32 y1 = 2;
int32 x2 = 3;
int32 y2 = 4;
}
message Dimensions {
int32 width_tiles = 1;
int32 height_tiles = 2;
int32 tile_size = 3;
}
message VisibleRegion {
int32 min_x = 1;
int32 min_y = 2;
int32 max_x = 3;
int32 max_y = 4;
}
// ============================================================================
// Tile Operations
// ============================================================================
message SetTileRequest {
string canvas_id = 1;
int32 x = 2;
int32 y = 3;
int32 tile_id = 4;
}
message SetTileResponse {
bool success = 1;
string error = 2;
}
message GetTileRequest {
string canvas_id = 1;
int32 x = 2;
int32 y = 3;
}
message GetTileResponse {
int32 tile_id = 1;
bool success = 2;
string error = 3;
}
message SetTilesRequest {
string canvas_id = 1;
repeated TileData tiles = 2;
}
message SetTilesResponse {
bool success = 1;
int32 tiles_painted = 2;
string error = 3;
}
// ============================================================================
// Selection Operations
// ============================================================================
message SelectTileRequest {
string canvas_id = 1;
int32 x = 2;
int32 y = 3;
}
message SelectTileResponse {
bool success = 1;
string error = 2;
}
message SelectTileRectRequest {
string canvas_id = 1;
Rect rect = 2;
}
message SelectTileRectResponse {
bool success = 1;
int32 tiles_selected = 2;
string error = 3;
}
message GetSelectionRequest {
string canvas_id = 1;
}
message GetSelectionResponse {
bool has_selection = 1;
repeated TileCoord selected_tiles = 2;
TileCoord selection_start = 3;
TileCoord selection_end = 4;
}
message ClearSelectionRequest {
string canvas_id = 1;
}
message ClearSelectionResponse {
bool success = 1;
}
// ============================================================================
// View Operations
// ============================================================================
message ScrollToTileRequest {
string canvas_id = 1;
int32 x = 2;
int32 y = 3;
bool center = 4;
}
message ScrollToTileResponse {
bool success = 1;
string error = 2;
}
message CenterOnRequest {
string canvas_id = 1;
int32 x = 2;
int32 y = 3;
}
message CenterOnResponse {
bool success = 1;
string error = 2;
}
message SetZoomRequest {
string canvas_id = 1;
float zoom = 2;
}
message SetZoomResponse {
bool success = 1;
float actual_zoom = 2; // May be clamped
string error = 3;
}
message GetZoomRequest {
string canvas_id = 1;
}
message GetZoomResponse {
float zoom = 1;
}
// ============================================================================
// Query Operations
// ============================================================================
message GetDimensionsRequest {
string canvas_id = 1;
}
message GetDimensionsResponse {
Dimensions dimensions = 1;
}
message GetVisibleRegionRequest {
string canvas_id = 1;
}
message GetVisibleRegionResponse {
VisibleRegion region = 1;
}
message IsTileVisibleRequest {
string canvas_id = 1;
int32 x = 2;
int32 y = 3;
}
message IsTileVisibleResponse {
bool is_visible = 1;
}