237 lines
5.1 KiB
Protocol Buffer
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;
|
|
}
|
|
|