diff --git a/proto/gen/rill/admin/v1/openapi.yaml b/proto/gen/rill/admin/v1/openapi.yaml index e13a9bf7844..7916cf4d05e 100644 --- a/proto/gen/rill/admin/v1/openapi.yaml +++ b/proto/gen/rill/admin/v1/openapi.yaml @@ -2272,7 +2272,7 @@ externalDocs: info: description: Rill Admin API enables programmatic management of Rill Cloud resources, including organizations, projects, and user access. It provides endpoints for creating, updating, and deleting these resources, as well as managing authentication and permissions. title: Rill Admin API - version: v0.77.2 + version: v0.77.8 openapi: 3.0.3 paths: /v1/ai/complete: diff --git a/proto/gen/rill/admin/v1/public.openapi.yaml b/proto/gen/rill/admin/v1/public.openapi.yaml index 4442e9ae112..1372f3ddf20 100644 --- a/proto/gen/rill/admin/v1/public.openapi.yaml +++ b/proto/gen/rill/admin/v1/public.openapi.yaml @@ -2272,7 +2272,7 @@ externalDocs: info: description: Rill Admin API enables programmatic management of Rill Cloud resources, including organizations, projects, and user access. It provides endpoints for creating, updating, and deleting these resources, as well as managing authentication and permissions. title: Rill Admin API - version: v0.77.2 + version: v0.77.8 openapi: 3.0.3 paths: /v1/ai/complete: {} diff --git a/proto/gen/rill/runtime/v1/api.pb.go b/proto/gen/rill/runtime/v1/api.pb.go index 60378961d4b..ac739e72f58 100644 --- a/proto/gen/rill/runtime/v1/api.pb.go +++ b/proto/gen/rill/runtime/v1/api.pb.go @@ -5189,13 +5189,14 @@ type Conversation struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - OwnerId string `protobuf:"bytes,2,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` - Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` - UserAgent string `protobuf:"bytes,6,opt,name=user_agent,json=userAgent,proto3" json:"user_agent,omitempty"` - CreatedOn *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=created_on,json=createdOn,proto3" json:"created_on,omitempty"` - UpdatedOn *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=updated_on,json=updatedOn,proto3" json:"updated_on,omitempty"` - Messages []*Message `protobuf:"bytes,7,rep,name=messages,proto3" json:"messages,omitempty"` // NOTE: Deprecated. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + OwnerId string `protobuf:"bytes,2,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` + Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` + UserAgent string `protobuf:"bytes,6,opt,name=user_agent,json=userAgent,proto3" json:"user_agent,omitempty"` + CheckpointMessageId string `protobuf:"bytes,8,opt,name=checkpoint_message_id,json=checkpointMessageId,proto3" json:"checkpoint_message_id,omitempty"` + CreatedOn *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=created_on,json=createdOn,proto3" json:"created_on,omitempty"` + UpdatedOn *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=updated_on,json=updatedOn,proto3" json:"updated_on,omitempty"` + Messages []*Message `protobuf:"bytes,7,rep,name=messages,proto3" json:"messages,omitempty"` // NOTE: Deprecated. } func (x *Conversation) Reset() { @@ -5258,6 +5259,13 @@ func (x *Conversation) GetUserAgent() string { return "" } +func (x *Conversation) GetCheckpointMessageId() string { + if x != nil { + return x.CheckpointMessageId + } + return "" +} + func (x *Conversation) GetCreatedOn() *timestamppb.Timestamp { if x != nil { return x.CreatedOn @@ -5778,6 +5786,236 @@ func (x *GetConversationResponse) GetMessages() []*Message { return nil } +// Request message for RuntimeService.SetConversationCheckpoint +type SetConversationCheckpointRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Instance the conversation belongs to. + InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // Conversation ID to checkpoint. + ConversationId string `protobuf:"bytes,2,opt,name=conversation_id,json=conversationId,proto3" json:"conversation_id,omitempty"` + // Message ID of the latest message *before* the checkpoint. + MessageId string `protobuf:"bytes,3,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` +} + +func (x *SetConversationCheckpointRequest) Reset() { + *x = SetConversationCheckpointRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_rill_runtime_v1_api_proto_msgTypes[85] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetConversationCheckpointRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetConversationCheckpointRequest) ProtoMessage() {} + +func (x *SetConversationCheckpointRequest) ProtoReflect() protoreflect.Message { + mi := &file_rill_runtime_v1_api_proto_msgTypes[85] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetConversationCheckpointRequest.ProtoReflect.Descriptor instead. +func (*SetConversationCheckpointRequest) Descriptor() ([]byte, []int) { + return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{85} +} + +func (x *SetConversationCheckpointRequest) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *SetConversationCheckpointRequest) GetConversationId() string { + if x != nil { + return x.ConversationId + } + return "" +} + +func (x *SetConversationCheckpointRequest) GetMessageId() string { + if x != nil { + return x.MessageId + } + return "" +} + +// Response message for RuntimeService.SetConversationCheckpoint +type SetConversationCheckpointResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SetConversationCheckpointResponse) Reset() { + *x = SetConversationCheckpointResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_rill_runtime_v1_api_proto_msgTypes[86] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetConversationCheckpointResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetConversationCheckpointResponse) ProtoMessage() {} + +func (x *SetConversationCheckpointResponse) ProtoReflect() protoreflect.Message { + mi := &file_rill_runtime_v1_api_proto_msgTypes[86] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetConversationCheckpointResponse.ProtoReflect.Descriptor instead. +func (*SetConversationCheckpointResponse) Descriptor() ([]byte, []int) { + return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{86} +} + +// Request message for RuntimeService.RevertConversationWrites +type RevertConversationWritesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Instance the conversation belongs to. + InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // Conversation ID to revert writes for. + ConversationId string `protobuf:"bytes,2,opt,name=conversation_id,json=conversationId,proto3" json:"conversation_id,omitempty"` + // Start message ID to revert from (inclusive). If empty, it reverts from after the conversation's checkpoint. + FromMessageId string `protobuf:"bytes,3,opt,name=from_message_id,json=fromMessageId,proto3" json:"from_message_id,omitempty"` + // End message ID to revert to (inclusive). If empty, it reverts to the latest message. + ToMessageId string `protobuf:"bytes,4,opt,name=to_message_id,json=toMessageId,proto3" json:"to_message_id,omitempty"` +} + +func (x *RevertConversationWritesRequest) Reset() { + *x = RevertConversationWritesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_rill_runtime_v1_api_proto_msgTypes[87] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RevertConversationWritesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RevertConversationWritesRequest) ProtoMessage() {} + +func (x *RevertConversationWritesRequest) ProtoReflect() protoreflect.Message { + mi := &file_rill_runtime_v1_api_proto_msgTypes[87] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RevertConversationWritesRequest.ProtoReflect.Descriptor instead. +func (*RevertConversationWritesRequest) Descriptor() ([]byte, []int) { + return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{87} +} + +func (x *RevertConversationWritesRequest) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *RevertConversationWritesRequest) GetConversationId() string { + if x != nil { + return x.ConversationId + } + return "" +} + +func (x *RevertConversationWritesRequest) GetFromMessageId() string { + if x != nil { + return x.FromMessageId + } + return "" +} + +func (x *RevertConversationWritesRequest) GetToMessageId() string { + if x != nil { + return x.ToMessageId + } + return "" +} + +// Response message for RuntimeService.RevertConversationWrites +type RevertConversationWritesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RestoredPaths []string `protobuf:"bytes,1,rep,name=restored_paths,json=restoredPaths,proto3" json:"restored_paths,omitempty"` +} + +func (x *RevertConversationWritesResponse) Reset() { + *x = RevertConversationWritesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_rill_runtime_v1_api_proto_msgTypes[88] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RevertConversationWritesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RevertConversationWritesResponse) ProtoMessage() {} + +func (x *RevertConversationWritesResponse) ProtoReflect() protoreflect.Message { + mi := &file_rill_runtime_v1_api_proto_msgTypes[88] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RevertConversationWritesResponse.ProtoReflect.Descriptor instead. +func (*RevertConversationWritesResponse) Descriptor() ([]byte, []int) { + return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{88} +} + +func (x *RevertConversationWritesResponse) GetRestoredPaths() []string { + if x != nil { + return x.RestoredPaths + } + return nil +} + // Request message for RuntimeService.ListTools type ListToolsRequest struct { state protoimpl.MessageState @@ -5790,7 +6028,7 @@ type ListToolsRequest struct { func (x *ListToolsRequest) Reset() { *x = ListToolsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_api_proto_msgTypes[85] + mi := &file_rill_runtime_v1_api_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5803,7 +6041,7 @@ func (x *ListToolsRequest) String() string { func (*ListToolsRequest) ProtoMessage() {} func (x *ListToolsRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_api_proto_msgTypes[85] + mi := &file_rill_runtime_v1_api_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5816,7 +6054,7 @@ func (x *ListToolsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListToolsRequest.ProtoReflect.Descriptor instead. func (*ListToolsRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{85} + return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{89} } func (x *ListToolsRequest) GetInstanceId() string { @@ -5838,7 +6076,7 @@ type ListToolsResponse struct { func (x *ListToolsResponse) Reset() { *x = ListToolsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_api_proto_msgTypes[86] + mi := &file_rill_runtime_v1_api_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5851,7 +6089,7 @@ func (x *ListToolsResponse) String() string { func (*ListToolsResponse) ProtoMessage() {} func (x *ListToolsResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_api_proto_msgTypes[86] + mi := &file_rill_runtime_v1_api_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5864,7 +6102,7 @@ func (x *ListToolsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListToolsResponse.ProtoReflect.Descriptor instead. func (*ListToolsResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{86} + return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{90} } func (x *ListToolsResponse) GetTools() []*v1.Tool { @@ -5900,7 +6138,7 @@ type CompleteRequest struct { func (x *CompleteRequest) Reset() { *x = CompleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_api_proto_msgTypes[87] + mi := &file_rill_runtime_v1_api_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5913,7 +6151,7 @@ func (x *CompleteRequest) String() string { func (*CompleteRequest) ProtoMessage() {} func (x *CompleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_api_proto_msgTypes[87] + mi := &file_rill_runtime_v1_api_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5926,7 +6164,7 @@ func (x *CompleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CompleteRequest.ProtoReflect.Descriptor instead. func (*CompleteRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{87} + return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{91} } func (x *CompleteRequest) GetInstanceId() string { @@ -5984,7 +6222,7 @@ type CompleteResponse struct { func (x *CompleteResponse) Reset() { *x = CompleteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_api_proto_msgTypes[88] + mi := &file_rill_runtime_v1_api_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5997,7 +6235,7 @@ func (x *CompleteResponse) String() string { func (*CompleteResponse) ProtoMessage() {} func (x *CompleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_api_proto_msgTypes[88] + mi := &file_rill_runtime_v1_api_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6010,7 +6248,7 @@ func (x *CompleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CompleteResponse.ProtoReflect.Descriptor instead. func (*CompleteResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{88} + return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{92} } func (x *CompleteResponse) GetConversationId() string { @@ -6053,7 +6291,7 @@ type CompleteStreamingRequest struct { func (x *CompleteStreamingRequest) Reset() { *x = CompleteStreamingRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_api_proto_msgTypes[89] + mi := &file_rill_runtime_v1_api_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6066,7 +6304,7 @@ func (x *CompleteStreamingRequest) String() string { func (*CompleteStreamingRequest) ProtoMessage() {} func (x *CompleteStreamingRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_api_proto_msgTypes[89] + mi := &file_rill_runtime_v1_api_proto_msgTypes[93] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6079,7 +6317,7 @@ func (x *CompleteStreamingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CompleteStreamingRequest.ProtoReflect.Descriptor instead. func (*CompleteStreamingRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{89} + return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{93} } func (x *CompleteStreamingRequest) GetInstanceId() string { @@ -6137,7 +6375,7 @@ type CompleteStreamingResponse struct { func (x *CompleteStreamingResponse) Reset() { *x = CompleteStreamingResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_api_proto_msgTypes[90] + mi := &file_rill_runtime_v1_api_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6150,7 +6388,7 @@ func (x *CompleteStreamingResponse) String() string { func (*CompleteStreamingResponse) ProtoMessage() {} func (x *CompleteStreamingResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_api_proto_msgTypes[90] + mi := &file_rill_runtime_v1_api_proto_msgTypes[94] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6163,7 +6401,7 @@ func (x *CompleteStreamingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CompleteStreamingResponse.ProtoReflect.Descriptor instead. func (*CompleteStreamingResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{90} + return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{94} } func (x *CompleteStreamingResponse) GetConversationId() string { @@ -6198,7 +6436,7 @@ type IssueDevJWTRequest struct { func (x *IssueDevJWTRequest) Reset() { *x = IssueDevJWTRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_api_proto_msgTypes[91] + mi := &file_rill_runtime_v1_api_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6211,7 +6449,7 @@ func (x *IssueDevJWTRequest) String() string { func (*IssueDevJWTRequest) ProtoMessage() {} func (x *IssueDevJWTRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_api_proto_msgTypes[91] + mi := &file_rill_runtime_v1_api_proto_msgTypes[95] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6224,7 +6462,7 @@ func (x *IssueDevJWTRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use IssueDevJWTRequest.ProtoReflect.Descriptor instead. func (*IssueDevJWTRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{91} + return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{95} } func (x *IssueDevJWTRequest) GetName() string { @@ -6274,7 +6512,7 @@ type IssueDevJWTResponse struct { func (x *IssueDevJWTResponse) Reset() { *x = IssueDevJWTResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_api_proto_msgTypes[92] + mi := &file_rill_runtime_v1_api_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6287,7 +6525,7 @@ func (x *IssueDevJWTResponse) String() string { func (*IssueDevJWTResponse) ProtoMessage() {} func (x *IssueDevJWTResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_api_proto_msgTypes[92] + mi := &file_rill_runtime_v1_api_proto_msgTypes[96] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6300,7 +6538,7 @@ func (x *IssueDevJWTResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IssueDevJWTResponse.ProtoReflect.Descriptor instead. func (*IssueDevJWTResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{92} + return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{96} } func (x *IssueDevJWTResponse) GetJwt() string { @@ -6322,7 +6560,7 @@ type AnalyzeVariablesRequest struct { func (x *AnalyzeVariablesRequest) Reset() { *x = AnalyzeVariablesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_api_proto_msgTypes[93] + mi := &file_rill_runtime_v1_api_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6335,7 +6573,7 @@ func (x *AnalyzeVariablesRequest) String() string { func (*AnalyzeVariablesRequest) ProtoMessage() {} func (x *AnalyzeVariablesRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_api_proto_msgTypes[93] + mi := &file_rill_runtime_v1_api_proto_msgTypes[97] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6348,7 +6586,7 @@ func (x *AnalyzeVariablesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AnalyzeVariablesRequest.ProtoReflect.Descriptor instead. func (*AnalyzeVariablesRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{93} + return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{97} } func (x *AnalyzeVariablesRequest) GetInstanceId() string { @@ -6370,7 +6608,7 @@ type AnalyzeVariablesResponse struct { func (x *AnalyzeVariablesResponse) Reset() { *x = AnalyzeVariablesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_api_proto_msgTypes[94] + mi := &file_rill_runtime_v1_api_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6383,7 +6621,7 @@ func (x *AnalyzeVariablesResponse) String() string { func (*AnalyzeVariablesResponse) ProtoMessage() {} func (x *AnalyzeVariablesResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_api_proto_msgTypes[94] + mi := &file_rill_runtime_v1_api_proto_msgTypes[98] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6396,7 +6634,7 @@ func (x *AnalyzeVariablesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AnalyzeVariablesResponse.ProtoReflect.Descriptor instead. func (*AnalyzeVariablesResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{94} + return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{98} } func (x *AnalyzeVariablesResponse) GetVariables() []*AnalyzedVariable { @@ -6422,7 +6660,7 @@ type AnalyzedVariable struct { func (x *AnalyzedVariable) Reset() { *x = AnalyzedVariable{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_api_proto_msgTypes[95] + mi := &file_rill_runtime_v1_api_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6435,7 +6673,7 @@ func (x *AnalyzedVariable) String() string { func (*AnalyzedVariable) ProtoMessage() {} func (x *AnalyzedVariable) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_api_proto_msgTypes[95] + mi := &file_rill_runtime_v1_api_proto_msgTypes[99] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6448,7 +6686,7 @@ func (x *AnalyzedVariable) ProtoReflect() protoreflect.Message { // Deprecated: Use AnalyzedVariable.ProtoReflect.Descriptor instead. func (*AnalyzedVariable) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{95} + return file_rill_runtime_v1_api_proto_rawDescGZIP(), []int{99} } func (x *AnalyzedVariable) GetName() string { @@ -6505,7 +6743,7 @@ type ConnectorDriver_Property struct { func (x *ConnectorDriver_Property) Reset() { *x = ConnectorDriver_Property{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_api_proto_msgTypes[106] + mi := &file_rill_runtime_v1_api_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6518,7 +6756,7 @@ func (x *ConnectorDriver_Property) String() string { func (*ConnectorDriver_Property) ProtoMessage() {} func (x *ConnectorDriver_Property) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_api_proto_msgTypes[106] + mi := &file_rill_runtime_v1_api_proto_msgTypes[110] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7454,104 +7692,138 @@ var file_rill_runtime_v1_api_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x9a, 0x02, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x76, + 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0xce, 0x02, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, - 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x4f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6f, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x12, 0x34, - 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x22, 0xf8, 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x39, 0x0a, - 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x4f, 0x6e, 0x12, 0x34, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0xf8, 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x12, 0x0a, + 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x6f, 0x6f, 0x6c, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x6f, 0x6f, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x32, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x61, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x22, 0x90, 0x02, 0x0a, 0x13, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x74, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, + 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, + 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x69, 0x6d, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, + 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, + 0x73, 0x12, 0x31, 0x0a, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x77, + 0x68, 0x65, 0x72, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, + 0x35, 0x0a, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x4f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x6f, 0x6f, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x6f, 0x6f, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x07, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x72, - 0x69, 0x6c, 0x6c, 0x2e, 0x61, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, - 0x90, 0x02, 0x0a, 0x13, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x6c, 0x6f, - 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x73, 0x12, 0x31, 0x0a, - 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x72, - 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, - 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, - 0x12, 0x39, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x45, - 0x6e, 0x64, 0x22, 0x66, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x72, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x69, - 0x6e, 0x69, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, - 0x0a, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0x83, 0x01, 0x0a, 0x18, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xfa, 0x42, - 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x5f, 0x5c, 0x2d, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, - 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x24, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, - 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, - 0x22, 0x60, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, - 0x0d, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x22, 0x7c, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0b, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x18, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x5f, 0x5c, 0x2d, 0x61, - 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x24, 0x52, 0x0a, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, - 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x22, 0x92, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0c, - 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x34, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x33, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x74, + 0x69, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x22, 0x66, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, + 0x70, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, + 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x69, + 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0x83, + 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0b, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x18, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x5f, 0x5c, 0x2d, 0x61, 0x2d, + 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x24, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x22, 0x60, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x76, + 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x43, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x7c, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x39, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, + 0x5f, 0x5c, 0x2d, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x24, 0x52, + 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x92, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, + 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x41, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0xa5, 0x01, 0x0a, 0x20, 0x53, 0x65, + 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, + 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x18, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x5f, 0x5c, + 0x2d, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x24, 0x52, 0x0a, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, + 0x64, 0x22, 0x23, 0x0a, 0x21, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd1, 0x01, 0x0a, 0x1f, 0x52, 0x65, 0x76, 0x65, 0x72, + 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0b, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x18, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x5f, 0x5c, 0x2d, 0x61, 0x2d, 0x7a, + 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x24, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x26, + 0x0a, 0x0f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x74, 0x6f, 0x5f, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, + 0x6f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x22, 0x49, 0x0a, 0x20, 0x52, 0x65, + 0x76, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, + 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, + 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0x33, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x22, 0x3b, 0x0a, 0x11, 0x4c, 0x69, @@ -7675,8 +7947,8 @@ var file_rill_runtime_v1_api_proto_rawDesc = []byte{ 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x02, 0x32, 0x98, - 0x2e, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x02, 0x32, 0xce, + 0x31, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, @@ -8001,63 +8273,91 @@ var file_rill_runtime_v1_api_proto_rawDesc = []byte{ 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x69, 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x7d, 0x12, 0x80, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x6f, 0x6c, - 0x73, 0x12, 0x21, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x6f, 0x6c, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, - 0x12, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x69, - 0x2f, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x12, 0x83, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, - 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x69, 0x64, 0x7d, 0x12, 0xd8, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x12, 0x31, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, + 0x3a, 0x01, 0x2a, 0x22, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x61, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xa7, 0x01, 0x0a, - 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, - 0x6e, 0x67, 0x12, 0x29, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, + 0x2f, 0x61, 0x69, 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0xd8, + 0x01, 0x0a, 0x18, 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x72, 0x69, + 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, + 0x76, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x33, 0x3a, 0x01, 0x2a, 0x22, 0x2e, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x61, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x2f, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0x70, 0x0a, 0x0b, 0x49, 0x73, 0x73, 0x75, 0x65, 0x44, - 0x65, 0x76, 0x4a, 0x57, 0x54, 0x12, 0x23, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x44, 0x65, 0x76, - 0x4a, 0x57, 0x54, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x72, 0x69, 0x6c, - 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x73, - 0x75, 0x65, 0x44, 0x65, 0x76, 0x4a, 0x57, 0x54, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x76, 0x31, - 0x2f, 0x64, 0x65, 0x76, 0x2d, 0x6a, 0x77, 0x74, 0x12, 0x9e, 0x01, 0x0a, 0x10, 0x41, 0x6e, 0x61, - 0x6c, 0x79, 0x7a, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x28, 0x2e, + 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, 0x3a, 0x01, 0x2a, 0x22, 0x4c, 0x2f, 0x76, 0x31, + 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x69, 0x2f, 0x63, 0x6f, 0x6e, 0x76, + 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x76, 0x65, + 0x72, 0x74, 0x2d, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, 0x12, 0x80, 0x01, 0x0a, 0x09, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x12, 0x21, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, + 0x6f, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x72, 0x69, 0x6c, + 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x69, 0x2f, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x12, 0x83, 0x01, 0x0a, + 0x08, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x72, 0x69, 0x6c, 0x6c, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x72, 0x69, + 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x12, 0xa7, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x29, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x3a, 0x01, 0x2a, 0x22, 0x2e, 0x2f, 0x76, 0x31, 0x2f, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x65, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0x70, 0x0a, 0x0b, + 0x49, 0x73, 0x73, 0x75, 0x65, 0x44, 0x65, 0x76, 0x4a, 0x57, 0x54, 0x12, 0x23, 0x2e, 0x72, 0x69, + 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, + 0x73, 0x75, 0x65, 0x44, 0x65, 0x76, 0x4a, 0x57, 0x54, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x24, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x44, 0x65, 0x76, 0x4a, 0x57, 0x54, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a, 0x01, + 0x2a, 0x22, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x76, 0x2d, 0x6a, 0x77, 0x74, 0x12, 0x9e, + 0x01, 0x0a, 0x10, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x56, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, - 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x76, 0x31, 0x2f, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x42, 0xbb, 0x01, 0x0a, 0x13, 0x63, 0x6f, - 0x6d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x42, 0x08, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x69, 0x6c, 0x6c, 0x64, 0x61, - 0x74, 0x61, 0x2f, 0x72, 0x69, 0x6c, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, - 0x6e, 0x2f, 0x72, 0x69, 0x6c, 0x6c, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x76, - 0x31, 0x3b, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x52, 0x52, - 0x58, 0xaa, 0x02, 0x0f, 0x52, 0x69, 0x6c, 0x6c, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0f, 0x52, 0x69, 0x6c, 0x6c, 0x5c, 0x52, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1b, 0x52, 0x69, 0x6c, 0x6c, 0x5c, 0x52, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x52, 0x69, 0x6c, 0x6c, 0x3a, 0x3a, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, + 0x12, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, + 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x42, + 0xbb, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x08, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x72, 0x69, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x72, 0x69, 0x6c, 0x6c, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x72, 0x69, 0x6c, 0x6c, 0x2f, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x76, + 0x31, 0xa2, 0x02, 0x03, 0x52, 0x52, 0x58, 0xaa, 0x02, 0x0f, 0x52, 0x69, 0x6c, 0x6c, 0x2e, 0x52, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0f, 0x52, 0x69, 0x6c, 0x6c, + 0x5c, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1b, 0x52, 0x69, + 0x6c, 0x6c, 0x5c, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x52, 0x69, 0x6c, 0x6c, + 0x3a, 0x3a, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8073,221 +8373,225 @@ func file_rill_runtime_v1_api_proto_rawDescGZIP() []byte { } var file_rill_runtime_v1_api_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_rill_runtime_v1_api_proto_msgTypes = make([]protoimpl.MessageInfo, 108) +var file_rill_runtime_v1_api_proto_msgTypes = make([]protoimpl.MessageInfo, 112) var file_rill_runtime_v1_api_proto_goTypes = []any{ - (FileEvent)(0), // 0: rill.runtime.v1.FileEvent - (LogLevel)(0), // 1: rill.runtime.v1.LogLevel - (ResourceEvent)(0), // 2: rill.runtime.v1.ResourceEvent - (ConnectorDriver_Property_Type)(0), // 3: rill.runtime.v1.ConnectorDriver.Property.Type - (*PingRequest)(nil), // 4: rill.runtime.v1.PingRequest - (*PingResponse)(nil), // 5: rill.runtime.v1.PingResponse - (*HealthRequest)(nil), // 6: rill.runtime.v1.HealthRequest - (*HealthResponse)(nil), // 7: rill.runtime.v1.HealthResponse - (*InstanceHealthRequest)(nil), // 8: rill.runtime.v1.InstanceHealthRequest - (*InstanceHealthResponse)(nil), // 9: rill.runtime.v1.InstanceHealthResponse - (*InstanceHealth)(nil), // 10: rill.runtime.v1.InstanceHealth - (*Instance)(nil), // 11: rill.runtime.v1.Instance - (*Connector)(nil), // 12: rill.runtime.v1.Connector - (*ListInstancesRequest)(nil), // 13: rill.runtime.v1.ListInstancesRequest - (*ListInstancesResponse)(nil), // 14: rill.runtime.v1.ListInstancesResponse - (*GetInstanceRequest)(nil), // 15: rill.runtime.v1.GetInstanceRequest - (*GetInstanceResponse)(nil), // 16: rill.runtime.v1.GetInstanceResponse - (*CreateInstanceRequest)(nil), // 17: rill.runtime.v1.CreateInstanceRequest - (*CreateInstanceResponse)(nil), // 18: rill.runtime.v1.CreateInstanceResponse - (*DeleteInstanceRequest)(nil), // 19: rill.runtime.v1.DeleteInstanceRequest - (*DeleteInstanceResponse)(nil), // 20: rill.runtime.v1.DeleteInstanceResponse - (*EditInstanceRequest)(nil), // 21: rill.runtime.v1.EditInstanceRequest - (*EditInstanceResponse)(nil), // 22: rill.runtime.v1.EditInstanceResponse - (*ListFilesRequest)(nil), // 23: rill.runtime.v1.ListFilesRequest - (*ListFilesResponse)(nil), // 24: rill.runtime.v1.ListFilesResponse - (*DirEntry)(nil), // 25: rill.runtime.v1.DirEntry - (*WatchFilesRequest)(nil), // 26: rill.runtime.v1.WatchFilesRequest - (*WatchFilesResponse)(nil), // 27: rill.runtime.v1.WatchFilesResponse - (*GetFileRequest)(nil), // 28: rill.runtime.v1.GetFileRequest - (*GetFileResponse)(nil), // 29: rill.runtime.v1.GetFileResponse - (*PutFileRequest)(nil), // 30: rill.runtime.v1.PutFileRequest - (*PutFileResponse)(nil), // 31: rill.runtime.v1.PutFileResponse - (*CreateDirectoryRequest)(nil), // 32: rill.runtime.v1.CreateDirectoryRequest - (*CreateDirectoryResponse)(nil), // 33: rill.runtime.v1.CreateDirectoryResponse - (*DeleteFileRequest)(nil), // 34: rill.runtime.v1.DeleteFileRequest - (*DeleteFileResponse)(nil), // 35: rill.runtime.v1.DeleteFileResponse - (*RenameFileRequest)(nil), // 36: rill.runtime.v1.RenameFileRequest - (*RenameFileResponse)(nil), // 37: rill.runtime.v1.RenameFileResponse - (*Example)(nil), // 38: rill.runtime.v1.Example - (*ListExamplesRequest)(nil), // 39: rill.runtime.v1.ListExamplesRequest - (*ListExamplesResponse)(nil), // 40: rill.runtime.v1.ListExamplesResponse - (*UnpackExampleRequest)(nil), // 41: rill.runtime.v1.UnpackExampleRequest - (*UnpackExampleResponse)(nil), // 42: rill.runtime.v1.UnpackExampleResponse - (*UnpackEmptyRequest)(nil), // 43: rill.runtime.v1.UnpackEmptyRequest - (*UnpackEmptyResponse)(nil), // 44: rill.runtime.v1.UnpackEmptyResponse - (*GenerateMetricsViewFileRequest)(nil), // 45: rill.runtime.v1.GenerateMetricsViewFileRequest - (*GenerateMetricsViewFileResponse)(nil), // 46: rill.runtime.v1.GenerateMetricsViewFileResponse - (*GenerateCanvasFileRequest)(nil), // 47: rill.runtime.v1.GenerateCanvasFileRequest - (*GenerateCanvasFileResponse)(nil), // 48: rill.runtime.v1.GenerateCanvasFileResponse - (*GenerateResolverRequest)(nil), // 49: rill.runtime.v1.GenerateResolverRequest - (*GenerateResolverResponse)(nil), // 50: rill.runtime.v1.GenerateResolverResponse - (*GenerateRendererRequest)(nil), // 51: rill.runtime.v1.GenerateRendererRequest - (*GenerateRendererResponse)(nil), // 52: rill.runtime.v1.GenerateRendererResponse - (*QueryResolverRequest)(nil), // 53: rill.runtime.v1.QueryResolverRequest - (*QueryResolverResponse)(nil), // 54: rill.runtime.v1.QueryResolverResponse - (*Log)(nil), // 55: rill.runtime.v1.Log - (*ModelPartition)(nil), // 56: rill.runtime.v1.ModelPartition - (*GetLogsRequest)(nil), // 57: rill.runtime.v1.GetLogsRequest - (*GetLogsResponse)(nil), // 58: rill.runtime.v1.GetLogsResponse - (*WatchLogsRequest)(nil), // 59: rill.runtime.v1.WatchLogsRequest - (*WatchLogsResponse)(nil), // 60: rill.runtime.v1.WatchLogsResponse - (*ListResourcesRequest)(nil), // 61: rill.runtime.v1.ListResourcesRequest - (*ListResourcesResponse)(nil), // 62: rill.runtime.v1.ListResourcesResponse - (*WatchResourcesRequest)(nil), // 63: rill.runtime.v1.WatchResourcesRequest - (*WatchResourcesResponse)(nil), // 64: rill.runtime.v1.WatchResourcesResponse - (*GetResourceRequest)(nil), // 65: rill.runtime.v1.GetResourceRequest - (*GetResourceResponse)(nil), // 66: rill.runtime.v1.GetResourceResponse - (*GetExploreRequest)(nil), // 67: rill.runtime.v1.GetExploreRequest - (*GetExploreResponse)(nil), // 68: rill.runtime.v1.GetExploreResponse - (*GetModelPartitionsRequest)(nil), // 69: rill.runtime.v1.GetModelPartitionsRequest - (*GetModelPartitionsResponse)(nil), // 70: rill.runtime.v1.GetModelPartitionsResponse - (*CreateTriggerRequest)(nil), // 71: rill.runtime.v1.CreateTriggerRequest - (*CreateTriggerResponse)(nil), // 72: rill.runtime.v1.CreateTriggerResponse - (*ConnectorDriver)(nil), // 73: rill.runtime.v1.ConnectorDriver - (*AnalyzedConnector)(nil), // 74: rill.runtime.v1.AnalyzedConnector - (*ListConnectorDriversRequest)(nil), // 75: rill.runtime.v1.ListConnectorDriversRequest - (*ListConnectorDriversResponse)(nil), // 76: rill.runtime.v1.ListConnectorDriversResponse - (*AnalyzeConnectorsRequest)(nil), // 77: rill.runtime.v1.AnalyzeConnectorsRequest - (*AnalyzeConnectorsResponse)(nil), // 78: rill.runtime.v1.AnalyzeConnectorsResponse - (*ListNotifierConnectorsRequest)(nil), // 79: rill.runtime.v1.ListNotifierConnectorsRequest - (*ListNotifierConnectorsResponse)(nil), // 80: rill.runtime.v1.ListNotifierConnectorsResponse - (*Conversation)(nil), // 81: rill.runtime.v1.Conversation - (*Message)(nil), // 82: rill.runtime.v1.Message - (*AnalystAgentContext)(nil), // 83: rill.runtime.v1.AnalystAgentContext - (*DeveloperAgentContext)(nil), // 84: rill.runtime.v1.DeveloperAgentContext - (*ListConversationsRequest)(nil), // 85: rill.runtime.v1.ListConversationsRequest - (*ListConversationsResponse)(nil), // 86: rill.runtime.v1.ListConversationsResponse - (*GetConversationRequest)(nil), // 87: rill.runtime.v1.GetConversationRequest - (*GetConversationResponse)(nil), // 88: rill.runtime.v1.GetConversationResponse - (*ListToolsRequest)(nil), // 89: rill.runtime.v1.ListToolsRequest - (*ListToolsResponse)(nil), // 90: rill.runtime.v1.ListToolsResponse - (*CompleteRequest)(nil), // 91: rill.runtime.v1.CompleteRequest - (*CompleteResponse)(nil), // 92: rill.runtime.v1.CompleteResponse - (*CompleteStreamingRequest)(nil), // 93: rill.runtime.v1.CompleteStreamingRequest - (*CompleteStreamingResponse)(nil), // 94: rill.runtime.v1.CompleteStreamingResponse - (*IssueDevJWTRequest)(nil), // 95: rill.runtime.v1.IssueDevJWTRequest - (*IssueDevJWTResponse)(nil), // 96: rill.runtime.v1.IssueDevJWTResponse - (*AnalyzeVariablesRequest)(nil), // 97: rill.runtime.v1.AnalyzeVariablesRequest - (*AnalyzeVariablesResponse)(nil), // 98: rill.runtime.v1.AnalyzeVariablesResponse - (*AnalyzedVariable)(nil), // 99: rill.runtime.v1.AnalyzedVariable - nil, // 100: rill.runtime.v1.HealthResponse.InstancesHealthEntry - nil, // 101: rill.runtime.v1.InstanceHealth.MetricsViewErrorsEntry - nil, // 102: rill.runtime.v1.Instance.VariablesEntry - nil, // 103: rill.runtime.v1.Instance.ProjectVariablesEntry - nil, // 104: rill.runtime.v1.Instance.FeatureFlagsEntry - nil, // 105: rill.runtime.v1.Instance.AnnotationsEntry - nil, // 106: rill.runtime.v1.CreateInstanceRequest.VariablesEntry - nil, // 107: rill.runtime.v1.CreateInstanceRequest.AnnotationsEntry - nil, // 108: rill.runtime.v1.EditInstanceRequest.VariablesEntry - nil, // 109: rill.runtime.v1.EditInstanceRequest.AnnotationsEntry - (*ConnectorDriver_Property)(nil), // 110: rill.runtime.v1.ConnectorDriver.Property - nil, // 111: rill.runtime.v1.AnalyzedConnector.EnvConfigEntry - (*timestamppb.Timestamp)(nil), // 112: google.protobuf.Timestamp - (*structpb.Struct)(nil), // 113: google.protobuf.Struct - (*StructType)(nil), // 114: rill.runtime.v1.StructType - (*Resource)(nil), // 115: rill.runtime.v1.Resource - (*ResourceName)(nil), // 116: rill.runtime.v1.ResourceName - (*RefreshModelTrigger)(nil), // 117: rill.runtime.v1.RefreshModelTrigger - (*v1.ContentBlock)(nil), // 118: rill.ai.v1.ContentBlock - (*Expression)(nil), // 119: rill.runtime.v1.Expression - (*v1.Tool)(nil), // 120: rill.ai.v1.Tool + (FileEvent)(0), // 0: rill.runtime.v1.FileEvent + (LogLevel)(0), // 1: rill.runtime.v1.LogLevel + (ResourceEvent)(0), // 2: rill.runtime.v1.ResourceEvent + (ConnectorDriver_Property_Type)(0), // 3: rill.runtime.v1.ConnectorDriver.Property.Type + (*PingRequest)(nil), // 4: rill.runtime.v1.PingRequest + (*PingResponse)(nil), // 5: rill.runtime.v1.PingResponse + (*HealthRequest)(nil), // 6: rill.runtime.v1.HealthRequest + (*HealthResponse)(nil), // 7: rill.runtime.v1.HealthResponse + (*InstanceHealthRequest)(nil), // 8: rill.runtime.v1.InstanceHealthRequest + (*InstanceHealthResponse)(nil), // 9: rill.runtime.v1.InstanceHealthResponse + (*InstanceHealth)(nil), // 10: rill.runtime.v1.InstanceHealth + (*Instance)(nil), // 11: rill.runtime.v1.Instance + (*Connector)(nil), // 12: rill.runtime.v1.Connector + (*ListInstancesRequest)(nil), // 13: rill.runtime.v1.ListInstancesRequest + (*ListInstancesResponse)(nil), // 14: rill.runtime.v1.ListInstancesResponse + (*GetInstanceRequest)(nil), // 15: rill.runtime.v1.GetInstanceRequest + (*GetInstanceResponse)(nil), // 16: rill.runtime.v1.GetInstanceResponse + (*CreateInstanceRequest)(nil), // 17: rill.runtime.v1.CreateInstanceRequest + (*CreateInstanceResponse)(nil), // 18: rill.runtime.v1.CreateInstanceResponse + (*DeleteInstanceRequest)(nil), // 19: rill.runtime.v1.DeleteInstanceRequest + (*DeleteInstanceResponse)(nil), // 20: rill.runtime.v1.DeleteInstanceResponse + (*EditInstanceRequest)(nil), // 21: rill.runtime.v1.EditInstanceRequest + (*EditInstanceResponse)(nil), // 22: rill.runtime.v1.EditInstanceResponse + (*ListFilesRequest)(nil), // 23: rill.runtime.v1.ListFilesRequest + (*ListFilesResponse)(nil), // 24: rill.runtime.v1.ListFilesResponse + (*DirEntry)(nil), // 25: rill.runtime.v1.DirEntry + (*WatchFilesRequest)(nil), // 26: rill.runtime.v1.WatchFilesRequest + (*WatchFilesResponse)(nil), // 27: rill.runtime.v1.WatchFilesResponse + (*GetFileRequest)(nil), // 28: rill.runtime.v1.GetFileRequest + (*GetFileResponse)(nil), // 29: rill.runtime.v1.GetFileResponse + (*PutFileRequest)(nil), // 30: rill.runtime.v1.PutFileRequest + (*PutFileResponse)(nil), // 31: rill.runtime.v1.PutFileResponse + (*CreateDirectoryRequest)(nil), // 32: rill.runtime.v1.CreateDirectoryRequest + (*CreateDirectoryResponse)(nil), // 33: rill.runtime.v1.CreateDirectoryResponse + (*DeleteFileRequest)(nil), // 34: rill.runtime.v1.DeleteFileRequest + (*DeleteFileResponse)(nil), // 35: rill.runtime.v1.DeleteFileResponse + (*RenameFileRequest)(nil), // 36: rill.runtime.v1.RenameFileRequest + (*RenameFileResponse)(nil), // 37: rill.runtime.v1.RenameFileResponse + (*Example)(nil), // 38: rill.runtime.v1.Example + (*ListExamplesRequest)(nil), // 39: rill.runtime.v1.ListExamplesRequest + (*ListExamplesResponse)(nil), // 40: rill.runtime.v1.ListExamplesResponse + (*UnpackExampleRequest)(nil), // 41: rill.runtime.v1.UnpackExampleRequest + (*UnpackExampleResponse)(nil), // 42: rill.runtime.v1.UnpackExampleResponse + (*UnpackEmptyRequest)(nil), // 43: rill.runtime.v1.UnpackEmptyRequest + (*UnpackEmptyResponse)(nil), // 44: rill.runtime.v1.UnpackEmptyResponse + (*GenerateMetricsViewFileRequest)(nil), // 45: rill.runtime.v1.GenerateMetricsViewFileRequest + (*GenerateMetricsViewFileResponse)(nil), // 46: rill.runtime.v1.GenerateMetricsViewFileResponse + (*GenerateCanvasFileRequest)(nil), // 47: rill.runtime.v1.GenerateCanvasFileRequest + (*GenerateCanvasFileResponse)(nil), // 48: rill.runtime.v1.GenerateCanvasFileResponse + (*GenerateResolverRequest)(nil), // 49: rill.runtime.v1.GenerateResolverRequest + (*GenerateResolverResponse)(nil), // 50: rill.runtime.v1.GenerateResolverResponse + (*GenerateRendererRequest)(nil), // 51: rill.runtime.v1.GenerateRendererRequest + (*GenerateRendererResponse)(nil), // 52: rill.runtime.v1.GenerateRendererResponse + (*QueryResolverRequest)(nil), // 53: rill.runtime.v1.QueryResolverRequest + (*QueryResolverResponse)(nil), // 54: rill.runtime.v1.QueryResolverResponse + (*Log)(nil), // 55: rill.runtime.v1.Log + (*ModelPartition)(nil), // 56: rill.runtime.v1.ModelPartition + (*GetLogsRequest)(nil), // 57: rill.runtime.v1.GetLogsRequest + (*GetLogsResponse)(nil), // 58: rill.runtime.v1.GetLogsResponse + (*WatchLogsRequest)(nil), // 59: rill.runtime.v1.WatchLogsRequest + (*WatchLogsResponse)(nil), // 60: rill.runtime.v1.WatchLogsResponse + (*ListResourcesRequest)(nil), // 61: rill.runtime.v1.ListResourcesRequest + (*ListResourcesResponse)(nil), // 62: rill.runtime.v1.ListResourcesResponse + (*WatchResourcesRequest)(nil), // 63: rill.runtime.v1.WatchResourcesRequest + (*WatchResourcesResponse)(nil), // 64: rill.runtime.v1.WatchResourcesResponse + (*GetResourceRequest)(nil), // 65: rill.runtime.v1.GetResourceRequest + (*GetResourceResponse)(nil), // 66: rill.runtime.v1.GetResourceResponse + (*GetExploreRequest)(nil), // 67: rill.runtime.v1.GetExploreRequest + (*GetExploreResponse)(nil), // 68: rill.runtime.v1.GetExploreResponse + (*GetModelPartitionsRequest)(nil), // 69: rill.runtime.v1.GetModelPartitionsRequest + (*GetModelPartitionsResponse)(nil), // 70: rill.runtime.v1.GetModelPartitionsResponse + (*CreateTriggerRequest)(nil), // 71: rill.runtime.v1.CreateTriggerRequest + (*CreateTriggerResponse)(nil), // 72: rill.runtime.v1.CreateTriggerResponse + (*ConnectorDriver)(nil), // 73: rill.runtime.v1.ConnectorDriver + (*AnalyzedConnector)(nil), // 74: rill.runtime.v1.AnalyzedConnector + (*ListConnectorDriversRequest)(nil), // 75: rill.runtime.v1.ListConnectorDriversRequest + (*ListConnectorDriversResponse)(nil), // 76: rill.runtime.v1.ListConnectorDriversResponse + (*AnalyzeConnectorsRequest)(nil), // 77: rill.runtime.v1.AnalyzeConnectorsRequest + (*AnalyzeConnectorsResponse)(nil), // 78: rill.runtime.v1.AnalyzeConnectorsResponse + (*ListNotifierConnectorsRequest)(nil), // 79: rill.runtime.v1.ListNotifierConnectorsRequest + (*ListNotifierConnectorsResponse)(nil), // 80: rill.runtime.v1.ListNotifierConnectorsResponse + (*Conversation)(nil), // 81: rill.runtime.v1.Conversation + (*Message)(nil), // 82: rill.runtime.v1.Message + (*AnalystAgentContext)(nil), // 83: rill.runtime.v1.AnalystAgentContext + (*DeveloperAgentContext)(nil), // 84: rill.runtime.v1.DeveloperAgentContext + (*ListConversationsRequest)(nil), // 85: rill.runtime.v1.ListConversationsRequest + (*ListConversationsResponse)(nil), // 86: rill.runtime.v1.ListConversationsResponse + (*GetConversationRequest)(nil), // 87: rill.runtime.v1.GetConversationRequest + (*GetConversationResponse)(nil), // 88: rill.runtime.v1.GetConversationResponse + (*SetConversationCheckpointRequest)(nil), // 89: rill.runtime.v1.SetConversationCheckpointRequest + (*SetConversationCheckpointResponse)(nil), // 90: rill.runtime.v1.SetConversationCheckpointResponse + (*RevertConversationWritesRequest)(nil), // 91: rill.runtime.v1.RevertConversationWritesRequest + (*RevertConversationWritesResponse)(nil), // 92: rill.runtime.v1.RevertConversationWritesResponse + (*ListToolsRequest)(nil), // 93: rill.runtime.v1.ListToolsRequest + (*ListToolsResponse)(nil), // 94: rill.runtime.v1.ListToolsResponse + (*CompleteRequest)(nil), // 95: rill.runtime.v1.CompleteRequest + (*CompleteResponse)(nil), // 96: rill.runtime.v1.CompleteResponse + (*CompleteStreamingRequest)(nil), // 97: rill.runtime.v1.CompleteStreamingRequest + (*CompleteStreamingResponse)(nil), // 98: rill.runtime.v1.CompleteStreamingResponse + (*IssueDevJWTRequest)(nil), // 99: rill.runtime.v1.IssueDevJWTRequest + (*IssueDevJWTResponse)(nil), // 100: rill.runtime.v1.IssueDevJWTResponse + (*AnalyzeVariablesRequest)(nil), // 101: rill.runtime.v1.AnalyzeVariablesRequest + (*AnalyzeVariablesResponse)(nil), // 102: rill.runtime.v1.AnalyzeVariablesResponse + (*AnalyzedVariable)(nil), // 103: rill.runtime.v1.AnalyzedVariable + nil, // 104: rill.runtime.v1.HealthResponse.InstancesHealthEntry + nil, // 105: rill.runtime.v1.InstanceHealth.MetricsViewErrorsEntry + nil, // 106: rill.runtime.v1.Instance.VariablesEntry + nil, // 107: rill.runtime.v1.Instance.ProjectVariablesEntry + nil, // 108: rill.runtime.v1.Instance.FeatureFlagsEntry + nil, // 109: rill.runtime.v1.Instance.AnnotationsEntry + nil, // 110: rill.runtime.v1.CreateInstanceRequest.VariablesEntry + nil, // 111: rill.runtime.v1.CreateInstanceRequest.AnnotationsEntry + nil, // 112: rill.runtime.v1.EditInstanceRequest.VariablesEntry + nil, // 113: rill.runtime.v1.EditInstanceRequest.AnnotationsEntry + (*ConnectorDriver_Property)(nil), // 114: rill.runtime.v1.ConnectorDriver.Property + nil, // 115: rill.runtime.v1.AnalyzedConnector.EnvConfigEntry + (*timestamppb.Timestamp)(nil), // 116: google.protobuf.Timestamp + (*structpb.Struct)(nil), // 117: google.protobuf.Struct + (*StructType)(nil), // 118: rill.runtime.v1.StructType + (*Resource)(nil), // 119: rill.runtime.v1.Resource + (*ResourceName)(nil), // 120: rill.runtime.v1.ResourceName + (*RefreshModelTrigger)(nil), // 121: rill.runtime.v1.RefreshModelTrigger + (*v1.ContentBlock)(nil), // 122: rill.ai.v1.ContentBlock + (*Expression)(nil), // 123: rill.runtime.v1.Expression + (*v1.Tool)(nil), // 124: rill.ai.v1.Tool } var file_rill_runtime_v1_api_proto_depIdxs = []int32{ - 112, // 0: rill.runtime.v1.PingResponse.time:type_name -> google.protobuf.Timestamp - 100, // 1: rill.runtime.v1.HealthResponse.instances_health:type_name -> rill.runtime.v1.HealthResponse.InstancesHealthEntry + 116, // 0: rill.runtime.v1.PingResponse.time:type_name -> google.protobuf.Timestamp + 104, // 1: rill.runtime.v1.HealthResponse.instances_health:type_name -> rill.runtime.v1.HealthResponse.InstancesHealthEntry 10, // 2: rill.runtime.v1.InstanceHealthResponse.instance_health:type_name -> rill.runtime.v1.InstanceHealth - 101, // 3: rill.runtime.v1.InstanceHealth.metrics_view_errors:type_name -> rill.runtime.v1.InstanceHealth.MetricsViewErrorsEntry - 112, // 4: rill.runtime.v1.Instance.created_on:type_name -> google.protobuf.Timestamp - 112, // 5: rill.runtime.v1.Instance.updated_on:type_name -> google.protobuf.Timestamp + 105, // 3: rill.runtime.v1.InstanceHealth.metrics_view_errors:type_name -> rill.runtime.v1.InstanceHealth.MetricsViewErrorsEntry + 116, // 4: rill.runtime.v1.Instance.created_on:type_name -> google.protobuf.Timestamp + 116, // 5: rill.runtime.v1.Instance.updated_on:type_name -> google.protobuf.Timestamp 12, // 6: rill.runtime.v1.Instance.connectors:type_name -> rill.runtime.v1.Connector 12, // 7: rill.runtime.v1.Instance.project_connectors:type_name -> rill.runtime.v1.Connector - 102, // 8: rill.runtime.v1.Instance.variables:type_name -> rill.runtime.v1.Instance.VariablesEntry - 103, // 9: rill.runtime.v1.Instance.project_variables:type_name -> rill.runtime.v1.Instance.ProjectVariablesEntry - 104, // 10: rill.runtime.v1.Instance.feature_flags:type_name -> rill.runtime.v1.Instance.FeatureFlagsEntry - 105, // 11: rill.runtime.v1.Instance.annotations:type_name -> rill.runtime.v1.Instance.AnnotationsEntry - 113, // 12: rill.runtime.v1.Connector.config:type_name -> google.protobuf.Struct - 113, // 13: rill.runtime.v1.Connector.provision_args:type_name -> google.protobuf.Struct + 106, // 8: rill.runtime.v1.Instance.variables:type_name -> rill.runtime.v1.Instance.VariablesEntry + 107, // 9: rill.runtime.v1.Instance.project_variables:type_name -> rill.runtime.v1.Instance.ProjectVariablesEntry + 108, // 10: rill.runtime.v1.Instance.feature_flags:type_name -> rill.runtime.v1.Instance.FeatureFlagsEntry + 109, // 11: rill.runtime.v1.Instance.annotations:type_name -> rill.runtime.v1.Instance.AnnotationsEntry + 117, // 12: rill.runtime.v1.Connector.config:type_name -> google.protobuf.Struct + 117, // 13: rill.runtime.v1.Connector.provision_args:type_name -> google.protobuf.Struct 11, // 14: rill.runtime.v1.ListInstancesResponse.instances:type_name -> rill.runtime.v1.Instance 11, // 15: rill.runtime.v1.GetInstanceResponse.instance:type_name -> rill.runtime.v1.Instance 12, // 16: rill.runtime.v1.CreateInstanceRequest.connectors:type_name -> rill.runtime.v1.Connector - 106, // 17: rill.runtime.v1.CreateInstanceRequest.variables:type_name -> rill.runtime.v1.CreateInstanceRequest.VariablesEntry - 107, // 18: rill.runtime.v1.CreateInstanceRequest.annotations:type_name -> rill.runtime.v1.CreateInstanceRequest.AnnotationsEntry + 110, // 17: rill.runtime.v1.CreateInstanceRequest.variables:type_name -> rill.runtime.v1.CreateInstanceRequest.VariablesEntry + 111, // 18: rill.runtime.v1.CreateInstanceRequest.annotations:type_name -> rill.runtime.v1.CreateInstanceRequest.AnnotationsEntry 11, // 19: rill.runtime.v1.CreateInstanceResponse.instance:type_name -> rill.runtime.v1.Instance 12, // 20: rill.runtime.v1.EditInstanceRequest.connectors:type_name -> rill.runtime.v1.Connector - 108, // 21: rill.runtime.v1.EditInstanceRequest.variables:type_name -> rill.runtime.v1.EditInstanceRequest.VariablesEntry - 109, // 22: rill.runtime.v1.EditInstanceRequest.annotations:type_name -> rill.runtime.v1.EditInstanceRequest.AnnotationsEntry + 112, // 21: rill.runtime.v1.EditInstanceRequest.variables:type_name -> rill.runtime.v1.EditInstanceRequest.VariablesEntry + 113, // 22: rill.runtime.v1.EditInstanceRequest.annotations:type_name -> rill.runtime.v1.EditInstanceRequest.AnnotationsEntry 11, // 23: rill.runtime.v1.EditInstanceResponse.instance:type_name -> rill.runtime.v1.Instance 25, // 24: rill.runtime.v1.ListFilesResponse.files:type_name -> rill.runtime.v1.DirEntry 0, // 25: rill.runtime.v1.WatchFilesResponse.event:type_name -> rill.runtime.v1.FileEvent - 112, // 26: rill.runtime.v1.GetFileResponse.updated_on:type_name -> google.protobuf.Timestamp + 116, // 26: rill.runtime.v1.GetFileResponse.updated_on:type_name -> google.protobuf.Timestamp 38, // 27: rill.runtime.v1.ListExamplesResponse.examples:type_name -> rill.runtime.v1.Example - 113, // 28: rill.runtime.v1.GenerateResolverResponse.resolver_properties:type_name -> google.protobuf.Struct - 113, // 29: rill.runtime.v1.GenerateRendererRequest.resolver_properties:type_name -> google.protobuf.Struct - 113, // 30: rill.runtime.v1.GenerateRendererResponse.renderer_properties:type_name -> google.protobuf.Struct - 113, // 31: rill.runtime.v1.QueryResolverRequest.resolver_properties:type_name -> google.protobuf.Struct - 113, // 32: rill.runtime.v1.QueryResolverRequest.resolver_args:type_name -> google.protobuf.Struct - 113, // 33: rill.runtime.v1.QueryResolverResponse.meta:type_name -> google.protobuf.Struct - 114, // 34: rill.runtime.v1.QueryResolverResponse.schema:type_name -> rill.runtime.v1.StructType - 113, // 35: rill.runtime.v1.QueryResolverResponse.data:type_name -> google.protobuf.Struct + 117, // 28: rill.runtime.v1.GenerateResolverResponse.resolver_properties:type_name -> google.protobuf.Struct + 117, // 29: rill.runtime.v1.GenerateRendererRequest.resolver_properties:type_name -> google.protobuf.Struct + 117, // 30: rill.runtime.v1.GenerateRendererResponse.renderer_properties:type_name -> google.protobuf.Struct + 117, // 31: rill.runtime.v1.QueryResolverRequest.resolver_properties:type_name -> google.protobuf.Struct + 117, // 32: rill.runtime.v1.QueryResolverRequest.resolver_args:type_name -> google.protobuf.Struct + 117, // 33: rill.runtime.v1.QueryResolverResponse.meta:type_name -> google.protobuf.Struct + 118, // 34: rill.runtime.v1.QueryResolverResponse.schema:type_name -> rill.runtime.v1.StructType + 117, // 35: rill.runtime.v1.QueryResolverResponse.data:type_name -> google.protobuf.Struct 1, // 36: rill.runtime.v1.Log.level:type_name -> rill.runtime.v1.LogLevel - 112, // 37: rill.runtime.v1.Log.time:type_name -> google.protobuf.Timestamp - 113, // 38: rill.runtime.v1.ModelPartition.data:type_name -> google.protobuf.Struct - 112, // 39: rill.runtime.v1.ModelPartition.watermark:type_name -> google.protobuf.Timestamp - 112, // 40: rill.runtime.v1.ModelPartition.executed_on:type_name -> google.protobuf.Timestamp + 116, // 37: rill.runtime.v1.Log.time:type_name -> google.protobuf.Timestamp + 117, // 38: rill.runtime.v1.ModelPartition.data:type_name -> google.protobuf.Struct + 116, // 39: rill.runtime.v1.ModelPartition.watermark:type_name -> google.protobuf.Timestamp + 116, // 40: rill.runtime.v1.ModelPartition.executed_on:type_name -> google.protobuf.Timestamp 1, // 41: rill.runtime.v1.GetLogsRequest.level:type_name -> rill.runtime.v1.LogLevel 55, // 42: rill.runtime.v1.GetLogsResponse.logs:type_name -> rill.runtime.v1.Log 1, // 43: rill.runtime.v1.WatchLogsRequest.level:type_name -> rill.runtime.v1.LogLevel 55, // 44: rill.runtime.v1.WatchLogsResponse.log:type_name -> rill.runtime.v1.Log - 115, // 45: rill.runtime.v1.ListResourcesResponse.resources:type_name -> rill.runtime.v1.Resource + 119, // 45: rill.runtime.v1.ListResourcesResponse.resources:type_name -> rill.runtime.v1.Resource 2, // 46: rill.runtime.v1.WatchResourcesResponse.event:type_name -> rill.runtime.v1.ResourceEvent - 116, // 47: rill.runtime.v1.WatchResourcesResponse.name:type_name -> rill.runtime.v1.ResourceName - 115, // 48: rill.runtime.v1.WatchResourcesResponse.resource:type_name -> rill.runtime.v1.Resource - 116, // 49: rill.runtime.v1.GetResourceRequest.name:type_name -> rill.runtime.v1.ResourceName - 115, // 50: rill.runtime.v1.GetResourceResponse.resource:type_name -> rill.runtime.v1.Resource - 115, // 51: rill.runtime.v1.GetExploreResponse.explore:type_name -> rill.runtime.v1.Resource - 115, // 52: rill.runtime.v1.GetExploreResponse.metrics_view:type_name -> rill.runtime.v1.Resource + 120, // 47: rill.runtime.v1.WatchResourcesResponse.name:type_name -> rill.runtime.v1.ResourceName + 119, // 48: rill.runtime.v1.WatchResourcesResponse.resource:type_name -> rill.runtime.v1.Resource + 120, // 49: rill.runtime.v1.GetResourceRequest.name:type_name -> rill.runtime.v1.ResourceName + 119, // 50: rill.runtime.v1.GetResourceResponse.resource:type_name -> rill.runtime.v1.Resource + 119, // 51: rill.runtime.v1.GetExploreResponse.explore:type_name -> rill.runtime.v1.Resource + 119, // 52: rill.runtime.v1.GetExploreResponse.metrics_view:type_name -> rill.runtime.v1.Resource 56, // 53: rill.runtime.v1.GetModelPartitionsResponse.partitions:type_name -> rill.runtime.v1.ModelPartition - 116, // 54: rill.runtime.v1.CreateTriggerRequest.resources:type_name -> rill.runtime.v1.ResourceName - 117, // 55: rill.runtime.v1.CreateTriggerRequest.models:type_name -> rill.runtime.v1.RefreshModelTrigger - 110, // 56: rill.runtime.v1.ConnectorDriver.config_properties:type_name -> rill.runtime.v1.ConnectorDriver.Property - 110, // 57: rill.runtime.v1.ConnectorDriver.source_properties:type_name -> rill.runtime.v1.ConnectorDriver.Property + 120, // 54: rill.runtime.v1.CreateTriggerRequest.resources:type_name -> rill.runtime.v1.ResourceName + 121, // 55: rill.runtime.v1.CreateTriggerRequest.models:type_name -> rill.runtime.v1.RefreshModelTrigger + 114, // 56: rill.runtime.v1.ConnectorDriver.config_properties:type_name -> rill.runtime.v1.ConnectorDriver.Property + 114, // 57: rill.runtime.v1.ConnectorDriver.source_properties:type_name -> rill.runtime.v1.ConnectorDriver.Property 73, // 58: rill.runtime.v1.AnalyzedConnector.driver:type_name -> rill.runtime.v1.ConnectorDriver - 113, // 59: rill.runtime.v1.AnalyzedConnector.config:type_name -> google.protobuf.Struct - 113, // 60: rill.runtime.v1.AnalyzedConnector.preset_config:type_name -> google.protobuf.Struct - 113, // 61: rill.runtime.v1.AnalyzedConnector.project_config:type_name -> google.protobuf.Struct - 111, // 62: rill.runtime.v1.AnalyzedConnector.env_config:type_name -> rill.runtime.v1.AnalyzedConnector.EnvConfigEntry - 113, // 63: rill.runtime.v1.AnalyzedConnector.provision_args:type_name -> google.protobuf.Struct - 116, // 64: rill.runtime.v1.AnalyzedConnector.used_by:type_name -> rill.runtime.v1.ResourceName + 117, // 59: rill.runtime.v1.AnalyzedConnector.config:type_name -> google.protobuf.Struct + 117, // 60: rill.runtime.v1.AnalyzedConnector.preset_config:type_name -> google.protobuf.Struct + 117, // 61: rill.runtime.v1.AnalyzedConnector.project_config:type_name -> google.protobuf.Struct + 115, // 62: rill.runtime.v1.AnalyzedConnector.env_config:type_name -> rill.runtime.v1.AnalyzedConnector.EnvConfigEntry + 117, // 63: rill.runtime.v1.AnalyzedConnector.provision_args:type_name -> google.protobuf.Struct + 120, // 64: rill.runtime.v1.AnalyzedConnector.used_by:type_name -> rill.runtime.v1.ResourceName 73, // 65: rill.runtime.v1.ListConnectorDriversResponse.connectors:type_name -> rill.runtime.v1.ConnectorDriver 74, // 66: rill.runtime.v1.AnalyzeConnectorsResponse.connectors:type_name -> rill.runtime.v1.AnalyzedConnector 12, // 67: rill.runtime.v1.ListNotifierConnectorsResponse.connectors:type_name -> rill.runtime.v1.Connector - 112, // 68: rill.runtime.v1.Conversation.created_on:type_name -> google.protobuf.Timestamp - 112, // 69: rill.runtime.v1.Conversation.updated_on:type_name -> google.protobuf.Timestamp + 116, // 68: rill.runtime.v1.Conversation.created_on:type_name -> google.protobuf.Timestamp + 116, // 69: rill.runtime.v1.Conversation.updated_on:type_name -> google.protobuf.Timestamp 82, // 70: rill.runtime.v1.Conversation.messages:type_name -> rill.runtime.v1.Message - 112, // 71: rill.runtime.v1.Message.created_on:type_name -> google.protobuf.Timestamp - 112, // 72: rill.runtime.v1.Message.updated_on:type_name -> google.protobuf.Timestamp - 118, // 73: rill.runtime.v1.Message.content:type_name -> rill.ai.v1.ContentBlock - 119, // 74: rill.runtime.v1.AnalystAgentContext.where:type_name -> rill.runtime.v1.Expression - 112, // 75: rill.runtime.v1.AnalystAgentContext.time_start:type_name -> google.protobuf.Timestamp - 112, // 76: rill.runtime.v1.AnalystAgentContext.time_end:type_name -> google.protobuf.Timestamp + 116, // 71: rill.runtime.v1.Message.created_on:type_name -> google.protobuf.Timestamp + 116, // 72: rill.runtime.v1.Message.updated_on:type_name -> google.protobuf.Timestamp + 122, // 73: rill.runtime.v1.Message.content:type_name -> rill.ai.v1.ContentBlock + 123, // 74: rill.runtime.v1.AnalystAgentContext.where:type_name -> rill.runtime.v1.Expression + 116, // 75: rill.runtime.v1.AnalystAgentContext.time_start:type_name -> google.protobuf.Timestamp + 116, // 76: rill.runtime.v1.AnalystAgentContext.time_end:type_name -> google.protobuf.Timestamp 81, // 77: rill.runtime.v1.ListConversationsResponse.conversations:type_name -> rill.runtime.v1.Conversation 81, // 78: rill.runtime.v1.GetConversationResponse.conversation:type_name -> rill.runtime.v1.Conversation 82, // 79: rill.runtime.v1.GetConversationResponse.messages:type_name -> rill.runtime.v1.Message - 120, // 80: rill.runtime.v1.ListToolsResponse.tools:type_name -> rill.ai.v1.Tool + 124, // 80: rill.runtime.v1.ListToolsResponse.tools:type_name -> rill.ai.v1.Tool 83, // 81: rill.runtime.v1.CompleteRequest.analyst_agent_context:type_name -> rill.runtime.v1.AnalystAgentContext 84, // 82: rill.runtime.v1.CompleteRequest.developer_agent_context:type_name -> rill.runtime.v1.DeveloperAgentContext 82, // 83: rill.runtime.v1.CompleteResponse.messages:type_name -> rill.runtime.v1.Message 83, // 84: rill.runtime.v1.CompleteStreamingRequest.analyst_agent_context:type_name -> rill.runtime.v1.AnalystAgentContext 84, // 85: rill.runtime.v1.CompleteStreamingRequest.developer_agent_context:type_name -> rill.runtime.v1.DeveloperAgentContext 82, // 86: rill.runtime.v1.CompleteStreamingResponse.message:type_name -> rill.runtime.v1.Message - 113, // 87: rill.runtime.v1.IssueDevJWTRequest.attributes:type_name -> google.protobuf.Struct - 99, // 88: rill.runtime.v1.AnalyzeVariablesResponse.variables:type_name -> rill.runtime.v1.AnalyzedVariable - 116, // 89: rill.runtime.v1.AnalyzedVariable.used_by:type_name -> rill.runtime.v1.ResourceName + 117, // 87: rill.runtime.v1.IssueDevJWTRequest.attributes:type_name -> google.protobuf.Struct + 103, // 88: rill.runtime.v1.AnalyzeVariablesResponse.variables:type_name -> rill.runtime.v1.AnalyzedVariable + 120, // 89: rill.runtime.v1.AnalyzedVariable.used_by:type_name -> rill.runtime.v1.ResourceName 10, // 90: rill.runtime.v1.HealthResponse.InstancesHealthEntry.value:type_name -> rill.runtime.v1.InstanceHealth 3, // 91: rill.runtime.v1.ConnectorDriver.Property.type:type_name -> rill.runtime.v1.ConnectorDriver.Property.Type 4, // 92: rill.runtime.v1.RuntimeService.Ping:input_type -> rill.runtime.v1.PingRequest @@ -8326,54 +8630,58 @@ var file_rill_runtime_v1_api_proto_depIdxs = []int32{ 79, // 125: rill.runtime.v1.RuntimeService.ListNotifierConnectors:input_type -> rill.runtime.v1.ListNotifierConnectorsRequest 85, // 126: rill.runtime.v1.RuntimeService.ListConversations:input_type -> rill.runtime.v1.ListConversationsRequest 87, // 127: rill.runtime.v1.RuntimeService.GetConversation:input_type -> rill.runtime.v1.GetConversationRequest - 89, // 128: rill.runtime.v1.RuntimeService.ListTools:input_type -> rill.runtime.v1.ListToolsRequest - 91, // 129: rill.runtime.v1.RuntimeService.Complete:input_type -> rill.runtime.v1.CompleteRequest - 93, // 130: rill.runtime.v1.RuntimeService.CompleteStreaming:input_type -> rill.runtime.v1.CompleteStreamingRequest - 95, // 131: rill.runtime.v1.RuntimeService.IssueDevJWT:input_type -> rill.runtime.v1.IssueDevJWTRequest - 97, // 132: rill.runtime.v1.RuntimeService.AnalyzeVariables:input_type -> rill.runtime.v1.AnalyzeVariablesRequest - 5, // 133: rill.runtime.v1.RuntimeService.Ping:output_type -> rill.runtime.v1.PingResponse - 7, // 134: rill.runtime.v1.RuntimeService.Health:output_type -> rill.runtime.v1.HealthResponse - 9, // 135: rill.runtime.v1.RuntimeService.InstanceHealth:output_type -> rill.runtime.v1.InstanceHealthResponse - 14, // 136: rill.runtime.v1.RuntimeService.ListInstances:output_type -> rill.runtime.v1.ListInstancesResponse - 16, // 137: rill.runtime.v1.RuntimeService.GetInstance:output_type -> rill.runtime.v1.GetInstanceResponse - 18, // 138: rill.runtime.v1.RuntimeService.CreateInstance:output_type -> rill.runtime.v1.CreateInstanceResponse - 22, // 139: rill.runtime.v1.RuntimeService.EditInstance:output_type -> rill.runtime.v1.EditInstanceResponse - 20, // 140: rill.runtime.v1.RuntimeService.DeleteInstance:output_type -> rill.runtime.v1.DeleteInstanceResponse - 24, // 141: rill.runtime.v1.RuntimeService.ListFiles:output_type -> rill.runtime.v1.ListFilesResponse - 27, // 142: rill.runtime.v1.RuntimeService.WatchFiles:output_type -> rill.runtime.v1.WatchFilesResponse - 29, // 143: rill.runtime.v1.RuntimeService.GetFile:output_type -> rill.runtime.v1.GetFileResponse - 31, // 144: rill.runtime.v1.RuntimeService.PutFile:output_type -> rill.runtime.v1.PutFileResponse - 33, // 145: rill.runtime.v1.RuntimeService.CreateDirectory:output_type -> rill.runtime.v1.CreateDirectoryResponse - 35, // 146: rill.runtime.v1.RuntimeService.DeleteFile:output_type -> rill.runtime.v1.DeleteFileResponse - 37, // 147: rill.runtime.v1.RuntimeService.RenameFile:output_type -> rill.runtime.v1.RenameFileResponse - 40, // 148: rill.runtime.v1.RuntimeService.ListExamples:output_type -> rill.runtime.v1.ListExamplesResponse - 42, // 149: rill.runtime.v1.RuntimeService.UnpackExample:output_type -> rill.runtime.v1.UnpackExampleResponse - 44, // 150: rill.runtime.v1.RuntimeService.UnpackEmpty:output_type -> rill.runtime.v1.UnpackEmptyResponse - 46, // 151: rill.runtime.v1.RuntimeService.GenerateMetricsViewFile:output_type -> rill.runtime.v1.GenerateMetricsViewFileResponse - 48, // 152: rill.runtime.v1.RuntimeService.GenerateCanvasFile:output_type -> rill.runtime.v1.GenerateCanvasFileResponse - 50, // 153: rill.runtime.v1.RuntimeService.GenerateResolver:output_type -> rill.runtime.v1.GenerateResolverResponse - 52, // 154: rill.runtime.v1.RuntimeService.GenerateRenderer:output_type -> rill.runtime.v1.GenerateRendererResponse - 54, // 155: rill.runtime.v1.RuntimeService.QueryResolver:output_type -> rill.runtime.v1.QueryResolverResponse - 58, // 156: rill.runtime.v1.RuntimeService.GetLogs:output_type -> rill.runtime.v1.GetLogsResponse - 60, // 157: rill.runtime.v1.RuntimeService.WatchLogs:output_type -> rill.runtime.v1.WatchLogsResponse - 62, // 158: rill.runtime.v1.RuntimeService.ListResources:output_type -> rill.runtime.v1.ListResourcesResponse - 64, // 159: rill.runtime.v1.RuntimeService.WatchResources:output_type -> rill.runtime.v1.WatchResourcesResponse - 66, // 160: rill.runtime.v1.RuntimeService.GetResource:output_type -> rill.runtime.v1.GetResourceResponse - 68, // 161: rill.runtime.v1.RuntimeService.GetExplore:output_type -> rill.runtime.v1.GetExploreResponse - 70, // 162: rill.runtime.v1.RuntimeService.GetModelPartitions:output_type -> rill.runtime.v1.GetModelPartitionsResponse - 72, // 163: rill.runtime.v1.RuntimeService.CreateTrigger:output_type -> rill.runtime.v1.CreateTriggerResponse - 76, // 164: rill.runtime.v1.RuntimeService.ListConnectorDrivers:output_type -> rill.runtime.v1.ListConnectorDriversResponse - 78, // 165: rill.runtime.v1.RuntimeService.AnalyzeConnectors:output_type -> rill.runtime.v1.AnalyzeConnectorsResponse - 80, // 166: rill.runtime.v1.RuntimeService.ListNotifierConnectors:output_type -> rill.runtime.v1.ListNotifierConnectorsResponse - 86, // 167: rill.runtime.v1.RuntimeService.ListConversations:output_type -> rill.runtime.v1.ListConversationsResponse - 88, // 168: rill.runtime.v1.RuntimeService.GetConversation:output_type -> rill.runtime.v1.GetConversationResponse - 90, // 169: rill.runtime.v1.RuntimeService.ListTools:output_type -> rill.runtime.v1.ListToolsResponse - 92, // 170: rill.runtime.v1.RuntimeService.Complete:output_type -> rill.runtime.v1.CompleteResponse - 94, // 171: rill.runtime.v1.RuntimeService.CompleteStreaming:output_type -> rill.runtime.v1.CompleteStreamingResponse - 96, // 172: rill.runtime.v1.RuntimeService.IssueDevJWT:output_type -> rill.runtime.v1.IssueDevJWTResponse - 98, // 173: rill.runtime.v1.RuntimeService.AnalyzeVariables:output_type -> rill.runtime.v1.AnalyzeVariablesResponse - 133, // [133:174] is the sub-list for method output_type - 92, // [92:133] is the sub-list for method input_type + 89, // 128: rill.runtime.v1.RuntimeService.SetConversationCheckpoint:input_type -> rill.runtime.v1.SetConversationCheckpointRequest + 91, // 129: rill.runtime.v1.RuntimeService.RevertConversationWrites:input_type -> rill.runtime.v1.RevertConversationWritesRequest + 93, // 130: rill.runtime.v1.RuntimeService.ListTools:input_type -> rill.runtime.v1.ListToolsRequest + 95, // 131: rill.runtime.v1.RuntimeService.Complete:input_type -> rill.runtime.v1.CompleteRequest + 97, // 132: rill.runtime.v1.RuntimeService.CompleteStreaming:input_type -> rill.runtime.v1.CompleteStreamingRequest + 99, // 133: rill.runtime.v1.RuntimeService.IssueDevJWT:input_type -> rill.runtime.v1.IssueDevJWTRequest + 101, // 134: rill.runtime.v1.RuntimeService.AnalyzeVariables:input_type -> rill.runtime.v1.AnalyzeVariablesRequest + 5, // 135: rill.runtime.v1.RuntimeService.Ping:output_type -> rill.runtime.v1.PingResponse + 7, // 136: rill.runtime.v1.RuntimeService.Health:output_type -> rill.runtime.v1.HealthResponse + 9, // 137: rill.runtime.v1.RuntimeService.InstanceHealth:output_type -> rill.runtime.v1.InstanceHealthResponse + 14, // 138: rill.runtime.v1.RuntimeService.ListInstances:output_type -> rill.runtime.v1.ListInstancesResponse + 16, // 139: rill.runtime.v1.RuntimeService.GetInstance:output_type -> rill.runtime.v1.GetInstanceResponse + 18, // 140: rill.runtime.v1.RuntimeService.CreateInstance:output_type -> rill.runtime.v1.CreateInstanceResponse + 22, // 141: rill.runtime.v1.RuntimeService.EditInstance:output_type -> rill.runtime.v1.EditInstanceResponse + 20, // 142: rill.runtime.v1.RuntimeService.DeleteInstance:output_type -> rill.runtime.v1.DeleteInstanceResponse + 24, // 143: rill.runtime.v1.RuntimeService.ListFiles:output_type -> rill.runtime.v1.ListFilesResponse + 27, // 144: rill.runtime.v1.RuntimeService.WatchFiles:output_type -> rill.runtime.v1.WatchFilesResponse + 29, // 145: rill.runtime.v1.RuntimeService.GetFile:output_type -> rill.runtime.v1.GetFileResponse + 31, // 146: rill.runtime.v1.RuntimeService.PutFile:output_type -> rill.runtime.v1.PutFileResponse + 33, // 147: rill.runtime.v1.RuntimeService.CreateDirectory:output_type -> rill.runtime.v1.CreateDirectoryResponse + 35, // 148: rill.runtime.v1.RuntimeService.DeleteFile:output_type -> rill.runtime.v1.DeleteFileResponse + 37, // 149: rill.runtime.v1.RuntimeService.RenameFile:output_type -> rill.runtime.v1.RenameFileResponse + 40, // 150: rill.runtime.v1.RuntimeService.ListExamples:output_type -> rill.runtime.v1.ListExamplesResponse + 42, // 151: rill.runtime.v1.RuntimeService.UnpackExample:output_type -> rill.runtime.v1.UnpackExampleResponse + 44, // 152: rill.runtime.v1.RuntimeService.UnpackEmpty:output_type -> rill.runtime.v1.UnpackEmptyResponse + 46, // 153: rill.runtime.v1.RuntimeService.GenerateMetricsViewFile:output_type -> rill.runtime.v1.GenerateMetricsViewFileResponse + 48, // 154: rill.runtime.v1.RuntimeService.GenerateCanvasFile:output_type -> rill.runtime.v1.GenerateCanvasFileResponse + 50, // 155: rill.runtime.v1.RuntimeService.GenerateResolver:output_type -> rill.runtime.v1.GenerateResolverResponse + 52, // 156: rill.runtime.v1.RuntimeService.GenerateRenderer:output_type -> rill.runtime.v1.GenerateRendererResponse + 54, // 157: rill.runtime.v1.RuntimeService.QueryResolver:output_type -> rill.runtime.v1.QueryResolverResponse + 58, // 158: rill.runtime.v1.RuntimeService.GetLogs:output_type -> rill.runtime.v1.GetLogsResponse + 60, // 159: rill.runtime.v1.RuntimeService.WatchLogs:output_type -> rill.runtime.v1.WatchLogsResponse + 62, // 160: rill.runtime.v1.RuntimeService.ListResources:output_type -> rill.runtime.v1.ListResourcesResponse + 64, // 161: rill.runtime.v1.RuntimeService.WatchResources:output_type -> rill.runtime.v1.WatchResourcesResponse + 66, // 162: rill.runtime.v1.RuntimeService.GetResource:output_type -> rill.runtime.v1.GetResourceResponse + 68, // 163: rill.runtime.v1.RuntimeService.GetExplore:output_type -> rill.runtime.v1.GetExploreResponse + 70, // 164: rill.runtime.v1.RuntimeService.GetModelPartitions:output_type -> rill.runtime.v1.GetModelPartitionsResponse + 72, // 165: rill.runtime.v1.RuntimeService.CreateTrigger:output_type -> rill.runtime.v1.CreateTriggerResponse + 76, // 166: rill.runtime.v1.RuntimeService.ListConnectorDrivers:output_type -> rill.runtime.v1.ListConnectorDriversResponse + 78, // 167: rill.runtime.v1.RuntimeService.AnalyzeConnectors:output_type -> rill.runtime.v1.AnalyzeConnectorsResponse + 80, // 168: rill.runtime.v1.RuntimeService.ListNotifierConnectors:output_type -> rill.runtime.v1.ListNotifierConnectorsResponse + 86, // 169: rill.runtime.v1.RuntimeService.ListConversations:output_type -> rill.runtime.v1.ListConversationsResponse + 88, // 170: rill.runtime.v1.RuntimeService.GetConversation:output_type -> rill.runtime.v1.GetConversationResponse + 90, // 171: rill.runtime.v1.RuntimeService.SetConversationCheckpoint:output_type -> rill.runtime.v1.SetConversationCheckpointResponse + 92, // 172: rill.runtime.v1.RuntimeService.RevertConversationWrites:output_type -> rill.runtime.v1.RevertConversationWritesResponse + 94, // 173: rill.runtime.v1.RuntimeService.ListTools:output_type -> rill.runtime.v1.ListToolsResponse + 96, // 174: rill.runtime.v1.RuntimeService.Complete:output_type -> rill.runtime.v1.CompleteResponse + 98, // 175: rill.runtime.v1.RuntimeService.CompleteStreaming:output_type -> rill.runtime.v1.CompleteStreamingResponse + 100, // 176: rill.runtime.v1.RuntimeService.IssueDevJWT:output_type -> rill.runtime.v1.IssueDevJWTResponse + 102, // 177: rill.runtime.v1.RuntimeService.AnalyzeVariables:output_type -> rill.runtime.v1.AnalyzeVariablesResponse + 135, // [135:178] is the sub-list for method output_type + 92, // [92:135] is the sub-list for method input_type 92, // [92:92] is the sub-list for extension type_name 92, // [92:92] is the sub-list for extension extendee 0, // [0:92] is the sub-list for field type_name @@ -9409,7 +9717,7 @@ func file_rill_runtime_v1_api_proto_init() { } } file_rill_runtime_v1_api_proto_msgTypes[85].Exporter = func(v any, i int) any { - switch v := v.(*ListToolsRequest); i { + switch v := v.(*SetConversationCheckpointRequest); i { case 0: return &v.state case 1: @@ -9421,7 +9729,7 @@ func file_rill_runtime_v1_api_proto_init() { } } file_rill_runtime_v1_api_proto_msgTypes[86].Exporter = func(v any, i int) any { - switch v := v.(*ListToolsResponse); i { + switch v := v.(*SetConversationCheckpointResponse); i { case 0: return &v.state case 1: @@ -9433,7 +9741,7 @@ func file_rill_runtime_v1_api_proto_init() { } } file_rill_runtime_v1_api_proto_msgTypes[87].Exporter = func(v any, i int) any { - switch v := v.(*CompleteRequest); i { + switch v := v.(*RevertConversationWritesRequest); i { case 0: return &v.state case 1: @@ -9445,7 +9753,7 @@ func file_rill_runtime_v1_api_proto_init() { } } file_rill_runtime_v1_api_proto_msgTypes[88].Exporter = func(v any, i int) any { - switch v := v.(*CompleteResponse); i { + switch v := v.(*RevertConversationWritesResponse); i { case 0: return &v.state case 1: @@ -9457,7 +9765,7 @@ func file_rill_runtime_v1_api_proto_init() { } } file_rill_runtime_v1_api_proto_msgTypes[89].Exporter = func(v any, i int) any { - switch v := v.(*CompleteStreamingRequest); i { + switch v := v.(*ListToolsRequest); i { case 0: return &v.state case 1: @@ -9469,7 +9777,7 @@ func file_rill_runtime_v1_api_proto_init() { } } file_rill_runtime_v1_api_proto_msgTypes[90].Exporter = func(v any, i int) any { - switch v := v.(*CompleteStreamingResponse); i { + switch v := v.(*ListToolsResponse); i { case 0: return &v.state case 1: @@ -9481,7 +9789,7 @@ func file_rill_runtime_v1_api_proto_init() { } } file_rill_runtime_v1_api_proto_msgTypes[91].Exporter = func(v any, i int) any { - switch v := v.(*IssueDevJWTRequest); i { + switch v := v.(*CompleteRequest); i { case 0: return &v.state case 1: @@ -9493,7 +9801,7 @@ func file_rill_runtime_v1_api_proto_init() { } } file_rill_runtime_v1_api_proto_msgTypes[92].Exporter = func(v any, i int) any { - switch v := v.(*IssueDevJWTResponse); i { + switch v := v.(*CompleteResponse); i { case 0: return &v.state case 1: @@ -9505,7 +9813,7 @@ func file_rill_runtime_v1_api_proto_init() { } } file_rill_runtime_v1_api_proto_msgTypes[93].Exporter = func(v any, i int) any { - switch v := v.(*AnalyzeVariablesRequest); i { + switch v := v.(*CompleteStreamingRequest); i { case 0: return &v.state case 1: @@ -9517,7 +9825,7 @@ func file_rill_runtime_v1_api_proto_init() { } } file_rill_runtime_v1_api_proto_msgTypes[94].Exporter = func(v any, i int) any { - switch v := v.(*AnalyzeVariablesResponse); i { + switch v := v.(*CompleteStreamingResponse); i { case 0: return &v.state case 1: @@ -9529,6 +9837,54 @@ func file_rill_runtime_v1_api_proto_init() { } } file_rill_runtime_v1_api_proto_msgTypes[95].Exporter = func(v any, i int) any { + switch v := v.(*IssueDevJWTRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rill_runtime_v1_api_proto_msgTypes[96].Exporter = func(v any, i int) any { + switch v := v.(*IssueDevJWTResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rill_runtime_v1_api_proto_msgTypes[97].Exporter = func(v any, i int) any { + switch v := v.(*AnalyzeVariablesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rill_runtime_v1_api_proto_msgTypes[98].Exporter = func(v any, i int) any { + switch v := v.(*AnalyzeVariablesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rill_runtime_v1_api_proto_msgTypes[99].Exporter = func(v any, i int) any { switch v := v.(*AnalyzedVariable); i { case 0: return &v.state @@ -9540,7 +9896,7 @@ func file_rill_runtime_v1_api_proto_init() { return nil } } - file_rill_runtime_v1_api_proto_msgTypes[106].Exporter = func(v any, i int) any { + file_rill_runtime_v1_api_proto_msgTypes[110].Exporter = func(v any, i int) any { switch v := v.(*ConnectorDriver_Property); i { case 0: return &v.state @@ -9560,7 +9916,7 @@ func file_rill_runtime_v1_api_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_rill_runtime_v1_api_proto_rawDesc, NumEnums: 4, - NumMessages: 108, + NumMessages: 112, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/gen/rill/runtime/v1/api.pb.gw.go b/proto/gen/rill/runtime/v1/api.pb.gw.go index 29f87918c63..d9cdfc5ac78 100644 --- a/proto/gen/rill/runtime/v1/api.pb.gw.go +++ b/proto/gen/rill/runtime/v1/api.pb.gw.go @@ -2028,6 +2028,166 @@ func local_request_RuntimeService_GetConversation_0(ctx context.Context, marshal } +func request_RuntimeService_SetConversationCheckpoint_0(ctx context.Context, marshaler runtime.Marshaler, client RuntimeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SetConversationCheckpointRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["instance_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "instance_id") + } + + protoReq.InstanceId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "instance_id", err) + } + + val, ok = pathParams["conversation_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "conversation_id") + } + + protoReq.ConversationId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "conversation_id", err) + } + + msg, err := client.SetConversationCheckpoint(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_RuntimeService_SetConversationCheckpoint_0(ctx context.Context, marshaler runtime.Marshaler, server RuntimeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SetConversationCheckpointRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["instance_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "instance_id") + } + + protoReq.InstanceId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "instance_id", err) + } + + val, ok = pathParams["conversation_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "conversation_id") + } + + protoReq.ConversationId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "conversation_id", err) + } + + msg, err := server.SetConversationCheckpoint(ctx, &protoReq) + return msg, metadata, err + +} + +func request_RuntimeService_RevertConversationWrites_0(ctx context.Context, marshaler runtime.Marshaler, client RuntimeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RevertConversationWritesRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["instance_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "instance_id") + } + + protoReq.InstanceId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "instance_id", err) + } + + val, ok = pathParams["conversation_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "conversation_id") + } + + protoReq.ConversationId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "conversation_id", err) + } + + msg, err := client.RevertConversationWrites(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_RuntimeService_RevertConversationWrites_0(ctx context.Context, marshaler runtime.Marshaler, server RuntimeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RevertConversationWritesRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["instance_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "instance_id") + } + + protoReq.InstanceId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "instance_id", err) + } + + val, ok = pathParams["conversation_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "conversation_id") + } + + protoReq.ConversationId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "conversation_id", err) + } + + msg, err := server.RevertConversationWrites(ctx, &protoReq) + return msg, metadata, err + +} + func request_RuntimeService_ListTools_0(ctx context.Context, marshaler runtime.Marshaler, client RuntimeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ListToolsRequest var metadata runtime.ServerMetadata @@ -3109,6 +3269,56 @@ func RegisterRuntimeServiceHandlerServer(ctx context.Context, mux *runtime.Serve }) + mux.Handle("POST", pattern_RuntimeService_SetConversationCheckpoint_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/rill.runtime.v1.RuntimeService/SetConversationCheckpoint", runtime.WithHTTPPathPattern("/v1/instances/{instance_id}/ai/conversations/{conversation_id}/checkpoint")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_RuntimeService_SetConversationCheckpoint_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_RuntimeService_SetConversationCheckpoint_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_RuntimeService_RevertConversationWrites_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/rill.runtime.v1.RuntimeService/RevertConversationWrites", runtime.WithHTTPPathPattern("/v1/instances/{instance_id}/ai/conversations/{conversation_id}/revert-writes")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_RuntimeService_RevertConversationWrites_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_RuntimeService_RevertConversationWrites_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_RuntimeService_ListTools_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -4049,6 +4259,50 @@ func RegisterRuntimeServiceHandlerClient(ctx context.Context, mux *runtime.Serve }) + mux.Handle("POST", pattern_RuntimeService_SetConversationCheckpoint_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/rill.runtime.v1.RuntimeService/SetConversationCheckpoint", runtime.WithHTTPPathPattern("/v1/instances/{instance_id}/ai/conversations/{conversation_id}/checkpoint")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_RuntimeService_SetConversationCheckpoint_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_RuntimeService_SetConversationCheckpoint_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_RuntimeService_RevertConversationWrites_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/rill.runtime.v1.RuntimeService/RevertConversationWrites", runtime.WithHTTPPathPattern("/v1/instances/{instance_id}/ai/conversations/{conversation_id}/revert-writes")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_RuntimeService_RevertConversationWrites_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_RuntimeService_RevertConversationWrites_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_RuntimeService_ListTools_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -4235,6 +4489,10 @@ var ( pattern_RuntimeService_GetConversation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "instances", "instance_id", "ai", "conversations", "conversation_id"}, "")) + pattern_RuntimeService_SetConversationCheckpoint_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"v1", "instances", "instance_id", "ai", "conversations", "conversation_id", "checkpoint"}, "")) + + pattern_RuntimeService_RevertConversationWrites_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"v1", "instances", "instance_id", "ai", "conversations", "conversation_id", "revert-writes"}, "")) + pattern_RuntimeService_ListTools_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"v1", "instances", "instance_id", "ai", "tools"}, "")) pattern_RuntimeService_Complete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"v1", "instances", "instance_id", "ai", "complete"}, "")) @@ -4319,6 +4577,10 @@ var ( forward_RuntimeService_GetConversation_0 = runtime.ForwardResponseMessage + forward_RuntimeService_SetConversationCheckpoint_0 = runtime.ForwardResponseMessage + + forward_RuntimeService_RevertConversationWrites_0 = runtime.ForwardResponseMessage + forward_RuntimeService_ListTools_0 = runtime.ForwardResponseMessage forward_RuntimeService_Complete_0 = runtime.ForwardResponseMessage diff --git a/proto/gen/rill/runtime/v1/api.pb.validate.go b/proto/gen/rill/runtime/v1/api.pb.validate.go index 6b032233ee4..7917fd97d67 100644 --- a/proto/gen/rill/runtime/v1/api.pb.validate.go +++ b/proto/gen/rill/runtime/v1/api.pb.validate.go @@ -10194,6 +10194,8 @@ func (m *Conversation) validate(all bool) error { // no validation rules for UserAgent + // no validation rules for CheckpointMessageId + if all { switch v := interface{}(m.GetCreatedOn()).(type) { case interface{ ValidateAll() error }: @@ -11401,6 +11403,460 @@ var _ interface { ErrorName() string } = GetConversationResponseValidationError{} +// Validate checks the field values on SetConversationCheckpointRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the first error encountered is returned, or nil if there are +// no violations. +func (m *SetConversationCheckpointRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SetConversationCheckpointRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// SetConversationCheckpointRequestMultiError, or nil if none found. +func (m *SetConversationCheckpointRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *SetConversationCheckpointRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if !_SetConversationCheckpointRequest_InstanceId_Pattern.MatchString(m.GetInstanceId()) { + err := SetConversationCheckpointRequestValidationError{ + field: "InstanceId", + reason: "value does not match regex pattern \"^[_\\\\-a-zA-Z0-9]+$\"", + } + if !all { + return err + } + errors = append(errors, err) + } + + // no validation rules for ConversationId + + // no validation rules for MessageId + + if len(errors) > 0 { + return SetConversationCheckpointRequestMultiError(errors) + } + + return nil +} + +// SetConversationCheckpointRequestMultiError is an error wrapping multiple +// validation errors returned by +// SetConversationCheckpointRequest.ValidateAll() if the designated +// constraints aren't met. +type SetConversationCheckpointRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SetConversationCheckpointRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SetConversationCheckpointRequestMultiError) AllErrors() []error { return m } + +// SetConversationCheckpointRequestValidationError is the validation error +// returned by SetConversationCheckpointRequest.Validate if the designated +// constraints aren't met. +type SetConversationCheckpointRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SetConversationCheckpointRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SetConversationCheckpointRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SetConversationCheckpointRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SetConversationCheckpointRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SetConversationCheckpointRequestValidationError) ErrorName() string { + return "SetConversationCheckpointRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e SetConversationCheckpointRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSetConversationCheckpointRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SetConversationCheckpointRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SetConversationCheckpointRequestValidationError{} + +var _SetConversationCheckpointRequest_InstanceId_Pattern = regexp.MustCompile("^[_\\-a-zA-Z0-9]+$") + +// Validate checks the field values on SetConversationCheckpointResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the first error encountered is returned, or nil if there are +// no violations. +func (m *SetConversationCheckpointResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SetConversationCheckpointResponse +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// SetConversationCheckpointResponseMultiError, or nil if none found. +func (m *SetConversationCheckpointResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *SetConversationCheckpointResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return SetConversationCheckpointResponseMultiError(errors) + } + + return nil +} + +// SetConversationCheckpointResponseMultiError is an error wrapping multiple +// validation errors returned by +// SetConversationCheckpointResponse.ValidateAll() if the designated +// constraints aren't met. +type SetConversationCheckpointResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SetConversationCheckpointResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SetConversationCheckpointResponseMultiError) AllErrors() []error { return m } + +// SetConversationCheckpointResponseValidationError is the validation error +// returned by SetConversationCheckpointResponse.Validate if the designated +// constraints aren't met. +type SetConversationCheckpointResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SetConversationCheckpointResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SetConversationCheckpointResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SetConversationCheckpointResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SetConversationCheckpointResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SetConversationCheckpointResponseValidationError) ErrorName() string { + return "SetConversationCheckpointResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e SetConversationCheckpointResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSetConversationCheckpointResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SetConversationCheckpointResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SetConversationCheckpointResponseValidationError{} + +// Validate checks the field values on RevertConversationWritesRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *RevertConversationWritesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RevertConversationWritesRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// RevertConversationWritesRequestMultiError, or nil if none found. +func (m *RevertConversationWritesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *RevertConversationWritesRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if !_RevertConversationWritesRequest_InstanceId_Pattern.MatchString(m.GetInstanceId()) { + err := RevertConversationWritesRequestValidationError{ + field: "InstanceId", + reason: "value does not match regex pattern \"^[_\\\\-a-zA-Z0-9]+$\"", + } + if !all { + return err + } + errors = append(errors, err) + } + + // no validation rules for ConversationId + + // no validation rules for FromMessageId + + // no validation rules for ToMessageId + + if len(errors) > 0 { + return RevertConversationWritesRequestMultiError(errors) + } + + return nil +} + +// RevertConversationWritesRequestMultiError is an error wrapping multiple +// validation errors returned by RevertConversationWritesRequest.ValidateAll() +// if the designated constraints aren't met. +type RevertConversationWritesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RevertConversationWritesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RevertConversationWritesRequestMultiError) AllErrors() []error { return m } + +// RevertConversationWritesRequestValidationError is the validation error +// returned by RevertConversationWritesRequest.Validate if the designated +// constraints aren't met. +type RevertConversationWritesRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RevertConversationWritesRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RevertConversationWritesRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RevertConversationWritesRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RevertConversationWritesRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RevertConversationWritesRequestValidationError) ErrorName() string { + return "RevertConversationWritesRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e RevertConversationWritesRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRevertConversationWritesRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RevertConversationWritesRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RevertConversationWritesRequestValidationError{} + +var _RevertConversationWritesRequest_InstanceId_Pattern = regexp.MustCompile("^[_\\-a-zA-Z0-9]+$") + +// Validate checks the field values on RevertConversationWritesResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the first error encountered is returned, or nil if there are +// no violations. +func (m *RevertConversationWritesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RevertConversationWritesResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// RevertConversationWritesResponseMultiError, or nil if none found. +func (m *RevertConversationWritesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *RevertConversationWritesResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return RevertConversationWritesResponseMultiError(errors) + } + + return nil +} + +// RevertConversationWritesResponseMultiError is an error wrapping multiple +// validation errors returned by +// RevertConversationWritesResponse.ValidateAll() if the designated +// constraints aren't met. +type RevertConversationWritesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RevertConversationWritesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RevertConversationWritesResponseMultiError) AllErrors() []error { return m } + +// RevertConversationWritesResponseValidationError is the validation error +// returned by RevertConversationWritesResponse.Validate if the designated +// constraints aren't met. +type RevertConversationWritesResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RevertConversationWritesResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RevertConversationWritesResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RevertConversationWritesResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RevertConversationWritesResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RevertConversationWritesResponseValidationError) ErrorName() string { + return "RevertConversationWritesResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e RevertConversationWritesResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRevertConversationWritesResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RevertConversationWritesResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RevertConversationWritesResponseValidationError{} + // Validate checks the field values on ListToolsRequest with the rules defined // in the proto definition for this message. If any rules are violated, the // first error encountered is returned, or nil if there are no violations. diff --git a/proto/gen/rill/runtime/v1/api_grpc.pb.go b/proto/gen/rill/runtime/v1/api_grpc.pb.go index 10694da748c..ed5b74f0e76 100644 --- a/proto/gen/rill/runtime/v1/api_grpc.pb.go +++ b/proto/gen/rill/runtime/v1/api_grpc.pb.go @@ -19,47 +19,49 @@ import ( const _ = grpc.SupportPackageIsVersion9 const ( - RuntimeService_Ping_FullMethodName = "/rill.runtime.v1.RuntimeService/Ping" - RuntimeService_Health_FullMethodName = "/rill.runtime.v1.RuntimeService/Health" - RuntimeService_InstanceHealth_FullMethodName = "/rill.runtime.v1.RuntimeService/InstanceHealth" - RuntimeService_ListInstances_FullMethodName = "/rill.runtime.v1.RuntimeService/ListInstances" - RuntimeService_GetInstance_FullMethodName = "/rill.runtime.v1.RuntimeService/GetInstance" - RuntimeService_CreateInstance_FullMethodName = "/rill.runtime.v1.RuntimeService/CreateInstance" - RuntimeService_EditInstance_FullMethodName = "/rill.runtime.v1.RuntimeService/EditInstance" - RuntimeService_DeleteInstance_FullMethodName = "/rill.runtime.v1.RuntimeService/DeleteInstance" - RuntimeService_ListFiles_FullMethodName = "/rill.runtime.v1.RuntimeService/ListFiles" - RuntimeService_WatchFiles_FullMethodName = "/rill.runtime.v1.RuntimeService/WatchFiles" - RuntimeService_GetFile_FullMethodName = "/rill.runtime.v1.RuntimeService/GetFile" - RuntimeService_PutFile_FullMethodName = "/rill.runtime.v1.RuntimeService/PutFile" - RuntimeService_CreateDirectory_FullMethodName = "/rill.runtime.v1.RuntimeService/CreateDirectory" - RuntimeService_DeleteFile_FullMethodName = "/rill.runtime.v1.RuntimeService/DeleteFile" - RuntimeService_RenameFile_FullMethodName = "/rill.runtime.v1.RuntimeService/RenameFile" - RuntimeService_ListExamples_FullMethodName = "/rill.runtime.v1.RuntimeService/ListExamples" - RuntimeService_UnpackExample_FullMethodName = "/rill.runtime.v1.RuntimeService/UnpackExample" - RuntimeService_UnpackEmpty_FullMethodName = "/rill.runtime.v1.RuntimeService/UnpackEmpty" - RuntimeService_GenerateMetricsViewFile_FullMethodName = "/rill.runtime.v1.RuntimeService/GenerateMetricsViewFile" - RuntimeService_GenerateCanvasFile_FullMethodName = "/rill.runtime.v1.RuntimeService/GenerateCanvasFile" - RuntimeService_GenerateResolver_FullMethodName = "/rill.runtime.v1.RuntimeService/GenerateResolver" - RuntimeService_GenerateRenderer_FullMethodName = "/rill.runtime.v1.RuntimeService/GenerateRenderer" - RuntimeService_QueryResolver_FullMethodName = "/rill.runtime.v1.RuntimeService/QueryResolver" - RuntimeService_GetLogs_FullMethodName = "/rill.runtime.v1.RuntimeService/GetLogs" - RuntimeService_WatchLogs_FullMethodName = "/rill.runtime.v1.RuntimeService/WatchLogs" - RuntimeService_ListResources_FullMethodName = "/rill.runtime.v1.RuntimeService/ListResources" - RuntimeService_WatchResources_FullMethodName = "/rill.runtime.v1.RuntimeService/WatchResources" - RuntimeService_GetResource_FullMethodName = "/rill.runtime.v1.RuntimeService/GetResource" - RuntimeService_GetExplore_FullMethodName = "/rill.runtime.v1.RuntimeService/GetExplore" - RuntimeService_GetModelPartitions_FullMethodName = "/rill.runtime.v1.RuntimeService/GetModelPartitions" - RuntimeService_CreateTrigger_FullMethodName = "/rill.runtime.v1.RuntimeService/CreateTrigger" - RuntimeService_ListConnectorDrivers_FullMethodName = "/rill.runtime.v1.RuntimeService/ListConnectorDrivers" - RuntimeService_AnalyzeConnectors_FullMethodName = "/rill.runtime.v1.RuntimeService/AnalyzeConnectors" - RuntimeService_ListNotifierConnectors_FullMethodName = "/rill.runtime.v1.RuntimeService/ListNotifierConnectors" - RuntimeService_ListConversations_FullMethodName = "/rill.runtime.v1.RuntimeService/ListConversations" - RuntimeService_GetConversation_FullMethodName = "/rill.runtime.v1.RuntimeService/GetConversation" - RuntimeService_ListTools_FullMethodName = "/rill.runtime.v1.RuntimeService/ListTools" - RuntimeService_Complete_FullMethodName = "/rill.runtime.v1.RuntimeService/Complete" - RuntimeService_CompleteStreaming_FullMethodName = "/rill.runtime.v1.RuntimeService/CompleteStreaming" - RuntimeService_IssueDevJWT_FullMethodName = "/rill.runtime.v1.RuntimeService/IssueDevJWT" - RuntimeService_AnalyzeVariables_FullMethodName = "/rill.runtime.v1.RuntimeService/AnalyzeVariables" + RuntimeService_Ping_FullMethodName = "/rill.runtime.v1.RuntimeService/Ping" + RuntimeService_Health_FullMethodName = "/rill.runtime.v1.RuntimeService/Health" + RuntimeService_InstanceHealth_FullMethodName = "/rill.runtime.v1.RuntimeService/InstanceHealth" + RuntimeService_ListInstances_FullMethodName = "/rill.runtime.v1.RuntimeService/ListInstances" + RuntimeService_GetInstance_FullMethodName = "/rill.runtime.v1.RuntimeService/GetInstance" + RuntimeService_CreateInstance_FullMethodName = "/rill.runtime.v1.RuntimeService/CreateInstance" + RuntimeService_EditInstance_FullMethodName = "/rill.runtime.v1.RuntimeService/EditInstance" + RuntimeService_DeleteInstance_FullMethodName = "/rill.runtime.v1.RuntimeService/DeleteInstance" + RuntimeService_ListFiles_FullMethodName = "/rill.runtime.v1.RuntimeService/ListFiles" + RuntimeService_WatchFiles_FullMethodName = "/rill.runtime.v1.RuntimeService/WatchFiles" + RuntimeService_GetFile_FullMethodName = "/rill.runtime.v1.RuntimeService/GetFile" + RuntimeService_PutFile_FullMethodName = "/rill.runtime.v1.RuntimeService/PutFile" + RuntimeService_CreateDirectory_FullMethodName = "/rill.runtime.v1.RuntimeService/CreateDirectory" + RuntimeService_DeleteFile_FullMethodName = "/rill.runtime.v1.RuntimeService/DeleteFile" + RuntimeService_RenameFile_FullMethodName = "/rill.runtime.v1.RuntimeService/RenameFile" + RuntimeService_ListExamples_FullMethodName = "/rill.runtime.v1.RuntimeService/ListExamples" + RuntimeService_UnpackExample_FullMethodName = "/rill.runtime.v1.RuntimeService/UnpackExample" + RuntimeService_UnpackEmpty_FullMethodName = "/rill.runtime.v1.RuntimeService/UnpackEmpty" + RuntimeService_GenerateMetricsViewFile_FullMethodName = "/rill.runtime.v1.RuntimeService/GenerateMetricsViewFile" + RuntimeService_GenerateCanvasFile_FullMethodName = "/rill.runtime.v1.RuntimeService/GenerateCanvasFile" + RuntimeService_GenerateResolver_FullMethodName = "/rill.runtime.v1.RuntimeService/GenerateResolver" + RuntimeService_GenerateRenderer_FullMethodName = "/rill.runtime.v1.RuntimeService/GenerateRenderer" + RuntimeService_QueryResolver_FullMethodName = "/rill.runtime.v1.RuntimeService/QueryResolver" + RuntimeService_GetLogs_FullMethodName = "/rill.runtime.v1.RuntimeService/GetLogs" + RuntimeService_WatchLogs_FullMethodName = "/rill.runtime.v1.RuntimeService/WatchLogs" + RuntimeService_ListResources_FullMethodName = "/rill.runtime.v1.RuntimeService/ListResources" + RuntimeService_WatchResources_FullMethodName = "/rill.runtime.v1.RuntimeService/WatchResources" + RuntimeService_GetResource_FullMethodName = "/rill.runtime.v1.RuntimeService/GetResource" + RuntimeService_GetExplore_FullMethodName = "/rill.runtime.v1.RuntimeService/GetExplore" + RuntimeService_GetModelPartitions_FullMethodName = "/rill.runtime.v1.RuntimeService/GetModelPartitions" + RuntimeService_CreateTrigger_FullMethodName = "/rill.runtime.v1.RuntimeService/CreateTrigger" + RuntimeService_ListConnectorDrivers_FullMethodName = "/rill.runtime.v1.RuntimeService/ListConnectorDrivers" + RuntimeService_AnalyzeConnectors_FullMethodName = "/rill.runtime.v1.RuntimeService/AnalyzeConnectors" + RuntimeService_ListNotifierConnectors_FullMethodName = "/rill.runtime.v1.RuntimeService/ListNotifierConnectors" + RuntimeService_ListConversations_FullMethodName = "/rill.runtime.v1.RuntimeService/ListConversations" + RuntimeService_GetConversation_FullMethodName = "/rill.runtime.v1.RuntimeService/GetConversation" + RuntimeService_SetConversationCheckpoint_FullMethodName = "/rill.runtime.v1.RuntimeService/SetConversationCheckpoint" + RuntimeService_RevertConversationWrites_FullMethodName = "/rill.runtime.v1.RuntimeService/RevertConversationWrites" + RuntimeService_ListTools_FullMethodName = "/rill.runtime.v1.RuntimeService/ListTools" + RuntimeService_Complete_FullMethodName = "/rill.runtime.v1.RuntimeService/Complete" + RuntimeService_CompleteStreaming_FullMethodName = "/rill.runtime.v1.RuntimeService/CompleteStreaming" + RuntimeService_IssueDevJWT_FullMethodName = "/rill.runtime.v1.RuntimeService/IssueDevJWT" + RuntimeService_AnalyzeVariables_FullMethodName = "/rill.runtime.v1.RuntimeService/AnalyzeVariables" ) // RuntimeServiceClient is the client API for RuntimeService service. @@ -145,6 +147,10 @@ type RuntimeServiceClient interface { ListConversations(ctx context.Context, in *ListConversationsRequest, opts ...grpc.CallOption) (*ListConversationsResponse, error) // GetConversation returns a specific AI chat conversation. GetConversation(ctx context.Context, in *GetConversationRequest, opts ...grpc.CallOption) (*GetConversationResponse, error) + // SetConversationCheckpoint updates a conversation's checkpoint to after a specified message. + SetConversationCheckpoint(ctx context.Context, in *SetConversationCheckpointRequest, opts ...grpc.CallOption) (*SetConversationCheckpointResponse, error) + // RevertConversationWrites reverts file writes made in a conversation with the AI. + RevertConversationWrites(ctx context.Context, in *RevertConversationWritesRequest, opts ...grpc.CallOption) (*RevertConversationWritesResponse, error) // ListTools lists metadata about all AI tools that calls to Complete(Streaming) may invoke. // Note that it covers all registered tools, but the current user may not have access to all of them. ListTools(ctx context.Context, in *ListToolsRequest, opts ...grpc.CallOption) (*ListToolsResponse, error) @@ -553,6 +559,26 @@ func (c *runtimeServiceClient) GetConversation(ctx context.Context, in *GetConve return out, nil } +func (c *runtimeServiceClient) SetConversationCheckpoint(ctx context.Context, in *SetConversationCheckpointRequest, opts ...grpc.CallOption) (*SetConversationCheckpointResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SetConversationCheckpointResponse) + err := c.cc.Invoke(ctx, RuntimeService_SetConversationCheckpoint_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeServiceClient) RevertConversationWrites(ctx context.Context, in *RevertConversationWritesRequest, opts ...grpc.CallOption) (*RevertConversationWritesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RevertConversationWritesResponse) + err := c.cc.Invoke(ctx, RuntimeService_RevertConversationWrites_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *runtimeServiceClient) ListTools(ctx context.Context, in *ListToolsRequest, opts ...grpc.CallOption) (*ListToolsResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ListToolsResponse) @@ -695,6 +721,10 @@ type RuntimeServiceServer interface { ListConversations(context.Context, *ListConversationsRequest) (*ListConversationsResponse, error) // GetConversation returns a specific AI chat conversation. GetConversation(context.Context, *GetConversationRequest) (*GetConversationResponse, error) + // SetConversationCheckpoint updates a conversation's checkpoint to after a specified message. + SetConversationCheckpoint(context.Context, *SetConversationCheckpointRequest) (*SetConversationCheckpointResponse, error) + // RevertConversationWrites reverts file writes made in a conversation with the AI. + RevertConversationWrites(context.Context, *RevertConversationWritesRequest) (*RevertConversationWritesResponse, error) // ListTools lists metadata about all AI tools that calls to Complete(Streaming) may invoke. // Note that it covers all registered tools, but the current user may not have access to all of them. ListTools(context.Context, *ListToolsRequest) (*ListToolsResponse, error) @@ -824,6 +854,12 @@ func (UnimplementedRuntimeServiceServer) ListConversations(context.Context, *Lis func (UnimplementedRuntimeServiceServer) GetConversation(context.Context, *GetConversationRequest) (*GetConversationResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetConversation not implemented") } +func (UnimplementedRuntimeServiceServer) SetConversationCheckpoint(context.Context, *SetConversationCheckpointRequest) (*SetConversationCheckpointResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetConversationCheckpoint not implemented") +} +func (UnimplementedRuntimeServiceServer) RevertConversationWrites(context.Context, *RevertConversationWritesRequest) (*RevertConversationWritesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RevertConversationWrites not implemented") +} func (UnimplementedRuntimeServiceServer) ListTools(context.Context, *ListToolsRequest) (*ListToolsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListTools not implemented") } @@ -1487,6 +1523,42 @@ func _RuntimeService_GetConversation_Handler(srv interface{}, ctx context.Contex return interceptor(ctx, in, info, handler) } +func _RuntimeService_SetConversationCheckpoint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetConversationCheckpointRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeServiceServer).SetConversationCheckpoint(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: RuntimeService_SetConversationCheckpoint_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeServiceServer).SetConversationCheckpoint(ctx, req.(*SetConversationCheckpointRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeService_RevertConversationWrites_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RevertConversationWritesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeServiceServer).RevertConversationWrites(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: RuntimeService_RevertConversationWrites_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeServiceServer).RevertConversationWrites(ctx, req.(*RevertConversationWritesRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _RuntimeService_ListTools_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListToolsRequest) if err := dec(in); err != nil { @@ -1709,6 +1781,14 @@ var RuntimeService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetConversation", Handler: _RuntimeService_GetConversation_Handler, }, + { + MethodName: "SetConversationCheckpoint", + Handler: _RuntimeService_SetConversationCheckpoint_Handler, + }, + { + MethodName: "RevertConversationWrites", + Handler: _RuntimeService_RevertConversationWrites_Handler, + }, { MethodName: "ListTools", Handler: _RuntimeService_ListTools_Handler, diff --git a/proto/gen/rill/runtime/v1/runtime.swagger.yaml b/proto/gen/rill/runtime/v1/runtime.swagger.yaml index 029c03fdda5..efcbd20fc1c 100644 --- a/proto/gen/rill/runtime/v1/runtime.swagger.yaml +++ b/proto/gen/rill/runtime/v1/runtime.swagger.yaml @@ -548,6 +548,81 @@ paths: type: string tags: - RuntimeService + /v1/instances/{instanceId}/ai/conversations/{conversationId}/checkpoint: + post: + summary: SetConversationCheckpoint updates a conversation's checkpoint to after a specified message. + operationId: RuntimeService_SetConversationCheckpoint + responses: + "200": + description: A successful response. + schema: + $ref: '#/definitions/v1SetConversationCheckpointResponse' + default: + description: An unexpected error response. + schema: + $ref: '#/definitions/rpcStatus' + parameters: + - name: instanceId + description: Instance the conversation belongs to. + in: path + required: true + type: string + - name: conversationId + description: Conversation ID to checkpoint. + in: path + required: true + type: string + - name: body + in: body + required: true + schema: + type: object + properties: + messageId: + type: string + description: Message ID of the latest message *before* the checkpoint. + title: Request message for RuntimeService.SetConversationCheckpoint + tags: + - RuntimeService + /v1/instances/{instanceId}/ai/conversations/{conversationId}/revert-writes: + post: + summary: RevertConversationWrites reverts file writes made in a conversation with the AI. + operationId: RuntimeService_RevertConversationWrites + responses: + "200": + description: A successful response. + schema: + $ref: '#/definitions/v1RevertConversationWritesResponse' + default: + description: An unexpected error response. + schema: + $ref: '#/definitions/rpcStatus' + parameters: + - name: instanceId + description: Instance the conversation belongs to. + in: path + required: true + type: string + - name: conversationId + description: Conversation ID to revert writes for. + in: path + required: true + type: string + - name: body + in: body + required: true + schema: + type: object + properties: + fromMessageId: + type: string + description: Start message ID to revert from (inclusive). If empty, it reverts from after the conversation's checkpoint. + toMessageId: + type: string + description: End message ID to revert to (inclusive). If empty, it reverts to the latest message. + title: Request message for RuntimeService.RevertConversationWrites + tags: + - RuntimeService /v1/instances/{instanceId}/ai/tools: get: summary: |- @@ -4489,6 +4564,8 @@ definitions: type: string userAgent: type: string + checkpointMessageId: + type: string createdOn: type: string format: date-time @@ -6910,6 +6987,14 @@ definitions: type: string name: type: string + v1RevertConversationWritesResponse: + type: object + properties: + restoredPaths: + type: array + items: + type: string + title: Response message for RuntimeService.RevertConversationWrites v1Schedule: type: object properties: @@ -7027,6 +7112,9 @@ definitions: resource: $ref: '#/definitions/v1ResourceName' description: this rules resolves to rules that provides access to whatever is needed to access this resource. + v1SetConversationCheckpointResponse: + type: object + title: Response message for RuntimeService.SetConversationCheckpoint v1Source: type: object properties: diff --git a/proto/rill/runtime/v1/api.proto b/proto/rill/runtime/v1/api.proto index 4e7a35b8b16..eb269f6a59a 100644 --- a/proto/rill/runtime/v1/api.proto +++ b/proto/rill/runtime/v1/api.proto @@ -249,6 +249,22 @@ service RuntimeService { option (google.api.http) = {get: "/v1/instances/{instance_id}/ai/conversations/{conversation_id}"}; } + // SetConversationCheckpoint updates a conversation's checkpoint to after a specified message. + rpc SetConversationCheckpoint(SetConversationCheckpointRequest) returns (SetConversationCheckpointResponse) { + option (google.api.http) = { + post: "/v1/instances/{instance_id}/ai/conversations/{conversation_id}/checkpoint", + body: "*" + }; + } + + // RevertConversationWrites reverts file writes made in a conversation with the AI. + rpc RevertConversationWrites(RevertConversationWritesRequest) returns (RevertConversationWritesResponse) { + option (google.api.http) = { + post: "/v1/instances/{instance_id}/ai/conversations/{conversation_id}/revert-writes", + body: "*" + }; + } + // ListTools lists metadata about all AI tools that calls to Complete(Streaming) may invoke. // Note that it covers all registered tools, but the current user may not have access to all of them. rpc ListTools(ListToolsRequest) returns (ListToolsResponse) { @@ -942,6 +958,7 @@ message Conversation { string owner_id = 2; string title = 3; string user_agent = 6; + string checkpoint_message_id = 8; google.protobuf.Timestamp created_on = 4; google.protobuf.Timestamp updated_on = 5; repeated Message messages = 7; // NOTE: Deprecated. @@ -1012,6 +1029,36 @@ message GetConversationResponse { repeated Message messages = 2; } +// Request message for RuntimeService.SetConversationCheckpoint +message SetConversationCheckpointRequest { + // Instance the conversation belongs to. + string instance_id = 1 [(validate.rules).string = {pattern: "^[_\\-a-zA-Z0-9]+$"}]; + // Conversation ID to checkpoint. + string conversation_id = 2; + // Message ID of the latest message *before* the checkpoint. + string message_id = 3; +} + +// Response message for RuntimeService.SetConversationCheckpoint +message SetConversationCheckpointResponse {} + +// Request message for RuntimeService.RevertConversationWrites +message RevertConversationWritesRequest { + // Instance the conversation belongs to. + string instance_id = 1 [(validate.rules).string = {pattern: "^[_\\-a-zA-Z0-9]+$"}]; + // Conversation ID to revert writes for. + string conversation_id = 2; + // Start message ID to revert from (inclusive). If empty, it reverts from after the conversation's checkpoint. + string from_message_id = 3; + // End message ID to revert to (inclusive). If empty, it reverts to the latest message. + string to_message_id = 4; +} + +// Response message for RuntimeService.RevertConversationWrites +message RevertConversationWritesResponse { + repeated string restored_paths = 1; +} + // Request message for RuntimeService.ListTools message ListToolsRequest { string instance_id = 1; diff --git a/runtime/ai/ai.go b/runtime/ai/ai.go index 71eb2713c33..612b9dbbd37 100644 --- a/runtime/ai/ai.go +++ b/runtime/ai/ai.go @@ -538,6 +538,14 @@ func (s *BaseSession) UpdateUserAgent(ctx context.Context, userAgent string) err return nil } +func (s *BaseSession) UpdateCheckpoint(ctx context.Context, messageID string) error { + s.mu.Lock() + defer s.mu.Unlock() + s.dto.CheckpointMessageID = messageID + s.dtoDirty = true + return nil +} + func (s *BaseSession) Subscribe() chan *Message { ch := make(chan *Message) s.mu.Lock() @@ -1251,6 +1259,13 @@ type LLMMarshaler interface { ToLLM() *aiv1.ContentBlock } +// LLMRedactor is an interface for tool args and results types that want to redact fields before being sent to the LLM. +// It is called for all tool calls/results, regardless of who invoked them. +// It is called on a copy of the content and can modify the content in-place. +type LLMRedactor interface { + Redact() error +} + // UnmarshalMessageContent unmarshals the content of a message based on its content type and tool. func (s *Session) UnmarshalMessageContent(m *Message) (any, error) { if m.ContentType != MessageContentTypeJSON { @@ -1293,10 +1308,36 @@ func (s *Session) UnmarshalMessageContent(m *Message) (any, error) { // NewCompletionMessage converts the message to an aiv1.CompletionMessage func (s *Session) NewCompletionMessage(m *Message) (*aiv1.CompletionMessage, error) { + // Unmarshal the message if possible + var contentVal any + if m.ContentType == MessageContentTypeJSON { + var err error + contentVal, err = s.UnmarshalMessageContent(m) + if err != nil { + return nil, err + } + } + + // Apply content redaction if implemented. + contentData := m.Content + if v, ok := contentVal.(LLMRedactor); ok && v != nil { + err := v.Redact() + if err != nil { + return nil, fmt.Errorf("failed to redact content for message: %w", err) + } + + data, err := json.Marshal(v) + if err != nil { + return nil, fmt.Errorf("failed to marshal redacted content for message: %w", err) + } + contentData = string(data) + } + + // Create baseline block role := RoleAssistant block := &aiv1.ContentBlock{ BlockType: &aiv1.ContentBlock_Text{ - Text: m.Content, + Text: contentData, }, } @@ -1308,11 +1349,7 @@ func (s *Session) NewCompletionMessage(m *Message) (*aiv1.CompletionMessage, err role = RoleUser // If the tool args have a custom marshaler, use it. - args, err := s.UnmarshalMessageContent(m) - if err != nil { - return nil, err - } - if args, ok := args.(LLMMarshaler); ok && args != nil { + if args, ok := contentVal.(LLMMarshaler); ok && args != nil { block = args.ToLLM() } } else { @@ -1346,17 +1383,13 @@ func (s *Session) NewCompletionMessage(m *Message) (*aiv1.CompletionMessage, err switch m.ContentType { case MessageContentTypeJSON: // If the tool result has a custom marshaler, use it. - result, err := s.UnmarshalMessageContent(m) - if err != nil { - return nil, err - } - if result, ok := result.(LLMMarshaler); ok && result != nil { + if result, ok := contentVal.(LLMMarshaler); ok && result != nil { block = result.ToLLM() } case MessageContentTypeError: block = &aiv1.ContentBlock{ BlockType: &aiv1.ContentBlock_Text{ - Text: fmt.Sprintf("Execution error: %s", m.Content), + Text: fmt.Sprintf("Execution error: %s", contentData), }, } } @@ -1366,7 +1399,7 @@ func (s *Session) NewCompletionMessage(m *Message) (*aiv1.CompletionMessage, err BlockType: &aiv1.ContentBlock_ToolResult{ ToolResult: &aiv1.ToolResult{ Id: completionMessageID(m.ParentID), - Content: m.Content, + Content: contentData, IsError: m.ContentType == MessageContentTypeError, }, }, diff --git a/runtime/ai/developer_agent.go b/runtime/ai/developer_agent.go index 9a96dc25c31..34c8090d455 100644 --- a/runtime/ai/developer_agent.go +++ b/runtime/ai/developer_agent.go @@ -124,12 +124,13 @@ The user might ask you to "Create a dashboard for my Github activity". You would At a high level, you should follow these steps: 1. Understand the current contents of the project by reviewing the list_files output. 2. Make a plan for how to implement the user's request. If the user asks to join, combine, or analyze data from multiple existing models, you should create a new model that references those existing models in SQL. -3. Only if necessary, add a new model or update an existing model to reflect the user's request. Use "develop_model" with a prompt describing what to create or change. +3. Only if necessary, add a new model, update an existing model, or delete a model to reflect the user's request. Use "develop_model" with a prompt describing what to create, change or delete. 4. Only if necessary, add a new metrics view or update an existing metrics view to reflect the user's request. The metrics view should use a model in the project, which may already exist or may have been added in step 2. - To *create* a new metrics view: Use "develop_metrics_view" with path and model (no prompt). - To *edit* an existing metrics view: Use "develop_metrics_view" with path, model, AND a prompt describing the changes. 5. If a user requests a new model/file, DO NOT overwrite existing file and instead use a unique name. -6. After successfully creating/updating the artifacts, provide a summary with links using the following format: +6. Don't delete a file unless the user explicitly asks you to delete it. +7. After successfully creating/updating the artifacts, provide a summary with links using the following format: {{ backticks }} ## Summary of Changes I've created the following files for you: diff --git a/runtime/ai/file_write.go b/runtime/ai/file_write.go index d23680adf30..47f713af8ce 100644 --- a/runtime/ai/file_write.go +++ b/runtime/ai/file_write.go @@ -26,10 +26,18 @@ type WriteFileArgs struct { } type WriteFileResult struct { - Diff string `json:"diff,omitempty" jsonschema:"Diff of the file contents."` - IsNewFile bool `json:"is_new_file,omitempty" jsonschema:"Indicates if the tool created a new file."` - Resources []map[string]any `json:"resources,omitempty" jsonschema:"The Rill resources declared in the file, if any."` - ParseError string `json:"parse_error,omitempty" jsonschema:"Parse error encountered when parsing the file, if any."` + Diff string `json:"diff,omitempty" jsonschema:"Diff of the file contents."` + IsNewFile bool `json:"is_new_file,omitempty" jsonschema:"Indicates if the tool created a new file."` + PreviousContents string `json:"previous_contents,omitempty" jsonschema:"The previous contents of the file before the write. Usually omitted due to size."` + Resources []map[string]any `json:"resources,omitempty" jsonschema:"The Rill resources declared in the file, if any."` + ParseError string `json:"parse_error,omitempty" jsonschema:"Parse error encountered when parsing the file, if any."` +} + +var _ LLMRedactor = (*WriteFileResult)(nil) + +func (r *WriteFileResult) Redact() error { + r.PreviousContents = "" + return nil } func (t *WriteFile) Spec() *mcp.Tool { @@ -97,10 +105,11 @@ func (t *WriteFile) Handler(ctx context.Context, args *WriteFileArgs) (*WriteFil // Done return &WriteFileResult{ - Diff: diff, - IsNewFile: isNewFile, - Resources: resources, - ParseError: parseErr, + Diff: diff, + IsNewFile: isNewFile, + PreviousContents: originalContent, + Resources: resources, + ParseError: parseErr, }, nil } diff --git a/runtime/drivers/catalog.go b/runtime/drivers/catalog.go index 82330032f8e..79be071a26f 100644 --- a/runtime/drivers/catalog.go +++ b/runtime/drivers/catalog.go @@ -107,13 +107,14 @@ type InstanceHealth struct { // AISession represents a session of AI interaction, such as a chat or MCP connection. type AISession struct { - ID string `db:"id"` - InstanceID string `db:"instance_id"` - OwnerID string `db:"owner_id"` - Title string `db:"title"` - UserAgent string `db:"user_agent"` - CreatedOn time.Time `db:"created_on"` - UpdatedOn time.Time `db:"updated_on"` + ID string `db:"id"` + InstanceID string `db:"instance_id"` + OwnerID string `db:"owner_id"` + Title string `db:"title"` + UserAgent string `db:"user_agent"` + CheckpointMessageID string `db:"checkpoint_message_id"` + CreatedOn time.Time `db:"created_on"` + UpdatedOn time.Time `db:"updated_on"` } // AIMessage represents a message in an AISession. diff --git a/runtime/drivers/sqlite/catalog.go b/runtime/drivers/sqlite/catalog.go index 380f240c764..c5435247681 100644 --- a/runtime/drivers/sqlite/catalog.go +++ b/runtime/drivers/sqlite/catalog.go @@ -386,7 +386,7 @@ func (c *catalogStore) UpsertInstanceHealth(ctx context.Context, h *drivers.Inst func (c *catalogStore) FindAISessions(ctx context.Context, ownerID, userAgentPattern string) ([]*drivers.AISession, error) { query := ` - SELECT id, instance_id, owner_id, title, user_agent, created_on, updated_on + SELECT id, instance_id, owner_id, title, user_agent, checkpoint_message_id, created_on, updated_on FROM ai_sessions WHERE instance_id = ? AND owner_id = ? ` @@ -409,7 +409,7 @@ func (c *catalogStore) FindAISessions(ctx context.Context, ownerID, userAgentPat var result []*drivers.AISession for rows.Next() { var s drivers.AISession - if err := rows.Scan(&s.ID, &s.InstanceID, &s.OwnerID, &s.Title, &s.UserAgent, &s.CreatedOn, &s.UpdatedOn); err != nil { + if err := rows.Scan(&s.ID, &s.InstanceID, &s.OwnerID, &s.Title, &s.UserAgent, &s.CheckpointMessageID, &s.CreatedOn, &s.UpdatedOn); err != nil { return nil, err } result = append(result, &s) @@ -422,13 +422,13 @@ func (c *catalogStore) FindAISessions(ctx context.Context, ownerID, userAgentPat func (c *catalogStore) FindAISession(ctx context.Context, sessionID string) (*drivers.AISession, error) { row := c.db.QueryRowxContext(ctx, ` - SELECT id, instance_id, owner_id, title, user_agent, created_on, updated_on + SELECT id, instance_id, owner_id, title, user_agent, checkpoint_message_id, created_on, updated_on FROM ai_sessions WHERE instance_id = ? AND id = ? `, c.instanceID, sessionID) var s drivers.AISession - if err := row.Scan(&s.ID, &s.InstanceID, &s.OwnerID, &s.Title, &s.UserAgent, &s.CreatedOn, &s.UpdatedOn); err != nil { + if err := row.Scan(&s.ID, &s.InstanceID, &s.OwnerID, &s.Title, &s.UserAgent, &s.CheckpointMessageID, &s.CreatedOn, &s.UpdatedOn); err != nil { return nil, err } return &s, nil @@ -436,9 +436,9 @@ func (c *catalogStore) FindAISession(ctx context.Context, sessionID string) (*dr func (c *catalogStore) InsertAISession(ctx context.Context, s *drivers.AISession) error { _, err := c.db.ExecContext(ctx, ` - INSERT INTO ai_sessions (id, instance_id, owner_id, title, user_agent, created_on, updated_on) - VALUES (?, ?, ?, ?, ?, ?, ?) - `, s.ID, s.InstanceID, s.OwnerID, s.Title, s.UserAgent, s.CreatedOn, s.UpdatedOn) + INSERT INTO ai_sessions (id, instance_id, owner_id, title, user_agent, checkpoint_message_id, created_on, updated_on) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) + `, s.ID, s.InstanceID, s.OwnerID, s.Title, s.UserAgent, s.CheckpointMessageID, s.CreatedOn, s.UpdatedOn) if err != nil { return err } @@ -448,9 +448,9 @@ func (c *catalogStore) InsertAISession(ctx context.Context, s *drivers.AISession func (c *catalogStore) UpdateAISession(ctx context.Context, s *drivers.AISession) error { now := time.Now() _, err := c.db.ExecContext(ctx, ` - UPDATE ai_sessions SET owner_id = ?, title = ?, user_agent = ?, updated_on = ? + UPDATE ai_sessions SET owner_id = ?, title = ?, user_agent = ?, checkpoint_message_id = ?, updated_on = ? WHERE id = ? - `, s.OwnerID, s.Title, s.UserAgent, now, s.ID) + `, s.OwnerID, s.Title, s.UserAgent, s.CheckpointMessageID, now, s.ID) if err != nil { return err } diff --git a/runtime/drivers/sqlite/migrations/0038.sql b/runtime/drivers/sqlite/migrations/0038.sql new file mode 100644 index 00000000000..efb2a8b231e --- /dev/null +++ b/runtime/drivers/sqlite/migrations/0038.sql @@ -0,0 +1 @@ +ALTER TABLE ai_sessions ADD COLUMN checkpoint_message_id TEXT NOT NULL DEFAULT ''; diff --git a/runtime/server/chat.go b/runtime/server/chat.go index da2e0ea45e2..3a8f2f021b2 100644 --- a/runtime/server/chat.go +++ b/runtime/server/chat.go @@ -7,6 +7,7 @@ import ( "fmt" "io" "net/http" + "strings" "time" aiv1 "github.com/rilldata/rill/proto/gen/rill/ai/v1" @@ -90,6 +91,138 @@ func (s *Server) GetConversation(ctx context.Context, req *runtimev1.GetConversa }, nil } +func (s *Server) SetConversationCheckpoint(ctx context.Context, req *runtimev1.SetConversationCheckpointRequest) (resp *runtimev1.SetConversationCheckpointResponse, resErr error) { + claims := auth.GetClaims(ctx, req.InstanceId) + if !claims.Can(runtime.UseAI) { + return nil, ErrForbidden + } + + session, err := s.ai.Session(ctx, &ai.SessionOptions{ + InstanceID: req.InstanceId, + SessionID: req.ConversationId, + Claims: claims, + }) + if err != nil { + return nil, err + } + defer func() { + err := session.Flush(ctx) + if err != nil { + resErr = errors.Join(resErr, err) + } + }() + + msg, ok := session.Message(ai.FilterByID(req.MessageId)) + if !ok { + return nil, status.Errorf(codes.NotFound, "message %q not found in conversation %q", req.MessageId, req.ConversationId) + } + + err = session.UpdateCheckpoint(ctx, msg.ID) + if err != nil { + return nil, err + } + + return &runtimev1.SetConversationCheckpointResponse{}, nil +} + +func (s *Server) RevertConversationWrites(ctx context.Context, req *runtimev1.RevertConversationWritesRequest) (resp *runtimev1.RevertConversationWritesResponse, resErr error) { + claims := auth.GetClaims(ctx, req.InstanceId) + if !claims.Can(runtime.UseAI) { + return nil, ErrForbidden + } + + session, err := s.ai.Session(ctx, &ai.SessionOptions{ + InstanceID: req.InstanceId, + SessionID: req.ConversationId, + Claims: claims, + }) + if err != nil { + return nil, err + } + defer func() { + err := session.Flush(ctx) + if err != nil { + resErr = errors.Join(resErr, err) + } + }() + + repo, release, err := s.runtime.Repo(ctx, req.InstanceId) + if err != nil { + return nil, err + } + defer release() + + if req.FromMessageId == "" { + req.FromMessageId = session.CatalogSession().CheckpointMessageID + } + + // Revert changes in reverse order. + var restoredPaths []string + var started bool + msgs := session.Messages() + for i := len(msgs) - 1; i >= 0; i-- { + // Stop if we reach from_message_id + msg := msgs[i] + if req.FromMessageId != "" && msgs[i].ID == req.FromMessageId { + break + } + + // Skip if to_message_id is set and we haven't reached it yet (remember we're iterating from newest to oldest) + if !started && req.ToMessageId != "" && msg.ID != req.ToMessageId { + continue + } + started = true + + // Skip if it's not a WriteFileResult + if msg.Tool != ai.WriteFileName || msg.Type != ai.MessageTypeResult || msg.ContentType != ai.MessageContentTypeJSON { + continue + } + resMsg := msgs[i] + + // Parse the WriteFileResult + content, err := session.UnmarshalMessageContent(resMsg) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal message %q: %w", resMsg.ID, err) + } + res, ok := content.(*ai.WriteFileResult) + if !ok { + return nil, fmt.Errorf("unexpected content type %T for message %q", content, resMsg.ID) + } + + // Get the call args + callMsg, ok := session.Message(ai.FilterByID(resMsg.ParentID)) + if !ok { + return nil, fmt.Errorf("call message %q not found for result message %q", resMsg.ParentID, resMsg.ID) + } + content, err = session.UnmarshalMessageContent(callMsg) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal call message %q: %w", callMsg.ID, err) + } + args, ok := content.(*ai.WriteFileArgs) + if !ok { + return nil, fmt.Errorf("unexpected content type %T for message %q", content, callMsg.ID) + } + + // Revert the file write + if res.IsNewFile { + err = repo.Delete(ctx, args.Path, true) + if err != nil { + return nil, fmt.Errorf("failed to delete file %q: %w", args.Path, err) + } + } else { + err = repo.Put(ctx, args.Path, strings.NewReader(res.PreviousContents)) + if err != nil { + return nil, fmt.Errorf("failed to restore file %q: %w", args.Path, err) + } + } + restoredPaths = append(restoredPaths, args.Path) + } + + return &runtimev1.RevertConversationWritesResponse{ + RestoredPaths: restoredPaths, + }, nil +} + func (s *Server) ListTools(ctx context.Context, req *runtimev1.ListToolsRequest) (*runtimev1.ListToolsResponse, error) { // Access check claims := auth.GetClaims(ctx, req.InstanceId) @@ -393,13 +526,14 @@ func (s *Server) CompleteStreamingHandler(w http.ResponseWriter, req *http.Reque // sessionToPB converts a drivers.AISession to a runtimev1.Conversation. func sessionToPB(s *drivers.AISession, messages []*runtimev1.Message) *runtimev1.Conversation { return &runtimev1.Conversation{ - Id: s.ID, - OwnerId: s.OwnerID, - Title: s.Title, - UserAgent: s.UserAgent, - CreatedOn: timestamppb.New(s.CreatedOn), - UpdatedOn: timestamppb.New(s.UpdatedOn), - Messages: messages, + Id: s.ID, + OwnerId: s.OwnerID, + Title: s.Title, + UserAgent: s.UserAgent, + CheckpointMessageId: s.CheckpointMessageID, + CreatedOn: timestamppb.New(s.CreatedOn), + UpdatedOn: timestamppb.New(s.UpdatedOn), + Messages: messages, } } diff --git a/runtime/server/chat_test.go b/runtime/server/chat_test.go index ad79c2b428e..0931ad3acf3 100644 --- a/runtime/server/chat_test.go +++ b/runtime/server/chat_test.go @@ -2,6 +2,7 @@ package server_test import ( "context" + "strings" "testing" "time" @@ -17,6 +18,7 @@ import ( "github.com/rilldata/rill/runtime/testruntime/testmode" "github.com/stretchr/testify/require" "go.uber.org/zap" + "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -87,6 +89,15 @@ measures: require.NotEmpty(t, res2.Messages) require.Len(t, res2.Messages, 4) + // Set and verify a checkpoint in the conversation + checkpointMsg := res2.Messages[len(res2.Messages)-1] + _, err = srv.SetConversationCheckpoint(ctx, &runtimev1.SetConversationCheckpointRequest{ + InstanceId: instanceID, + ConversationId: res1.ConversationId, + MessageId: checkpointMsg.Id, + }) + require.NoError(t, err) + // Ask a question in a new conversation res3, err := srv.Complete(ctx, &runtimev1.CompleteRequest{ InstanceId: instanceID, @@ -97,13 +108,14 @@ measures: require.NotEqual(t, res3.ConversationId, res1.ConversationId) require.NotEmpty(t, res3.Messages) - // Check it persisted the messages in the first conversation + // Check it persisted the messages and checkpoint in the first conversation get1, err := srv.GetConversation(ctx, &runtimev1.GetConversationRequest{ InstanceId: instanceID, ConversationId: res1.ConversationId, }) require.NoError(t, err) require.Len(t, get1.Messages, len(res1.Messages)+len(res2.Messages)) + require.Equal(t, checkpointMsg.Id, get1.Conversation.CheckpointMessageId) // Check it persisted the messages in the second conversation get2, err := srv.GetConversation(ctx, &runtimev1.GetConversationRequest{ @@ -288,3 +300,75 @@ func TestListTools(t *testing.T) { require.NotEmpty(t, tool.OutputSchema) } } + +func TestRevertConversationWrites(t *testing.T) { + // Skip in CI since we make real LLM calls. + testmode.Expensive(t) + + // Setup test runtime and server with an LLM configured. + model1Contents := ` +type: model +sql: SELECT 1 +` + rt, instanceID := testruntime.NewInstanceWithOptions(t, testruntime.InstanceOptions{ + EnableLLM: true, + Files: map[string]string{ + "/models/model1.yaml": model1Contents, + }, + }) + testruntime.RequireReconcileState(t, rt, instanceID, 2, 0, 0) + + // Create test server + srv, err := server.NewServer(context.Background(), &server.Options{}, rt, zap.NewNop(), ratelimit.NewNoop(), activity.NewNoopClient()) + require.NoError(t, err) + + // Create test context with claims (to test conversation listings, which filter by user ID) + ctx := auth.WithClaims(t.Context(), &runtime.SecurityClaims{ + UserID: "foo", + Permissions: runtime.AllPermissions, + }) + + // Ask a question + res1, err := srv.Complete(ctx, &runtimev1.CompleteRequest{ + InstanceId: instanceID, + Prompt: "Create a new file called /models/model2.yaml with a simple SQL query that does `SELECT 1`. Then remove the file /models/model1.yaml. I confirm you are allowed to delete this file and you don't need to ask for further confirmation.", + }) + require.NoError(t, err) + require.NotEmpty(t, res1.ConversationId) + require.NotEmpty(t, res1.Messages) + + dat, _ := protojson.Marshal(res1) + t.Logf("Complete response: %s", string(dat)) + + // Verify that the files were modified + repo, err := srv.ListFiles(ctx, &runtimev1.ListFilesRequest{ + InstanceId: instanceID, + Glob: "/models/*.yaml", + }) + require.NoError(t, err) + require.Len(t, repo.Files, 1) + require.Equal(t, "/models/model2.yaml", repo.Files[0].Path) + + // Revert the conversation writes + _, err = srv.RevertConversationWrites(ctx, &runtimev1.RevertConversationWritesRequest{ + InstanceId: instanceID, + ConversationId: res1.ConversationId, + }) + require.NoError(t, err) + + // Verify that the files were reverted + repo, err = srv.ListFiles(ctx, &runtimev1.ListFilesRequest{ + InstanceId: instanceID, + Glob: "/models/*.yaml", + }) + require.NoError(t, err) + require.Len(t, repo.Files, 1) + require.Equal(t, "/models/model1.yaml", repo.Files[0].Path) + + content, err := srv.GetFile(ctx, &runtimev1.GetFileRequest{ + InstanceId: instanceID, + Path: "/models/model1.yaml", + }) + require.NoError(t, err) + require.Equal(t, strings.TrimSpace(model1Contents), strings.TrimSpace(content.Blob)) +} diff --git a/web-common/src/proto/gen/rill/runtime/v1/api_pb.ts b/web-common/src/proto/gen/rill/runtime/v1/api_pb.ts index c186bcc42ef..153b2791b94 100644 --- a/web-common/src/proto/gen/rill/runtime/v1/api_pb.ts +++ b/web-common/src/proto/gen/rill/runtime/v1/api_pb.ts @@ -4281,6 +4281,11 @@ export class Conversation extends Message$1 { */ userAgent = ""; + /** + * @generated from field: string checkpoint_message_id = 8; + */ + checkpointMessageId = ""; + /** * @generated from field: google.protobuf.Timestamp created_on = 4; */ @@ -4310,6 +4315,7 @@ export class Conversation extends Message$1 { { no: 2, name: "owner_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 3, name: "title", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 6, name: "user_agent", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 8, name: "checkpoint_message_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 4, name: "created_on", kind: "message", T: Timestamp }, { no: 5, name: "updated_on", kind: "message", T: Timestamp }, { no: 7, name: "messages", kind: "message", T: Message, repeated: true }, @@ -4741,6 +4747,200 @@ export class GetConversationResponse extends Message$1 } } +/** + * Request message for RuntimeService.SetConversationCheckpoint + * + * @generated from message rill.runtime.v1.SetConversationCheckpointRequest + */ +export class SetConversationCheckpointRequest extends Message$1 { + /** + * Instance the conversation belongs to. + * + * @generated from field: string instance_id = 1; + */ + instanceId = ""; + + /** + * Conversation ID to checkpoint. + * + * @generated from field: string conversation_id = 2; + */ + conversationId = ""; + + /** + * Message ID of the latest message *before* the checkpoint. + * + * @generated from field: string message_id = 3; + */ + messageId = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "rill.runtime.v1.SetConversationCheckpointRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "instance_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "conversation_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "message_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetConversationCheckpointRequest { + return new SetConversationCheckpointRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetConversationCheckpointRequest { + return new SetConversationCheckpointRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetConversationCheckpointRequest { + return new SetConversationCheckpointRequest().fromJsonString(jsonString, options); + } + + static equals(a: SetConversationCheckpointRequest | PlainMessage | undefined, b: SetConversationCheckpointRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(SetConversationCheckpointRequest, a, b); + } +} + +/** + * Response message for RuntimeService.SetConversationCheckpoint + * + * @generated from message rill.runtime.v1.SetConversationCheckpointResponse + */ +export class SetConversationCheckpointResponse extends Message$1 { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "rill.runtime.v1.SetConversationCheckpointResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetConversationCheckpointResponse { + return new SetConversationCheckpointResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetConversationCheckpointResponse { + return new SetConversationCheckpointResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetConversationCheckpointResponse { + return new SetConversationCheckpointResponse().fromJsonString(jsonString, options); + } + + static equals(a: SetConversationCheckpointResponse | PlainMessage | undefined, b: SetConversationCheckpointResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(SetConversationCheckpointResponse, a, b); + } +} + +/** + * Request message for RuntimeService.RevertConversationWrites + * + * @generated from message rill.runtime.v1.RevertConversationWritesRequest + */ +export class RevertConversationWritesRequest extends Message$1 { + /** + * Instance the conversation belongs to. + * + * @generated from field: string instance_id = 1; + */ + instanceId = ""; + + /** + * Conversation ID to revert writes for. + * + * @generated from field: string conversation_id = 2; + */ + conversationId = ""; + + /** + * Start message ID to revert from (inclusive). If empty, it reverts from after the conversation's checkpoint. + * + * @generated from field: string from_message_id = 3; + */ + fromMessageId = ""; + + /** + * End message ID to revert to (inclusive). If empty, it reverts to the latest message. + * + * @generated from field: string to_message_id = 4; + */ + toMessageId = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "rill.runtime.v1.RevertConversationWritesRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "instance_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "conversation_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "from_message_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "to_message_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RevertConversationWritesRequest { + return new RevertConversationWritesRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RevertConversationWritesRequest { + return new RevertConversationWritesRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RevertConversationWritesRequest { + return new RevertConversationWritesRequest().fromJsonString(jsonString, options); + } + + static equals(a: RevertConversationWritesRequest | PlainMessage | undefined, b: RevertConversationWritesRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(RevertConversationWritesRequest, a, b); + } +} + +/** + * Response message for RuntimeService.RevertConversationWrites + * + * @generated from message rill.runtime.v1.RevertConversationWritesResponse + */ +export class RevertConversationWritesResponse extends Message$1 { + /** + * @generated from field: repeated string restored_paths = 1; + */ + restoredPaths: string[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "rill.runtime.v1.RevertConversationWritesResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "restored_paths", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RevertConversationWritesResponse { + return new RevertConversationWritesResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RevertConversationWritesResponse { + return new RevertConversationWritesResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RevertConversationWritesResponse { + return new RevertConversationWritesResponse().fromJsonString(jsonString, options); + } + + static equals(a: RevertConversationWritesResponse | PlainMessage | undefined, b: RevertConversationWritesResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(RevertConversationWritesResponse, a, b); + } +} + /** * Request message for RuntimeService.ListTools * diff --git a/web-common/src/runtime-client/gen/index.schemas.ts b/web-common/src/runtime-client/gen/index.schemas.ts index b3af901e690..2e150bc551a 100644 --- a/web-common/src/runtime-client/gen/index.schemas.ts +++ b/web-common/src/runtime-client/gen/index.schemas.ts @@ -749,6 +749,7 @@ export interface V1Conversation { ownerId?: string; title?: string; userAgent?: string; + checkpointMessageId?: string; createdOn?: string; updatedOn?: string; /** NOTE: Deprecated. */ @@ -2216,6 +2217,10 @@ export interface V1ResourceName { name?: string; } +export interface V1RevertConversationWritesResponse { + restoredPaths?: string[]; +} + export interface V1Schedule { refUpdate?: boolean; disable?: boolean; @@ -2279,6 +2284,10 @@ export interface V1SecurityRuleTransitiveAccess { resource?: V1ResourceName; } +export interface V1SetConversationCheckpointResponse { + [key: string]: unknown; +} + export interface V1Source { spec?: V1SourceSpec; state?: V1SourceState; @@ -2606,6 +2615,18 @@ export type RuntimeServiceListConversationsParams = { userAgentPattern?: string; }; +export type RuntimeServiceSetConversationCheckpointBody = { + /** Message ID of the latest message *before* the checkpoint. */ + messageId?: string; +}; + +export type RuntimeServiceRevertConversationWritesBody = { + /** Start message ID to revert from (inclusive). If empty, it reverts from after the conversation's checkpoint. */ + fromMessageId?: string; + /** End message ID to revert to (inclusive). If empty, it reverts to the latest message. */ + toMessageId?: string; +}; + export type ConnectorServiceListBucketsParams = { pageSize?: number; pageToken?: string; diff --git a/web-common/src/runtime-client/gen/runtime-service/runtime-service.ts b/web-common/src/runtime-client/gen/runtime-service/runtime-service.ts index 2be7fc3bfab..cc5db7b8b85 100644 --- a/web-common/src/runtime-client/gen/runtime-service/runtime-service.ts +++ b/web-common/src/runtime-client/gen/runtime-service/runtime-service.ts @@ -51,6 +51,8 @@ import type { RuntimeServicePutFileBody, RuntimeServiceQueryResolverBody, RuntimeServiceRenameFileBody, + RuntimeServiceRevertConversationWritesBody, + RuntimeServiceSetConversationCheckpointBody, RuntimeServiceUnpackEmptyBody, RuntimeServiceUnpackExampleBody, RuntimeServiceWatchFiles200, @@ -96,6 +98,8 @@ import type { V1PutFileResponse, V1QueryResolverResponse, V1RenameFileResponse, + V1RevertConversationWritesResponse, + V1SetConversationCheckpointResponse, V1UnpackEmptyResponse, V1UnpackExampleResponse, } from "../index.schemas"; @@ -1393,6 +1397,234 @@ export function createRuntimeServiceGetConversation< return query; } +/** + * @summary SetConversationCheckpoint updates a conversation's checkpoint to after a specified message. + */ +export const runtimeServiceSetConversationCheckpoint = ( + instanceId: string, + conversationId: string, + runtimeServiceSetConversationCheckpointBody: RuntimeServiceSetConversationCheckpointBody, + signal?: AbortSignal, +) => { + return httpClient({ + url: `/v1/instances/${instanceId}/ai/conversations/${conversationId}/checkpoint`, + method: "POST", + headers: { "Content-Type": "application/json" }, + data: runtimeServiceSetConversationCheckpointBody, + signal, + }); +}; + +export const getRuntimeServiceSetConversationCheckpointMutationOptions = < + TError = ErrorType, + TContext = unknown, +>(options?: { + mutation?: CreateMutationOptions< + Awaited>, + TError, + { + instanceId: string; + conversationId: string; + data: RuntimeServiceSetConversationCheckpointBody; + }, + TContext + >; +}): CreateMutationOptions< + Awaited>, + TError, + { + instanceId: string; + conversationId: string; + data: RuntimeServiceSetConversationCheckpointBody; + }, + TContext +> => { + const mutationKey = ["runtimeServiceSetConversationCheckpoint"]; + const { mutation: mutationOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey } }; + + const mutationFn: MutationFunction< + Awaited>, + { + instanceId: string; + conversationId: string; + data: RuntimeServiceSetConversationCheckpointBody; + } + > = (props) => { + const { instanceId, conversationId, data } = props ?? {}; + + return runtimeServiceSetConversationCheckpoint( + instanceId, + conversationId, + data, + ); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type RuntimeServiceSetConversationCheckpointMutationResult = NonNullable< + Awaited> +>; +export type RuntimeServiceSetConversationCheckpointMutationBody = + RuntimeServiceSetConversationCheckpointBody; +export type RuntimeServiceSetConversationCheckpointMutationError = + ErrorType; + +/** + * @summary SetConversationCheckpoint updates a conversation's checkpoint to after a specified message. + */ +export const createRuntimeServiceSetConversationCheckpoint = < + TError = ErrorType, + TContext = unknown, +>( + options?: { + mutation?: CreateMutationOptions< + Awaited>, + TError, + { + instanceId: string; + conversationId: string; + data: RuntimeServiceSetConversationCheckpointBody; + }, + TContext + >; + }, + queryClient?: QueryClient, +): CreateMutationResult< + Awaited>, + TError, + { + instanceId: string; + conversationId: string; + data: RuntimeServiceSetConversationCheckpointBody; + }, + TContext +> => { + const mutationOptions = + getRuntimeServiceSetConversationCheckpointMutationOptions(options); + + return createMutation(mutationOptions, queryClient); +}; +/** + * @summary RevertConversationWrites reverts file writes made in a conversation with the AI. + */ +export const runtimeServiceRevertConversationWrites = ( + instanceId: string, + conversationId: string, + runtimeServiceRevertConversationWritesBody: RuntimeServiceRevertConversationWritesBody, + signal?: AbortSignal, +) => { + return httpClient({ + url: `/v1/instances/${instanceId}/ai/conversations/${conversationId}/revert-writes`, + method: "POST", + headers: { "Content-Type": "application/json" }, + data: runtimeServiceRevertConversationWritesBody, + signal, + }); +}; + +export const getRuntimeServiceRevertConversationWritesMutationOptions = < + TError = ErrorType, + TContext = unknown, +>(options?: { + mutation?: CreateMutationOptions< + Awaited>, + TError, + { + instanceId: string; + conversationId: string; + data: RuntimeServiceRevertConversationWritesBody; + }, + TContext + >; +}): CreateMutationOptions< + Awaited>, + TError, + { + instanceId: string; + conversationId: string; + data: RuntimeServiceRevertConversationWritesBody; + }, + TContext +> => { + const mutationKey = ["runtimeServiceRevertConversationWrites"]; + const { mutation: mutationOptions } = options + ? options.mutation && + "mutationKey" in options.mutation && + options.mutation.mutationKey + ? options + : { ...options, mutation: { ...options.mutation, mutationKey } } + : { mutation: { mutationKey } }; + + const mutationFn: MutationFunction< + Awaited>, + { + instanceId: string; + conversationId: string; + data: RuntimeServiceRevertConversationWritesBody; + } + > = (props) => { + const { instanceId, conversationId, data } = props ?? {}; + + return runtimeServiceRevertConversationWrites( + instanceId, + conversationId, + data, + ); + }; + + return { mutationFn, ...mutationOptions }; +}; + +export type RuntimeServiceRevertConversationWritesMutationResult = NonNullable< + Awaited> +>; +export type RuntimeServiceRevertConversationWritesMutationBody = + RuntimeServiceRevertConversationWritesBody; +export type RuntimeServiceRevertConversationWritesMutationError = + ErrorType; + +/** + * @summary RevertConversationWrites reverts file writes made in a conversation with the AI. + */ +export const createRuntimeServiceRevertConversationWrites = < + TError = ErrorType, + TContext = unknown, +>( + options?: { + mutation?: CreateMutationOptions< + Awaited>, + TError, + { + instanceId: string; + conversationId: string; + data: RuntimeServiceRevertConversationWritesBody; + }, + TContext + >; + }, + queryClient?: QueryClient, +): CreateMutationResult< + Awaited>, + TError, + { + instanceId: string; + conversationId: string; + data: RuntimeServiceRevertConversationWritesBody; + }, + TContext +> => { + const mutationOptions = + getRuntimeServiceRevertConversationWritesMutationOptions(options); + + return createMutation(mutationOptions, queryClient); +}; /** * @summary ListTools lists metadata about all AI tools that calls to Complete(Streaming) may invoke. Note that it covers all registered tools, but the current user may not have access to all of them.