- Introduced a new gRPC service for canvas automation, enabling remote control of canvas operations for AI agents, GUI testing, and collaborative editing. - Added proto definitions for canvas automation, including tile operations, selection management, and view control functionalities. - Implemented the CanvasAutomationServiceImpl class to handle various canvas operations, ensuring a robust interface for automation tasks. - Updated CMake configuration to include new proto files and service implementations, enhancing the build system for the canvas automation features.
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;
|
|
}
|
|
|