syntax = "proto3";
package search;

enum FilterMode {
  GLOBAL = 0;
  HOST = 1;
  SESSION = 2;
  DIRECTORY = 3;
  WORKSPACE = 4;
  SESSION_PRELOAD = 5;
}

message SearchContext {
  string session_id = 1;
  string cwd = 2;
  string hostname = 3;
  string host_id = 4;
  optional string git_root = 5;
}

message SearchRequest {
  string query = 1;
  uint64 query_id = 2; // Incrementing ID to match responses to queries
  FilterMode filter_mode = 3;
  SearchContext context = 4;
  repeated string shells = 5; // Which shells' commands to include
}

message SearchResponse {
  uint64 query_id = 1; // Echo back the query ID
  repeated bytes ids = 2;
}

// Tells the daemon to build the search index for the given list of shells.
// This message gets sent from the shell init scripts, to avoid a delay when
// the first search request is sent.
message PrepareIndexRequest {
  repeated string shells = 1;
}

message PrepareIndexResponse {}

service Search {
  rpc Search(stream SearchRequest) returns (stream SearchResponse);
  rpc PrepareIndex(PrepareIndexRequest) returns (PrepareIndexResponse);
}
