Project import generated by Copybara.

GitOrigin-RevId: d9e9e3fb4e31372ec1fb43b178994ca78fa8fe70
diff --git a/api/api_proto/features.proto b/api/api_proto/features.proto
new file mode 100644
index 0000000..7d7f2fc
--- /dev/null
+++ b/api/api_proto/features.proto
@@ -0,0 +1,229 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+syntax = "proto3";
+
+package monorail;
+
+import "api/api_proto/common.proto";
+import "api/api_proto/features_objects.proto";
+
+
+service Features {
+  rpc ListHotlistsByUser (ListHotlistsByUserRequest) returns (ListHotlistsByUserResponse) {}
+  rpc ListHotlistsByIssue (ListHotlistsByIssueRequest) returns (ListHotlistsByIssueResponse) {}
+  rpc ListRecentlyVisitedHotlists (ListRecentlyVisitedHotlistsRequest) returns (ListRecentlyVisitedHotlistsResponse) {}
+  rpc ListStarredHotlists (ListStarredHotlistsRequest) returns (ListStarredHotlistsResponse) {}
+  rpc GetHotlistStarCount (GetHotlistStarCountRequest) returns (GetHotlistStarCountResponse) {}
+  rpc StarHotlist (StarHotlistRequest) returns (StarHotlistResponse) {}
+  rpc GetHotlist (GetHotlistRequest) returns (GetHotlistResponse) {}
+  rpc ListHotlistItems (ListHotlistItemsRequest) returns (ListHotlistItemsResponse) {}
+  rpc CreateHotlist (CreateHotlistRequest) returns (CreateHotlistResponse) {}
+  rpc CheckHotlistName (CheckHotlistNameRequest) returns (CheckHotlistNameResponse) {}
+  rpc RemoveIssuesFromHotlists (RemoveIssuesFromHotlistsRequest) returns (RemoveIssuesFromHotlistsResponse) {}
+  rpc AddIssuesToHotlists (AddIssuesToHotlistsRequest) returns (AddIssuesToHotlistsResponse) {}
+  rpc RerankHotlistIssues (RerankHotlistIssuesRequest) returns (RerankHotlistIssuesResponse) {}
+  rpc UpdateHotlistIssueNote (UpdateHotlistIssueNoteRequest) returns (UpdateHotlistIssueNoteResponse) {}
+  rpc DeleteHotlist (DeleteHotlistRequest) returns (DeleteHotlistResponse) {}
+  rpc PredictComponent (PredictComponentRequest) returns (PredictComponentResponse) {}
+}
+
+
+// Next available tag: 3
+message ListHotlistsByUserRequest {
+  UserRef user = 2;
+}
+
+
+// Next available tag: 2
+message ListHotlistsByUserResponse {
+  repeated Hotlist hotlists = 1;
+}
+
+
+// Next available tag: 3
+message ListHotlistsByIssueRequest {
+  IssueRef issue = 2;
+}
+
+
+// Next available tag: 2
+message ListHotlistsByIssueResponse {
+  repeated Hotlist hotlists = 1;
+}
+
+
+// Next available tag: 2
+message ListRecentlyVisitedHotlistsRequest {
+}
+
+
+// Next available tag: 2
+message ListRecentlyVisitedHotlistsResponse {
+  repeated Hotlist hotlists = 1;
+}
+
+
+// Next available tag: 2
+message ListStarredHotlistsRequest {
+}
+
+
+// Next available tag: 2
+message ListStarredHotlistsResponse {
+  repeated Hotlist hotlists = 1;
+}
+
+
+// Next available tag: 3
+message GetHotlistStarCountRequest {
+  HotlistRef hotlist_ref = 2;
+}
+
+
+// Next available tag: 2
+message GetHotlistStarCountResponse {
+  uint32 star_count = 1;
+}
+
+
+// Next available tag: 4
+message StarHotlistRequest {
+  HotlistRef hotlist_ref = 2;
+  bool starred = 3;
+}
+
+
+// Next available tag: 2
+message StarHotlistResponse {
+  uint32 star_count = 1;
+}
+
+// Next available tag: 2
+message GetHotlistRequest {
+  HotlistRef hotlist_ref = 1;
+}
+
+// Next available tag: 2
+message GetHotlistResponse {
+  Hotlist hotlist = 1;
+}
+
+
+// Next available tag: 7
+message ListHotlistItemsRequest {
+  HotlistRef hotlist_ref = 2;
+  Pagination pagination = 3;
+  uint32 can = 4;
+  string sort_spec = 5;
+  string group_by_spec = 6;
+}
+
+
+// Next available tag: 2
+message ListHotlistItemsResponse {
+  repeated HotlistItem items = 1;
+}
+
+
+// Next available tag: 7
+message CreateHotlistRequest {
+  string name = 2;
+  string summary = 3;
+  string description = 4;
+  repeated UserRef editor_refs = 5;
+  repeated IssueRef issue_refs = 6;
+  bool is_private = 7;
+}
+
+
+// Next available tag: 1
+message CreateHotlistResponse {
+}
+
+
+// Next available tag: 3
+message CheckHotlistNameRequest {
+  string name = 2;
+}
+
+
+// Next available tag: 1
+message CheckHotlistNameResponse {
+  string error = 1;
+}
+
+
+// Next available tag: 4
+message RemoveIssuesFromHotlistsRequest {
+  repeated HotlistRef hotlist_refs = 2;
+  repeated IssueRef issue_refs = 3;
+}
+
+
+// Next available tag: 1
+message RemoveIssuesFromHotlistsResponse {
+}
+
+
+// Next available tag: 5
+message AddIssuesToHotlistsRequest {
+  repeated HotlistRef hotlist_refs = 2;
+  repeated IssueRef issue_refs = 3;
+  string note = 4;
+}
+
+
+// Next available tag: 1
+message AddIssuesToHotlistsResponse {
+}
+
+// Next available tag: 5
+message RerankHotlistIssuesRequest{
+  HotlistRef hotlist_ref = 1;
+  repeated IssueRef moved_refs = 2;
+  IssueRef target_ref = 3;
+  bool split_above = 4;
+}
+
+// Next available tag: 1
+message RerankHotlistIssuesResponse{
+}
+
+// Next available tag: 5
+message UpdateHotlistIssueNoteRequest {
+  HotlistRef hotlist_ref = 2;
+  IssueRef issue_ref = 3;
+  string note = 4;
+}
+
+
+// Next available tag: 1
+message UpdateHotlistIssueNoteResponse {
+}
+
+
+// Next available tag: 2
+message DeleteHotlistRequest {
+  HotlistRef hotlist_ref = 1;
+}
+
+
+// Next available tag: 1
+message DeleteHotlistResponse {
+}
+
+
+// Next available tag: 4
+message PredictComponentRequest {
+  string text = 2;
+  string project_name = 3;
+}
+
+
+// Next available tag: 2
+message PredictComponentResponse {
+  ComponentRef component_ref = 1;
+}