syntax = "proto3";
package coda.tools.v1;

import "google/protobuf/struct.proto";
import "coda/common/v1/types.proto";

service ToolService {
  rpc RunTool(RunToolRequest) returns (RunToolResponse);
  rpc ListTools(ListToolsRequest) returns (ListToolsResponse);
}

message RunToolRequest {
  string tool_id = 1;
  google.protobuf.Struct params = 2;
  optional string model = 3;
}

message RunToolResponse {
  google.protobuf.Struct result = 1;
  ToolExecutionStats stats = 2;
}

message ToolExecutionStats {
  int32 wall_ms = 1;
  int32 cpu_ms = 2;
  double heap_mb = 3;
}

message ListToolsRequest {
  coda.common.v1.PageRequest page = 1;
}

message ListToolsResponse {
  repeated ToolInfo tools = 1;
  coda.common.v1.PageInfo page = 2;
}

message ToolInfo {
  string id = 1;
  string name = 2;
  string description = 3;
  string params_schema = 4;
}
